Index: branches/5.1.x/core/units/phrases/phrases_event_handler.php =================================================================== diff -u -N -r12127 -r12657 --- branches/5.1.x/core/units/phrases/phrases_event_handler.php (.../phrases_event_handler.php) (revision 12127) +++ branches/5.1.x/core/units/phrases/phrases_event_handler.php (.../phrases_event_handler.php) (revision 12657) @@ -1,6 +1,6 @@ Application->IsAdmin() && $this->Application->isDebugMode() && constOn('DBG_PHRASES')) { - if ($event->Name == 'OnNew' || $event->Name == 'OnCreate' || $event->Name == 'OnPrepareUpdate' || $event->Name == 'OnUpdate') { + $allow_events = Array ('OnCreate', 'OnUpdate'); + + if (in_array($event->Name, $allow_events)) { return true; } } - - return parent::CheckPermission($event); } function mapPermissions() { parent::mapPermissions(); - $permissions = Array ( - 'OnItemBuild' => Array('self' => true, 'subitem' => true), - ); + $permissions = Array ( + 'OnItemBuild' => Array('self' => true, 'subitem' => true), + 'OnNew' => Array('self' => true, 'subitem' => true), + 'OnPrepareUpdate' => Array('self' => true, 'subitem' => true), + ); + $this->permMapping = array_merge($this->permMapping, $permissions); } @@ -66,12 +71,12 @@ parent::OnNew($event); $label = $this->Application->GetVar('phrases_label'); - $object =& $event->getObject( $label ? Array('live_table'=>true, 'skip_autoload' => true) : Array('skip_autoload' => true) ); + $object =& $event->getObject( $label ? Array('live_table' => true, 'skip_autoload' => true) : Array('skip_autoload' => true) ); if ($label) { - $object->SetDBField('Phrase',$label); + $object->SetDBField('Phrase', $label); // phrase is created in language, used to display phrases - $object->SetDBField('LanguageId', $this->Application->Phrases->LanguageId); - $object->SetDBField('PhraseType',1); + $object->SetDBField('LanguageId', $this->Application->GetVar('m_lang')); + $object->SetDBField('PhraseType', 1); $primary_language = $this->Application->GetDefaultLanguageId(); $live_table = $this->Application->getUnitOption($event->Prefix, 'TableName'); @@ -81,16 +86,22 @@ } $last_module = $this->Application->GetVar('last_module'); - if($last_module) $object->SetDBField('Module', $last_module); + if ($last_module) { + $object->SetDBField('Module', $last_module); + } - if($event->Special == 'export' || $event->Special == 'import') - { + if ($event->Special == 'export' || $event->Special == 'import') { $object->SetDBField('PhraseType', '|0|1|2|'); $modules = $this->Conn->GetCol('SELECT Name FROM '.TABLE_PREFIX.'Modules'); $object->SetDBField('Module', '|'.implode('|', $modules).'|' ); } } + /** + * Prepares existing phrase editing + * + * @param kEvent $event + */ function OnPrepareUpdate(&$event) { $language_id = $this->Application->GetVar('m_lang'); @@ -99,42 +110,85 @@ $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); $label_idfield = $this->Application->getUnitOption($event->Prefix, 'IDField'); - $sql = 'SELECT '.$label_idfield.' FROM '.$table_name.' WHERE Phrase = '.$this->Conn->qstr($label).' AND LanguageId = '.$language_id; + $sql = 'SELECT ' . $label_idfield . ' + FROM ' . $table_name . ' + WHERE Phrase = '.$this->Conn->qstr($label).' AND LanguageId = '.(int)$language_id; $this->Application->SetVar($event->getPrefixSpecial() . '_id', $this->Conn->GetOne($sql)); -// $event->redirect = false; + + $event->redirect = false; } /** * Forces create to use live table * * @param kEvent $event */ - function OnBeforePhraseCreate(&$event) + function OnCreate(&$event) { - $edit_direct = $this->Application->GetVar($event->Prefix.'_label'); - if ($edit_direct) { + if ( $this->Application->GetVar($event->Prefix . '_label') ) { $object =& $event->getObject( Array('skip_autoload' => true) ); + if ($this->Application->GetVar('m_lang') != $this->Application->GetVar('lang_id')) { $object->SwitchToLive(); } } + + parent::OnCreate($event); } /** + * Set last change info, when phrase is created + * + * @param kEvent $event + */ + function OnBeforeItemCreate(&$event) + { + parent::OnBeforeItemCreate($event); + + $this->_setPhraseKey($event); + $this->_setLastUpdated($event); + } + + /** + * Update last change info, when phrase is updated + * + * @param kEvent $event + */ + function OnBeforeItemUpdate(&$event) + { + parent::OnBeforeItemUpdate($event); + + $this->_setPhraseKey($event); + $this->_setLastUpdated($event); + } + + /** + * Set's phrase key, used for phrase updating and loading + * + * @param kEvent $event + */ + function _setPhraseKey(&$event) + { + $object =& $event->getObject(); + /* @var $object kDBItem */ + + $object->SetDBField('PhraseKey', mb_strtoupper($object->GetDBField('Phrase'))); + } + + /** * Save phrase change date & ip translation was made from * * @param kEvent $event */ - function OnSetLastUpdated(&$event) + function _setLastUpdated(&$event) { $object =& $event->getObject(); - $prev_translation = $this->Conn->GetOne('SELECT Translation FROM '.$object->TableName.' WHERE '.$object->IDField.' = '.(int)$object->GetId() ); - if( $prev_translation != $object->GetDBField('Translation') ) - { - $ip_address = getenv('HTTP_X_FORWARDED_FOR') ? getenv('HTTP_X_FORWARDED_FOR') : getenv('REMOTE_ADDR'); + /* @var $object kDBItem */ + + if ($object->GetOriginalField('Translation') != $object->GetDBField('Translation')) { $object->SetDBField('LastChanged_date', adodb_mktime() ); $object->SetDBField('LastChanged_time', adodb_mktime() ); - $object->SetDBField('LastChangeIP', $ip_address); + $object->SetDBField('LastChangeIP', $_SERVER['REMOTE_ADDR']); } $this->Application->Session->SetCookie('last_module', $object->GetDBField('Module')); @@ -155,7 +209,5 @@ $this->Application->setUnitOption($event->Prefix, 'Fields', $fields); } } - } - -?> \ No newline at end of file + } \ No newline at end of file