예제 #1
0
파일: Cart.php 프로젝트: chernogolov/blank
 public function getCart($userId)
 {
     $result = DB::select()->from($this->tableName)->where('user', '=', $userId)->group_by('mid')->execute()->as_array();
     $material = new Model_Material('groups');
     $category = new Model_Category('tree');
     $base = new Model_Base();
     $arr = array();
     foreach ($result as $item) {
         //var_dump($item);
         //название модели
         $materialData = $material->getMaterial($item['mid']);
         $arr[$item['mid']]['name'] = $materialData['name'];
         $arr[$item['mid']]['mid'] = $item['mid'];
         //url модели
         $categoryName = $category->getNode($material->getTreeIdByMid($item['mid']));
         $categoryName = $base->str2url($categoryName['name']);
         $arr[$item['mid']]['url'] = $categoryName . '/' . $materialData['url'] . '.html';
         //Изображение
         $fields = $material->getFields($item['mid'], true);
         $arr[$item['mid']]['img'] = $fields['Photos'][0];
         //количество
         $arr[$item['mid']]['count'] = $this->getCartCount($userId, $item['mid']);
         //сумма
         $arr[$item['mid']]['sum'] = $this->getCartPrice($userId, $item['mid']);
         //размер
         $arr[$item['mid']]['size'] = $item['size'];
         //цвет
         $arr[$item['mid']]['color'] = $item['color'];
     }
     return $arr;
 }
예제 #2
0
 public function action_index()
 {
     $materialId = $this->request->param('id');
     $materials = new Model_Material('groups');
     //получить содержимое папки
     $data = $materials->getMaterial($materialId);
     $fields = $materials->getFields2($materialId, TRUE);
     $model = array("photos" => array());
     $model["id"] = Arr::get($data, "id");
     $model["name"] = Arr::get($data, "name");
     $model["article"] = Arr::get($data, "art");
     $model["price"] = number_format(Arr::get($fields, 'price'), 0, "", " ");
     Resources::add_scripts(array("js/modules/material/material.js"), get_class());
     // --- Фотки ----------------------------------------------------
     // есть фото
     if (isset($fields["photos"][0])) {
         $photos = $fields["photos"];
         $model["general_photo"] = $photos[0]["value"];
         // Фоток больше 1
         if (count($photos) > 1) {
             foreach ($photos as $photo) {
                 $model["photos"][] = array("original" => $photo["value"], "mini" => Route::url("miniimg2", array("filename" => $photo["value"])));
             }
         }
     } else {
         $model["general_photo"] = "/img/noimg.png";
     }
     // --- /Фотки ----------------------------------------------------
     // --- Коментарии ------------------------------------------------
     echo '<script>window.material_id = JSON.parse(\'' . $materialId . '\');</script>';
     $this->load_module("comments", "/widgets/Comments/index");
     // --- /Коментарии -----------------------------------------------
     $this->set_template("/widgets/material/material.php", "twig")->render($model)->body();
 }
예제 #3
0
 public function getPath($dir)
 {
     //первым делом ищем в структуре
     $category = new Model_Category('tree');
     $categoryId = $category->getCategoryIdByUrl($dir);
     if ($categoryId) {
         $dirs = [];
         $categoryData = $category->getCategory($categoryId);
         $parents = $category->getParents($categoryId);
         foreach ($parents as $parent) {
             if ($parent['level'] > 1 && $parent['url'] != 'glavnaya') {
                 $dirs[] = $parent['url'];
             }
         }
         return array('name' => $categoryData['name'], 'path' => implode('/', $dirs));
     }
     //теперь ищем в материалах
     $materials = new Model_Material('group');
     $materialUrl = str_replace('.html', '', $dir);
     $materialId = $materials->getMaterialIdByUrl($materialUrl);
     if ($materialId) {
         $materialData = $materials->getMaterial($materialId);
         $categoryId = $materials->getTreeIdByMid($materialId);
         $categoryData = $category->getCategory($categoryId);
         return array('name' => $materialData['name'], 'path' => $categoryData['url'] . '/' . $dir);
     } else {
         return FALSE;
     }
 }
예제 #4
0
파일: Files.php 프로젝트: chernogolov/blank
 public function action_index()
 {
     $materialId = $this->request->param('id');
     $materials = new Model_Material('groups');
     //get widget template
     $widget = new Model_Widget();
     $template = $widget->getTempalte('files', $materialId);
     if ($template) {
         $this->template = View::factory('widgets/' . $template);
     }
     //get data
     $data = $materials->getMaterial($materialId);
     $fields = $materials->getFields2($materialId, TRUE);
     $this->template->material = $data;
     $this->template->fields = $fields;
 }
