protected function clear() { $this->dbh->modify(QAL::DELETE, $this->getTableName()); $b = new JSONCustomBuilder(); $b->setProperty('result', true)->setProperty('mode', 'clear'); $this->setBuilder($b); }
/** * Move the record. * Allowed movement: * - above * - below * - top * - bottom * @todo: Пофиксить перемещение в начало списка, т.к. сейчас порядковый номер может выйти меньше 0. Аналогичная ситуация с move above. * @throws SystemException 'ERR_NO_ORDER_COLUMN' */ protected function moveTo() { if (!$this->getOrderColumn()) { //Если не задана колонка для пользовательской сортировки то на выход throw new SystemException('ERR_NO_ORDER_COLUMN', SystemException::ERR_DEVELOPER); } $params = $this->getStateParams(); list($firstItem, $direction) = $params; $allowed_directions = ['first', 'last', 'above', 'below']; if (in_array($direction, $allowed_directions) && $firstItem == intval($firstItem)) { switch ($direction) { // двигаем элемент с id=$firstItem на самый верх case 'first': $oldFirstItem = (int) $this->dbh->getScalar('SELECT MIN(' . $this->getOrderColumn() . ') FROM ' . $this->getTableName() . ' LIMIT 1'); if ($oldFirstItem != $firstItem) { $this->dbh->modify(QAL::UPDATE, $this->getTableName(), [$this->getOrderColumn() => $oldFirstItem - 1], [$this->getPK() => $firstItem]); } break; // двигаем элемент с id=$firstItem в самый низ // двигаем элемент с id=$firstItem в самый низ case 'last': $oldLastItem = (int) $this->dbh->getScalar('SELECT MAX(' . $this->getOrderColumn() . ') FROM ' . $this->getTableName() . ' LIMIT 1'); if ($oldLastItem != $firstItem) { $this->dbh->modify(QAL::UPDATE, $this->getTableName(), [$this->getOrderColumn() => $oldLastItem + 1], [$this->getPK() => $firstItem]); } break; // двигаем элемент выше или ниже id=$secondItem // двигаем элемент выше или ниже id=$secondItem case 'above': case 'below': $secondItem = !empty($params[2]) ? $params[2] : NULL; if ($secondItem == intval($secondItem) && $firstItem != $secondItem) { $secondItemOrderNum = $this->dbh->getScalar('SELECT ' . $this->getOrderColumn() . ' as secondItemOrderNum ' . 'FROM ' . $this->getTableName() . ' ' . 'WHERE ' . $this->getPK() . ' = ' . $secondItem); $this->dbh->beginTransaction(); // сдвигаем все элементы выше или ниже второго id $this->dbh->modify('UPDATE ' . $this->getTableName() . ' ' . 'SET ' . $this->getOrderColumn() . ' = ' . $this->getOrderColumn() . ($direction == 'below' ? ' +2 ' : ' -2 ') . 'WHERE ' . $this->getOrderColumn() . ($direction == 'below' ? ' > ' : ' < ') . intval($secondItemOrderNum)); // устанавливаем новый порядок для первого id $this->dbh->modify(QAL::UPDATE, $this->getTableName(), [$this->getOrderColumn() => $direction == 'below' ? $secondItemOrderNum + 1 : $secondItemOrderNum - 1], [$this->getPK() => $firstItem]); $this->dbh->commit(); } break; } } $b = new JSONCustomBuilder(); $b->setProperty('result', true); $this->setBuilder($b); }
/** * Reset content template. * @note XML content code taken from the file. */ protected function resetTemplates() { $ap = $this->getStateParams(true); $filter = ['smap_id' => $this->document->getID()]; if (isset($ap['site_id'])) { $filter = ['site_id' => $ap['site_id']]; } elseif (isset($ap['smap_id'])) { $filter = ['smap_id' => $ap['smap_id']]; } $smapID = $this->dbh->getColumn($this->getTableName(), ['smap_id'], $filter); $this->dbh->beginTransaction(); if (is_array($smapID) && !empty($smapID)) { $this->dbh->modify(QAL::UPDATE, $this->getTableName(), ['smap_content_xml' => '', 'smap_layout_xml' => ''], ['smap_id' => $smapID]); } $b = new JSONCustomBuilder(); $b->setProperty('result', true); $this->setBuilder($b); $this->dbh->commit(); }