* @copyright Copyright (c) 2008-2019 Krystian Podemski - www.PrestaHome.com / www.Podemski.info * @license You only can use module, nothing more! */ require_once _PS_MODULE_DIR_.'ph_simpleblog/ph_simpleblog.php'; class AdminSimpleBlogPostsController extends ModuleAdminController { public function __construct() { $this->table = 'simpleblog_post'; $this->className = 'SimpleBlogPost'; $this->lang = true; $this->bootstrap = true; $this->addRowAction('edit'); $this->addRowAction('view'); $this->addRowAction('delete'); $this->_select = 'sbcl.name AS `category`, sbpt.name AS `post_type`'; $this->_join = 'LEFT JOIN `'._DB_PREFIX_.'simpleblog_category_lang` sbcl ON (sbcl.`id_simpleblog_category` = a.`id_simpleblog_category` AND sbcl.`id_lang` = '.(int) Context::getContext()->language->id.')'; $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'simpleblog_post_type` sbpt ON (sbpt.`id_simpleblog_post_type` = a.`id_simpleblog_post_type`)'; $this->_defaultOrderWay = 'DESC'; parent::__construct(); $this->displayInformations = $this->l('Some option may be available after saving post'); $this->bulk_actions = array( 'delete' => array( 'text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'), ), 'enableSelection' => array('text' => $this->l('Enable selection')), 'disableSelection' => array('text' => $this->l('Disable selection')), ); $this->fields_list = array( 'id_simpleblog_post' => array( 'title' => $this->l('ID'), 'align' => 'center', 'width' => 30, ), 'post_type' => array( 'title' => $this->l('Type'), 'width' => 'auto', 'filter_key' => 'sbpt!name', ), 'cover' => array( 'title' => $this->l('Post thumbnail'), 'width' => 150, 'orderby' => false, 'search' => false, 'callback' => 'getPostThumbnail', ), 'category' => array( 'title' => $this->l('Category'), 'width' => 'auto', 'filter_key' => 'sbcl!name', ), 'title' => array( 'title' => $this->l('Title'), 'width' => 'auto', 'filter_key' => 'b!title', ), 'short_content' => array( 'title' => $this->l('Description'), 'width' => 500, 'orderby' => false, 'callback' => 'getDescriptionClean', ), 'views' => array( 'title' => $this->l('Views'), 'width' => 30, 'align' => 'center', 'search' => false, ), 'likes' => array( 'title' => $this->l('Likes'), 'width' => 30, 'align' => 'center', 'search' => false, ), 'is_featured' => array( 'title' => $this->l('Featured?'), 'orderby' => false, 'align' => 'center', 'type' => 'bool', 'active' => 'is_featured', ), 'date_add' => array( 'title' => $this->l('Publication date'), 'type' => 'date', 'filter_key' => 'a!date_add', ), 'active' => array( 'title' => $this->l('Displayed'), 'width' => 25, 'active' => 'status', 'align' => 'center', 'type' => 'bool', 'orderby' => false, ), ); if (!Tools::getValue('id_simpleblog_post', 0)) { $this->informations[] = $this->l('You can view blog here: ').''.ph_simpleblog::getLink().''; } } public function init() { parent::init(); Shop::addTableAssociation($this->table, array('type' => 'shop')); if (Shop::getContext() == Shop::CONTEXT_SHOP) { $this->_join .= ' LEFT JOIN `'._DB_PREFIX_.'simpleblog_post_shop` sa ON (a.`id_simpleblog_post` = sa.`id_simpleblog_post` AND sa.id_shop = '.(int) $this->context->shop->id.') '; } if (Shop::getContext() == Shop::CONTEXT_SHOP && Shop::isFeatureActive()) { $this->_where = ' AND sa.`id_shop` = '.(int) Context::getContext()->shop->id; } if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_SHOP) { unset($this->fields_list['position']); } } public function setMedia($isNewTheme = false) { parent::setMedia(); $this->addjQueryPlugin(array( 'autocomplete', 'tablednd', 'date', 'tagify', 'validate', 'fancybox' )); $this->addJS(array( _PS_JS_DIR_.'admin-dnd.js', _PS_JS_DIR_.'jquery/ui/jquery.ui.progressbar.min.js', _PS_JS_DIR_.'vendor/spin.js', _PS_JS_DIR_.'vendor/ladda.js', _MODULE_DIR_.'ph_simpleblog/js/admin.js', _MODULE_DIR_.'ph_simpleblog/views/js/select2/select2.full.min.js' )); $this->addCSS(array( _MODULE_DIR_.'ph_simpleblog/views/css/select2/select2.min.css' )); } public static function getDescriptionClean($description) { return substr(strip_tags(stripslashes($description)), 0, 80).'...'; } public static function getPostThumbnail($cover, $row) { return ImageManager::thumbnail(_PS_MODULE_DIR_.'ph_simpleblog/covers/'.$row['id_simpleblog_post'].'.'.$cover, 'ph_simpleblog_'.$row['id_simpleblog_post'].'-list.'.$cover, 75, $cover, true); } public function renderList() { $this->initToolbar(); return parent::renderList(); } public function initFormToolBar() { unset($this->toolbar_btn['back']); $this->toolbar_btn['save-and-stay'] = array( 'short' => 'SaveAndStay', 'href' => '#', 'desc' => $this->l('Save and stay'), ); $this->toolbar_btn['back'] = array( 'href' => self::$currentIndex.'&token='.Tools::getValue('token'), 'desc' => $this->l('Back to list'), ); } public function initPageHeaderToolbar() { $this->page_header_toolbar_title = $this->l('Posts'); if ($this->display == 'add' || $this->display == 'edit') { $this->page_header_toolbar_btn['back_to_list'] = array( 'href' => Context::getContext()->link->getAdminLink('AdminSimpleBlogPosts'), 'desc' => $this->l('Back to list', null, null, false), 'icon' => 'process-icon-back', ); if (Tools::getValue('id_simpleblog_post', 0)) { if ($this->loadObject(true)) { $obj = $this->loadObject(true); } $SimpleBlogPost = new SimpleBlogPost($obj->id, $this->context->language->id); $this->page_header_toolbar_btn['preview_post'] = array( 'href' => Context::getContext()->link->getModuleLink('ph_simpleblog', 'single', array('rewrite' => $SimpleBlogPost->link_rewrite, 'sb_category' => $SimpleBlogPost->category_rewrite)), 'desc' => $this->l('View post', null, null, false), 'icon' => 'process-icon-preview', 'target' => true, ); } } if (!isset($this->display)) { $this->page_header_toolbar_btn['new_post'] = array( 'href' => self::$currentIndex.'&addsimpleblog_post&token='.$this->token, 'desc' => $this->l('Add new post', null, null, false), 'icon' => 'process-icon-new', ); $this->page_header_toolbar_btn['go_to_blog'] = array( 'href' => ph_simpleblog::getLink(), 'desc' => $this->l('Go to blog', null, null, false), 'icon' => 'process-icon-plus', 'target' => true, ); } parent::initPageHeaderToolbar(); } public function renderForm() { $this->initFormToolbar(); if (!$this->loadObject(true)) { return; } $obj = $this->loadObject(true); $cover = false; $featured = false; if (isset($obj->id)) { $this->display = 'edit'; $cover = ImageManager::thumbnail(_PS_MODULE_DIR_.'ph_simpleblog/covers/'.$obj->id.'.'.$obj->cover, 'ph_simpleblog_'.$obj->id.'.'.$obj->cover, 350, $obj->cover, false); $featured = ImageManager::thumbnail(_PS_MODULE_DIR_.'ph_simpleblog/featured/'.$obj->id.'.'.$obj->featured, 'ph_simpleblog_featured_'.$obj->id.'.'.$obj->featured, 350, $obj->featured, false); } else { $this->display = 'add'; } $this->fields_value = array( 'cover' => $cover ? $cover : false, 'cover_size' => $cover ? filesize(_PS_MODULE_DIR_.'ph_simpleblog/covers/'.$obj->id.'.'.$obj->cover) / 1000 : false, 'featured' => $featured ? $featured : false, 'featured_size' => $featured ? filesize(_PS_MODULE_DIR_.'ph_simpleblog/featured/'.$obj->id.'.'.$obj->featured) / 1000 : false, ); $obj->tags = SimpleBlogTag::getPostTags($obj->id); $this->tpl_form_vars['PS_ALLOW_ACCENTED_CHARS_URL'] = (int) Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'); $this->tpl_form_vars['languages'] = $this->_languages; $this->tpl_form_vars['simpleblogpost'] = $obj; if (isset($obj->id) && $obj->access) { $groupAccess = unserialize($obj->access); foreach ($groupAccess as $groupAccessID => $value) { $groupBox = 'groupBox_'.$groupAccessID; $this->fields_value[$groupBox] = $value; } } else { $groups = Group::getGroups($this->context->language->id); $preselected = array( Configuration::get('PS_UNIDENTIFIED_GROUP'), Configuration::get('PS_GUEST_GROUP'), Configuration::get('PS_CUSTOMER_GROUP'), ); foreach ($groups as $group) { $this->fields_value['groupBox_'.$group['id_group']] = (in_array($group['id_group'], $preselected)); } } if (!isset($obj->id)) { $this->fields_value['date_add'] = date('Y-m-d H:i:s'); } $available_categories = SimpleBlogCategory::getCategories($this->context->language->id, true, false); foreach ($available_categories as &$category) { if ($category['is_child']) { $category['name'] = '     '.$category['name']; } } $authors = array(); $authors = SimpleBlogPostAuthor::getAll(); array_unshift($authors, array('name' => $this->l('Custom'), 'id_simpleblog_author' => 0)); $i = 0; $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('SimpleBlog Post'), 'icon' => 'icon-folder-close', ), 'input' => array( array( 'type' => 'select', 'label' => $this->l('Post type:'), 'name' => 'id_simpleblog_post_type', 'required' => true, 'options' => array( 'id' => 'id_simpleblog_post_type', 'query' => SimpleBlogPostType::getAll(), 'name' => 'name', ), ), array( 'type' => 'select', 'label' => $this->l('Category:'), 'name' => 'id_simpleblog_category', 'required' => true, 'options' => array( 'id' => 'id', 'query' => $available_categories, 'name' => 'name', ), ), array( 'type' => 'select', 'label' => $this->l('Post author:'), 'name' => 'id_simpleblog_author', 'required' => false, 'options' => array( 'id' => 'id_simpleblog_author', 'query' => $authors, 'name' => 'name', ), ), array( 'type' => 'text', 'label' => $this->l('Author:'), 'name' => 'author', 'form_group_class' => 'post_author' ), array( 'type' => 'text', 'label' => $this->l('Title:'), 'name' => 'title', 'required' => true, 'lang' => true, 'id' => 'name', 'class' => 'copyNiceUrl', ), array( 'type' => 'textarea', 'label' => $this->l('Short content:'), 'name' => 'short_content', 'lang' => true, 'rows' => 5, 'cols' => 40, 'autoload_rte' => true, ), array( 'type' => 'textarea', 'label' => $this->l('Full post content:'), 'name' => 'content', 'lang' => true, 'rows' => 15, 'cols' => 40, 'autoload_rte' => true, ), array( 'type' => 'tags', 'label' => $this->l('Tags:'), 'desc' => $this->l('separate by comma for eg. ipod, apple, something'), 'name' => 'tags', 'required' => false, 'lang' => true, ), array( 'type' => 'switch', 'label' => $this->l('Featured?'), 'name' => 'is_featured', 'required' => false, 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'is_featured_on', 'value' => 1, 'label' => $this->l('Yes'), ), array( 'id' => 'is_featured_off', 'value' => 0, 'label' => $this->l('No'), ), ), ), array( 'type' => 'switch', 'label' => $this->l('Displayed:'), 'name' => 'active', 'required' => false, 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled'), ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled'), ), ), ), array( 'type' => 'radio', 'label' => $this->l('Allow comments?'), 'name' => 'allow_comments', 'required' => false, 'class' => 't', 'values' => array( array( 'id' => 'allow_comments_1', 'value' => 1, 'label' => $this->l('Yes'), ), array( 'id' => 'allow_comments_2', 'value' => 2, 'label' => $this->l('No'), ), array( 'id' => 'allow_comments_3', 'value' => 3, 'label' => $this->l('Use global setting'), ), ), ), ), 'submit' => array( 'title' => $this->l('Save and stay'), 'stay' => true, ), ); $i++; if (isset($obj->id)) { $this->addjQueryPlugin(array( 'thickbox', 'ajaxfileupload', )); // Get images $images = SimpleBlogPostImage::getAllById($obj->id); foreach ($images as $k => $image) { $images[$k] = new SimpleBlogPostImage($image['id_simpleblog_post_image']); } $image_uploader = new HelperImageUploader('file'); $image_uploader ->setMultiple(!(Tools::getUserBrowser() == 'Apple Safari' && Tools::getUserPlatform() == 'Windows')) ->setUseAjax(true) ->setUrl(Context::getContext()->link->getAdminLink('AdminSimpleBlogPosts').'&ajax=1&id_simpleblog_post='.(int) $obj->id.'&action=addPostImages'); $this->tpl_form_vars['images'] = $images; $this->tpl_form_vars['image_uploader'] = $image_uploader->render(); $description = ''; if ($obj->post_type == 'post') { $description = $this->l('Specific post type options are not available for default "Post" type. Change post type to see additional options.'); } // $gallery_styles = array(); // $gallery_styles[] = array('value' => 'default', 'label' => 'Static (image after image)'); // $gallery_styles[] = array('value' => 'slider', 'label' => 'Slider (BxSlider)'); // $gallery_styles[] = array('value' => 'metro', 'label' => 'Metro (Windows like) gallery'); // $gallery_styles[] = array('value' => 'masonry', 'label' => 'Masonry (Pinterest like) gallery'); $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('Post type options'), 'icon' => 'icon-folder-close', ), 'description' => $description, 'input' => array( array( 'type' => 'text', 'label' => $this->l('External URL:'), 'name' => 'external_url', 'form_group_class' => 'simpleblog-post-type simpleblog-post-type-'.SimpleBlogPostType::getIdBySlug('url'), 'lang' => true, ), array( 'type' => 'textarea', 'label' => $this->l('Video embed code:'), 'name' => 'video_code', 'lang' => true, 'form_group_class' => 'simpleblog-post-type simpleblog-post-type-'.SimpleBlogPostType::getIdBySlug('video'), 'desc' => $this->l('Remember to "Allow iframes on HTML fields" in Preferences -> General'), ), array( 'type' => 'file', 'multiple' => true, 'ajax' => true, 'name' => 'post_images', 'label' => $this->l('Add images to gallery'), 'required' => false, 'lang' => false, 'form_group_class' => 'simpleblog-post-type simpleblog-post-type-'.SimpleBlogPostType::getIdBySlug('gallery'), ), // array( // 'type' => 'select', // 'name' => 'options[gallery_style]', // 'label' => $this->l('Choose how to display your gallery'), // 'form_group_class' => 'simpleblog-post-type simpleblog-post-type-'.SimpleBlogPostType::getIdBySlug('gallery'), // 'options' => array( // 'id' => 'value', // 'query' => $gallery_styles, // 'name' => 'label', // ) // ), ), 'submit' => array( 'title' => $this->l('Save and stay'), 'stay' => true, ), ); $i++; } else { $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('Post type options'), 'icon' => 'icon-folder-close', ), 'description' => $this->l('Specific post type options will be available after saving post'), ); $i++; } $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('Post Images'), 'icon' => 'icon-picture', ), 'input' => array( array( 'type' => 'file', 'label' => $this->l('Post cover:'), 'display_image' => true, 'name' => 'cover', 'desc' => $this->l('Upload a image from your computer.'), ), array( 'type' => 'file', 'label' => $this->l('Post featured image:'), 'display_image' => true, 'name' => 'featured', 'desc' => $this->l('Upload a image from your computer. Featured image will be displayed only if you want on the single post page.'), ), ), 'submit' => array( 'title' => $this->l('Save and stay'), 'stay' => true, ), ); $i++; $available_products = array(); if ($obj->id_product) { $available_products = self::getSimpleProducts($this->context->language->id, $obj->id_product); foreach ($available_products as &$available_related_product) { if (empty($available_related_product['product_name'])) { if (isset($available_related_product['name']) && !empty($available_related_product['name'])) { $available_related_product['product_name'] = $available_related_product['name']; } } } } $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('Related products'), ), 'input' => array( array( 'type' => 'select', 'label' => $this->l('Product:'), 'name' => 'id_product[]', 'id' => 'select_product', 'multiple' => true, 'required' => false, 'options' => array( 'id' => 'id_product', 'query' => $available_products, 'name' => 'product_name', ), ), ), 'submit' => array( 'title' => $this->l('Save and stay'), 'stay' => true, ), ); $i++; $this->fields_value['id_product[]'] = explode(',', $obj->id_product); $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('SEO'), 'icon' => 'icon-folder-close', ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Meta title:'), 'name' => 'meta_title', 'lang' => true, ), array( 'type' => 'text', 'label' => $this->l('Meta description:'), 'name' => 'meta_description', 'lang' => true, ), array( 'type' => 'text', 'label' => $this->l('Meta keywords:'), 'name' => 'meta_keywords', 'lang' => true, ), array( 'type' => 'text', 'label' => $this->l('Friendly URL:'), 'name' => 'link_rewrite', 'required' => true, 'lang' => true, ), ), 'submit' => array( 'title' => $this->l('Save and stay'), 'stay' => true, ), ); $i++; $unidentified = new Group(Configuration::get('PS_UNIDENTIFIED_GROUP')); $guest = new Group(Configuration::get('PS_GUEST_GROUP')); $default = new Group(Configuration::get('PS_CUSTOMER_GROUP')); $unidentified_group_information = sprintf($this->l('%s - All people without a valid customer account.'), ''.$unidentified->name[$this->context->language->id].''); $guest_group_information = sprintf($this->l('%s - Customer who placed an order with the guest checkout.'), ''.$guest->name[$this->context->language->id].''); $default_group_information = sprintf($this->l('%s - All people who have created an account on this site.'), ''.$default->name[$this->context->language->id].''); $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('Availability'), ), 'input' => array( array( 'type' => 'datetime', 'label' => $this->l('Publication date:'), 'name' => 'date_add', 'desc' => $this->l('Remember to set correctly your timezone in Blog for PrestaShop -> Settings. Current timezone:').' '.Configuration::get('PH_BLOG_TIMEZONE').', '.$this->l('current time with this setting:').' '.SimpleBlogHelper::now(Configuration::get('PH_BLOG_TIMEZONE')), 'required' => true, ), array( 'type' => 'group', 'label' => $this->l('Group access'), 'name' => 'groupBox', 'values' => Group::getGroups(Context::getContext()->language->id), 'info_introduction' => $this->l('You now have three default customer groups.'), 'unidentified' => $unidentified_group_information, 'guest' => $guest_group_information, 'customer' => $default_group_information, 'hint' => $this->l('Mark all of the customer groups which you would like to have access to this category.'), ), ), 'submit' => array( 'title' => $this->l('Save and stay'), 'stay' => true, ), ); $i++; if (Shop::isFeatureActive()) { $this->fields_form[$i]['form'] = array( 'legend' => array( 'title' => $this->l('Shop association:'), ), 'input' => array( array( 'type' => 'shop', 'label' => $this->l('Shop association:'), 'name' => 'checkBoxShopAsso', ), ), ); } $this->multiple_fieldsets = true; return parent::renderForm(); } public function postProcess() { if (Tools::getValue('id_simpleblog_post', 0) || Tools::getValue('submitAddsimpleblog_post', 0)) { if (Tools::getValue('id_product')) { $_POST['id_product'] = implode(Tools::getValue('id_product'), ','); } else { $_POST['id_product'] = ''; } } if (Tools::isSubmit('viewsimpleblog_post') && ($id_simpleblog_post = (int) Tools::getValue('id_simpleblog_post')) && ($SimpleBlogPost = new SimpleBlogPost($id_simpleblog_post, $this->context->language->id)) && Validate::isLoadedObject($SimpleBlogPost)) { Tools::redirectAdmin(Context::getContext()->link->getModuleLink('ph_simpleblog', 'single', array('rewrite' => $SimpleBlogPost->link_rewrite, 'sb_category' => $SimpleBlogPost->category_rewrite))); } if (Tools::isSubmit('deleteCover')) { SimpleBlogPost::deleteCover((int) Tools::getValue('id_simpleblog_post')); Tools::redirectAdmin(self::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminSimpleBlogPosts').'&conf=7&id_simpleblog_post='.(int) Tools::getValue('id_simpleblog_post').'&updatesimpleblog_post'); } if (Tools::isSubmit('deleteFeatured')) { SimpleBlogPost::deleteFeatured((int) Tools::getValue('id_simpleblog_post')); Tools::redirectAdmin(self::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminSimpleBlogPosts').'&conf=7&id_simpleblog_post='.(int) Tools::getValue('id_simpleblog_post').'&updatesimpleblog_post'); } if (Tools::isSubmit('is_featuredsimpleblog_post')) { $SimpleBlogPost = new SimpleBlogPost((int) Tools::getValue('id_simpleblog_post')); $SimpleBlogPost->is_featured = !$SimpleBlogPost->is_featured; $SimpleBlogPost->update(); Tools::redirectAdmin(self::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminSimpleBlogPosts').'&conf=4'); } return parent::postProcess(); } public function handlePostImage($idPost, $type) { if (isset($_FILES[$type]) && (int) $_FILES[$type]['size'] > 0) { $extension = pathinfo($_FILES[$type]['name'], PATHINFO_EXTENSION); if (Db::getInstance()->update( 'simpleblog_post', array( $type => $extension ), 'id_simpleblog_post = '.(int) $idPost )) { $this->handlePostImageUpload($type, $idPost, $_FILES[$type]['tmp_name'], $extension); return $extension; } } return false; } public function handlePostImageUpload($type, $idPost, $file, $extension = 'jpg') { $fileTmpLoc = $file; if ($type == 'cover') { $thumbX = Configuration::get('PH_BLOG_THUMB_X'); $thumbY = Configuration::get('PH_BLOG_THUMB_Y'); $thumb_wide_X = Configuration::get('PH_BLOG_THUMB_X_WIDE'); $thumb_wide_Y = Configuration::get('PH_BLOG_THUMB_Y_WIDE'); $thumbMethod = Configuration::get('PH_BLOG_THUMB_METHOD'); $origPath = _PS_MODULE_DIR_.'ph_simpleblog/covers/'.$idPost.'.'.$extension; $pathAndName = _PS_MODULE_DIR_.'ph_simpleblog/covers/'.$idPost.'-thumb.'.$extension; $pathAndNameWide = _PS_MODULE_DIR_.'ph_simpleblog/covers/'.$idPost.'-wide.'.$extension; $tmp_location = _PS_TMP_IMG_DIR_.'ph_simpleblog_'.$idPost.'.'.$extension; if (file_exists($tmp_location)) { @unlink($tmp_location); } $tmp_location_list = _PS_TMP_IMG_DIR_.'ph_simpleblog_'.$idPost.'-list.'.$extension; if (file_exists($tmp_location_list)) { @unlink($tmp_location_list); } try { $orig = PhpThumbFactory::create($fileTmpLoc); $thumb = PhpThumbFactory::create($fileTmpLoc); $thumbWide = PhpThumbFactory::create($fileTmpLoc); } catch (Exception $e) { echo $e; } if ($thumbMethod == '1') { $thumb->adaptiveResize($thumbX, $thumbY); $thumbWide->adaptiveResize($thumb_wide_X, $thumb_wide_Y); } elseif ($thumbMethod == '2') { $thumb->cropFromCenter($thumbX, $thumbY); $thumbWide->cropFromCenter($thumb_wide_X, $thumb_wide_Y); } $orig->save($origPath); $thumb->save($pathAndName); $thumbWide->save($pathAndNameWide); ImageManager::thumbnail( _PS_MODULE_DIR_.'ph_simpleblog/covers/'.$idPost.'.'.$extension, 'ph_simpleblog_'.$idPost.'.'.$extension, 350, $extension, true, true ); } if ($type == 'featured') { $origPath = _PS_MODULE_DIR_.'ph_simpleblog/featured/'.$idPost.'.'.$extension; try { $orig = PhpThumbFactory::create($fileTmpLoc); } catch (Exception $e) { echo $e; } try { $orig->save($origPath); } catch (Exception $e) { echo $e; } ImageManager::thumbnail( _PS_MODULE_DIR_.'ph_simpleblog/featured/'.$idPost.'.'.$extension, 'ph_simpleblog_featured_'.$idPost.'.'.$extension, 350, $extension, true, true ); } } public function assignGroupsToPost() { $groups = Group::getGroups($this->context->language->id); $groupBox = Tools::getValue('groupBox', array()); if (!$groupBox) { foreach ($groups as $group) { $access[$group['id_group']] = false; } } else { foreach ($groups as $group) { $access[$group['id_group']] = in_array($group['id_group'], $groupBox); } } $access = serialize($access); $_POST['access'] = $access; } public function processAdd() { $languages = Language::getLanguages(false); $this->assignGroupsToPost(); $post = parent::processAdd(); if (!$post) { return $post; } $post->cover = $this->handlePostImage($post->id, 'cover'); $post->featured = $this->handlePostImage($post->id, 'featured'); $this->updateTags($languages, $post); $this->updateAssoShop($post->id); return $post; } public function processUpdate() { $languages = Language::getLanguages(false); $this->assignGroupsToPost(); $idPost = (int) Tools::getValue('id_simpleblog_post'); if ($cover = $this->handlePostImage($idPost, 'cover')) { $_POST['cover'] = $cover; } if ($featured = $this->handlePostImage($idPost, 'featured')) { $_POST['featured'] = $featured; } $post = parent::processUpdate(); if (!$post) { return $post; } $this->updateTags($languages, $post); return $post; } public function updateTags($languages, $post) { $tag_success = true; foreach ($languages as $language) { if ($value = Tools::getValue('tags_'.$language['id_lang'])) { if (!Validate::isTagsList($value)) { $this->errors[] = sprintf( Tools::displayError('The tags list (%s) is invalid.'), $language['name'] ); } } } if (!SimpleBlogTag::deleteTagsForPost((int) $post->id)) { $this->errors[] = Tools::displayError('An error occurred while attempting to delete previous tags.'); } foreach ($languages as $language) { if ($value = Tools::getValue('tags_'.$language['id_lang'])) { $tag_success &= SimpleBlogTag::addTags($language['id_lang'], (int) $post->id, $value); } } if (!$tag_success) { $this->errors[] = Tools::displayError('An error occurred while adding tags.'); } } public function ajaxProcessAddPostImages() { $image_dir = _SIMPLEBLOG_GALLERY_DIR_; $image_uploader = new HelperImageUploader('file'); $image_uploader->setAcceptTypes(array('jpeg', 'gif', 'png', 'jpg')); $files = $image_uploader->process(); foreach ($files as &$file) { $SimpleBlogPostImage = new SimpleBlogPostImage(); $SimpleBlogPostImage->id_simpleblog_post = (int) Tools::getValue('id_simpleblog_post'); $SimpleBlogPostImage->position = SimpleBlogPostImage::getNewLastPosition((int) Tools::getValue('id_simpleblog_post')); $SimpleBlogPostImage->add(); $filenameParts = explode('.', $file['name']); $destFiles = array( 'original' => $image_dir.$SimpleBlogPostImage->id.'-'.$SimpleBlogPostImage->id_simpleblog_post.'-'.Tools::link_rewrite($filenameParts[0]).'.jpg', 'thumbnail' => $image_dir.$SimpleBlogPostImage->id.'-'.$SimpleBlogPostImage->id_simpleblog_post.'-'.Tools::link_rewrite($filenameParts[0]).'-thumb.jpg', 'square' => $image_dir.$SimpleBlogPostImage->id.'-'.$SimpleBlogPostImage->id_simpleblog_post.'-'.Tools::link_rewrite($filenameParts[0]).'-square.jpg', 'wide' => $image_dir.$SimpleBlogPostImage->id.'-'.$SimpleBlogPostImage->id_simpleblog_post.'-'.Tools::link_rewrite($filenameParts[0]).'-wide.jpg', ); if (!ImageManager::resize($file['save_path'], $destFiles['original'], null, null, 'jpg', false, $error)) { switch ($error) { case ImageManager::ERROR_FILE_NOT_EXIST: $file['error'] = Tools::displayError('An error occurred while copying image, the file does not exist anymore.'); $SimpleBlogPostImage->delete(); break; case ImageManager::ERROR_FILE_WIDTH: $file['error'] = Tools::displayError('An error occurred while copying image, the file width is 0px.'); $SimpleBlogPostImage->delete(); break; case ImageManager::ERROR_MEMORY_LIMIT: $file['error'] = Tools::displayError('An error occurred while copying image, check your memory limit.'); $SimpleBlogPostImage->delete(); break; default: $file['error'] = Tools::displayError('An error occurred while copying image.'); $SimpleBlogPostImage->delete(); break; } continue; } else { $SimpleBlogPostImage->image = $SimpleBlogPostImage->id.'-'.$SimpleBlogPostImage->id_simpleblog_post.'-'.Tools::link_rewrite($filenameParts[0]); $SimpleBlogPostImage->update(); $thumbX = Configuration::get('PH_BLOG_THUMB_X'); $thumbY = Configuration::get('PH_BLOG_THUMB_Y'); $thumb_wide_X = Configuration::get('PH_BLOG_THUMB_X_WIDE'); $thumb_wide_Y = Configuration::get('PH_BLOG_THUMB_Y_WIDE'); $thumbMethod = Configuration::get('PH_BLOG_THUMB_METHOD'); try { $orig = PhpThumbFactory::create($destFiles['original']); $thumb = PhpThumbFactory::create($destFiles['original']); $square = PhpThumbFactory::create($destFiles['original']); $wide = PhpThumbFactory::create($destFiles['original']); } catch (Exception $e) { echo $e; } if ($thumbMethod == '1') { $thumb->adaptiveResize($thumbX, $thumbY); $square->adaptiveResize(800, 800); $wide->adaptiveResize($thumb_wide_X, $thumb_wide_Y); } elseif ($thumbMethod == '2') { $thumb->cropFromCenter($thumbX, $thumbY); $square->cropFromCenter(800, 800); $wide->cropFromCenter($thumb_wide_X, $thumb_wide_Y); } $orig->save($destFiles['original']); $thumb->save($destFiles['thumbnail']); $square->save($destFiles['square']); $wide->save($destFiles['wide']); unlink($file['save_path']); unset($file['save_path']); $file['status'] = 'ok'; $file['name'] = $SimpleBlogPostImage->id.'-'.$SimpleBlogPostImage->id_simpleblog_post.'-'.Tools::link_rewrite($filenameParts[0]); $file['id'] = $SimpleBlogPostImage->id; $file['position'] = $SimpleBlogPostImage->position; $file['path'] = $image_dir; } } die(Tools::jsonEncode(array($image_uploader->getName() => $files))); } public function ajaxProcessUpdateImagePosition() { $response = false; if ($json = Tools::getValue('json')) { $response = true; $json = stripslashes($json); $images = Tools::jsonDecode($json, true); foreach ($images as $id_simpleblog_post_image => $position) { $SimpleBlogPostImage = new SimpleBlogPostImage((int) $id_simpleblog_post_image); $SimpleBlogPostImage->position = (int) $position; $response &= $SimpleBlogPostImage->update(); } } if ($response) { $this->jsonConfirmation($this->_conf[25]); } else { $this->jsonError(Tools::displayError('An error occurred while attempting to move this picture.')); } } public function ajaxProcessDeletePostImage() { $response = true; $SimpleBlogPostImage = new SimpleBlogPostImage((int) Tools::getValue('id_simpleblog_post_image')); $response &= $SimpleBlogPostImage->delete(); if ($response) { die(Tools::jsonEncode( array( 'status' => 'ok', 'id' => $SimpleBlogPostImage->id_simpleblog_post_image, 'confirmations' => array($this->_conf[7]), ) )); } else { $this->jsonError(Tools::displayError('An error occurred while attempting to delete the product image.')); } } public static function getSimpleProducts($id_lang, $products = false) { $context = Context::getContext(); $front = true; if (!in_array($context->controller->controller_type, array('front', 'modulefront'))) { $front = false; } $sql = 'SELECT p.`id_product`, pl.`name`, p.`reference`, CONCAT(pl.`name`, \' REF: \', p.reference) product_name FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` '.Shop::addSqlRestrictionOnLang('pl').') WHERE pl.`id_lang` = '.(int) $id_lang.' '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : ''); if ($products) { $sql .= ' AND pl.`id_product` IN('.$products.') '; } $sql .= 'ORDER BY pl.`name`'; return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); } public function ajaxProcessSearchProducts() { $context = Context::getContext(); $id_lang = $context->language->id; $sql = 'SELECT p.`id_product`, pl.`link_rewrite`, pl.`name`, p.`reference`, CONCAT(pl.`name`, \' REF: \', p.reference) product_name FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` '.Shop::addSqlRestrictionOnLang('pl').') WHERE pl.`id_lang` = '.(int) $id_lang.' AND pl.`name` LIKE \'%'.pSQL(Tools::getValue('q')).'%\' OR pl.`id_lang` = '.(int) $id_lang.' AND p.`reference` LIKE \'%'.pSQL(Tools::getValue('q')).'%\' ORDER BY pl.`name`'; $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if ($results) { foreach ($results as &$result) { $result['text'] = $result['product_name']; $result['id'] = $result['id_product']; $cover = Product::getCover($result['id_product']); if ($cover) { $result['image'] = $context->link->getImageLink($result['link_rewrite'], $cover['id_image'], ImageType::getFormatedName('small')); } } die(Tools::jsonEncode($results)); } else { $this->jsonError(Tools::displayError('Nothing found.')); } } }