Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Sun, Nov 9, 7:26 AM

in-portal

Index: trunk/kernel/units/selectors/selectors_event_handler.php
===================================================================
--- trunk/kernel/units/selectors/selectors_event_handler.php (revision 2797)
+++ trunk/kernel/units/selectors/selectors_event_handler.php (revision 2798)
@@ -1,309 +1,354 @@
<?php
safeDefine('STYLE_BASE', 1);
safeDefine('STYLE_BLOCK', 2);
class SelectorsEventHandler extends InpDBEventHandler
{
+
+ /**
+ * Occures after an item has been cloned
+ * Id of newly created item is passed as event' 'id' param
+ *
+ * @param kEvent $event
+ */
+ function OnAfterClone(&$event)
+ {
+ $object =& $event->getObject( Array('skip_autoload' => true) );
+ $object->Load( $event->getEventParam('id') );
+
+ $linked_info = $object->getLinkedInfo();
+ $selector_name = $object->GetDBField('SelectorName');
+
+ // temp table sql
+ $sql = 'SELECT RIGHT(SelectorName, LENGTH(SelectorName) - %s) AS SelectorIndex
+ FROM %s
+ WHERE (%s = %s) AND SelectorName LIKE %s AND (%s != %s)
+ ORDER BY SelectorIndex DESC';
+ $sql = sprintf( $sql,
+ strlen($selector_name),
+ $object->TableName,
+ $linked_info['ForeignKey'],
+ $linked_info['ParentId'],
+ $this->Conn->qstr($selector_name.'%' ),
+ $object->IDField,
+ $object->GetID() );
+
+ $selector_index = $this->Conn->GetOne($sql);
+ if($selector_index !== false)
+ {
+ $selector_index = (int)ltrim($selector_index, '-');
+ $object->SetDBField('SelectorName', $selector_name.'-'.(++$selector_index) );
+ $object->Update();
+ }
+
+ // live table sql if previous was in temp table
+ $live_table = $this->Application->getUnitOption($object->Prefix, 'TableName');
+ if($live_table != $object->TableName)
+ {
+
+ }
+ }
+
/**
* Show base styles or block styles
*
* @param kEvent $event
*/
function SetCustomQuery(&$event)
{
$object =& $event->getObject();
switch ($event->Special)
{
case 'base':
$object->addFilter('type_filter', '%1$s.Type = 1');
break;
case 'block':
$object->addFilter('type_filter', '%1$s.Type = 2');
break;
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnBeforeItemUpdate(&$event)
{
$this->SerializeSelectorData($event);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnBeforeItemCreate(&$event)
{
$this->SerializeSelectorData($event);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAfterItemUpdate(&$event)
{
$this->UnserializeSelectorData($event);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAfterItemCreate(&$event)
{
$this->UnserializeSelectorData($event);
}
/**
* Get's special of main item for linking with subitem
*
* @param kEvent $event
* @return string
*/
function getMainSpecial(&$event)
{
return '';
}
/**
* Save css-style name & description before opening css editor
*
* @param kEvent $event
*/
function OnOpenStyleEditor(&$event)
{
$this->SaveChanges($event);
$event->redirect = false;
}
/**
* Saves Changes to Item
*
* @param kEvent $event
*/
function SaveChanges(&$event)
{
$this->Application->setUnitOption($event->Prefix,'AutoLoad',false);
$object =& $event->getObject();
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if($items_info)
{
list($id,$field_values) = each($items_info);
if($id == 0)
{
$parent_id = getArrayValue($field_values,'ParentId');
if($parent_id) $object->Load($parent_id);
$object->SetFieldsFromHash($field_values);
$object->Create();
if( $object->IsTempTable() ) $object->setTempID();
$this->Application->SetVar($event->getPrefixSpecial().'_id', $object->GetID() );
}
else
{
$object->Load($id);
$object->SetFieldsFromHash($field_values);
$object->Update();
}
}
}
/**
* Save style changes from style editor
*
* @param kEvent $event
*/
function OnSaveStyle(&$event)
{
$this->SaveChanges($event);
$object =& $event->getObject();
$this->Application->SetVar($event->getPrefixSpecial().'_id', $object->GetId() );
$return_tpl = $object->GetDBField('Type') == 1 ? 'base_style_edit' : 'block_style_edit';
$this->finalizePopup($event, 'selectors.base','stylesheets/'.$return_tpl);
}
/**
* Extract styles
*
* @param kEvent $event
*/
function OnAfterItemLoad(&$event)
{
$object =& $event->getObject();
$selector_data = $object->GetDBField('SelectorData');
if($selector_data)
{
$selector_data = unserialize($selector_data);
$object->SetDBField('SelectorData', $selector_data);
}
else
{
$selector_data = Array();
}
$this->AddParentProperties($event, $selector_data);
}
/**
* Serialize item before saving to db
*
* @param kEvent $event
*/
function SerializeSelectorData(&$event)
{
$object =& $event->getObject();
$selector_data = $object->GetDBField('SelectorData');
if(!$selector_data) $selector_data = Array();
$selector_data = $this->RemoveParentProperties($event, $selector_data);
if( !IsSerialized($selector_data) ) $selector_data = serialize($selector_data);
$object->SetDBField('SelectorData', $selector_data);
}
/**
* Unserialize data back when update was made
*
* @param kEvent $event
*/
function UnserializeSelectorData(&$event)
{
$object =& $event->getObject();
$selector_data = $object->GetDBField('SelectorData');
if(!$selector_data) $selector_data = Array();
if( IsSerialized($selector_data) ) $selector_data = unserialize($selector_data);
$selector_data = $this->AddParentProperties($event, $selector_data);
$object->SetDBField('SelectorData', $selector_data);
}
/**
* Populate options based on temporary table :)
*
* @param kEvent $event
*/
function OnPrepareBaseStyles(&$event)
{
$object =& $event->getObject();
$parent_info = $object->getLinkedInfo();
$title_field = $this->Application->getUnitOption($event->Prefix,'TitleField');
$sql = 'SELECT '.$title_field.', '.$object->IDField.' FROM '.$object->TableName.' WHERE Type = 1 AND StylesheetId = '.$parent_info['ParentId'].' ORDER BY '.$title_field;
$object->Fields['ParentId']['options'] = array_merge_recursive2($object->Fields['ParentId']['options'],
$this->Conn->GetCol($sql,$object->IDField) );
}
/**
* Remove properties of parent style that match by value from style
*
* @param kEvent $event
*/
function RemoveParentProperties(&$event, $selector_data)
{
$object =& $event->getObject();
$parent_id = $object->GetDBField('ParentId');
if($parent_id)
{
$sql = 'SELECT SelectorData FROM '.$object->TableName.' WHERE '.$object->IDField.' = '.$parent_id;
$base_selector_data = $this->Conn->GetOne($sql);
if( IsSerialized($base_selector_data) ) $base_selector_data = unserialize($base_selector_data);
foreach($selector_data as $prop_name => $prop_value)
{
if( !$prop_value || getArrayValue($base_selector_data,$prop_name) == $prop_value )
{
unset($selector_data[$prop_name]);
}
}
$object->SetDBField('SelectorData', $selector_data);
return $selector_data;
}
else
{
foreach($selector_data as $prop_name => $prop_value)
{
if(!$prop_value) unset($selector_data[$prop_name]);
}
$object->SetDBField('SelectorData', $selector_data);
return $selector_data;
}
}
/**
* Add back properties from parent style, that match this style property values
*
* @param kEvent $event
*/
function AddParentProperties(&$event, $selector_data)
{
$object =& $event->getObject();
$parent_id = $object->GetDBField('ParentId');
if($parent_id)
{
$sql = 'SELECT SelectorData FROM '.$object->TableName.' WHERE '.$object->IDField.' = '.$parent_id;
$base_selector_data = $this->Conn->GetOne($sql);
if( IsSerialized($base_selector_data) ) $base_selector_data = unserialize($base_selector_data);
$selector_data = array_merge_recursive2($base_selector_data,$selector_data);
$object->SetDBField('SelectorData', $selector_data);
return $selector_data;
}
return $selector_data;
}
/**
* Reset Style definition to base style -> no customizations
*
* @param kEvent $event
*/
function OnResetToBase(&$event)
{
$object =& $event->getObject();
$object->SetFieldsFromHash( $this->getSubmittedFields($event) );
$object->ResetStyle();
$event->redirect_params['pass'] = 'all,'.$event->getPrefixSpecial();
}
/**
* Resets selected styles properties to values of their base classes
*
* @param kEvent $event
*/
function OnMassResetToBase(&$event)
{
$this->Application->setUnitOption($event->Prefix,'AutoLoad',false);
$object =& $event->getObject();
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if($items_info)
{
foreach($items_info as $id => $field_values)
{
$object->Load($id);
$object->ResetStyle();
}
}
}
}
?>
\ No newline at end of file
Property changes on: trunk/kernel/units/selectors/selectors_event_handler.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4
\ No newline at end of property
+1.5
\ No newline at end of property
Index: trunk/core/units/selectors/selectors_event_handler.php
===================================================================
--- trunk/core/units/selectors/selectors_event_handler.php (revision 2797)
+++ trunk/core/units/selectors/selectors_event_handler.php (revision 2798)
@@ -1,309 +1,354 @@
<?php
safeDefine('STYLE_BASE', 1);
safeDefine('STYLE_BLOCK', 2);
class SelectorsEventHandler extends InpDBEventHandler
{
+
+ /**
+ * Occures after an item has been cloned
+ * Id of newly created item is passed as event' 'id' param
+ *
+ * @param kEvent $event
+ */
+ function OnAfterClone(&$event)
+ {
+ $object =& $event->getObject( Array('skip_autoload' => true) );
+ $object->Load( $event->getEventParam('id') );
+
+ $linked_info = $object->getLinkedInfo();
+ $selector_name = $object->GetDBField('SelectorName');
+
+ // temp table sql
+ $sql = 'SELECT RIGHT(SelectorName, LENGTH(SelectorName) - %s) AS SelectorIndex
+ FROM %s
+ WHERE (%s = %s) AND SelectorName LIKE %s AND (%s != %s)
+ ORDER BY SelectorIndex DESC';
+ $sql = sprintf( $sql,
+ strlen($selector_name),
+ $object->TableName,
+ $linked_info['ForeignKey'],
+ $linked_info['ParentId'],
+ $this->Conn->qstr($selector_name.'%' ),
+ $object->IDField,
+ $object->GetID() );
+
+ $selector_index = $this->Conn->GetOne($sql);
+ if($selector_index !== false)
+ {
+ $selector_index = (int)ltrim($selector_index, '-');
+ $object->SetDBField('SelectorName', $selector_name.'-'.(++$selector_index) );
+ $object->Update();
+ }
+
+ // live table sql if previous was in temp table
+ $live_table = $this->Application->getUnitOption($object->Prefix, 'TableName');
+ if($live_table != $object->TableName)
+ {
+
+ }
+ }
+
/**
* Show base styles or block styles
*
* @param kEvent $event
*/
function SetCustomQuery(&$event)
{
$object =& $event->getObject();
switch ($event->Special)
{
case 'base':
$object->addFilter('type_filter', '%1$s.Type = 1');
break;
case 'block':
$object->addFilter('type_filter', '%1$s.Type = 2');
break;
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnBeforeItemUpdate(&$event)
{
$this->SerializeSelectorData($event);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnBeforeItemCreate(&$event)
{
$this->SerializeSelectorData($event);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAfterItemUpdate(&$event)
{
$this->UnserializeSelectorData($event);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAfterItemCreate(&$event)
{
$this->UnserializeSelectorData($event);
}
/**
* Get's special of main item for linking with subitem
*
* @param kEvent $event
* @return string
*/
function getMainSpecial(&$event)
{
return '';
}
/**
* Save css-style name & description before opening css editor
*
* @param kEvent $event
*/
function OnOpenStyleEditor(&$event)
{
$this->SaveChanges($event);
$event->redirect = false;
}
/**
* Saves Changes to Item
*
* @param kEvent $event
*/
function SaveChanges(&$event)
{
$this->Application->setUnitOption($event->Prefix,'AutoLoad',false);
$object =& $event->getObject();
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if($items_info)
{
list($id,$field_values) = each($items_info);
if($id == 0)
{
$parent_id = getArrayValue($field_values,'ParentId');
if($parent_id) $object->Load($parent_id);
$object->SetFieldsFromHash($field_values);
$object->Create();
if( $object->IsTempTable() ) $object->setTempID();
$this->Application->SetVar($event->getPrefixSpecial().'_id', $object->GetID() );
}
else
{
$object->Load($id);
$object->SetFieldsFromHash($field_values);
$object->Update();
}
}
}
/**
* Save style changes from style editor
*
* @param kEvent $event
*/
function OnSaveStyle(&$event)
{
$this->SaveChanges($event);
$object =& $event->getObject();
$this->Application->SetVar($event->getPrefixSpecial().'_id', $object->GetId() );
$return_tpl = $object->GetDBField('Type') == 1 ? 'base_style_edit' : 'block_style_edit';
$this->finalizePopup($event, 'selectors.base','stylesheets/'.$return_tpl);
}
/**
* Extract styles
*
* @param kEvent $event
*/
function OnAfterItemLoad(&$event)
{
$object =& $event->getObject();
$selector_data = $object->GetDBField('SelectorData');
if($selector_data)
{
$selector_data = unserialize($selector_data);
$object->SetDBField('SelectorData', $selector_data);
}
else
{
$selector_data = Array();
}
$this->AddParentProperties($event, $selector_data);
}
/**
* Serialize item before saving to db
*
* @param kEvent $event
*/
function SerializeSelectorData(&$event)
{
$object =& $event->getObject();
$selector_data = $object->GetDBField('SelectorData');
if(!$selector_data) $selector_data = Array();
$selector_data = $this->RemoveParentProperties($event, $selector_data);
if( !IsSerialized($selector_data) ) $selector_data = serialize($selector_data);
$object->SetDBField('SelectorData', $selector_data);
}
/**
* Unserialize data back when update was made
*
* @param kEvent $event
*/
function UnserializeSelectorData(&$event)
{
$object =& $event->getObject();
$selector_data = $object->GetDBField('SelectorData');
if(!$selector_data) $selector_data = Array();
if( IsSerialized($selector_data) ) $selector_data = unserialize($selector_data);
$selector_data = $this->AddParentProperties($event, $selector_data);
$object->SetDBField('SelectorData', $selector_data);
}
/**
* Populate options based on temporary table :)
*
* @param kEvent $event
*/
function OnPrepareBaseStyles(&$event)
{
$object =& $event->getObject();
$parent_info = $object->getLinkedInfo();
$title_field = $this->Application->getUnitOption($event->Prefix,'TitleField');
$sql = 'SELECT '.$title_field.', '.$object->IDField.' FROM '.$object->TableName.' WHERE Type = 1 AND StylesheetId = '.$parent_info['ParentId'].' ORDER BY '.$title_field;
$object->Fields['ParentId']['options'] = array_merge_recursive2($object->Fields['ParentId']['options'],
$this->Conn->GetCol($sql,$object->IDField) );
}
/**
* Remove properties of parent style that match by value from style
*
* @param kEvent $event
*/
function RemoveParentProperties(&$event, $selector_data)
{
$object =& $event->getObject();
$parent_id = $object->GetDBField('ParentId');
if($parent_id)
{
$sql = 'SELECT SelectorData FROM '.$object->TableName.' WHERE '.$object->IDField.' = '.$parent_id;
$base_selector_data = $this->Conn->GetOne($sql);
if( IsSerialized($base_selector_data) ) $base_selector_data = unserialize($base_selector_data);
foreach($selector_data as $prop_name => $prop_value)
{
if( !$prop_value || getArrayValue($base_selector_data,$prop_name) == $prop_value )
{
unset($selector_data[$prop_name]);
}
}
$object->SetDBField('SelectorData', $selector_data);
return $selector_data;
}
else
{
foreach($selector_data as $prop_name => $prop_value)
{
if(!$prop_value) unset($selector_data[$prop_name]);
}
$object->SetDBField('SelectorData', $selector_data);
return $selector_data;
}
}
/**
* Add back properties from parent style, that match this style property values
*
* @param kEvent $event
*/
function AddParentProperties(&$event, $selector_data)
{
$object =& $event->getObject();
$parent_id = $object->GetDBField('ParentId');
if($parent_id)
{
$sql = 'SELECT SelectorData FROM '.$object->TableName.' WHERE '.$object->IDField.' = '.$parent_id;
$base_selector_data = $this->Conn->GetOne($sql);
if( IsSerialized($base_selector_data) ) $base_selector_data = unserialize($base_selector_data);
$selector_data = array_merge_recursive2($base_selector_data,$selector_data);
$object->SetDBField('SelectorData', $selector_data);
return $selector_data;
}
return $selector_data;
}
/**
* Reset Style definition to base style -> no customizations
*
* @param kEvent $event
*/
function OnResetToBase(&$event)
{
$object =& $event->getObject();
$object->SetFieldsFromHash( $this->getSubmittedFields($event) );
$object->ResetStyle();
$event->redirect_params['pass'] = 'all,'.$event->getPrefixSpecial();
}
/**
* Resets selected styles properties to values of their base classes
*
* @param kEvent $event
*/
function OnMassResetToBase(&$event)
{
$this->Application->setUnitOption($event->Prefix,'AutoLoad',false);
$object =& $event->getObject();
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if($items_info)
{
foreach($items_info as $id => $field_values)
{
$object->Load($id);
$object->ResetStyle();
}
}
}
}
?>
\ No newline at end of file
Property changes on: trunk/core/units/selectors/selectors_event_handler.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4
\ No newline at end of property
+1.5
\ No newline at end of property

Event Timeline