Index: trunk/core/units/translator/translator_event_handler.php =================================================================== diff -u -r4287 -r4785 --- trunk/core/units/translator/translator_event_handler.php (.../translator_event_handler.php) (revision 4287) +++ trunk/core/units/translator/translator_event_handler.php (.../translator_event_handler.php) (revision 4785) @@ -2,17 +2,56 @@ class TranslatorEventHandler extends InpDBEventHandler { + /** + * Allows to override standart permission mapping + * + */ + function mapPermissions() + { + parent::mapPermissions(); + $permissions = Array( + 'OnChangeLanguage' => Array('subitem' => 'add|edit'), + 'OnSaveAndClose' => Array('subitem' => 'add|edit'), + ); + $this->permMapping = array_merge($this->permMapping, $permissions); + } - function OnLoad(&$event) + /** + * Check permission of item, that being translated + * + * @param kEvent $event + */ + function CheckPermission(&$event) { + list($prefix, $field) = $this->getPrefixAndField($event); + + $top_prefix = $this->Application->GetTopmostPrefix($prefix); + $event->setEventParam('top_prefix', $top_prefix); + return parent::CheckPermission($event); + } + + + /** + * Returns prefix and field being translated + * + * @param kEvent $event + */ + function getPrefixAndField(&$event) + { $field = $this->Application->GetVar($event->getPrefixSpecial(true).'_field'); if (strpos($field,':') !== false) { - list($obj_prefix,$field) = explode(':', $field); + list($prefix, $field) = explode(':', $field); } else { - $obj_prefix = $this->Application->GetVar($event->getPrefixSpecial(true).'_prefix'); + $prefix = $this->Application->GetVar($event->getPrefixSpecial(true).'_prefix'); } + return Array($prefix, $field); + } + + function OnLoad(&$event) + { + list($obj_prefix, $field) = $this->getPrefixAndField($event); $object =& $this->Application->recallObject($obj_prefix); $translator =& $this->Application->recallObject($event->getPrefixSpecial());