Example #1
0
 public function buildSqlWhere()
 {
     $where = $this->config->filter();
     $depth = Status::depth($this->statusVariables);
     if ($depth > 1) {
         if (!$this->config->connectionField()) {
             throw new \Ip\Exception("Nested GRID require 'connectionField' setting to be set.");
         }
         $where .= ' and (' . $where . ') and ' . $this->config->tableName() . '.`' . $this->config->connectionField() . '` = ' . ipDb()->getConnection()->quote($this->statusVariables['gridParentId' . ($depth - 1)]);
     }
     $searchVariables = array();
     foreach ($this->statusVariables as $key => $value) {
         if (preg_match('/^s_/', $key)) {
             $searchVariables[substr($key, 2)] = $value;
         }
     }
     if (!empty($searchVariables)) {
         foreach ($this->config->fields() as $fieldData) {
             if (!empty($fieldData['type']) && $fieldData['type'] == 'Tab') {
                 continue;
             }
             $fieldObject = $this->config->fieldObject($fieldData);
             $fieldQuery = $fieldObject->searchQuery($searchVariables);
             if ($fieldQuery) {
                 if ($where != ' ') {
                     $where .= ' and ';
                 }
                 $where .= $fieldQuery;
             }
         }
     }
     return $where;
 }
Example #2
0
 protected function getBreadcrumb()
 {
     $depth = Status::depth($this->statusVariables);
     if ($depth <= 1) {
         return array();
     }
     $breadcrumb = array();
     $gridConfig = $this->config;
     $breadcrumb[] = array('title' => $gridConfig->getTitle(), 'url' => '#');
     $lastStatusVariables = array();
     $db = new Db($this->config, $this->statusVariables);
     for ($i = 1; $i <= $depth - 1; $i++) {
         if (isset($this->statusVariables['gridParentId' . $i])) {
             $parentId = $this->statusVariables['gridParentId' . $i];
         } else {
             $parentId = null;
         }
         if (isset($this->statusVariables['gridId' . $i])) {
             $gridId = $this->statusVariables['gridId' . $i];
         } else {
             $gridId = null;
         }
         $lastStatusVariables = Status::genSubgridVariables($lastStatusVariables, $gridId, $parentId);
         $tmpGridConfig = $gridConfig->subgridConfig($lastStatusVariables);
         $hash = Status::build($lastStatusVariables);
         $breadcrumbGridconfig = $gridConfig->subgridConfig($lastStatusVariables, $i);
         if ($breadcrumbGridconfig->getBreadcrumbField()) {
             $title = $db->breadcrumbTitle($i);
         } else {
             $title = $tmpGridConfig->getTitle();
         }
         $breadcrumb[] = array('title' => $title, 'url' => '#' . $hash);
     }
     return $breadcrumb;
 }
Example #3
0
 public static function genSubgridVariables($curStatusVariables, $gridId, $gridParentId)
 {
     $newStatusVariables = array();
     $depth = Status::depth($curStatusVariables);
     for ($i = 1; $i < $depth; $i++) {
         $newStatusVariables['gridId' . $i] = $curStatusVariables['gridId' . $i];
         $newStatusVariables['gridParentId' . $i] = $curStatusVariables['gridParentId' . $i];
     }
     if ($gridId !== null) {
         $newStatusVariables['gridId' . $depth] = $gridId;
     }
     if ($gridParentId !== null) {
         $newStatusVariables['gridParentId' . $depth] = $gridParentId;
     }
     return $newStatusVariables;
 }
