Changeset View
Changeset View
Standalone View
Standalone View
branches/5.2.x/core/units/helpers/priority_helper.php
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Line(s) | |||||
$virtual_fields = $object->getVirtualFields(); | $virtual_fields = $object->getVirtualFields(); | ||||
$virtual_fields['OldPriority'] = Array ('type' => 'int', 'default' => 0); | $virtual_fields['OldPriority'] = Array ('type' => 'int', 'default' => 0); | ||||
$object->setVirtualFields($virtual_fields); | $object->setVirtualFields($virtual_fields); | ||||
} | } | ||||
$items_count = $this->Conn->GetOne($sql); | $items_count = $this->Conn->GetOne($sql); | ||||
$current_priority = $object instanceof kDBList ? 0 : $object->GetDBField('Priority'); | $current_priority = $object instanceof kDBList ? 0 : $object->GetDBField('Priority'); | ||||
if ( $is_new || $current_priority == -($items_count + 1) ) { | if ( $is_new || $current_priority == -($items_count + 1) || $this->isTempTableOnly($object) ) { | ||||
$items_count++; | $items_count++; | ||||
} | } | ||||
if ( $is_new ) { | if ( $is_new ) { | ||||
// add new item to the end of list | // add new item to the end of list | ||||
$object->SetDBField('Priority', -$items_count); | $object->SetDBField('Priority', -$items_count); | ||||
$object->SetDBField('OldPriority', -$items_count); | $object->SetDBField('OldPriority', -$items_count); | ||||
} | } | ||||
else { | else { | ||||
// storing priority right after load for comparing when updating | // storing priority right after load for comparing when updating | ||||
$object->SetDBField('OldPriority', $current_priority); | $object->SetDBField('OldPriority', $current_priority); | ||||
} | } | ||||
for ($i = 1; $i <= $items_count; $i++) { | for ($i = 1; $i <= $items_count; $i++) { | ||||
$field_options['options'][-$i] = $i; | $field_options['options'][-$i] = $i; | ||||
} | } | ||||
$object->SetFieldOptions('Priority', $field_options); | $object->SetFieldOptions('Priority', $field_options); | ||||
} | } | ||||
/** | /** | ||||
* Determines if an item only exists in temp table. | |||||
* | |||||
* @param kDBBase $object Object. | |||||
* | |||||
* @return boolean | |||||
*/ | |||||
protected function isTempTableOnly(kDBBase $object) | |||||
{ | |||||
if ( !$object->IsTempTable() || ($object instanceof kDBList) ) { | |||||
return false; | |||||
} | |||||
return $object->GetID() <= 0; | |||||
} | |||||
/** | |||||
* Updates priorities for changed items | * Updates priorities for changed items | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @param Array $changes = Array (ID => Array ('constrain' => ..., 'new' => ..., 'old' => ...), ...) | * @param Array $changes = Array (ID => Array ('constrain' => ..., 'new' => ..., 'old' => ...), ...) | ||||
* @param Array $new_ids = Array (temp_id => live_id) | * @param Array $new_ids = Array (temp_id => live_id) | ||||
* @param string $constrain | * @param string $constrain | ||||
* @param string $joins | * @param string $joins | ||||
* @return Array | * @return Array | ||||
▲ Show 20 Lines • Show All 158 Lines • Show Last 20 Lines |