Index: branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_tag_processor.php =================================================================== diff -u -r1410 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_tag_processor.php (.../selectors_tag_processor.php) (revision 1410) +++ branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_tag_processor.php (.../selectors_tag_processor.php) (revision 1421) @@ -7,7 +7,6 @@ { $object =& $this->Application->recallObject( $this->getPrefixSpecial(), $this->Prefix, $params ); $style_data = $object->GetDBField( $params['field'] ); - //$style_data = str_replace(array(">", "<",""", "&"), array(">","<", "\"", "&"), $style_data); $ret = ''; @@ -53,7 +52,8 @@ $ret = parent::Field($params); if($subfield && $subfield != '$subfield') { - return getArrayValue($ret,$subfield); + $ret = getArrayValue($ret,$subfield); + return $ret !== false ? $ret : ''; } return $ret; } Index: branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/stylesheets_list.tpl =================================================================== diff -u -r1412 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/stylesheets_list.tpl (.../stylesheets_list.tpl) (revision 1412) +++ branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/stylesheets_list.tpl (.../stylesheets_list.tpl) (revision 1421) @@ -44,13 +44,6 @@ a_toolbar.AddButton( new ToolBarSeparator('sep2') ); - a_toolbar.AddButton( new ToolBarButton('compile', '', function() { - submit_event('css','OnCompile'); - } - ) ); - - a_toolbar.AddButton( new ToolBarSeparator('sep3') ); - a_toolbar.AddButton( new ToolBarButton('view', '', function() { show_viewmenu(a_toolbar,'view'); } Index: branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/block_style_edit.tpl =================================================================== diff -u --- branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/block_style_edit.tpl (revision 0) +++ branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/block_style_edit.tpl (revision 1421) @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + +
+ +
+ + + + + " value="2"> + + + + + + + + + + "> + + + + + + +
+ :
+ +
+ +  
+ + \ No newline at end of file Index: branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/style_editor.tpl =================================================================== diff -u -r1410 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/style_editor.tpl (.../style_editor.tpl) (revision 1410) +++ branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/style_editor.tpl (.../style_editor.tpl) (revision 1421) @@ -100,7 +100,6 @@ - Index: branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/base_style_edit.tpl =================================================================== diff -u -r1410 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/base_style_edit.tpl (.../base_style_edit.tpl) (revision 1410) +++ branches/unlabeled/unlabeled-1.1.2/core/admin_templates/stylesheets/base_style_edit.tpl (.../base_style_edit.tpl) (revision 1421) @@ -25,9 +25,37 @@ a_toolbar.Render(); + function ValidateRequired() + { + var $fields = new Array('', + ''); + var $ret = true; + var $i = 0; + var $value = ''; + while($i < $fields.length) + { + $value = document.getElementById( $fields[$i] ).value; + $value = $value.replace(' ',''); + if($value.length == 0) + { + $ret = false; + break; + } + $i++; + } + return $ret; + } + function editStyle() { - openSelector('selectors','',null,850,460,'OnOpenStyleEditor'); + if( ValidateRequired() ) + { + openSelector('selectors','',null,850,460,'OnOpenStyleEditor'); + } + else + { + alert( RemoveTranslationLink('') ); + } } @@ -41,7 +69,7 @@ " value="1"> - + Index: branches/unlabeled/unlabeled-1.1.2/core/units/stylesheets/stylesheets_config.php =================================================================== diff -u -r1412 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/units/stylesheets/stylesheets_config.php (.../stylesheets_config.php) (revision 1412) +++ branches/unlabeled/unlabeled-1.1.2/core/units/stylesheets/stylesheets_config.php (.../stylesheets_config.php) (revision 1421) @@ -7,7 +7,18 @@ 'EventHandlerClass' => Array('class'=>'StylesheetsEventHandler','file'=>'stylesheets_event_handler.php','build_event'=>'OnBuild'), 'TagProcessorClass' => Array('class'=>'kDBTagProcessor','file'=>'','build_event'=>'OnBuild'), 'AutoLoad' => true, - 'Hooks' => Array(), + 'Hooks' => Array( + Array( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'css', + 'HookToSpecial' => '', + 'HookToEvent' => Array('OnSave'), + 'DoPrefix' => '', + 'DoSpecial' => '', + 'DoEvent' => 'OnCompileStylesheet', + ), + ), 'QueryString' => Array( 1 => 'id', 2 => 'page', @@ -35,11 +46,17 @@ 'block_styles' => Array('prefixes' => Array('css','selectors.block_List'), 'format' => "#css_status# '#css_titlefield#' - !la_title_BlockStyles! (#selectors.block_recordcount#)"), 'base_style_edit' => Array( 'prefixes' => Array('css','selectors'), - 'new_status_labels' => Array('selectors.base'=>'!la_title_Adding_BaseStyle!'), - 'edit_status_labels' => Array('selectors.base'=>'!la_title_Editing_BaseStyle!'), - 'new_titlefield' => Array('selectors.base'=>'!la_title_New_BaseStyle!'), + 'new_status_labels' => Array('selectors'=>'!la_title_Adding_BaseStyle!'), + 'edit_status_labels' => Array('selectors'=>'!la_title_Editing_BaseStyle!'), + 'new_titlefield' => Array('selectors'=>'!la_title_New_BaseStyle!'), 'format' => "#css_status# '#css_titlefield#' - #selectors_status# '#selectors_titlefield#'"), - + + 'block_style_edit' => Array( 'prefixes' => Array('css','selectors'), + 'new_status_labels' => Array('selectors'=>'!la_title_Adding_BlockStyle!'), + 'edit_status_labels' => Array('selectors'=>'!la_title_Editing_BlockStyle!'), + 'new_titlefield' => Array('selectors'=>'!la_title_New_BlockStyle!'), + 'format' => "#css_status# '#css_titlefield#' - #selectors_status# '#selectors_titlefield#'"), + 'style_edit' => Array('prefixes' => Array('selectors'), 'format' => "!la_title_EditingStyle! '#selectors_titlefield#'"), ), Index: branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_event_handler.php =================================================================== diff -u -r1410 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_event_handler.php (.../selectors_event_handler.php) (revision 1410) +++ branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_event_handler.php (.../selectors_event_handler.php) (revision 1421) @@ -34,27 +34,6 @@ } /** - * Initializes newly created items - * - * @param kEvent $event - */ - function OnNew(&$event) - { - parent::OnNew($event); - - $object =& $event->getObject(); - switch ($event->Special) { - case 'base': - $object->SetDBField('Type', 1); - break; - - case 'block': - $object->SetDBField('Type', 2); - break; - } - } - - /** * Save css-style name & description before opening css editor * * @param kEvent $event @@ -79,9 +58,19 @@ if($items_info) { list($id,$field_values) = each($items_info); - $object->Load($id); - $object->SetFieldsFromHash($field_values); - $object->Update(); + if($id == 0) + { + $object->Load( $field_values['ParentId'] ); + $object->SetFieldsFromHash($field_values); + $object->Create(); + if( $object->IsTempTable() ) $object->setTempID(); + } + else + { + $object->Load($id); + $object->SetFieldsFromHash($field_values); + $object->Update(); + } } } @@ -93,13 +82,13 @@ function OnSaveStyle(&$event) { $this->SaveChanges($event); + $object =& $event->getObject(); + $this->Application->SetVar($event->getPrefixSpecial().'_id', $object->GetId() ); - $selector_data = $object->GetDBField('SelectorData'); - $object->SetDBField('SelectorData', serialize($selector_data) ); - $object->Update(); + $return_tpl = $object->GetDBField('Type') == 1 ? 'base_style_edit' : 'block_style_edit'; - $this->finalizePopup($event,'selectors.base','in-commerce/stylesheets/base_style_edit'); + $this->finalizePopup($event, 'selectors.base','in-commerce/stylesheets/'.$return_tpl); } /** @@ -116,18 +105,26 @@ $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 OnBeforeItemUpdate(&$event) + function OnSerializeSelectorData(&$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); @@ -138,15 +135,83 @@ * * @param kEvent $event */ - function OnAfterItemUpdate(&$event) + function OnUnserializeSelectorData(&$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( $base_selector_data[$prop_name] == $prop_value ) unset($selector_data[$prop_name]); + } + $object->SetDBField('SelectorData', $selector_data); + return $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; + } } ?> \ No newline at end of file Index: branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_config.php =================================================================== diff -u -r1412 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_config.php (.../selectors_config.php) (revision 1412) +++ branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_config.php (.../selectors_config.php) (revision 1421) @@ -4,12 +4,45 @@ $config = Array( 'Prefix' => 'selectors', - 'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'), + 'ItemClass' => Array('class'=>'SelectorsItem','file'=>'selectors_item.php','build_event'=>'OnItemBuild'), 'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'), 'EventHandlerClass' => Array('class'=>'SelectorsEventHandler','file'=>'selectors_event_handler.php','build_event'=>'OnBuild'), 'TagProcessorClass' => Array('class'=>'SelectorsTagProcessor','file'=>'selectors_tag_processor.php','build_event'=>'OnBuild'), 'AutoLoad' => true, - 'Hooks' => Array(), + 'Hooks' => Array( + Array( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'selectors', + 'HookToSpecial' => '', + 'HookToEvent' => Array('OnBeforeItemUpdate','OnBeforeItemCreate'), + 'DoPrefix' => '', + 'DoSpecial' => '', + 'DoEvent' => 'OnSerializeSelectorData', + ), + + Array( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'selectors', + 'HookToSpecial' => '', + 'HookToEvent' => Array('OnAfterItemUpdate','OnAfterItemCreate'), + 'DoPrefix' => '', + 'DoSpecial' => '', + 'DoEvent' => 'OnUnserializeSelectorData', + ), + + Array( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'selectors', + 'HookToSpecial' => '', + 'HookToEvent' => Array('OnItemBuild','OnListBuild'), + 'DoPrefix' => '', + 'DoSpecial' => '', + 'DoEvent' => 'OnPrepareBaseStyles', + ), + ), 'QueryString' => Array( 1 => 'id', 2 => 'page', @@ -27,7 +60,8 @@ 'AutoDelete' => true, 'AutoClone' => true, - 'ListSQLs' => Array( ''=>'SELECT * FROM %s', + 'ListSQLs' => Array( ''=>' SELECT %1$s.* + FROM %s', ), // key - special, value - list select sql 'ItemSQLs' => Array( ''=>'SELECT * FROM %s', ), @@ -40,14 +74,14 @@ 'SelectorId' => Array(), 'StylesheetId' => Array('type' => 'int','not_null' => '1','default' => '0'), 'Name' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), - 'SelectorName' => Array('type' => 'string','not_null' => '1','default' => ''), + 'SelectorName' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'SelectorData' => Array('not_null' => '1','default' => ''), 'Description' => Array('type' => 'string','not_null' => '1','default' => ''), 'Type' => Array('type' => 'int', 'formatter'=>'kOptionsFormatter', 'options'=>Array( STYLE_BASE => 'la_BaseSelectors', STYLE_BLOCK => 'la_BlockSelectors'), 'use_phrases' => 1, 'not_null' => '1','default' => '0'), - 'ParentId' => Array('type' => 'int','not_null' => '1','default' => '0'), + 'ParentId' => Array('type' => 'int', 'formatter'=>'kOptionsFormatter', 'options'=>Array(0=>''), 'not_null' => '1','default' => '0'), ), - 'VirtualFields' => Array(), + 'VirtualFields' => Array( ), 'Grids' => Array( 'Default' => Array( Index: branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_item.php =================================================================== diff -u --- branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_item.php (revision 0) +++ branches/unlabeled/unlabeled-1.1.2/core/units/selectors/selectors_item.php (revision 1421) @@ -0,0 +1,25 @@ +GetDBField('SelectorData'); + $ret = $this->GetDBField('Type') == STYLE_BASE ? '.' : ''; + + $ret .= $this->GetDBField('SelectorName')." {\n"; + foreach($selector_data as $property_name => $property_value) + { + $ret .= "\t$property_name: $property_value;\n"; + } + $ret .= $this->GetDBField('AdvancedCSS'); + $ret .= "}\n"; + return $ret; + } + } +?> \ No newline at end of file Index: branches/unlabeled/unlabeled-1.1.2/core/units/stylesheets/stylesheets_event_handler.php =================================================================== diff -u -r1412 -r1421 --- branches/unlabeled/unlabeled-1.1.2/core/units/stylesheets/stylesheets_event_handler.php (.../stylesheets_event_handler.php) (revision 1412) +++ branches/unlabeled/unlabeled-1.1.2/core/units/stylesheets/stylesheets_event_handler.php (.../stylesheets_event_handler.php) (revision 1421) @@ -8,34 +8,30 @@ * * @param kEvent $event */ - function OnCompile(&$event) + function OnCompileStylesheet(&$event) { $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); $object =& $event->getObject(); - $this->StoreSelectedIDs($event); + $ids = explode(',', $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids') ); - $ids = $this->getSelectedIDs($event); - - $selectors =& $this->Application->recallObject('selectors','selectors_List',Array('skip_counting'=>true,'per_page'=>-1) ); - $ret = '/* This file is generated automatically. Don\'t edit it manually ! */'."\n\n"; if($ids) { + $selector_item =& $this->Application->recallObject('selectors.item', 'selectors'); + $parent_field = $this->Application->getUnitOption($selector_item->Prefix,'ForeignKey'); + + $sql = 'SELECT '.$selector_item->IDField.' FROM '.$selector_item->TableName.' WHERE '.$parent_field.' = '.$id; + $selectors_ids = $this->Conn->GetCol($sql); + foreach($ids as $id) { $object->Load($id); - $selectors->linkToParent(''); - $selectors->Query(); - $selectors->GoFirst(); - - while( !$selectors->EOL() ) + foreach($selectors_ids as $selector_id) { - $selector_name = $selectors->GetDBField('Name'); - $selector_data = $selectors->GetDBField('SelectorData'); - $ret .= $this->prepareSelector($selector_name, $selector_data); - $selectors->GoNext(); + $selector_item->Load($selector_id); + $ret .= $selector_item->CompileStyle()."\n"; } $compile_ts = time(); @@ -58,21 +54,9 @@ } } } - $this->clearSelectedIDs($event); } - function prepareSelector($selector_name, $selector_data) - { - if( IsSerialized($selector_data) ) $selector_data = unserialize($selector_data); - $ret = '.'.$selector_name." {\n"; - foreach($selector_data as $property_name => $property_value) - { - $ret .= "\t$property_name: $property_value;\n"; - } - - $ret .= "}\n\n"; - return $ret; - } + } ?> \ No newline at end of file