Example #4
0
 /**
  * Return nested grid config object
  * @param $statusVariables
  * @return Config
  * @throws \Ip\Exception
  */
 public function subgridConfig($statusVariables, $depthLimit = null)
 {
     $depth = Status::depth($statusVariables);
     if ($depthLimit !== null && $depthLimit < $depth) {
         $depth = $depthLimit;
     }
     $config = $this->config;
     for ($i = 1; $i < $depth; $i++) {
         $found = false;
         foreach ($config['fields'] as $field) {
             if (!empty($field['type']) && $field['type'] == 'Grid' && $field['gridId'] == $statusVariables['gridId' . $i]) {
                 $config = $field['config'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             throw new \Ip\Exception('Unknown subgrid');
         }
     }
     return new self($config);
 }
Example #5
0
 public function create($data)
 {
     $languages = ipContent()->getlanguages();
     $fields = $this->subgridConfig->fields();
     $dbData = array();
     $languageData = array();
     foreach ($fields as $field) {
         if (!empty($field['type']) && $field['type'] == 'Tab' && empty($field['preview']) || !empty($field['ignoreDb'])) {
             continue;
         }
         $fieldObject = $this->subgridConfig->fieldObject($field);
         $fieldObject->beforeCreate(null, $data);
         //one vent for multilingual and non-multilingual fields.
         if (empty($field['multilingual'])) {
             $fieldData = $fieldObject->createData($data);
             if (!is_array($fieldData)) {
                 throw new \Ip\Exception("createData method in class " . esc(get_class($fieldObject)) . " has to return array.");
             }
             $dbData = array_merge($dbData, $fieldData);
         } else {
             foreach ($languages as $language) {
                 $tmpData = $data;
                 if (isset($data[$field['field'] . '_' . $language->getCode()])) {
                     $tmpData[$field['field']] = $data[$field['field'] . '_' . $language->getCode()];
                 }
                 $fieldObject = $this->subgridConfig->fieldObject($field);
                 $fieldData = $fieldObject->createData($tmpData);
                 if (!is_array($fieldData)) {
                     throw new \Ip\Exception("createData method in class " . esc(get_class($fieldObject)) . " has to return array.");
                 }
                 if (empty($languageData[$language->getCode()])) {
                     $languageData[$language->getCode()] = array();
                 }
                 $languageData[$language->getCode()] = array_merge($languageData[$language->getCode()], $fieldData);
             }
         }
     }
     $sortField = $this->subgridConfig->sortField();
     if ($sortField) {
         if ($this->subgridConfig->createPosition() == 'top') {
             $orderValue = ipDb()->selectValue($this->subgridConfig->rawTableName(), "MIN(`{$sortField}`)", array());
             $dbData[$sortField] = is_numeric($orderValue) ? $orderValue - 1 : 1;
             // 1 if null
         } else {
             $orderValue = ipDb()->selectValue($this->subgridConfig->rawTableName(), "MAX(`{$sortField}`)", array());
             $dbData[$sortField] = is_numeric($orderValue) ? $orderValue + 1 : 1;
             // 1 if null
         }
     }
     $depth = Status::depth($this->statusVariables);
     if ($depth > 1) {
         $dbData[$this->subgridConfig->connectionField()] = $this->statusVariables['gridParentId' . ($depth - 1)];
     }
     if ($this->subgridConfig->createFilter()) {
         $dbData = call_user_func($this->subgridConfig->createFilter(), $dbData);
     }
     if ($this->subgridConfig->isMultilingual() && $this->subgridConfig->createLanguageFilter()) {
         $languageData = call_user_func($this->subgridConfig->createLanguageFilter(), $languageData);
     }
     $recordId = ipDb()->insert($this->subgridConfig->rawTableName(), $dbData);
     if (!empty($languageData)) {
         foreach ($languageData as $languageCode => $rawData) {
             $rawData[$this->subgridConfig->languageCodeField()] = $languageCode;
             $rawData[$this->subgridConfig->languageForeignKeyField()] = $recordId;
             ipDb()->insert($this->subgridConfig->rawLanguageTableName(), $rawData);
         }
     }
     foreach ($fields as $field) {
         $fieldObject = $this->subgridConfig->fieldObject($field);
         $fieldObject->afterCreate($recordId, $data);
     }
     return $recordId;
 }