예제 #5
0
 public function action_index()
 {
     $materialId = $this->request->param('id');
     $materials = new Model_Material('groups');
     //получить содержимое папки
     $data = $materials->getMaterial($materialId);
     $fields = $materials->getFields2($materialId, TRUE);
     //смотрим шаблон для виджета
     $widget = new Model_Widget();
     $template = $widget->getTempalte('material', $materialId);
     if ($template) {
         $this->template = View::factory('widgets/' . $template);
     }
     $group = $materials->getGroup($materials->getGroupFromMid($materialId));
     if ($group['name'] == 'Новости') {
         $this->template = View::factory('widgets/w_news_item');
         $this->template->breadcrumbs = Request::factory('widgets/breadcrumb/index/')->execute();
     }
     //        if($group['name']=='Диспенсеры')
     //        {
     //            if(isset($fields['type'][0]))
     //            {
     //                $uri = Request::detect_uri();
     //                $dirs = explode('/', $uri);
     //                array_pop($dirs);
     //                $categoryName = array_pop($dirs);
     //
     //                $category = new Model_Category('tree');
     //                $categoryId = $category->getCategoryIdByUrl($categoryName);
     //
     //                $GLOBALS['categoryId'] = $categoryId;
     //
     //                $dopdata = $materials->getFullMaterials2($group['id'], 5, 0, NULL, array('type' => array($fields['type'][0]['value'])));
     //                unset($dopdata[$materialId]);
     //
     //                $this->template->dopdata = array_slice($dopdata, 0, 4);
     //            }
     //        }
     //получаем комментарии
     $comments = Request::factory('widgets/comments/index/' . $materialId)->execute();
     $callback_form = Request::factory('widgets/callback/index/')->execute();
     $this->template->callback = $callback_form;
     $this->template->material = $data;
     $this->template->fields = $fields;
     $this->template->comments = $comments;
 }
예제 #6
0
 public function action_catalog()
 {
     $materials = new Model_Material('groups');
     //получаем url материала
     $materialID = $this->request->param('id');
     $material = $materials->getMaterial($materialID);
     $fields = $materials->getFields2($materialID, TRUE);
     $this->template->title = $material['name'];
     $this->template->page_title = $material['name'];
     $this->template->keywords = $material['keywords'];
     $this->template->description = $material['description'];
     $this->template->links = array('<link rel="canonical" href="' . Kohana::$base_url . 'catalog/' . $materialID . '.html"/>');
     $this->template->styles = Resources::load_styles();
     if (!$material['id']) {
         throw new HTTP_Exception_404();
     }
     //обновляем просмотры
     $materials->updateViews($material['id']);
     $widgets[] = Request::factory('widgets/material/index/' . $materialID)->execute();
     $this->template->block_center = $widgets;
 }
예제 #7
0
파일: Polls.php 프로젝트: chernogolov/blank
 public function action_index()
 {
     $errors = array();
     $materialId = $this->request->param('id');
     $materials = new Model_Material('group');
     //смотрим шаблон для виджета
     $widget = new Model_Widget();
     $template = $widget->getTempalte('polls', $materialId);
     if ($template) {
         $this->template = View::factory('widgets/' . $template);
     }
     $name = 'polls_' . $materialId;
     $voted = FALSE;
     //Cookie::delete($name);
     if (Cookie::get($name)) {
         $voted = TRUE;
     } else {
         if (isset($_POST['save_polls'])) {
             $polls = new Model_Polls();
             //сохраняем результаты голосования
             $result = $polls->vote($_POST['save_polls'], $_POST['answer']);
             if ($result) {
                 //создаем куки по данному опросу
                 if (!Cookie::set($name, 'voted', Date::YEAR)) {
                     $errors[] = 'Вероятно в Вашем браузере отключены Cookie.';
                 } else {
                     $voted = TRUE;
                 }
             }
         }
     }
     $data = $materials->getMaterial($materialId);
     $fields = $materials->getFields2($materialId, TRUE);
     $fields2 = $materials->getFields2($materialId, FALSE);
     $this->template->data = $data;
     $this->template->fields = $fields;
     $this->template->fields2 = $fields2;
     $this->template->voted = $voted;
     //Получаем список меню
 }
예제 #8
0
파일: Files.php 프로젝트: chernogolov/blank
 public function newParam($mid, $pid, $value, $files = array(), $export = FALSE)
 {
     $materials = new Model_Material('group');
     $material = $materials->getMaterial($mid);
     /*ONLY FOR EXPORT OPTION!*/
     if ($export == TRUE) {
         foreach ($value as $val) {
             $insert = DB::insert('files', array('id', 'value'))->values(array('', $val));
             $result = $insert->execute();
             $paramId = $result[0];
             $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $paramId))->execute();
         }
     } else {
         for ($i = 0; $i < count($files['uploads']['name']); ++$i) {
             if ($files['uploads']['size'][$i] < 50000000 && $files['uploads']['size'][$i] > 100) {
                 //расширение файла
                 $ext = explode('.', $files['uploads']['name'][$i]);
                 $extension = array_pop($ext);
                 //генерируем имя изображения
                 $base = new Model_Base();
                 $extarr = explode('.', $files['uploads']['name'][$i]);
                 $ext = array_pop($extarr);
                 //$filename = $material['url'] . '_'.substr(md5(microtime() * time()),0,rand(20,10)).'.'.$ext;
                 $filename = $files['uploads']['name'][$i];
                 $names = explode('/', $filename);
                 $title = array_pop($names);
                 if (copy($files['uploads']['tmp_name'][$i], DOCROOT . $this->dir . $filename)) {
                     $insert = DB::insert('files', array('id', 'value', 'title', 'size', 'ext'))->values(array('', DIRECTORY_SEPARATOR . $this->dir . $filename, $title, $files['uploads']['size'][$i], $ext));
                     $result = $insert->execute();
                     $paramId = $result[0];
                     $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $paramId))->execute();
                 }
             }
         }
     }
 }
