/** * Кэширумеая функция, основной разбор. */ public static function parse($src) { $args = array($src); $param = Cache::exec(array($src), 'docx_parse', function ($src, $re) { $conf = Docx::$conf; $imgmaxwidth = $conf['imgmaxwidth']; $previewlen = $conf['previewlen']; $cachename = Path::tofs(Path::encode($src)); $cacheFolder = Path::mkdir(Docx::$conf['cache'] . $cachename . '/'); //В винде ингда вылетает о шибка что нет прав удалить какой-то файл в папке и как следствие саму папку //Обновление страницы проходит уже нормально //Полагаю в линукс такой ошибки не будет хз почему возникает Cache::fullrmdir($cacheFolder); $path = Path::theme($src); if (!$path) { return array('html' => false); } $xmls = docx_getTextFromZippedXML($path, 'word/document.xml', $cacheFolder, $re); $rIds = array(); $param = array('folder' => $cacheFolder, 'imgmaxwidth' => $imgmaxwidth, 'previewlen' => $previewlen, 'rIds' => $rIds); if ($xmls[0]) { $xmlar = docx_dom_to_array($xmls[0]); $xmlar2 = docx_dom_to_array($xmls[1]); foreach ($xmlar2['Relationships']['Relationship'] as $v) { $rIds[$v['Id']] = $v['Target']; } $param['rIds'] = $rIds; $html = docx_each($xmlar, '\\infrajs\\doc\\docx_analyse', $param); } else { $param['rIds'] = array(); $html = ''; } $param['html'] = $html; return $param; }, $args, isset($_GET['re'])); unset($param['rIds']); unset($param['type']); unset($param['imgmaxwidth']); unset($param['previewlen']); unset($param['isli']); unset($param['isul']); unset($param['imgnum']); unset($param['folder']); return $param; }
public static function delete($key) { $conf = static::$conf; $mem =& static::memcache(); if ($mem) { $r = $mem->delete($key); } else { $conf = static::$conf; $key = Path::encode($key); $dir = Path::theme($conf['cache']); if (!$dir) { echo '<pre>'; throw new \Exception('Not found dir for cache "' . $conf['cache'] . '"'); } if (!Path::$conf['fs']) { echo '<pre>'; throw new \Exception('Filesystem protected by Path::$conf[fs]=false set it on true'); } $r = @unlink($dir . $key . '.ser'); } return $r; }
//is!, descr!, text!, name!, breadcrumbs! $ans['is'] = 'producer'; $name = Catalog::getProducer($producer); $ans['name'] = $name; $ans['title'] = $name; $conf = Config::get('catalog'); $ans['breadcrumbs'][] = array('title' => $conf['title'], 'add' => 'producer:'); $menu = Load::loadJSON('-catalog/menu.json'); $ans['breadcrumbs'][] = array('href' => 'producers', 'title' => $menu['producers']['title']); $ans['breadcrumbs'][] = array('add' => 'producer::producer.' . $name . '=1', 'title' => $name); $ans['breadcrumbs'][sizeof($ans['breadcrumbs']) - 1]['active'] = true; } else { if (!$md['group'] && $md['search']) { $ans['is'] = 'search'; $ans['name'] = $md['search']; $ans['title'] = Path::encode($md['search']); $ans['breadcrumbs'][] = array('title' => $conf['title'], 'add' => 'search:'); $menu = Load::loadJSON('-catalog/menu.json'); $ans['breadcrumbs'][] = array('href' => 'find', 'title' => $menu['find']['title']); $ans['breadcrumbs'][] = array('title' => $ans['name']); $ans['breadcrumbs'][sizeof($ans['breadcrumbs']) - 1]['active'] = true; } else { //is!, descr!, text!, name!, breadcrumbs!, title if ($md['group']) { foreach ($md['group'] as $group => $v) { break; } } else { $group = false; } $group = Catalog::getGroup($group);
$mdata['testmail'] = true; } else { $mdata['testmail'] = false; session_start(); if (empty($_SESSION['submit_time'])) { $_SESSION['submit_time'] = 0; } if (time() - $_SESSION['submit_time'] < 60) { return Ans::err($ans, 'Письмо уже отправлено! Новое сообщение можно будет отправить через 1 минуту!'); } $_SESSION['submit_time'] = time(); } $ans['testmail'] = $mdata['testmail']; if ($maildir) { $folder = Path::theme($maildir); $name = Path::tofs(Path::encode($data['name'])); $fname = date('Y F j H-i') . ' ' . $name . ' ' . time(); if ($conf['file'] && $file) { $src = $folder . $fname . '.' . Path::tofs($file['name']); $r = move_uploaded_file($file['tmp_name'], $src); if (!$r) { return Ans::err($ans, 'Неудалось загрузить файл'); } $data['file'] = Path::toutf(Path::pretty($src)); } } $body = Template::parse('-contacts/mail.tpl', $data); if (!$body) { $body = 'Ошибка. Не найден шаблон письма!'; } if ($maildir) {
$poss = $res['list']; foreach ($poss as &$pos) { if (preg_match("/[:]/", $pos[$prop['posid']])) { continue; } if (!Xlsx::isSpecified($pos[$prop['posid']])) { continue; } $r = false; if ($prop['separator']) { $arval = explode($prop['separator'], $pos[$prop['posid']]); } else { $arval = array($pos[$prop['posid']]); } foreach ($arval as $i => $value) { $idi = Path::encode($value); $id = mb_strtolower($idi); if (!Xlsx::isSpecified($id)) { continue; } $r = true; $params[$k]['option'][$idi]['filter']++; } if ($r) { $params[$k]['filter']++; } //Позиций с этим параметром } } //У скольки позиций в выборке у которых этот параметр не указан $params[$k]['nofilter'] = sizeof($poss) - $params[$k]['filter'];
//новый src уже на серую картинку } $data = Imager::scale($src, $w, $h, $crop, $top); if (!$data) { die('Resize Error'); } if ($type == 'png') { $data = Imager::optipng($data, md5($src . $w . $h . $crop . $top)); if (!$data) { die('Optipng Error'); } } $br = infra_imager_browser(); $name = preg_replace("/(.*\\/)*/", '', $isrc); if (!$name) { $name = Path::encode($isrc); } $name = Imager::toutf($name); if (!preg_match('/ff/', $br)) { $name = rawurlencode($name); } if (preg_match('/ie6/', $br)) { $name = preg_replace("/\\s/", '%20', $name); } if (!$type) { $type = 'image/jpeg'; } $ans = array('name' => $name, 'type' => $type); //return $data; //}, $args, isset($_GET['re'])); //)
function &xls_init($path, $config = array()) { //Возвращает полностью гототовый массив //if(Each::isAssoc($path)===true)return $path;//Это если переданы уже готовые данные вместо адреса до файла данных $parent = false; $ar = array(); $isonefile = true; Each::exec($path, function &($path) use(&$isonefile, &$ar) { $p = Path::theme($path); if ($p && !is_dir($p)) { if ($isonefile === true) { $isonefile = $p; } else { $isonefile = false; } $ar[] = $path; } elseif ($p) { $isonefile = false; array_map(function ($file) use(&$ar, $p, $path) { if ($file[0] == '.') { return; } $fd = Load::nameInfo($file); if (in_array($fd['ext'], array('xls', 'xlsx'))) { $ar[] = $path . Path::toutf($file); } }, scandir($p)); } $r = null; return $r; }); if (empty($config['root'])) { if ($isonefile) { $d = Load::srcInfo($isonefile); $config['root'] = Path::toutf($d['name']); } else { $config['root'] = 'Каталог'; } } $data = _xls_createGroup($config['root'], $parent, 'set'); //Сделали группу в которую объединяются все остальные $data['miss'] = true; //Если в группе будет только одна подгруппа она удалится... подгруппа поднимится на уровень выше Each::forr($ar, function &($path) use(&$data) { $d =& xls_make($path); if (!$d) { return; } $d['parent'] =& $data; $data['childs'][] =& $d; $r = null; return $r; }); //Реверс записей на листе foreach ($data['childs'] as $book => $v) { foreach ($data['childs'][$book]['childs'] as $list => $vv) { $data['childs'][$book]['childs'][$list]['data'] = array_reverse($data['childs'][$book]['childs'][$list]['data']); } } xls_processDescr($data); if (!isset($config['Сохранить head'])) { $config['Сохранить head'] = false; } xls_processPoss($data, $config['Сохранить head']); if (!isset($config['Переименовать колонки'])) { $config['Переименовать колонки'] = array(); } if (!isset($config['Удалить колонки'])) { $config['Удалить колонки'] = array(); } if (!isset($config['more'])) { $config['more'] = false; } xls_runPoss($data, function &(&$pos) use(&$config) { $r = null; foreach ($config['Удалить колонки'] as $k) { if (isset($pos[$k])) { unset($pos[$k]); } } foreach ($config['Переименовать колонки'] as $k => $v) { if (isset($pos[$k])) { $pos[$v] = $pos[$k]; unset($pos[$k]); } } return $r; }); if (!isset($config['Имя файла'])) { $config['Имя файла'] = 'Производитель'; } //Группа остаётся, а производитель попадает в описание каждой позиции if ($config['Имя файла'] == 'Производитель') { xls_processClass($data, 'Производитель', true); } //Должен быть обязательно miss раставляется xls_runPoss($data, function &(&$pos, $i, &$group) { // пустая позиция $r = null; if (sizeof($pos) == 2) { //group_title Производитель unset($group['data'][$i]); return $r; } return $r; }); xls_processGroupFilter($data); //Объединяются группы с одинаковым именем, Удаляются пустые группы xls_processGroupMiss($data); //Группы miss(производители) расформировываются //xls_processGroupCalculate($data);//Добавляются свойства count groups сколько позиций и групп группы должны быть уже определены... почищены... xls_runGroups($data, function &(&$gr, $i, &$parent) { //Имя листа или файла короткое и настоящие имя группы прячется в descr. но имя листа или файла также остаётся в title if (!empty($gr['descr']['Наименование'])) { $gr['name'] = $gr['descr']['Наименование']; //name крутое правильное Наименование группы } if (empty($gr['name'])) { $gr['name'] = $gr['title']; } //title то как называется файл или какое имя используется в адресной строке if (empty($gr['tparam'])) { $gr['tparam'] = $parent['tparam']; } //tparam наследуется Оборудование:что-то, что-то if (!empty($gr['descr']['Производитель'])) { for ($i = 0, $il = sizeof($gr['data']); $i < $il; ++$i) { if (!empty($gr['data'][$i]['Производитель'])) { continue; } $gr['data'][$i]['Производитель'] = $gr['descr']['Производитель']; $gr['data'][$i]['producer'] = Path::encode($gr['descr']['Производитель']); } } $r = null; return $r; }); if (@(!is_array($config['Подготовить для адреса']))) { $config['Подготовить для адреса'] = array('Артикул' => 'article', 'Производитель' => 'producer'); } xls_processPossFS($data, $config['Подготовить для адреса']); //Заменяем левые символы в свойстве if (empty($config['Обязательные колонки'])) { $config['Обязательные колонки'] = array('article', 'producer'); } xls_runGroups($data, function &(&$group) use($config) { $r = null; if (empty($group['data'])) { return $r; } for ($i = 0, $l = sizeof($group['data']); $i < $l; ++$i) { foreach ($config['Обязательные колонки'] as $propneed) { if (empty($group['data'][$i][$propneed])) { unset($group['data'][$i]); break; } } } $group['data'] = array_values($group['data']); return $r; }); if (@(!$config['Известные колонки'])) { $config['Известные колонки'] = array('Производитель', 'Наименование', 'Описание', 'Артикул'); } $config['Известные колонки'][] = 'parent'; foreach ($config['Подготовить для адреса'] as $k => $v) { $config['Известные колонки'][] = $v; $config['Известные колонки'][] = $k; } if (@$config['more']) { xls_processPossMore($data, $config['Известные колонки']); //позициям + more } xls_runGroups($data, function &(&$group) { $group['group'] = $group['parent']['title']; if (!empty($group['descr']['Наименование'])) { $group['Группа'] = $group['descr']['Наименование']; } else { $group['Группа'] = $group['title']; } $r = null; return $r; }); xls_runPoss($data, function &(&$pos, $i, $group) { $r = null; $pos['group'] = $group['title']; $pos['Группа'] = $group['Группа']; return $r; }); if (empty($config['Ссылка parent'])) { xls_runGroups($data, function &(&$group) { $r = null; unset($group['parent']); return $r; }); xls_runPoss($data, function &(&$pos, $i) { $r = null; unset($pos['parent']); return $r; }); } xls_runGroups($data, function &(&$data, $i, &$group) { //path $r = null; if (!$group) { $data['path'] = array(); } else { $data['path'] = $group['path']; $data['path'][] = $data['title']; } return $r; }); xls_runPoss($data, function &(&$pos, $i, &$group) { $r = null; $pos['path'] = $group['path']; return $r; }); return $data; }
public static function remote($src) { $conf = static::$conf; $t = $conf['remotecachehour']; $dir = $conf['cache'] . 'remote/'; $dir = Path::theme($dir); if (!$dir) { die('Not Found ' . $conf['cache'] . 'remote/'); } $esrc = $dir . Path::encode($src); $remotecache = Path::theme($esrc); if ($remotecache && !isset($_GET['re'])) { $cachetime = filemtime($remotecache); $now = time(); if ($now - $t * 60 * 60 < $cachetime) { return $esrc; } } $filecontent = file_get_contents($src); file_put_contents($esrc, $filecontent); return $esrc; }
public static function filtering(&$poss, $md) { if (!sizeof($poss)) { return; } $params = Catalog::getParams(); $filters = array(); foreach ($params as $prop) { if ($prop['more']) { if (empty($md['more'])) { continue; } //Filter more if (empty($md['more'][$prop['mdid']])) { continue; } //Filter more $valtitles = array(); $val = $md['more'][$prop['mdid']]; foreach ($val as $value => $one) { $valtitles[$value] = $value; } $filter = array('title' => $prop['title'], 'name' => Sequence::short(array('more', Catalog::urlencode($prop['mdid'])))); $poss = array_filter($poss, function ($pos) use($prop, $val, &$valtitles) { foreach ($val as $value => $one) { $option = $pos['more'][$prop['posid']]; if ($value === 'yes' && Xlsx::isSpecified($option)) { return true; } if ($value === 'no' && !Xlsx::isSpecified($option)) { return true; } $titles = $pos['more'][$prop['posname']]; if ($prop['separator']) { $option = explode($prop['separator'], $option); $titles = explode($prop['separator'], $titles); } else { $option = array($option); $titles = array($titles); } foreach ($option as $k => $opt) { $id = Path::encode($opt); if (strcasecmp($value, $id) == 0) { $valtitles[$value] = $titles[$k]; return true; } } } return false; }); if ($val['no']) { unset($val['no']); $val['Не указано'] = 1; } if ($val['yes']) { unset($val['yes']); $val['Указано'] = 1; } $filter['value'] = implode(', ', array_values($valtitles)); $filters[] = $filter; } else { if (empty($md[$prop['mdid']])) { continue; } $valtitles = array(); $val = $md[$prop['mdid']]; foreach ($val as $value => $one) { $valtitles[$value] = $value; } $filter = array('title' => $prop['title'], 'name' => Sequence::short(array(Catalog::urlencode($prop['mdid'])))); $poss = array_filter($poss, function ($pos) use($prop, $val, &$valtitles) { foreach ($val as $value => $one) { $option = $pos[$prop['posid']]; $titles = $pos[$prop['posname']]; if ($value === 'yes' && Xlsx::isSpecified($option)) { return true; } if ($value === 'no' && !Xlsx::isSpecified($option)) { return true; } if ($prop['separator']) { $option = explode($prop['separator'], $option); $titles = explode($prop['separator'], $titles); } else { $option = array($option); $titles = array($titles); } foreach ($option as $k => $opt) { $id = Path::encode($opt); if (strcasecmp($value, $id) == 0) { $valtitles[$value] = $titles[$k]; return true; } } } return false; }); if ($val['no']) { unset($val['no']); $val['Не указано'] = 1; } if ($val['yes']) { unset($val['yes']); $val['Указано'] = 1; } $filter['value'] = implode(', ', array_values($valtitles)); $filters[] = $filter; } } //Filter group $key = 'group'; if (!empty($md[$key])) { $title = 'Группа'; $val = $md[$key]; $filter = array('title' => $title, 'name' => Sequence::short(array(Catalog::urlencode($key)))); $poss = array_filter($poss, function ($pos) use($key, $val) { $prop = $pos[$key]; foreach ($val as $value => $one) { if ($value === 'yes') { return true; } foreach ($pos['path'] as $path) { if ((string) $value === $path) { return true; } } } return false; }); if ($val['no']) { unset($val['no']); $val['Не указано'] = 1; } if ($val['yes']) { unset($val['yes']); $val['Указано'] = 1; } $filter['value'] = implode(', ', array_keys($val)); if ($md['search']) { $filters[] = $filter; } } //Filter search if (!empty($md['search'])) { $v = preg_split("/\\s+/", mb_strtolower($md['search'])); foreach ($v as $i => $s) { $v[$i] = preg_replace("/ы\$/", "", $s); } $poss = array_filter($poss, function ($pos) use($v) { return Catalog::searchTest($pos, $v); }); $filters[] = array('title' => 'Поиск', 'name' => 'search', 'value' => $md['search']); } //Extend::filtering($poss, $md, $filters); return $filters; }
use infrajs\load\Load; use infrajs\access\Access; use infrajs\template\Template; use infrajs\mail\Mail; $ans = array(); $ans['popup'] = true; $conf = Config::get('subscribe'); if (empty($_REQUEST['email'])) { return Ans::err($ans, $conf['msg']); } if (strlen($_REQUEST['email']) > 1000) { return Ans::err($ans, 'Слишком много данных. ' . $conf['msg']); } $email = strip_tags($_REQUEST['email']); $email = trim($email); $email = Path::encode($email); $agent = $_SERVER['HTTP_USER_AGENT']; $ip = $_SERVER['REMOTE_ADDR']; session_start(); if (empty($_SESSION['submit_time'])) { $_SESSION['submit_time'] = 0; } if (time() - $_SESSION['submit_time'] < 60) { return Ans::err($ans, 'Письмо уже отправлено! Новое сообщение можно будет отправить через 1 минуту!'); } $_SESSION['submit_time'] = time(); $data = array('email' => $email, 'agent' => $agent, 'ip' => $ip, 'host' => $_SERVER['HTTP_HOST']); $body = Template::parse('-subscribe/subscribe.mail.tpl', $data); Mail::toAdmin('Запрос ' . $data['host'] . ' ' . $email, 'noreplay@' . $data['host'], $body); $src = Path::resolve('~.subscribe.json'); $subs = Load::loadJSON($src);