Beispiel #1
0
 public function sort($id, $sort)
 {
     if (!in_array($sort, array('up', 'down'))) {
         return redirect_message(array('admin', $this->get_class()), array('_flash_message' => '排序失敗!'));
     }
     $total = WorkTag::count(array('conditions' => array('work_tag_id = ?', 0)));
     switch ($sort) {
         case 'up':
             $sort = $this->tag->sort;
             $this->tag->sort = $this->tag->sort - 1 < 0 ? $total - 1 : $this->tag->sort - 1;
             break;
         case 'down':
             $sort = $this->tag->sort;
             $this->tag->sort = $this->tag->sort + 1 >= $total ? 0 : $this->tag->sort + 1;
             break;
     }
     WorkTag::addConditions($conditions, 'sort = ? AND work_tag_id = ?', $this->tag->sort, 0);
     $tag = $this->tag;
     $update = WorkTag::transaction(function () use($conditions, $tag, $sort) {
         if (($next = WorkTag::find('one', array('conditions' => $conditions))) && (($next->sort = $sort) || true)) {
             if (!$next->save()) {
                 return false;
             }
         }
         if (!$tag->save()) {
             return false;
         }
         return true;
     });
     if (!$update) {
         return redirect_message(array('admin', $this->get_class()), array('_flash_message' => '排序失敗!', 'posts' => $posts));
     }
     return redirect_message(array('admin', $this->get_class()), array('_flash_message' => '排序成功!'));
 }