public function fetchRow($id) { $sql = "\n SELECT\n " . $this->config->selectFields() . "\n FROM\n " . $this->config->tableName() . "\n " . $this->joinQuery() . "\n WHERE\n " . $this->config->tableName() . ".`" . $this->config->idField() . "` = :id\n "; $params = array('id' => $id); $result = ipDb()->fetchRow($sql, $params); return $result; }
public function delete($id) { $db = new Db($this->subgridConfig, $this->statusVariables); $fields = $this->subgridConfig->fields(); $curData = $db->fetchRow($id); foreach ($fields as $field) { $fieldObject = $this->subgridConfig->fieldObject($field); $fieldObject->beforeDelete($id, $curData); } $sql = "\n DELETE\n " . $this->subgridConfig->tableName() . "\n FROM\n " . $this->subgridConfig->tableName() . "\n " . $db->joinQuery() . "\n WHERE\n " . $this->subgridConfig->tableName() . ".`" . $this->subgridConfig->idField() . "` = :id\n "; $params = array('id' => $id); $callables = $this->subgridConfig->beforeDelete(); if ($callables) { if (is_array($callables) && !is_callable($callables)) { foreach ($callables as $callable) { call_user_func($callable, $params['id']); } } else { call_user_func($callables, $params['id']); } } ipDb()->execute($sql, $params); if ($this->subgridConfig->isMultilingual()) { $sql = "\n DELETE\n\n FROM\n " . $this->subgridConfig->languageTableName() . "\n WHERE\n " . $this->subgridConfig->languageTableName() . ".`" . $this->subgridConfig->languageForeignKeyField() . "` = :id\n "; ipDb()->execute($sql, $params); } $callables = $this->subgridConfig->afterDelete(); if ($callables) { if (is_array($callables) && !is_callable($callables)) { foreach ($callables as $callable) { call_user_func($callable, $params['id']); } } else { call_user_func($callables, $params['id']); } } //remove records in child grids foreach ($fields as $field) { $fieldObject = $this->subgridConfig->fieldObject($field); $fieldObject->afterDelete($id, $curData); if ($field['type'] == 'Grid') { $childStatusVariables = Status::genSubgridVariables($this->statusVariables, $field['gridId'], $id); $subActions = new Actions(new Config($field['config']), $childStatusVariables); $childConfig = new Config($field['config']); $db = new Db($childConfig, $childStatusVariables); $where = $db->buildSqlWhere(); $sql = "\n SELECT\n `" . $childConfig->idField() . "`\n FROM\n " . $childConfig->tableName() . "\n WHERE\n {$where}\n "; $idsToDelete = ipDb()->fetchColumn($sql); foreach ($idsToDelete as $idToDelete) { $subActions->delete($idToDelete); } } } }
public function updateForm($id) { $db = new Db($this->subgridConfig, $this->statusVariables); $form = new \Ip\Form(); $form->addAttribute('autocomplete', 'off'); $curData = $db->fetchRow($id); $curDataMultilingual = array(); if ($this->subgridConfig->isMultilingual()) { //fetch multilingual data $languages = ipContent()->getLanguages(); foreach ($languages as $language) { $langDb = new Db($this->subgridConfig, $this->statusVariables); $langDb->setDefaultLanguageCode($language->getCode()); $curDataMultilingual[$language->getCode()] = $langDb->fetchRow($id); } } foreach ($this->subgridConfig->fields() as $key => $fieldData) { if (isset($fieldData['allowUpdate']) && !$fieldData['allowUpdate']) { continue; } if (!empty($fieldData['type']) && $fieldData['type'] == 'Tab') { //tabs (fieldsets) $title = ''; if (!empty($fieldData['label'])) { $title = $fieldData['label']; } if ($key == 0) { $fieldsets = $form->getFieldsets(); $fieldset = $fieldsets[0]; $fieldset->setLabel($title); } else { $fieldset = new \Ip\Form\Fieldset($title); $form->addFieldset($fieldset); } $fieldset->addAttribute('id', 'autoGridTabId' . rand(0, 100000000000)); if ($key == 0) { $fieldset->addAttribute('class', 'tab-pane active'); } else { $fieldset->addAttribute('class', 'tab-pane'); } } else { //fields if (!empty($fieldData['multilingual'])) { $languages = ipContent()->getLanguages(); foreach ($languages as $language) { $tmpFieldData = $fieldData; $field = $this->updateField($tmpFieldData, $curDataMultilingual[$language->getCode()]); $field->setName($field->getName() . '_' . $language->getCode()); if ($field) { $field->setLabel($field->getLabel() . ' ' . $language->getAbbreviation()); $form->addField($field); } } } else { $field = $this->updateField($fieldData, $curData); if ($field) { $form->addField($field); } } } } $field = new \Ip\Form\Field\Hidden(array('name' => $this->subgridConfig->idField(), 'value' => $id)); $form->addField($field); $field = new \Ip\Form\Field\Hidden(array('name' => 'method', 'value' => 'update')); $form->addField($field); $field = new \Ip\Form\Field\HiddenSubmit(); $form->addField($field); if (count($form->getFieldsets()) > 1) { $form->addClass('tab-content'); } if ($this->subgridConfig->updateFormFilter()) { $form = call_user_func($this->subgridConfig->updateFormFilter(), $form); } return $form; }