예제 #9
0
 public function getOrder($orderId)
 {
     $order = ORM::factory("Orders")->where("id", "=", $orderId)->find()->as_array();
     $items = DB::select()->from("order_materials")->where("order_id", "=", $orderId)->execute()->as_array();
     $materials = new Model_Material("groups");
     $catalog = new Model_Category("tree");
     foreach ($items as $item) {
         $material = $materials->getMaterial($item["mid"]);
         $fields = $materials->getFields2($item["mid"], TRUE);
         $categoryId = $materials->getTreeIdByMid($item["mid"]);
         $parents = $catalog->getParents($categoryId);
         $node = "";
         foreach ($parents as $key => $parent) {
             if ($parent["url"] == "glavnaya") {
                 $node .= $parents[$key + 1]["url"] . "/";
                 break;
             }
         }
         $order["items"][$item["mid"]] = array_merge($material, $fields);
         $order["items"][$item["mid"]]["cnt"] = $item["cnt"];
         $order["items"][$item["mid"]]["node"] = $node;
     }
     return $order;
 }
예제 #10
0
 public function goSearch($string)
 {
     $materials = new Model_Material('groups');
     //подключаем библиотеки
     require_once DOCROOT . 'application/classes/PHPMorphy/src/common.php';
     $dir = DOCROOT . 'application/classes/PHPMorphy/dicts/';
     $lang = 'ru_RU';
     $opts = array('storage' => PHPMORPHY_STORAGE_FILE);
     try {
         $morphy = new phpMorphy($dir, $lang, $opts);
     } catch (phpMorphy_Exception $e) {
         die('Error occured while creating phpMorphy instance: ' . $e->getMessage());
     }
     $data = array();
     $request = null;
     $errors = null;
     if (!empty($string)) {
         // Очищаем от html-тегов и прочего
         $search = trim(addslashes(strip_tags($string)));
         $request = $search;
     }
     /* Создаем экземпляр phpMorphy */
     if (!empty($search)) {
         // Обрабатываем данные как и в прошлом контроллере
         if (mb_strlen($search, "UTF-8") > 2) {
             preg_match_all('/([a-zа-яё]+)/ui', mb_strtoupper($search, "UTF-8"), $search_words);
             $words = $morphy->lemmatize($search_words[1]);
             $s_words = array();
             $pre_result = array();
             $sorter = array();
             foreach ($words as $k => $w) {
                 if (!$w) {
                     $w[0] = $k;
                 }
                 if (mb_strlen($w[0], "UTF-8") > 2) {
                     $s_words[] = $w[0];
                 }
             }
             if (!count($s_words)) {
                 // Обрабатываем ошибку (нет ни одного слова длиннее 2 символов)
             } else {
                 //перебираем каждое слово
                 foreach ($s_words as $s_word) {
                     //сначала ищем в названиях материалов
                     $search_index = ORM::factory('Materials')->where('name', 'LIKE', '%' . $s_word . '%')->find_all();
                     foreach ($search_index as $si) {
                         //если в другом слове было совпадение
                         if (isset($pre_result[$si->id])) {
                             //добавляем вес
                             $sorter[$si->id] = $sorter[$si->id] + 2;
                             $pre_result[$si->id]['weight'] = $pre_result[$si->id]['weight'] + 2;
                             $pre_result[$si->id]['s_text'] = str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($pre_result[$si->id]['s_text']));
                         } else {
                             $sorter[$si->id] = 2;
                             $material = $materials->getMaterial($si->id);
                             $pre_result[$si->id] = array('weight' => 2, 's_text' => str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($si->name)));
                         }
                     }
                     //ищем в текстах
                     $search_index = ORM::factory('Texts')->where('value', 'LIKE', '%' . $s_word . '%')->find_all();
                     foreach ($search_index as $si) {
                         //получаем mid для материала
                         $mid = $materials->getMidFromFieldId($si->id, 'texts');
                         if (isset($pre_result[$mid])) {
                             $sorter[$mid] = $sorter[$mid] + 1;
                             $pre_result[$mid]['weight'] = $pre_result[$mid]['weight'] + 1;
                             $pre_result[$mid]['s_text'] = str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($pre_result[$mid]['s_text']));
                         } else {
                             $pre_result[$mid] = array('weight' => 2, 's_text' => str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($si->value)));
                             $sorter[$mid] = 1;
                         }
                     }
                     //ищем в текстах
                     $search_index = ORM::factory('Chars')->where('value', 'LIKE', '%' . $s_word . '%')->find_all();
                     foreach ($search_index as $si) {
                         //получаем mid для материала
                         $mid = $materials->getMidFromFieldId($si->id, 'chars');
                         if (isset($pre_result[$mid])) {
                             $sorter[$mid] = $sorter[$mid] + 1;
                             $pre_result[$mid]['weight'] = $pre_result[$mid]['weight'] + 1;
                             $pre_result[$mid]['s_text'] = str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($pre_result[$mid]['s_text']));
                         } else {
                             $pre_result[$mid] = array('weight' => 2, 's_text' => str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($si->value)));
                             $sorter[$mid] = 1;
                         }
                     }
                 }
                 arsort($sorter);
                 // Сортируем массив по весу результатов
                 foreach ($sorter as $id => $weight) {
                     // Тут, соответственно, получаем данные о результатах и помещаем в массив
                     $data[] = $id;
                 }
             }
         } else {
             // Обрабатываем ошибку - введен слишком короткий запрос
         }
     } else {
         // Обрабатываем ошибку - пустой поисковый запрос
     }
     return $data;
 }
