Index: trunk/core/units/selectors/selectors_event_handler.php =================================================================== diff -u -r2798 -r2799 --- trunk/core/units/selectors/selectors_event_handler.php (.../selectors_event_handler.php) (revision 2798) +++ trunk/core/units/selectors/selectors_event_handler.php (.../selectors_event_handler.php) (revision 2799) @@ -7,47 +7,45 @@ { /** - * Occures after an item has been cloned + * Occures before an item has been cloned * Id of newly created item is passed as event' 'id' param * * @param kEvent $event */ - function OnAfterClone(&$event) + function OnBeforeClone(&$event) { - $object =& $event->getObject( Array('skip_autoload' => true) ); - $object->Load( $event->getEventParam('id') ); + $event->Init($event->Prefix, '-item'); + $object =& $event->getObject(); - $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) - { + $title_field = 'SelectorName'; + $new_name = $object->GetDBField($title_field); + $original_checked = false; + 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 = '.$object->GetDBField('StylesheetId'); + $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); } /**