Exemplo 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');
     }
 }
Exemplo n.º 2
0
 /**
  * Generates the required Criteria object for the search.
  *
  * @param string|array $attr
  */
 protected function generateCriteria($attr = 'search')
 {
     if (is_array($attr)) {
         $search = $attr;
         $sensitive = false;
     } else {
         $search = $this->request->getParam($attr);
         $sensitive = $this->request->getParam('case_sensitive', false);
     }
     if (is_array($search)) {
         foreach ($search as $key => $value) {
             if ($key === 'exact') {
                 continue;
             }
             $exactMatch = isset($search['exact'][$key]) && $search['exact'][$key];
             if (!is_array($value)) {
                 $this->addCompare($this->criteria, $key, $value, $sensitive, 'AND', $exactMatch);
             } else {
                 if ($key === 'filterid') {
                     foreach ($value as $fieldName => $fieldValue) {
                         if ($fieldValue > 0) {
                             $this->addCompare($this->criteria, $fieldName, $fieldValue, $sensitive, 'AND', true);
                         }
                     }
                 }
                 if (!isset($value['value'])) {
                     //no value provided to search against
                     continue;
                 }
                 $searchTerm = $value['value'];
                 $this->addCompare($this->criteria, $key, $searchTerm, $sensitive, 'AND', $exactMatch);
                 if (array_key_exists('compare_to', $value) && is_array($value['compare_to'])) {
                     foreach ($value['compare_to'] as $compareTo) {
                         $this->addCompare($this->criteria, $compareTo, $searchTerm, $sensitive, 'OR', $exactMatch);
                     }
                 }
             }
         }
     }
     if ($this->model->hasAttribute('display_order')) {
         $this->criteria->order = 'display_order asc';
     } else {
         $order = $this->request->getParam('d');
         $sortColumn = $this->request->getParam('c');
         if ($sortColumn) {
             $this->relationalAttribute($this->criteria, $sortColumn, $attr);
             if ($order) {
                 $sortColumn .= ' DESC';
             }
             $this->criteria->order = $sortColumn;
         }
     }
 }