public static function parse($data) { $gid = 0; $pid = 0; $groups = array(); $poss = array(); $conf = static::$conf; if (!$conf['name']) { throw new \Exception('В конфиге yml требуется указать name. Наименование компании без организационный формы'); } if (!$conf['company']) { throw new \Exception('В конфиге yml требуется указать company, название компании с организационной формой ООО'); } Xlsx::runPoss($data, function (&$pos) { $pos['Описание'] = Yml::tostr($pos['Описание']); }); Xlsx::runGroups($data, function (&$group, $i, &$parent) use(&$gid, &$groups) { $group['id'] = ++$gid; if ($parent) { $group['parentId'] = $parent['id']; } $groups[] =& $group; }); Xlsx::runPoss($data, function (&$pos, $i, &$group) use(&$pid, &$poss) { $pos['id'] = ++$pid; $pos['categoryId'] = $group['id']; $poss[] =& $pos; }); $d = array("conf" => $conf, "support" => Access::$conf["admin"]["support"], "site" => View::getPath(), "poss" => $poss, "groups" => $groups); $html = Template::parse('-yml/yml.tpl', $d); return $html; }
public function check(&$layer) { if (!empty($layer['seojsontpl'])) { $layer['seojson'] = Template::parse(array($layer['seojsontpl']), $layer); } if (empty($layer['seojson'])) { return; } $item = self::load($layer['seojson']); if (!$item) { return; } $html = View::html(); if (!empty($item['image_src'])) { self::meta($html, $item, 'link', 'image_src'); self::meta($html, $item, 'property', 'og:image', $item['image_src']); self::meta($html, $item, 'name', 'twitter:image', $item['image_src']); //self::meta($html, $item, 'itemprop', 'image', $item['image_src']); } if (!empty($item['canonical'])) { self::meta($html, $item, 'link', 'canonical'); self::meta($html, $item, 'name', 'twitter:site', $item['canonical']); self::meta($html, $item, 'property', 'og:url', $item['canonical']); //self::meta($html, $item, 'property', 'business:contact_data:website', $item['canonical']); } if (!empty($item['description'])) { self::meta($html, $item, 'name', 'description'); self::meta($html, $item, 'property', 'og:description', $item['description']); self::meta($html, $item, 'name', 'twitter:description', $item['description']); } self::meta($html, $item, 'name', 'keywords'); if (!empty($item['title'])) { self::meta($html, $item, 'title', 'title'); self::meta($html, $item, 'property', 'og:title', $item['title']); self::meta($html, $item, 'name', 'twitter:title', $item['title']); } if (!empty($item['site_name'])) { self::meta($html, $item, 'property', 'site_name'); self::meta($html, $item, 'itemprop', 'name', $item['site_name']); self::meta($html, $item, 'property', 'og:site_name', $item['site_name']); } if (!empty($item['properties'])) { foreach ($item['properties'] as $k => $v) { self::meta($html, $item['properties'], 'property', $k); } } if (!empty($item['names'])) { foreach ($item['names'] as $k => $v) { self::meta($html, $item['names'], 'name', $k); } } if (!empty($item['itemprops'])) { foreach ($item['itemprops'] as $k => $v) { self::meta($html, $item['itemprops'], 'itemprop', $k); } } View::html($html, true); }
public static function check(&$layer) { if (!isset($layer['css'])) { return; } if (static::$ready[$css]) { return; } Each::fora($layer['css'], function ($css) use(&$layer) { Css::$ready[$css] = true; $code = Load::loadTEXT($css); View::html('<style>' . $code . '</style>', $layer['div']); $r = null; return $r; }); }
public static function check(&$layers) { static::$layers =& $layers; //Пробежка по слоям Event::tik('Infrajs'); Event::tik('layer'); Event::fire('Infrajs.oninit'); //сборка событий Run::exec(static::$layers, function &(&$layer, &$parent) { //Запускается у всех слоёв в работе $r = null; if ($parent) { $layer['parent'] =& $parent; } Event::fire('layer.oninit', $layer); if (!Event::fire('layer.ischeck', $layer)) { return $r; } Event::fire('layer.oncheck', $layer); return $r; }); //разрыв нужен для того чтобы можно было наперёд определить показывается слой или нет. oncheck у всех. а потом по порядку. Event::fire('oncheck'); //момент когда доступны слои по getUnickLayer Run::exec(static::$layers, function &(&$layer) { //С чего вдруг oncheck у всех слоёв.. надо только у активных $r = null; if (Event::fire('layer.isshow', $layer)) { //Событие в котором вставляется html Event::fire('layer.onshow', $layer); //при клике делается отметка в конфиге слоя и слой парсится... в oncheck будут подстановки tpl и isRest вернёт false //onchange показанный слой не реагирует на изменение адресной строки, нельзя привязывать динамику интерфейса к адресной строке, только черещ перепарсивание } return $r; }); //у родительского слоя showed будет реальное а не старое Event::fire('Infrajs.onshow'); //loader, setA, seo добавить в html, можно зациклить check $html = View::html(); //View::html('',true); return $html; }
/** * Access::admin(true) - пропускает только если ты администратор, иначе выкидывает окно авторизации * Access::admin(false) - пропускает только если ты НЕ администратор, иначе выкидывает окно авторизации * $ans выводится в json если нажать отмена * Access::admin(array('login','pass'));. */ public static function admin($break = null, $ans = array('msg' => 'Требуется авторизация', 'result' => 0)) { $data = static::$conf['admin']; $_ADM_NAME = $data['login']; $_ADM_PASS = $data['password']; $admin = null; //Неизвестно $realkey = md5($_ADM_NAME . $_ADM_PASS . $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']); if (is_array($break)) { Nostore::on(); //Если имя в конфиге указано, и переданные данные в массиве соответствуют $admin = $_ADM_NAME && $break[0] === $_ADM_NAME && $break[1] === $_ADM_PASS; if ($admin) { View::setCookie('infra_admin', $realkey); } else { View::setCookie('infra_admin'); } } else { $key = View::getCookie('infra_admin'); $admin = $key === $realkey; if ($break === false) { Nostore::on(); View::setCookie('infra_admin'); $admin = false; } elseif ($break === true && !$admin) { Nostore::on(); //Если имя в конфиге указано, и переданные данные по HTTP соответствуют $admin = $_ADM_NAME && @$_SERVER['PHP_AUTH_USER'] == $_ADM_NAME && @$_SERVER['PHP_AUTH_PW'] == $_ADM_PASS; if ($admin) { View::setCookie('infra_admin', $realkey); } else { header('WWW-Authenticate: Basic realm="Protected Area"'); header('HTTP/1.0 401 Unauthorized'); echo json_encode($ans); exit; } } } return $admin; }
<?php namespace infrajs\ascroll; use infrajs\event\Event; use infrajs\view\View; use infrajs\infra\Infra; Event::handler('onjs', function () { View::js('-ascroll/ascroll.js'); View::js('-ascroll/infra.js'); });
} $link = $link . '?m=:producer.' . $val . '=1'; } else { if ($md['search']) { $val = $md['search']; $link = $link . '?m=:search:' . $val; } } } if ($val) { $ans['title'] = $val; } unset($ans['md']); unset($ans['m']); $ans['external'] = '-catalog/seo.json'; $ans['canonical'] = View::getPath() . $link; return Ans::ans($ans); } //Nostore::on(): if (isset($_GET['p'])) { $ans['page'] = (int) $_GET['p']; if ($ans['page'] < 1) { $ans['page'] = 1; } } else { $ans['page'] = 1; } $args = array($md, $ans['page']); $re = isset($_GET['re']); if (!$re) { if ($ans['page'] != 1) {
<?php namespace infrajs\controller; use infrajs\ans\Ans; use infrajs\path\Path; use infrajs\view\View; use infrajs\load\Load; use infrajs\router\Router; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; Router::init(); } $query = Crumb::$href; $ans = array('title' => 'Проверки контроллера'); $composer = Load::loadJSON('-infrajs/composer.json'); $require = $composer['require']; foreach ($require as $path => $ver) { $p = explode('/', $path); $r = Path::reqif('-' . $p[1] . '/infra.php'); } $layer = array('data' => 1, 'tpl' => array('qewr{data}')); Crumb::change(''); $html = Controller::check($layer); if ($html != 'qewr1') { return Ans::err($ans, 'Результат неожиданный ' . $html); } Crumb::change($query); View::html('', true); return Ans::ret($ans);
} } if ($conf['filesize']) { $size = $file['size'] / (1000 * 1000); if ($size > $conf['filesize']) { return Ans::err($ans, 'Приложен слишком большой файл. Ограничение ' . $conf['filesize'] . ' Mb'); } } } $data = $_POST; $data['post'] = $_POST; $data['email'] = $email; $data['text'] = $text; $data['name'] = $persona; $data['schema'] = View::getSchema(); $data['host'] = View::getHost(); $data['org'] = @$_POST['org']; $data['phone'] = @$_POST['phone']; $data['ip'] = $_SERVER['REMOTE_ADDR']; $data['ref'] = $_SERVER['HTTP_REFERER']; $data['browser'] = $_SERVER['HTTP_USER_AGENT']; $data['time'] = date("F j, Y, g:i a"); $maildir = Path::resolve('~.contacts/'); if (!is_dir($maildir)) { mkdir($maildir); } $mdata = array(); $p = explode(',', $data['email']); $mdata['email_from'] = $p[0]; $mdata['subject'] = 'Сообщение через форму контактов ' . $_SERVER['HTTP_HOST']; if (trim(mb_strtolower($data['name'])) == 'itlife') {
if (Layer::pop($layer, 'onlyclient')) { return; } $layer['html'] = Tpl::getHtml($layer); }, 'tpl:div'); Event::handler('Layer.onshow', function (&$layer) { //tpl if (Layer::pop($layer, 'onlyclient')) { return; } if (!empty($layer['div'])) { $div = $layer['div']; } else { $div = null; } $r = View::html($layer['html'], $div); if (!$r && (!isset($layer['divcheck']) || !$layer['divcheck'])) { echo 'Не найден div ' . $layer['div'] . ' infra_html<br>'; } unset($layer['html']); //нефиг в памяти весеть }, 'tpl:div'); Run::runAddList('layers'); Layer::parsedAdd('is'); Event::handler('Layer.isshow', function (&$layer) { $prop = 'is'; $proptpl = $prop . 'tpl'; if (isset($layer[$proptpl])) { $p = $layer[$proptpl]; $p = Template::parse(array($p), $layer); $layer[$prop] = $p;
if ($right) { $n['value'] = Sequence::set($n['value'], $right, $item['value']); //Новость осталась но она включает устанавливаемые данные } return $r; }); if ($r) { $del = new Fix('del'); return $del; } $r = null; return $r; }); } } if ($list) { if (!$session_id) { $pass = md5(print_r($list, true) . time() . rand()); $pass = substr($pass, 0, 8); $sql = 'insert into `ses_sessions`(`password`) VALUES(?)'; $stmt = $db->prepare($sql); $stmt->execute(array($pass)); $session_id = $db->lastInsertId(); View::setCookie('infra_session_id', $session_id); View::setCookie('infra_session_pass', md5($pass)); } Session::writeNews($list, $session_id); //$ans['news']=array_merge($news,$list); } return Ans::ret($ans); /**/
} } elseif (isset($_GET['gallery'])) { $src = Rubrics::find($dir, $id); $info = Rubrics::info($src); $ans['info'] = $info; return Ans::ret($ans); } elseif (isset($_GET['load'])) { if (!$res) { //@header("Status: 404 Not Found"); //@header("HTTP/1.0 404 Not Found"); @header('location: ' . View::getPath() . '?' . $type . '/' . $id); //Просто редирект на страницу со списокм всех файлов } else { //echo View::getPath().$dir.$res['file']; //exit; @header('location: ' . View::getPath() . $dir . $res['file']); } exit; } else { return Ans::err($res, 'id что?'); } } elseif (isset($_GET['list'])) { if (isset($_GET['lim'])) { $lim = $_GET['lim']; } else { $lim = '0,100'; } $p = explode(',', $lim); if (sizeof($p) != 2) { return Ans::err($ans, 'Is wrong paramter lim'); }
<?php namespace infrajs\activelink; use infrajs\event\Event; use infrajs\view\View; Event::handler('onjs', function () { View::js('-activelink/activelink.js'); View::js('-activelink/infra.js'); });
public static function change($session_id, $pass = null) { $email = Session::getEmail(); $session_id_old = Session::initId(); if (!$email) { //Текущая сессия не авторизированная $email = Session::getEmail($session_id); if ($email) { //А вот новая сессия аторизированна, значит нужно объединить сессии и грохнуть старую $newans = Session::recivenews(); //Нужно это всё записать в базу данных для сессии 1 Session::writeNews($newans['news'], $session_id); //Теперь старую сессию нужно удалить полностью //Надо подчистить 2 таблицы if ($session_id_old) { //хз бывает ли такое что его нет $conf = Config::get(); $tables = $conf['session']['change_session_tables']; //Массив с таблицами в которых нужно изменить session_id неавторизированного пользователя, при авторизации $db = Db::pdo(); Each::forr($tables, function &() use($session_id_old, $session_id, &$db) { $sql = 'UPDATE images SET session_id = ? WHERE session_id = ?;'; $stmt = $db->prepare($sql); $stmt->execute(array($session_id, $session_id_old)); $r = null; return $r; }); $sql = 'DELETE from ses_records where session_id=?'; $stmt = $db->prepare($sql); $stmt->execute(array($session_id_old)); $sql = 'DELETE from ses_sessions where session_id=?'; $stmt = $db->prepare($sql); $stmt->execute(array($session_id_old)); } } } global $infra_session_data; $infra_session_data = array(); if (is_null($pass)) { $user = Session::getUser($session_id); $pass = md5($user['password']); } View::setCookie(Session::getName('pass'), $pass); View::setCookie(Session::getName('id'), $session_id); View::setCookie(Session::getName('time'), 1); Session::syncNow(); }
<?php namespace infrajs\view; use infrajs\ans\Ans; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; } $ans = array(); $ans['title'] = 'Проверка методов view'; View::setCookie('test', true); $val = View::getCookie('test'); if (!$val) { return Ans::err($ans, 'Неудалось восстановить значение из COOKIE'); } return Ans::ret($ans);
public static function check(&$layer) { if (!empty($layer['seojsontpl'])) { $layer['seojson'] = Template::parse(array($layer['seojsontpl']), $layer); } if (empty($layer['seojson'])) { return; } $item = self::load($layer['seojson']); if (!$item) { return; } $html = View::html(); if (!empty($item['image_src'])) { self::meta($html, $item, 'link', 'image_src'); self::meta($html, $item, 'property', 'og:image', $item['image_src']); self::meta($html, $item, 'name', 'twitter:image', $item['image_src']); //self::meta($html, $item, 'itemprop', 'image', $item['image_src']); } if (empty($item['canonical'])) { $query = preg_replace('/^\\//', '', $_SERVER['REQUEST_URI']); $item['canonical'] = View::getPath() . $query; } if (!empty($item['canonical'])) { self::meta($html, $item, 'link', 'canonical'); self::meta($html, $item, 'name', 'twitter:site', $item['canonical']); self::meta($html, $item, 'property', 'og:url', $item['canonical']); //self::meta($html, $item, 'property', 'business:contact_data:website', $item['canonical']); } if (!empty($item['description'])) { self::meta($html, $item, 'name', 'description'); self::meta($html, $item, 'property', 'og:description', $item['description']); self::meta($html, $item, 'name', 'twitter:description', $item['description']); } self::meta($html, $item, 'name', 'keywords'); if (!empty($item['title'])) { self::meta($html, $item, 'title', 'title'); self::meta($html, $item, 'property', 'og:title', $item['title']); self::meta($html, $item, 'name', 'twitter:title', $item['title']); } if (!empty($item['site_name'])) { self::meta($html, $item, 'property', 'site_name'); self::meta($html, $item, 'itemprop', 'name', $item['site_name']); self::meta($html, $item, 'property', 'og:site_name', $item['site_name']); } if (empty($item['properties']['og:type'])) { self::meta($html, $item, 'property', 'og:type', 'website'); } if (!empty($item['properties'])) { foreach ($item['properties'] as $k => $v) { self::meta($html, $item['properties'], 'property', $k, $v); } } if (!empty($item['names'])) { foreach ($item['names'] as $k => $v) { self::meta($html, $item['names'], 'name', $k, $v); } } if (!empty($item['itemprops'])) { foreach ($item['itemprops'] as $k => $v) { self::meta($html, $item['itemprops'], 'itemprop', $k, $v); } } View::html($html, true); }
<?php use infrajs\event\Event; use infrajs\view\View; use infrajs\access\Access; use WyriHaximus\HtmlCompress; Event::one('Controller.onshow', function () { if (Access::debug()) { return; } $html = View::html(); $parser = HtmlCompress\Factory::construct(); $html = $parser->compress($html); View::html($html, true); });