예제 #11
0
파일: Ajax.php 프로젝트: chernogolov/blank
 public function action_cart()
 {
     /* Добавление товара в корзину
     					$data:
     							$item_id* - id товара
     							$item_count* - кол-во товара
     							$order_id - id заказа
     			*/
     $methods['add_item'] = function ($data) {
         PC::debug($data, 'add item data');
         $model_orders = new Model_Orders();
         $materials = new Model_Material('groups');
         // Добавление товара к существующему заказу
         if (isset($data['order_id'])) {
             PC::debug(1, 1);
             $res = $model_orders->addGood(Arr::get($data, 'order_id'), Arr::get($data, 'item_id'), Arr::get($data, 'item_count'));
         } else {
             PC::debug(2, 1);
             $item_count = Arr::get($data, 'item_count');
             $res = $model_orders->newOrder(Arr::get($data, 'item_id'), $item_count);
             $new_count = $item_count;
         }
         $material = $materials->getMaterial(Arr::get($data, 'item_id'));
         $fields = $materials->getFields2(Arr::get($data, 'item_id'), TRUE);
         $catalog = new Model_Category('tree');
         $categoryId = $materials->getTreeIdByMid(Arr::get($data, 'item_id'));
         $parents = $catalog->getParents($categoryId);
         $node = '';
         foreach ($parents as $parent) {
             if ($parent['level'] > 1 && $parent['url'] != 'glavnaya') {
                 $node .= $parent['url'] . '/';
             }
         }
         $itemdata = $model_orders->getOrderCount(Arr::get($data, 'order_id'), Arr::get($data, 'item_id'));
         $item[Arr::get($data, 'item_id')] = array_merge($material, $fields);
         if (isset($new_count)) {
             $item[Arr::get($data, 'item_id')]['cnt'] = $new_count;
         } else {
             $item[Arr::get($data, 'item_id')]['cnt'] = $itemdata['cnt'];
         }
         $item[Arr::get($data, 'item_id')]['node'] = $node;
         return array('order_id' => $res, 'item' => $item);
     };
     /* Удаление товара из корзины
     					$data:
     							$order_id* - id заказа
     							$item_id* - id товара
     							$item_count* - кол-во товара
     			*/
     $methods['del_item'] = function ($data) {
         $model_orders = new Model_Orders();
         extract($data);
         // Удаление товара из корзины
         $res = $model_orders->deleteItem(Arr::get($data, 'order_id'), Arr::get($data, 'item_id'), Arr::get($data, 'item_count'));
         return $res;
     };
     /* Получение информации о заказе
     				$data:
     					$order_id* - id заказа
     			*/
     $mathods['get_order'] = function ($data) {
         $model_orders = new Model_Orders();
         $order_data = $model_orders->getOrder($data['order_id']);
         return $order_data;
     };
     /* Удаление заказа
     				$data:
     					$order_id* - id заказа
     			*/
     $mathods['del_order'] = function ($data) {
         PC::debug($data, 'del_order');
         $model_orders = new Model_Orders();
         $res = $model_orders->deleteOrder($data['order_id']);
         return $res;
     };
     /* Получение информации о заказе
     				$data:
     					$order_id* - id заказа
     			*/
     $methods['get_items'] = function ($data) {
         $model_orders = new Model_Orders();
         //extract($data);
         $res = $model_orders->getOrder(Arr::get($data, 'order_id', ''));
         return $res;
     };
     $data = Arr::get($_POST, 'data', '');
     if ($data == '') {
         $data = Arr::get($_GET, 'data', '');
     }
     extract(json_decode($data, true));
     $res = false;
     if (isset($methods[$method])) {
         $res = $methods[$method]($data);
         PC::debug($res, 'Ajax: "' . $method . '"');
     }
     exit(json_encode($res));
 }
