/** * Изменение порядка следования элементов в multi и link элемах * @param $data * @return void */ function changePriority($data) { $page_name = get('page_name', '', 'p'); $elem_name = get('elem_name', '', 'p'); // инициализация элема $elem_object = $this->initElemByParams($page_name, $elem_name); if (is_string($elem_object)) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', $elem_object))); die; } if (!$elem_object->elem_fields['id_field']) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определен параметр id_field"))); die; } // ищем таблицу $table = $elem_object->elem_type == 'multi' ? $elem_object->elem_table : $elem_object->elem_table_link; if (!$table) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определена таблица"))); die; } $id = (int) get('id', 0, 'p'); if (!$id) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Неизвестный параметр: id"))); die; } $direction = get('direction', 0, 'p'); if (!in_array($direction, array(1, -1))) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Неизвестный параметр: direction"))); die; } $tabname = get('tab', '', 'p'); if (!$tabname) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Неизвестный параметр: tabname"))); die; } // Родительский id, внутри которого идет нумерация priority $id_field = $elem_object->elem_type == 'multi' ? 'id' : $elem_object->elem_fields['id2_field']; $pid = (int) sql_getValue("SELECT " . $elem_object->elem_fields['id_field'] . " FROM " . $table . " WHERE " . $id_field . "=" . $id); if (!$pid) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определено значение для " . $elem_object->elem_fields['id_field']))); die; } $priority_field = isset($elem_object->elem_fields['priority_field']) ? $elem_object->elem_fields['priority_field'] : 'priority'; // Исходный приоритет $where = ""; if ($elem_object->elem_type == 'link') { $where = " AND " . $elem_object->elem_fields['id_field'] . "=" . $pid; } $priority = sql_getValue("SELECT " . $priority_field . " FROM " . $table . " WHERE " . $id_field . "=" . $id . $where); if ($priority <= 1 && $direction < 0) { // некуда уменьшать приоритет } elseif ($priority >= sql_getValue("SELECT MAX(" . $priority_field . ") FROM " . $table . " WHERE " . $elem_object->elem_fields['id_field'] . "=" . $pid) && $direction > 0) { // некуда увеличивать приоритет } else { // Получаем id элемента для замены $trg_id = sql_getValue("SELECT " . $id_field . " FROM " . $table . " WHERE " . $priority_field . "=" . ($priority + $direction) . " AND " . $elem_object->elem_fields['id_field'] . "=" . $pid . " AND " . $id_field . "<>" . $id); if (!$trg_id) { // Делаем автонумерацию, если ошибка $this->EnumPriority($pid, $elem_object->elem_fields['id_field'], $table, $id_field, $priority_field); $trg_id = sql_getValue("SELECT " . $id_field . " FROM " . $table . " WHERE " . $priority_field . "=" . $priority . " AND " . $elem_object->elem_fields['id_field'] . "=" . $pid); // Если нумерация не помогла, выдаем ошибку. if (!$trg_id) { echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определено значение для trg_id"))); die; } } // Заменяем priority sql_query("UPDATE " . $table . " SET " . $priority_field . "=" . $priority . " WHERE " . $id_field . "=" . $trg_id . $where); sql_query("UPDATE " . $table . " SET " . $priority_field . "=" . ($priority + $direction) . " WHERE " . $id_field . "=" . $id . $where); } $this->EnumPriority($pid, $elem_object->elem_fields['id_field'], $table, $id_field, $priority_field); //Вызовем обработчик данных таблицы require_once core('table.lib'); $list_table = new List_Table(); $table_columns = $list_table->getAllOptionsParams($elem_object->columns); foreach ($table_columns as $k => $v) { $table_columns[$k]['this'] = $elem_object; $table_columns[$k]['this']->page = $page_name; } $rows = $elem_object->getWCfromDb($pid); foreach ($rows as $k => $v) { $rows[$k]['tabname'] = $tabname; $rows[$k]['onclick'] = $tabname . ".showSelectDiv(" . $v['id'] . ", this);"; } $elem_object->tabname = $tabname; $ret = array(); foreach ($rows as $row) { $tableRows = $list_table->getRowsHtml(array('columns' => $table_columns), array($row), -1, array(), $elem_object); //Получим верстку строк, таблицы $ret[] = array(iconv('windows-1251', 'utf-8', Parse($tableRows + array('id_table_list_name' => 'tbl' . $tabname . $page_name . $pid), 'table_only_rows.tmpl'))); } ob_clean(); echo json_encode(array('ret' => $ret)); die; }