<?php $ans = array(); $ans['popup'] = true; if (empty($_REQUEST['email'])) { $conf = infra_config(); return infra_err($ans, $conf['subscribe']['msg']); } if (strlen($_REQUEST['email']) > 1000) { return infra_err($ans, 'Слишком много данных. ' . $conf['subscribe']['msg']); } $email = strip_tags($_REQUEST['email']); $email = trim($email); $email = infra_forFS($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 infra_err($ans, 'Письмо уже отправлено! Новое сообщение можно будет отправить через 1 минуту!'); } $_SESSION['submit_time'] = time(); $data = array('email' => $email, 'agent' => $agent, 'ip' => $ip, 'host' => $_SERVER['HTTP_HOST']); $body = infra_template_parse('*order.tpl', $data); infra_mail_toAdmin('Запрос ' . $data['host'] . ' ' . $email, 'noreplay@' . $data['host'], $body); $dirs = infra_dirs(); $src = $dirs['data'] . '.subscribe.json'; $subs = infra_loadJSON($src); if (!$subs) {
$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 = infra_forFS($value); $id = mb_strtolower($idi); if (!Xlsx::isSpecified($id)) { continue; } $r = true; $params[$k]['option'][$id]['filter']++; } if ($r) { $params[$k]['filter']++; } //Позиций с этим параметром } } //У скольки позиций в выборке у которых этот параметр не указан $params[$k]['nofilter'] = sizeof($poss) - $params[$k]['filter'];
<?php /** * Страница "search" */ namespace itlife\catalog; use itlife\files\Xlsx; $ans = array(); $md = Catalog::initMark($ans); $val = infra_forFS(infra_toutf(strip_tags($_GET['val']))); if ($val) { $md['search'] = $val; } //Временное значение if (isset($_GET['seo'])) { $link = $_GET['seo']; if ($md['group']) { foreach ($md['group'] as $val => $one) { break; } $link = $link . '&m=:group.' . $val . ':1'; } else { if ($md['producer']) { foreach ($md['producer'] as $val => $one) { break; } $link = $link . '&m=:producer.' . $val . ':1'; } else { if ($md['search']) { $val = $md['search'];
function imager_scale($src, $w, $h, $crop = false, $top = false, $bottom = false) { $type = imager_type($src); if (!$type || !$w && !$h) { return file_get_contents($src); } list($width_orig, $height_orig) = getimagesize($src); if (!$height_orig) { return file_get_contents($src); } //Размер который делаем не должен быть больше оригинального //На случай если требуемый размер слишком большой оставляем оригинальный if ($w && $width_orig < $w || !$w) { $w = $width_orig; } if ($h && $height_orig < $h || !$h) { $h = $height_orig; } $dh = 0; $dw = 0; if ($w && $h) { $k = $w / $h; $k_orig = $width_orig / $height_orig; if ($k_orig == $k) { //Не важно.. что уменьшаем пропорции останутся одинаковыми } elseif ($k_orig > $k) { //ширины в оригинале больше чем в требуемом.. с учётом размеров высоты. if (!$crop) { //Значит чтобы ничего не обрезать и быть в рамках меняем ширину а высота и так относительно меньше требуемой $h = false; //Значит высоту нужно высчитать отностительно ширины } else { //Ну а если нужно чтобы указанные размеры были полностью заполнены то ширину надо обрезать и равняться будем уже на высоту $d = $h / $height_orig; //Коэфициент на сколько изменяем оригинальный размер $dw = ($width_orig * $d - $w) / $d; } } else { if (!$crop) { //Значит меняем ширину а высота и так относительно меньше требуемой $w = false; } else { //Ну а если обрезать, то высоту/ Ровняемся на ширину $d = $w / $width_orig; //Коэфициент на сколько изменяем оригинальный размер $dh = ($height_orig * $d - $h) / $d; } } } if (!$w) { $w = $h / $height_orig * $width_orig; } if (!$h) { $h = $w / $width_orig * $height_orig; } $c = $crop && ($dh || $dw) ? ' crop' : ''; $t = $top && $c ? ' top' : ''; $b = $bottom && $c ? ' bottom' : ''; $dir = 'imager_resize/'; $dir = $dir . infra_forFS($src); $src_cache = $dir . '/w' . $w . ' x h' . $h . $c . $t . $b . '.' . $type; $image_p = imagecreatetruecolor($w, $h); $fn = 'imagecreatefrom' . $type; $image = $fn($src); //image_p пустая картинка но нужных размеров //image забрали нужную картинку которую нужно превратить в image_p //echo '<br>w '.$w;echo '<br>width_orig '.$width_orig;echo '<br>k '.$k;echo '<br>k_orig '.$k_orig;echo '<br>d '.$d;echo '<br>dw '.$dw;echo '<br>dh '.$dh;exit; if ($type == 'png') { imagealphablending($image_p, false); imagesavealpha($image_p, true); } if ($type == 'gif') { $colorcount = imagecolorstotal($image); imagetruecolortopalette($image_p, true, $colorcount); imagepalettecopy($image_p, $image); $transparentcolor = imagecolortransparent($image); if ($transparentcolor == -1) { $transparentcolor = 255; } imagefill($image_p, 0, 0, $transparentcolor); imagecolortransparent($image_p, $transparentcolor); } //if($crop&&$top)$dh=0; if ($top) { $fromtop = 0; } elseif ($bottom) { $fromtop = $dh; } else { $fromtop = $dh / 2; } imagecopyresampled($image_p, $image, 0, 0, $dw / 2, $fromtop, $w, $h, $width_orig - $dw, $height_orig - $dh); $fn = 'image' . $type; $quality = 90; if ($type == 'png') { $quality = 2; } ob_start(); $fn($image_p, null, $quality); $data = ob_get_contents(); ob_end_clean(); imagedestroy($image); imagedestroy($image_p); return $data; }
if (!$data) { $data = array('users' => array(), 'cat_id' => 0, 'time' => time()); //100 10 user list array('val'=>$val,'time'=>time()) } if (!$submit) { $conf = infra_config(); $ans['text'] = infra_loadTEXT('*files/get.php?' + $conf['catalog']['dir'] . '/articals/stat'); $ans['stat'] = $data; return infra_ret($ans); } $val = strip_tags(@$_GET['val']); if (!$val) { return infra_err($ans, 'Incorrect parameters'); } infra_cache_no(); $val = infra_forFS($val); $val = infra_toutf($val); $id = infra_view_getCookie('cat_id'); $time = infra_view_getCookie('cat_time'); if (!$time || !$id || $time != $data['time']) { $id = ++$data['cat_id']; infra_view_setCookie('cat_id', $id); infra_view_setCookie('cat_time', $data['time']); } $ans['cat_id'] = $id; $ans['cat_time'] = $time; $user = array('cat_id' => $id, 'list' => array(), 'time' => time()); foreach ($data['users'] as $k => $v) { if ($v['cat_id'] == $id) { $user = $v; unset($data['users'][$k]);
function &xls_init($path, $config = array()) { //Возвращает полностью гототовый массив //if(infra_isAssoc($path)===true)return $path;//Это если переданы уже готовые данные вместо адреса до файла данных $parent = false; $ar = array(); $isonefile = true; infra_fora($path, function ($path) use(&$isonefile, &$ar) { $p = infra_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 = infra_nameinfo($file); if (in_array($fd['ext'], array('xls', 'xlsx'))) { $ar[] = $path . infra_toutf($file); } }, scandir($p)); } }); if (!@$config['root']) { if ($isonefile) { $d = infra_srcinfo($isonefile); $config['root'] = infra_toutf($d['name']); } else { $config['root'] = 'Каталог'; } } $data = _xls_createGroup($config['root'], $parent, 'set'); //Сделали группу в которую объединяются все остальные $data['miss'] = true; //Если в группе будет только одна подгруппа она удалится... подгруппа поднимится на уровень выше infra_forr($ar, function &($path) use(&$data) { $d =& xls_make($path); if (!$d) { return; } $d['parent'] =& $data; $data['childs'][] =& $d; $r = null; return $r; }); xls_processDescr($data); if (!isset($config['Сохранить head'])) { $config['Сохранить head'] = false; } xls_processPoss($data, $config['Сохранить head']); if (@(!is_array($config['Переименовать колонки']))) { $config['Переименовать колонки'] = array(); } if (@(!is_array($config['Удалить колонки']))) { $config['Удалить колонки'] = array(); } if (!isset($config['more'])) { $config['more'] = false; } xls_runPoss($data, function (&$pos) use(&$config) { 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]); } } }); if (!isset($config['Имя файла'])) { $config['Имя файла'] = 'Производитель'; } //Группа остаётся, а производитель попадает в описание каждой позиции if (@$config['Имя файла'] == 'Производитель') { xls_processClass($data, 'Производитель', true); } //Должен быть обязательно miss раставляется xls_runPoss($data, function (&$pos, $i, &$group) { // пустая позиция if (sizeof($pos) == 2) { //group_title Производитель unset($group['data'][$i]); return; } }); xls_processGroupFilter($data); //Объединяются группы с одинаковым именем, Удаляются пустые группы xls_processGroupMiss($data); //Группы miss(производители) расформировываются //xls_processGroupCalculate($data);//Добавляются свойства count groups сколько позиций и групп группы должны быть уже определены... почищены... xls_runGroups($data, function (&$gr, $i, &$parent) { //Имя листа или файла короткое и настоящие имя группы прячется в descr. но имя листа или файла также остаётся в title $gr['name'] = $gr['descr']['Наименование']; //name крутое правильное Наименование группы if (!$gr['name']) { $gr['name'] = $gr['title']; } //title то как называется файл или какое имя используется в адресной строке if (!$gr['tparam']) { $gr['tparam'] = $parent['tparam']; } //tparam наследуется Оборудование:что-то, что-то if ($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'] = infra_forFS($gr['descr']['Производитель']); } } }); 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) { if (empty($group['data'])) { return; } 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']); }); 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 ($group['descr']['Наименование']) { $group['Группа'] = $group['descr']['Наименование']; } else { $group['Группа'] = $group['title']; } }); xls_runPoss($data, function (&$pos, $i, $group) { $pos['group'] = $group['title']; $pos['Группа'] = $group['Группа']; }); if (!@$config['Ссылка parent']) { xls_runGroups($data, function (&$group) { unset($group['parent']); }); xls_runPoss($data, function (&$pos, $i) { unset($pos['parent']); }); } xls_runGroups($data, function (&$data, $i, &$group) { //path if (!$group) { $data['path'] = array(); } else { $data['path'] = $group['path']; $data['path'][] = $data['title']; } }); xls_runPoss($data, function (&$pos, $i, &$group) { $pos['path'] = $group['path']; }); return $data; }
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' => infra_seq_short(array('more', Catalog::urlencode($prop['mdid'])))); $poss = array_filter($poss, function ($pos) use($prop, $val, &$valtitles) { foreach ($val as $value => $one) { if ($value === 'yes' && Xlsx::isSpecified($option)) { return true; } if ($value === 'no' && !Xlsx::isSpecified($option)) { return true; } $option = $pos['more'][$prop['posid']]; $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 = infra_forFS($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' => infra_seq_short(array(Catalog::urlencode($prop['mdid'])))); $poss = array_filter($poss, function ($pos) use($prop, $val, &$valtitles) { foreach ($val as $value => $one) { if ($value === 'yes' && Xlsx::isSpecified($prop)) { return true; } if ($value === 'no' && !Xlsx::isSpecified($prop)) { return true; } $option = $pos[$prop['posid']]; $titles = $pos[$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 = infra_forFS($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' => infra_seq_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'])); $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; }