function setHeaders($val) { if ($val && is_array($val)) { $this->headers = array_keys($val); $xml = $this->getXML(); if ($e = $xml->query('headers', $this->getRootElement())->item(0)) { $e->parentNode->removeChild($e); } $h = new taglist($this->getRootElement()->appendChild($xml->createElement('headers')), 'h'); foreach ($val as $id => $val) { $attr = array('name' => $id); $header = is_array($val) ? $val['title'] : $val; if (is_array($val)) { if (isset($val['sort'])) { $attr['sort'] = $val['sort']; } if (isset($val['class'])) { $attr['class'] = $val['class']; } } $h->append($attr, $header); } } }
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; }