Index: branches/unlabeled/unlabeled-1.4.10/core/units/selectors/selectors_event_handler.php =================================================================== diff -u -r2053 -r2805 --- branches/unlabeled/unlabeled-1.4.10/core/units/selectors/selectors_event_handler.php (.../selectors_event_handler.php) (revision 2053) +++ branches/unlabeled/unlabeled-1.4.10/core/units/selectors/selectors_event_handler.php (.../selectors_event_handler.php) (revision 2805) @@ -5,7 +5,55 @@ class SelectorsEventHandler extends InpDBEventHandler { + /** + * Occures before an item has been cloned + * Id of newly created item is passed as event' 'id' param + * + * @param kEvent $event + */ + function OnBeforeClone(&$event) + { + $event->Init($event->Prefix, '-item'); + $object =& $event->getObject(); + + $title_field = 'SelectorName'; + $new_name = $object->GetDBField($title_field); + $original_checked = false; + + $foreign_key = $event->getEventParam('foreign_key'); // in case if whole stylesheet is cloned + if($foreign_key === false) $foreign_key = $object->GetDBField('StylesheetId'); // in case if selector is copied ifself + + do { + if ( preg_match('/(.*)-([\d]+)/', $new_name, $regs) ) { + $new_name = $regs[1].'-'.($regs[2]+1); + } + elseif ($original_checked) { + $new_name = $new_name.'-1'; + } + + // if we are cloning in temp table this will look for names in temp table, + // since object' TableName contains correct TableName (for temp also!) + // if we are cloning live - look in live + $query = ' SELECT '.$title_field.' + FROM '.$object->TableName.' + WHERE '.$title_field.' = '.$this->Conn->qstr($new_name).' AND StylesheetId = '.$foreign_key; + + $res = $this->Conn->GetOne($query); + + /*// if not found in live table, check in temp table if applicable + if ($res === false && $object->Special == 'temp') { + $query = 'SELECT '.$name_field.' FROM '.$this->GetTempName($master['TableName']).' + WHERE '.$name_field.' = '.$this->Conn->qstr($new_name); + $res = $this->Conn->GetOne($query); + }*/ + + $original_checked = true; + } while ($res !== false); + $object->SetDBField($title_field, $new_name); + } + + /** * Show base styles or block styles * * @param kEvent $event