예제 #12
0
 public function newParam($mid, $pid, $value, $files = array(), $export = FALSE)
 {
     $materials = new Model_Material('group');
     $material = $materials->getMaterial($mid);
     /*ONLY FOR EXPORT OPTION!*/
     if ($export == TRUE) {
         foreach ($value as $val) {
             $server_name = Request::parseUrl($val);
             if ($server_name != Kohana::$base_url && $server_name != '') {
                 $info = getimagesize($val);
                 $ext = image_type_to_extension($info[2]);
                 //смотрим сколько файлов в текущей папке файтов
                 //генерируем имя изображения
                 //                    $base = new Model_Base();
                 //                    $extarr = explode('.', $val);
                 //                    $ext = array_pop($extarr);
                 $filename = $material['url'] . '_' . substr(md5(microtime() * time()), 0, rand(20, 10)) . $ext;
                 //                    if(exec("cp ".$val." ".DOCROOT . $this->dir . $filename))
                 if (copy($val, DOCROOT . $this->dir . $filename)) {
                     //загружаем их к себе
                     //открываем изображение
                     $image = Image::factory(DOCROOT . $this->dir . $filename);
                     //начинаем работу с нужной картинкой. Путь указан от корня приложения
                     //меняем размер картинки
                     //   $image->resize(800, 1000); //изменение размера по короткой стороне
                     //сохраняем новое изображение
                     $image->save(NULL, 90);
                     //первый параметр - путь, имя и формат изображения. Второй - качество изображения
                     unset($image);
                     $val = DIRECTORY_SEPARATOR . $this->dir . $filename;
                 }
             }
             $insert = DB::insert('photoalbum', array('id', 'value'))->values(array('', $val));
             $result = $insert->execute();
             $paramId = $result[0];
             $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $paramId))->execute();
         }
     } else {
         for ($i = 0; $i < count($files['photos']['name']); ++$i) {
             if ($files['photos']['size'][$i] < 15000000 && $files['photos']['size'][$i] > 100) {
                 //расширение файла
                 $ext = explode('.', $files['photos']['name'][$i]);
                 $extension = array_pop($ext);
                 //генерируем имя изображения
                 $base = new Model_Base();
                 $extarr = explode('.', $files['photos']['name'][$i]);
                 $ext = array_pop($extarr);
                 $filename = $material['url'] . '_' . substr(md5(microtime() * time()), 0, rand(20, 10)) . '.' . $ext;
                 if (copy($files['photos']['tmp_name'][$i], DOCROOT . $this->dir . $filename)) {
                     $base = new Model_Base();
                     $options = $base->getOptions();
                     //изменяем картинку
                     //открываем изображение
                     $image = Image::factory(DOCROOT . $this->dir . $filename);
                     //начинаем работу с нужной картинкой. Путь указан от корня приложения
                     //меняем размер картинки
                     $size = explode(',', $options['upload_size']);
                     if (count($size) == 2) {
                         $size = explode(',', $options['upload_size']);
                         $image->resize($size[0], $size[1]);
                     }
                     $crop = explode(',', $options['upload_crop']);
                     if (count($crop) == 2) {
                         $crop = explode(',', $options['upload_crop']);
                         $image->crop($crop[0], $crop[1]);
                     }
                     //изменение размера по короткой стороне
                     //                    $watermark=Image::factory(DOCROOT . '/img/watermark.png'); //берем изображение для водяного знака
                     //
                     //                    $offset_x = $image->width - $watermark->width - 10;
                     //                    $offset_y = $image->height - $watermark->height - 10;
                     //
                     //                    $image->watermark($watermark, $offset_x, $offset_y, $opacity = 70);
                     //                        var_dump($image);
                     //сохраняем новое изображение
                     $image->save(NULL, $options['image_quality']);
                     //первый параметр - путь, имя и формат изображения. Второй - качество изображения
                     $insert = DB::insert('photoalbum', array('id', 'value'))->values(array('', DIRECTORY_SEPARATOR . $this->dir . $filename));
                     $result = $insert->execute();
                     $paramId = $result[0];
                     $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $paramId))->execute();
                 }
             }
         }
     }
 }
