Пример #1
0
 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);
         }
     }
 }
Пример #2
0
 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;
 }