示例#1
0
<?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) {
示例#2
0
     $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'];
示例#3
0
<?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'];
示例#4
0
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;
}
示例#5
0
文件: stat.php 项目: oduvanio/catalog
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]);
示例#6
0
文件: Xlsx.php 项目: akiyatkin/files
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;
}
示例#7
0
 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;
 }