예제 #13
0
 public function newParam($mid, $pid, $value, $files = array(), $export = FALSE)
 {
     $materials = new Model_Material('group');
     $material = $materials->getMaterial($mid);
     /*ONLY FOR EXPORT OPTION!*/
     if ($export == TRUE) {
         foreach ($value as $val) {
             $insert = DB::insert('photoalbum', array('id', 'value'))->values(array('', $val));
             $result = $insert->execute();
             $paramId = $result[0];
             $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $paramId))->execute();
         }
     } else {
         for ($i = 0; $i < count($files['photos']['name']); ++$i) {
             if ($files['photos']['size'][$i] < 5500000 && $files['photos']['size'][$i] > 100) {
                 //расширение файла
                 $ext = explode('.', $files['photos']['name'][$i]);
                 $extension = array_pop($ext);
                 //генерируем имя изображения
                 $base = new Model_Base();
                 $extarr = explode('.', $files['photos']['name'][$i]);
                 $ext = array_pop($extarr);
                 $filename = $material['url'] . '_' . substr(md5(microtime() * time()), 0, rand(20, 10)) . '.' . $ext;
                 if (copy($files['photos']['tmp_name'][$i], DOCROOT . $this->dir . $filename)) {
                     $base = new Model_Base();
                     $options = $base->getOptions();
                     //изменяем картинку
                     //открываем изображение
                     $image = Image::factory(DOCROOT . $this->dir . $filename);
                     //начинаем работу с нужной картинкой. Путь указан от корня приложения
                     //меняем размер картинки
                     $size = explode(',', $options['upload_size']);
                     if (count($size) == 2) {
                         $size = explode(',', $options['upload_size']);
                         if ($size[0] != 0 && $size[1] != 0) {
                             $ratio = $image->width / $image->height;
                             // Соотношение сторон нужных размеров
                             $original_ratio = $size[0] / $size[1];
                             // Размеры, до которых обрежем картинку до масштабирования
                             $crop_width = $image->width;
                             $crop_height = $image->height;
                             // Смотрим соотношения
                             if ($ratio > $original_ratio) {
                                 // Если ширина картинки слишком большая для пропорции,
                                 // то будем обрезать по ширине
                                 $crop_width = round($original_ratio * $crop_height);
                             } else {
                                 // Либо наоборот, если высота картинки слишком большая для пропорции,
                                 // то обрезать будем по высоте
                                 $crop_height = round($crop_width / $original_ratio);
                             }
                             // Обрезаем по высчитанным размерам до нужной пропорции
                             $image->crop($crop_width, $crop_height);
                             // Масштабируем картинку то точных размеров
                             $image->resize($size[0], $size[1], Image::NONE);
                         } else {
                             $image->resize($size[0], $size[1]);
                         }
                     }
                     //изменение размера по короткой стороне
                     //                    $watermark=Image::factory(DOCROOT . '/img/watermark.png'); //берем изображение для водяного знака
                     //
                     //                    $offset_x = $image->width - $watermark->width - 10;
                     //                    $offset_y = $image->height - $watermark->height - 10;
                     //
                     //                    $image->watermark($watermark, $offset_x, $offset_y, $opacity = 70);
                     //                        var_dump($image);
                     //сохраняем новое изображение
                     $image->save(NULL, $options['image_quality']);
                     //первый параметр - путь, имя и формат изображения. Второй - качество изображения
                     $insert = DB::insert('photoalbum', array('id', 'value'))->values(array('', DIRECTORY_SEPARATOR . $this->dir . $filename));
                     $result = $insert->execute();
                     $paramId = $result[0];
                     $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $paramId))->execute();
                 }
             }
         }
     }
 }
예제 #14
0
 public function action_fluid()
 {
     $this->setopt(array("name" => "material_id", "description" => "Ид статического материала", "default" => 1));
     $material_id = $this->getopt('material_id');
     $materials = new Model_Material('groups');
     //смотрим шаблон для виджета
     $widget = new Model_Widget();
     /*     $pathway = Request::factory('widgets/breadcrumb/index')
     		->execute();*/
     //получить содержимое папки
     $data = $materials->getMaterial($material_id);
     $fields = $materials->getFields2($material_id, true);
     $model = array("text" => $fields["text"]);
     if (isset($fields['files']) && !empty($fields['files'])) {
         $files = array();
         foreach ($fields['files'] as $file) {
             $file["app_icon"] = "/img/apps_icon/" . strtolower($file['ext'] . ".png");
             $file["size"] = round((int) $file['size'] / 1024);
             $files[] = $file;
         }
         $model["files"] = $files;
     }
     $this->set_template("widgets/static/fluid.php", "twig")->render($model)->body();
     //$this->template->pathway = $pathway;
     //$this->template->data = array_merge($data, $fields);
     //$this->template->material = $data;
     // $this->template->fields = $fields;
 }
