Esempio n. 1
0
 /**
  * Saves the display_order
  *
  * @throws CHttpException
  */
 public function sortModel()
 {
     if (!$this->model->hasAttribute('display_order')) {
         throw new CHttpException(400, 'This object cannot be ordered');
     }
     if (Yii::app()->request->isPostRequest) {
         $post = Yii::app()->request->getPost($this->modelName);
         $page = Yii::app()->request->getPost('page');
         if (!array_key_exists('display_order', $post) || !is_array($post['display_order'])) {
             throw new CHttpException(400, 'No objects to order were provided');
         }
         foreach ($post['display_order'] as $displayOrder => $id) {
             $model = $this->model->findByPk($id);
             if (!$model) {
                 throw new CHttpException(400, 'Object to be ordered not found');
             }
             //Add one because display_order not zero indexed.
             //Times by page number to get correct order across pages.
             $model->display_order = ($displayOrder + 1) * $page;
             if (!$model->validate()) {
                 throw new CHttpException(400, 'Order was invalid');
             }
             if (!$model->save()) {
                 throw new CHttpException(500, 'Unable to save order');
             }
         }
         $this->audit('sort');
     }
 }