Plugin::changePriority PHP Méthode

changePriority() public méthode

優先順位を変更する
public changePriority ( string | integer $id, string | integer $offset, array $conditions = [] ) : boolean
$id string | integer 起点となるプラグインのID
$offset string | integer 変更する範囲の相対位置
$conditions array find条件
Résultat boolean
    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;
    }