예제 #15
0
 public function newParam($mid, $pid, $value, $files = array())
 {
     $index = 'image_' . $pid;
     $materials = new Model_Material('group');
     $material = $materials->getMaterial($mid);
     if ($files[$index]['size'] > 0) {
         foreach ($files as $file_key => $file) {
             $file_param = explode('_', $file_key);
             if ($file_param[0] == 'image') {
                 //загружаем изображение
                 if ($file['size'] < 5000000 && $file['size'] > 0) {
                     $ext = explode('.', $file['name']);
                     $extension = array_pop($ext);
                     //генерируем имя изображения
                     $base = new Model_Base();
                     $extarr = explode('.', $file['name']);
                     $ext = array_pop($extarr);
                     $filename = $material['url'] . '_' . substr(md5(microtime() * time()), 0, rand(20, 10)) . '.' . $ext;
                     if (copy($file['tmp_name'], DOCROOT . $this->dir . $filename)) {
                         $base = new Model_Base();
                         $options = $base->getOptions();
                         $size = explode(',', $options['upload_size']);
                         //изменяем картинку
                         //открываем изображение
                         $image = Image::factory(DOCROOT . $this->dir . $filename);
                         //начинаем работу с нужной картинкой. Путь указан от корня приложения
                         if (count($size) == 2) {
                             $size = explode(',', $options['upload_size']);
                             if ($size[0] != 0 && $size[1] != 0) {
                                 $ratio = $image->width / $image->height;
                                 // Соотношение сторон нужных размеров
                                 $original_ratio = $size[0] / $size[1];
                                 // Размеры, до которых обрежем картинку до масштабирования
                                 $crop_width = $image->width;
                                 $crop_height = $image->height;
                                 // Смотрим соотношения
                                 if ($ratio > $original_ratio) {
                                     // Если ширина картинки слишком большая для пропорции,
                                     // то будем обрезать по ширине
                                     $crop_width = round($original_ratio * $crop_height);
                                 } else {
                                     // Либо наоборот, если высота картинки слишком большая для пропорции,
                                     // то обрезать будем по высоте
                                     $crop_height = round($crop_width / $original_ratio);
                                 }
                                 // Обрезаем по высчитанным размерам до нужной пропорции
                                 $image->crop($crop_width, $crop_height);
                                 // Масштабируем картинку то точных размеров
                                 $image->resize($size[0], $size[1], Image::NONE);
                             } else {
                                 $image->resize($size[0], $size[1]);
                             }
                         }
                         //сохраняем новое изображение
                         $image->save(NULL, $options['image_quality']);
                         //первый параметр - путь, имя и формат изображения. Второй - качество изображения
                         $value = DIRECTORY_SEPARATOR . $this->dir . $filename;
                     }
                 }
             }
         }
     } else {
         $server_name = Request::parseUrl($value);
         if ($server_name != Kohana::$base_url && $server_name != '') {
             $ext = explode('.', $value);
             $extension = array_pop($ext);
             //генерируем имя изображения
             $base = new Model_Base();
             $extarr = explode('.', $value);
             $ext = array_pop($extarr);
             $filename = $material['url'] . '_' . substr(md5(microtime() * time()), 0, rand(20, 10)) . '.' . $ext;
             if (copy($value, DOCROOT . $this->dir . $filename)) {
                 //загружаем их к себе
                 //открываем изображение
                 $image = Image::factory(DOCROOT . $this->dir . $filename);
                 //начинаем работу с нужной картинкой. Путь указан от корня приложения
                 //меняем размер картинки
                 $image->resize(800, 1000);
                 //изменение размера по короткой стороне
                 //сохраняем новое изображение
                 $image->save();
                 //первый параметр - путь, имя и формат изображения. Второй - качество изображения
                 unset($image);
                 $value = DIRECTORY_SEPARATOR . $this->dir . $filename;
             }
         } else {
             $value = str_replace($server_name, DIRECTORY_SEPARATOR, $value);
         }
     }
     //сохраняем картинку
     $insert = DB::insert('images', array('id', 'value'))->values(array('', $value));
     $result = $insert->execute();
     $insertId = $result[0];
     //Добавляем связь материала с папкой
     $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $insertId))->execute();
     if ($insert != NULL) {
         return TRUE;
     } else {
         return FALSE;
     }
 }
예제 #16
0
 public function newParam($mid, $pid, $value, $files = array())
 {
     $index = 'image_' . $pid;
     $materials = new Model_Material('group');
     $material = $materials->getMaterial($mid);
     if ($files[$index]['size'] > 0) {
         foreach ($files as $file_key => $file) {
             $file_param = explode('_', $file_key);
             if ($file_param[0] == 'image') {
                 //загружаем изображение
                 if ($file['size'] < 5000000 && $file['size'] > 0) {
                     $ext = explode('.', $file['name']);
                     $extension = array_pop($ext);
                     //генерируем имя изображения
                     $base = new Model_Base();
                     $extarr = explode('.', $file['name']);
                     $ext = array_pop($extarr);
                     $filename = $material['url'] . '_' . substr(md5(microtime() * time()), 0, rand(20, 10)) . '.' . $ext;
                     if (copy($file['tmp_name'], DOCROOT . $this->dir . $filename)) {
                         $base = new Model_Base();
                         $options = $base->getOptions();
                         $size = explode(',', $options['upload_size']);
                         //изменяем картинку
                         //открываем изображение
                         $image = Image::factory(DOCROOT . $this->dir . $filename);
                         //начинаем работу с нужной картинкой. Путь указан от корня приложения
                         //                            if(count($size)==2)
                         //                            {
                         //                                $size = explode(',', $options['upload_size']);
                         //                                $image->resize($size[0], $size[1]);
                         //                            }
                         //сохраняем новое изображение
                         $image->save(NULL, $options['image_quality']);
                         //первый параметр - путь, имя и формат изображения. Второй - качество изображения
                         $value = DIRECTORY_SEPARATOR . $this->dir . $filename;
                     }
                 }
             }
         }
     } else {
         $server_name = Request::parseUrl($value);
         if ($server_name != Kohana::$base_url && $server_name != '') {
             $ext = explode('.', $value);
             $extension = array_pop($ext);
             //генерируем имя изображения
             $base = new Model_Base();
             $extarr = explode('.', $value);
             $ext = array_pop($extarr);
             $filename = $material['url'] . '_' . substr(md5(microtime() * time()), 0, rand(20, 10)) . '.' . $ext;
             if (copy($value, DOCROOT . $this->dir . $filename)) {
                 //загружаем их к себе
                 //открываем изображение
                 $image = Image::factory(DOCROOT . $this->dir . $filename);
                 //начинаем работу с нужной картинкой. Путь указан от корня приложения
                 //меняем размер картинки
                 $image->resize(800, 1000);
                 //изменение размера по короткой стороне
                 //сохраняем новое изображение
                 $image->save();
                 //первый параметр - путь, имя и формат изображения. Второй - качество изображения
                 unset($image);
                 $value = DIRECTORY_SEPARATOR . $this->dir . $filename;
             }
         } else {
             $value = str_replace($server_name, DIRECTORY_SEPARATOR, $value);
         }
     }
     //сохраняем картинку
     $insert = DB::insert('images', array('id', 'value'))->values(array('', $value));
     $result = $insert->execute();
     $insertId = $result[0];
     //Добавляем связь материала с папкой
     $insert = DB::insert('group_param_values', array('id', 'pid', 'mid', 'value'))->values(array('', $pid, $mid, $insertId))->execute();
     if ($insert != NULL) {
         return TRUE;
     } else {
         return FALSE;
     }
 }
