function move($val, $pos) { $id = null; if (is_object($val)) { if ($val instanceof module) { $id = $val->getId(); } } else { $id = $val; } if ($id) { parent::move(parent::getById($id), $pos); } }
function removeRow($id) { if ($id && ($e = parent::getById($id))) { $this->remove($e); } }
function onMove() { if (($row = $this->getRow()) && ($pos = param('pos')) && ($sec = ap::getClientSection($this->getSection()->getId())) && ($tl = new taglist($sec->getElement(), 'sec')) && $tl->move($tl->getById($row), $pos)) { $tl->getXML()->save(); return true; } }
function initImages($form, $isUpdate) { $formFields = $form->getFields('@type="image"'); $values = array(); foreach ($formFields as $ff) { //форматы картинок $formats = array(); $res = $ff->query('param'); foreach ($res as $param) { $formats[] = $param->parentNode->removeChild($param); } //получаем тэг со списком картинок, создаем объект списка $scheme = new xmlScheme(); $scheme->add($ff->getURI() . '/@name', $ff->getName()); $scheme->save(); if (($n = $scheme->getNode($ff->getURI())) && $n instanceof DOMElement) { $tl = new taglist($n, 'img'); //добавляем новые Images $arNewImages = array(); if ($isUpdate && isset($_REQUEST[$fieldName = $ff->getName() . '___new']) && is_array($_REQUEST[$fieldName])) { $fieldNameTitle = 'title_' . $fieldName; foreach ($_REQUEST[$fieldName] as $j => $src) { if (file_exists($path = $_SERVER['DOCUMENT_ROOT'] . $src)) { //делаем id $i = 1; while ($tl->getById($id = "i{$i}")) { $i++; } $arImg = array(); $arPrev = array(); //добавляем поля в форму $values[$name = $ff->getName() . '_IMAGE_ID_' . $id] = $src; foreach ($formats as $param) { $e = $ff->getRootElement()->appendChild($param->cloneNode(true)); $e->setAttribute('name', $name); $e->setAttribute('uri', str_replace('%IMG_NAME%', $this->getGalleryImageName($id), $e->getAttribute('uri'))); if ($param->hasAttribute('preview')) { $arPrev[] = $e; } else { $arImg[] = $e; } } if (count($arImg) && ($src_rel = $ff->getImagePath(form::getURI($arImg[0])))) { //добавляем в XML список картинок if (strpos($src_rel, PATH_ROOT) === 0) { $src_rel = substr($src_rel, strlen(PATH_ROOT)); } $arNewImages[$id] = $tl->append(array('id' => $id, 'src' => $src_rel)); //превью if (count($arPrev) && ($src_rel = $ff->getImagePath(form::getURI($arPrev[0])))) { if (strpos($src_rel, PATH_ROOT) === 0) { $src_rel = substr($src_rel, strlen(PATH_ROOT)); } $arNewImages[$id]->appendChild($tl->getXML()->createElement('preview', array('src' => $src_rel))); } if (isset($_REQUEST[$fieldNameTitle]) && isset($_REQUEST[$fieldNameTitle][$j]) && $_REQUEST[$fieldNameTitle][$j]) { $arNewImages[$id]->setAttribute('title', mb_substr($_REQUEST[$fieldNameTitle][$j], 0, 127)); } } } } } //заполняем форму текущими картинками $rowsToDelete = array(); foreach ($tl as $img) { $fieldName = $ff->getName() . '_IMAGE_ID_' . $img->getAttribute('id'); if ($isUpdate && !isset($_REQUEST[$ff->getName()][$fieldName]) && !isset($arNewImages[$img->getAttribute('id')])) { //определяем Images для удаления $values[$fieldName] = jpgScheme::VALUE_DELETE; $rowsToDelete[] = $img; } foreach ($formats as $param) { if (!$isUpdate && !$param->hasAttribute('preview')) { continue; } $e = $ff->getRootElement()->appendChild($param->cloneNode(true)); $e->setAttribute('name', $fieldName); $e->setAttribute('uri', str_replace('%IMG_NAME%', $this->getGalleryImageName($img->getAttribute('id')), $e->getAttribute('uri'))); if (!$isUpdate && $img->hasAttribute('title')) { $e->setAttribute('title', $img->getAttribute('title')); } } } //обновляем данные if ($isUpdate) { //удаляем foreach ($rowsToDelete as $e) { $e->parentNode->removeChild($e); } //обновляем тайтлы if (isset($_REQUEST[$fieldNameTitle = 'title_' . $ff->getName()]) && is_array($_REQUEST[$fieldNameTitle])) { foreach ($_REQUEST[$fieldNameTitle] as $str => $title) { if (preg_match('/' . $ff->getName() . '_IMAGE_ID_(i[0-9]+)/', $str, $m) && ($e = $tl->getById($m[1]))) { if ($title) { $e->setAttribute('title', $title); } else { $e->removeAttribute('title'); } } } } //пересортировываем $sortOrder = isset($_REQUEST[$ff->getName() . '_sort_order']) ? explode(',', $_REQUEST[$ff->getName() . '_sort_order']) : array(); foreach ($sortOrder as $i => $str) { if (preg_match('/id(i[0-9]+)/', $str, $m) && ($e = $tl->getById($m[1]))) { $tl->move($e, $i + 1); } elseif (preg_match('/new[0-9]+/', $str) && ($e = array_shift($arNewImages))) { $tl->move($e, $i + 1); } } } $tl->getXML()->save(); } $ff->getRootElement()->setAttribute('target', $ff->getURI()); $ff->getRootElement()->removeAttribute('uri'); } return $values; }