Fix module domain detection in Form::getTranslationDomain()

The usage of preg_replace had two errors:
1) The regular expression was wrong
2) $matches[0] always contains the full matched string, not the first parenthesized subpattern

The correct version of preg_replace would've been:

if (preg_match('/^Icinga\\\\Module\\\\([A-Za-z]+)\\\\/', get_called_class(), $matches) === 1) {
    return strtolower($matches[1]);
}

But since there's no benefit of using a regular expression here except less speed, I replaced it
with using explode.

refs #7551
This commit is contained in:
Eric Lippmann 2014-12-30 10:08:33 +01:00
parent d6e331018b
commit 50bbf77d0c

View File

@ -806,19 +806,20 @@ class Form extends Zend_Form
} }
/** /**
* Return the translation domain for this form * Get the translation domain for this form
* *
* The returned translation domain is either determined based on * The returned translation domain is either determined based on this form's qualified name or it is the default
* this form's class path or it is the default `icinga' domain * 'icinga' domain
* *
* @return string * @return string
*/ */
protected function getTranslationDomain() protected function getTranslationDomain()
{ {
if (preg_match('@^Icinga\\\\Module\\\\([A-z]+)\\\\.*$@', get_called_class(), $matches) === 1) { $parts = explode('\\', get_called_class());
return strtolower($matches[0]); if ($parts[1] === 'Module') {
// Assume format Icinga\Module\ModuleName\Forms\...
return strtolower($parts[2]);
} }
return 'icinga'; return 'icinga';
} }