Index: trunk/core/units/languages/languages_item.php
===================================================================
diff -u -N -r1566 -r4169
--- trunk/core/units/languages/languages_item.php (.../languages_item.php) (revision 1566)
+++ trunk/core/units/languages/languages_item.php (.../languages_item.php) (revision 4169)
@@ -7,6 +7,20 @@
$sql = 'SELECT MAX('.$this->IDField.') FROM '.kTempTablesHandler::GetLiveName($this->TableName);
return $this->Conn->GetOne($sql) + 1;
}
+
+ function setPrimary($reset_primary = true)
+ {
+ if ($reset_primary) {
+ $sql = 'UPDATE '.$this->TableName.'
+ SET PrimaryLang = 0';
+ $this->Conn->Query($sql);
+ }
+
+ $sql = 'UPDATE '.$this->TableName.'
+ SET PrimaryLang = 1, Enabled = 1
+ WHERE '.$this->IDField.' = '.$this->GetID();
+ $this->Conn->Query($sql);
+ }
}
?>
\ No newline at end of file
Index: trunk/kernel/units/languages/languages_config.php
===================================================================
diff -u -N -r3983 -r4169
--- trunk/kernel/units/languages/languages_config.php (.../languages_config.php) (revision 3983)
+++ trunk/kernel/units/languages/languages_config.php (.../languages_config.php) (revision 4169)
@@ -9,13 +9,7 @@
'RegisterClasses' => Array(
Array('pseudo'=>'LangXML','class'=>'LangXML_Parser','file'=>'import_xml.php'),
),
- /*'AggregateTags' => Array(
- Array(
- 'AggregateTo' => 'm',
- 'AggregatedTagName' => 'IsMetricUnits',
- 'LocalTagName' => 'Main_IsMetricUnits',
- ),
- ), */
+
'AutoLoad' => true,
'Hooks' => Array(
Array(
@@ -39,6 +33,17 @@
'DoSpecial' => '',
'DoEvent' => 'OnCopyLabels',
),
+
+ Array(
+ 'Mode' => hAFTER,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'lang',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array('OnSave'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '',
+ 'DoEvent' => 'OnUpdatePrimary',
+ ),
),
'QueryString' => Array(
1 => 'id',
Index: trunk/kernel/admin_templates/regional/languages_list.tpl
===================================================================
diff -u -N -r3664 -r4169
--- trunk/kernel/admin_templates/regional/languages_list.tpl (.../languages_list.tpl) (revision 3664)
+++ trunk/kernel/admin_templates/regional/languages_list.tpl (.../languages_list.tpl) (revision 4169)
@@ -30,8 +30,15 @@
std_delete_items('lang')
} ) );
+
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
+ a_toolbar.AddButton( new ToolBarButton('primary_language', '', function() {
+ submit_event('lang','OnSetPrimary');
+ }
+ ) );
+
+
a_toolbar.AddButton( new ToolBarButton('import_language', '', function() {
redirect('');
}
@@ -58,7 +65,7 @@
\ No newline at end of file
Index: trunk/kernel/units/languages/languages_item.php
===================================================================
diff -u -N -r1566 -r4169
--- trunk/kernel/units/languages/languages_item.php (.../languages_item.php) (revision 1566)
+++ trunk/kernel/units/languages/languages_item.php (.../languages_item.php) (revision 4169)
@@ -7,6 +7,20 @@
$sql = 'SELECT MAX('.$this->IDField.') FROM '.kTempTablesHandler::GetLiveName($this->TableName);
return $this->Conn->GetOne($sql) + 1;
}
+
+ function setPrimary($reset_primary = true)
+ {
+ if ($reset_primary) {
+ $sql = 'UPDATE '.$this->TableName.'
+ SET PrimaryLang = 0';
+ $this->Conn->Query($sql);
+ }
+
+ $sql = 'UPDATE '.$this->TableName.'
+ SET PrimaryLang = 1, Enabled = 1
+ WHERE '.$this->IDField.' = '.$this->GetID();
+ $this->Conn->Query($sql);
+ }
}
?>
\ No newline at end of file
Index: trunk/kernel/admin_templates/incs/script.js
===================================================================
diff -u -N -r4029 -r4169
--- trunk/kernel/admin_templates/incs/script.js (.../script.js) (revision 4029)
+++ trunk/kernel/admin_templates/incs/script.js (.../script.js) (revision 4169)
@@ -452,7 +452,7 @@
function RemoveTranslationLink($string)
{
- return $string.match(/(.*)<\/a>/) ? RegExp.$2 : $string;
+ return $string.match(/<a href="(.*)">(.*)<\/a>/) ? RegExp.$2 : $string;
}
function redirect($url)
Index: trunk/core/kernel/db/db_event_handler.php
===================================================================
diff -u -N -r4029 -r4169
--- trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 4029)
+++ trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 4169)
@@ -879,8 +879,8 @@
function OnSave(&$event)
{
$event->CallSubEvent('OnPreSave');
- if ($event->status==erSUCCESS) {
- $skip_master=false;
+ if ($event->status == erSUCCESS) {
+ $skip_master = false;
$temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
// newly created item
@@ -896,8 +896,11 @@
}
$this->clearSelectedIDs($event);
- $event->redirect_params = Array('opener'=>'u');
+ $event->redirect_params = Array('opener' => 'u');
$this->Application->RemoveVar($event->getPrefixSpecial().'_modified');
+
+ // all temp tables are deleted here => all after hooks should think, that it's live mode now
+ $this->Application->SetVar($event->Prefix.'_mode', '');
}
}
Index: trunk/core/kernel/utility/event.php
===================================================================
diff -u -N -r3709 -r4169
--- trunk/core/kernel/utility/event.php (.../event.php) (revision 3709)
+++ trunk/core/kernel/utility/event.php (.../event.php) (revision 4169)
@@ -90,7 +90,6 @@
*/
var $redirect = true;
-
/**
* Params passed to redirect on succsessfull event
*
@@ -193,11 +192,11 @@
$this->pseudoClass=$this->Prefix.$appendix;
}
- function Init($prefix,$special='')
+ function Init($prefix, $special = '')
{
- $this->Prefix=$prefix;
- $this->pseudoClass=$prefix; // default value
- $this->Special=$special;
+ $this->Prefix = $prefix;
+ $this->pseudoClass = $prefix; // default value
+ $this->Special = $special;
$this->Prefix_Special = rtrim($this->Prefix.'.'.$this->Special,'.');
}
@@ -274,6 +273,22 @@
return is_object($this->MasterEvent) ? $this->MasterEvent->Name : false;
}
+ /**
+ * Allows to tell if this event was called some how (e.g. subevent, hook) from event requested
+ *
+ * @param string $event_key event key in format [prefix[.special]:]event_name
+ * @return unknown
+ */
+ function hasAncestor($event_key)
+ {
+ $event_manager =& $this->Application->recallObject('EventManager');
+ if (strpos($event_key, ':') === false) {
+ $event_key = $this->getPrefixSpecial().':'.$event_key;
+ }
+
+ return $event_manager->eventRunning($event_key);
+ }
+
}
?>
\ No newline at end of file
Index: trunk/kernel/units/languages/languages_event_handler.php
===================================================================
diff -u -N -r4000 -r4169
--- trunk/kernel/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 4000)
+++ trunk/kernel/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 4169)
@@ -19,6 +19,71 @@
}
/**
+ * Allows to set selected language as primary
+ *
+ * @param kEvent $event
+ */
+ function OnSetPrimary(&$event)
+ {
+ $this->StoreSelectedIDs($event);
+ $ids = $this->getSelectedIDs($event);
+ if ($ids) {
+ $id = array_shift($ids);
+ $object =& $event->getObject( Array('skip_autoload' => true) );
+ $object->Load($id);
+ $object->setPrimary();
+ }
+ }
+
+ /**
+ * [HOOK] Reset primary status of other languages if we are saving primary language
+ *
+ * @param kEvent $event
+ */
+ function OnUpdatePrimary(&$event)
+ {
+ $object =& $event->getObject( Array('skip_autoload' => true) );
+ $object->SwitchToLive();
+
+ // set primary for each languages, that have this checkbox checked
+ $ids = explode(',', $event->MasterEvent->getEventParam('ids'));
+ foreach ($ids as $id) {
+ $object->Load($id);
+ if ($object->GetDBField('PrimaryLang')) {
+ $object->setPrimary();
+ }
+
+ }
+
+ // if no primary language left, then set primary last language (not to load again) from edited list
+ $sql = 'SELECT '.$object->IDField.'
+ FROM '.$object->TableName.'
+ WHERE PrimaryLang = 1';
+ $primary_language = $this->Conn->GetOne($sql);
+
+ if (!$primary_language) {
+ $object->setPrimary(false);
+ }
+ }
+
+
+ /**
+ * Occurse before updating item
+ *
+ * @param kEvent $event
+ * @access public
+ */
+ function OnBeforeItemUpdate(&$event)
+ {
+ $object =& $event->getObject();
+ $status_field = array_shift( $this->Application->getUnitOption($event->Prefix, 'StatusField') );
+
+ if ($object->GetDBField('PrimaryLang') == 1 && $object->GetDBField($status_field) == 0) {
+ $object->SetDBField($status_field, 1);
+ }
+ }
+
+ /**
* Shows only enabled languages on front
*
* @param kEvent $event
Index: trunk/core/kernel/event_manager.php
===================================================================
diff -u -N -r3907 -r4169
--- trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 3907)
+++ trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 4169)
@@ -375,7 +375,7 @@
function processHooks(&$event, $mode)
{
// * - get hooks that are valid with any special of given prefix
- $hooks = array_merge_recursive2($this->getHooks($event, $mode, '*'), $this->getHooks($event, $mode));
+ $hooks = array_merge($this->getHooks($event, $mode, '*'), $this->getHooks($event, $mode));
if ($hooks) {
foreach ($hooks as $hook) {
@@ -449,6 +449,17 @@
$sql = 'REPLACE INTO '.TABLE_PREFIX.'Cache (VarName,Data,Cached) VALUES (%s,%s,%s)';
$this->Conn->Query( sprintf($sql, $this->Conn->qstr('RegularEventRuns'), $this->Conn->qstr(serialize($event_last_runs)), adodb_mktime() ) );
}
+
+ /**
+ * Allows to determine, that required event is beeing processed right now
+ *
+ * @param string $event_key Event name in format prefix[.special]:event_name
+ * @return bool
+ */
+ function eventRunning($event_key)
+ {
+ return array_search($event_key, $this->recursionStack) !== false;
+ }
}
Index: trunk/core/units/languages/languages_event_handler.php
===================================================================
diff -u -N -r4000 -r4169
--- trunk/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 4000)
+++ trunk/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 4169)
@@ -19,6 +19,71 @@
}
/**
+ * Allows to set selected language as primary
+ *
+ * @param kEvent $event
+ */
+ function OnSetPrimary(&$event)
+ {
+ $this->StoreSelectedIDs($event);
+ $ids = $this->getSelectedIDs($event);
+ if ($ids) {
+ $id = array_shift($ids);
+ $object =& $event->getObject( Array('skip_autoload' => true) );
+ $object->Load($id);
+ $object->setPrimary();
+ }
+ }
+
+ /**
+ * [HOOK] Reset primary status of other languages if we are saving primary language
+ *
+ * @param kEvent $event
+ */
+ function OnUpdatePrimary(&$event)
+ {
+ $object =& $event->getObject( Array('skip_autoload' => true) );
+ $object->SwitchToLive();
+
+ // set primary for each languages, that have this checkbox checked
+ $ids = explode(',', $event->MasterEvent->getEventParam('ids'));
+ foreach ($ids as $id) {
+ $object->Load($id);
+ if ($object->GetDBField('PrimaryLang')) {
+ $object->setPrimary();
+ }
+
+ }
+
+ // if no primary language left, then set primary last language (not to load again) from edited list
+ $sql = 'SELECT '.$object->IDField.'
+ FROM '.$object->TableName.'
+ WHERE PrimaryLang = 1';
+ $primary_language = $this->Conn->GetOne($sql);
+
+ if (!$primary_language) {
+ $object->setPrimary(false);
+ }
+ }
+
+
+ /**
+ * Occurse before updating item
+ *
+ * @param kEvent $event
+ * @access public
+ */
+ function OnBeforeItemUpdate(&$event)
+ {
+ $object =& $event->getObject();
+ $status_field = array_shift( $this->Application->getUnitOption($event->Prefix, 'StatusField') );
+
+ if ($object->GetDBField('PrimaryLang') == 1 && $object->GetDBField($status_field) == 0) {
+ $object->SetDBField($status_field, 1);
+ }
+ }
+
+ /**
* Shows only enabled languages on front
*
* @param kEvent $event
Index: trunk/core/units/languages/languages_config.php
===================================================================
diff -u -N -r3983 -r4169
--- trunk/core/units/languages/languages_config.php (.../languages_config.php) (revision 3983)
+++ trunk/core/units/languages/languages_config.php (.../languages_config.php) (revision 4169)
@@ -9,13 +9,7 @@
'RegisterClasses' => Array(
Array('pseudo'=>'LangXML','class'=>'LangXML_Parser','file'=>'import_xml.php'),
),
- /*'AggregateTags' => Array(
- Array(
- 'AggregateTo' => 'm',
- 'AggregatedTagName' => 'IsMetricUnits',
- 'LocalTagName' => 'Main_IsMetricUnits',
- ),
- ), */
+
'AutoLoad' => true,
'Hooks' => Array(
Array(
@@ -39,6 +33,17 @@
'DoSpecial' => '',
'DoEvent' => 'OnCopyLabels',
),
+
+ Array(
+ 'Mode' => hAFTER,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'lang',
+ 'HookToSpecial' => '*',
+ 'HookToEvent' => Array('OnSave'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '',
+ 'DoEvent' => 'OnUpdatePrimary',
+ ),
),
'QueryString' => Array(
1 => 'id',