예제 #17
0
 public function action_room()
 {
     $base = new Model_Base();
     $options = $base->getOptions();
     if (!isset($options['room']) || $options['room'] != 'TRUE') {
         Controller::redirect('/');
     }
     $this->template->title = 'Личный кабинет';
     $this->template->page_title = 'Личный кабинет';
     $this->template->keywords = 'Личный кабинет';
     $this->template->description = 'Личный кабинет';
     $data = array();
     $errors = array();
     $widgets = $this->getWidgets(0);
     $auth = Auth::instance();
     //        var_dump($auth->hash($_POST['password']));
     if (is_array($widgets)) {
         foreach ($widgets as $position => $widget) {
             $this->template->{$position} = $widget;
         }
     }
     if (!$auth->logged_in('visitor')) {
         if (isset($_POST['login'])) {
             $username = Arr::get($_POST, 'username', '');
             $password = Arr::get($_POST, 'password', '');
             if ($auth->login($username, $password)) {
                 //print('Залогинен');
                 $session = Session::instance();
                 $auth_redirect = $session->get('auth_redirect', '');
                 $session->delete('auth_redirect');
                 Controller::redirect('/user');
             } else {
                 //print('Ошибка');
                 $errors[] = 'Не верный логин или пароль.';
             }
         }
         $this->template->block_center[] = View::factory('widgets/w_auth')->bind('errors', $errors);
     } else {
         $param = $this->request->param('act');
         $materals = new Model_Material('group');
         //получаем пользователя
         $user = $auth->get_user();
         if ($param == 'show') {
             $user_orders = Module::create(array("controller" => "user/cabinet/orders", "action" => "index", "options" => array()));
             //echo $user_orders["body"];
             //получаем материалы пользователя
             $data['materials'] = $materals->getUserMaterials($user->id);
             //$this->template->block_center[] = $user_orders["body"];
             //return new View($file, $data);
             /*$page = View::factory('widgets/w_room')
             				->bind('errors', $errors)
             				->bind('messages', $messages)
             				->bind('data', $data);
             
             				var_dump($page);*/
             // --- tests -------------------------------------------------------------
             $this->template->title = 'Личный кабинет';
             $this->template->page_title = 'Личный кабинет';
             $this->template->keywords = 'Личный кабинет';
             $this->template->description = 'Личный кабинет';
             $auth = Auth::instance();
             if ($auth->logged_in() != 0) {
                 $this->template->content = View::factory('admin/admIndex');
             } else {
                 $this->template->content = View::factory('admin/admLogin');
                 if (isset($_POST['enter'])) {
                     $username = Arr::get($_POST, 'username', '');
                     $password = Arr::get($_POST, 'password', '');
                     if ($auth->login($username, $password)) {
                         //print('Залогинен');
                         $session = Session::instance();
                         $auth_redirect = $session->get('auth_redirect', '');
                         $session->delete('auth_redirect');
                         Controller::redirect($auth_redirect);
                     } else {
                         //print('Ошибка');
                         $this->template->error = 'Не верный логин или пароль.';
                     }
                 }
             }
             // --- tests -------------------------------------------------------------
             //exit();
         } elseif ($param == 'edit') {
             $materialId = $this->request->param('id');
             //получаем материал
             $data['material'] = $materals->getMaterial($materialId, $user->id);
             if ($data['material']) {
                 $gid = $materals->getGroupFromMid($materialId);
                 $data['fieldset'] = $materals->getFieldsSet($gid);
                 //получаем поля
                 $data['fields'] = $materals->getFields($materialId, TRUE);
             } else {
                 $errors[] = 'Данный материал не найден';
             }
         } elseif ($param == 'settings') {
             if (isset($_POST['save_settings'])) {
                 //сохраняем настройки
                 $modelUser = new Model_User();
                 $res = $modelUser->saveUser($_POST, $user->id);
                 if (is_array($res)) {
                     $errors = $res;
                 } else {
                     $messages[] = $res;
                 }
             }
             $data['user'] = ORM::factory('User', array('id' => $user->id));
         }
         $this->template->block_center[] = View::factory('widgets/w_room')->bind('errors', $errors)->bind('messages', $messages)->bind('data', $data);
     }
 }