Index: branches/5.2.x/core/units/phrases/phrases_event_handler.php =================================================================== diff -u -N -r14244 -r14585 --- branches/5.2.x/core/units/phrases/phrases_event_handler.php (.../phrases_event_handler.php) (revision 14244) +++ branches/5.2.x/core/units/phrases/phrases_event_handler.php (.../phrases_event_handler.php) (revision 14585) @@ -1,6 +1,6 @@ Application->isAdmin && $this->Application->isDebugMode() && kUtil::constOn('DBG_PHRASES')) { + if (!$this->Application->isAdmin && $this->Application->isDebugMode(false) && kUtil::constOn('DBG_PHRASES')) { $allow_events = Array ('OnCreate', 'OnUpdate'); if (in_array($event->Name, $allow_events)) { @@ -90,6 +90,12 @@ if ($phrase_id) { $event->SetRedirectParam($event->getPrefixSpecial(true) . '_id', $phrase_id); $event->SetRedirectParam('pass', 'm,' . $event->getPrefixSpecial()); + + $next_template = $this->Application->GetVar('next_template'); + + if ($next_template) { + $event->SetRedirectParam('next_template', $next_template); + } } else { $event->CallSubEvent('OnNew'); @@ -171,12 +177,43 @@ if ($this->Application->GetVar('m_lang') != $this->Application->GetVar('lang_id')) { $object->SwitchToLive(); } + + $this->returnToOriginalTemplate($event); } parent::OnCreate($event); } /** + * Redirects to original template after phrase is being update + * + * @param kEvent $event + */ + function OnUpdate(&$event) + { + if ( $this->Application->GetVar($event->Prefix . '_label') ) { + $this->returnToOriginalTemplate($event); + } + + parent::OnUpdate($event); + } + + /** + * Returns to original template after phrase adding/editing + * + * @param kEvent $event + */ + function returnToOriginalTemplate(&$event) + { + $next_template = $this->Application->GetVar('next_template'); + + if ($next_template) { + $event->redirect = $next_template; + $event->SetRedirectParam('opener', 's'); + } + } + + /** * Set last change info, when phrase is created * * @param kEvent $event @@ -232,7 +269,7 @@ $object->SetDBField('PhraseKey', mb_strtoupper($object->GetDBField('Phrase'))); - if ($object->GetOriginalField('Translation') != $object->GetDBField('Translation')) { + if ( $this->translationChanged($object) ) { $object->SetDBField('LastChanged_date', adodb_mktime() ); $object->SetDBField('LastChanged_time', adodb_mktime() ); $object->SetDBField('LastChangeIP', $_SERVER['REMOTE_ADDR']); @@ -242,6 +279,28 @@ } /** + * Checks, that at least one of phrase's translations was changed + * + * @param kDBItem $object + * @return bool + */ + function translationChanged(&$object) + { + $changed_fields = array_keys( $object->GetChangedFields() ); + $translation_fields = Array ('Translation', 'HintTranslation', 'ColumnTranslation'); + + foreach ($changed_fields as $changed_field) { + $changed_field = preg_replace('/^l[\d]+_/', '', $changed_field); + + if ( in_array($changed_field, $translation_fields) ) { + return true; + } + } + + return false; + } + + /** * Changes default module to custom (when available) * * @param kEvent $event