public function changePriority($id, $offset, $conditions = array())
{
$offset = intval($offset);
if ($offset === 0) {
return true;
}
$field = 'priority';
$alias = $this->alias;
// 一時的にキャッシュをOFFする
$this->cacheQueries = false;
$current = $this->findById($id, array("{$alias}.id", "{$alias}.{$field}"));
// currentを含め変更するデータを取得
if ($offset > 0) {
// DOWN
$order = array("{$alias}.{$field}");
$conditions["{$alias}.{$field} >="] = $current[$alias][$field];
} else {
// UP
$order = array("{$alias}.{$field} DESC");
$conditions["{$alias}.{$field} <="] = $current[$alias][$field];
}
$datas = $this->find('all', array('conditions' => $conditions, 'fields' => array("{$alias}.id", "{$alias}.{$field}", "{$alias}.name"), 'order' => $order, 'limit' => abs($offset) + 1, 'recursive' => -1));
if (empty($datas)) {
return false;
}
//データをローテーション
$count = count($datas);
$currentNewValue = $datas[$count - 1][$alias][$field];
for ($i = $count - 1; $i > 0; $i--) {
$datas[$i][$alias][$field] = $datas[$i - 1][$alias][$field];
}
$datas[0][$alias][$field] = $currentNewValue;
if (!$this->saveMany($datas)) {
return false;
}
return true;
}