/** * Adds samples */ private function installSamples() { $languages = Language::getLanguages(false); $defaults['sample'] = $this->defaultConf; if ($this->isPS6) { $defaults['sample']['media']['max']['pos'] = 2; $defaults['sample']['media']['max']['lspace'] = 15; $defaults['sample']['media']['max']['rspace'] = 15; } $this->hook = array('sample'); $standardHooks = array('displayTop' => array(0 => 'sample')); if (Shop::isFeatureActive() && $this->context->shop->getContext() == Shop::CONTEXT_ALL) { $id_shops = Shop::getContextListShopID(); } else { $id_shops = array(0 => $this->getShopId()); } foreach ($id_shops as $id_shop) { $this->saveConfig('HOMESLIDERPRO_STANDARD', $standardHooks, (int) $id_shop); $this->saveConfig('HOMESLIDERPRO_HOOKS', $this->hook, (int) $id_shop); $this->saveSlideConfiguration($defaults, $id_shop); $folder = _PS_MODULE_DIR_ . $this->name . '/images/'; for ($i = 1; $i <= 5; ++$i) { $slide = new HomeSlidePro(); $slide->position = $i; $slide->active = 1; $slide->id_hook = 'sample'; $slide->has_area = 0; $resizeObj = new PerfectResize($folder . 'sample-' . $i . '.jpg'); $resizeObj->resizeImage($defaults['sample']['width'], $defaults['sample']['height'], 'crop'); $resizeObj->saveImage($folder . 'resize_' . 'sample-' . $i . '.jpg', 90); $resizeObj->resizeImage(60, 40, 'crop'); $resizeObj->saveImage($folder . 'thumb_' . 'sample-' . $i . '.jpg', 90); foreach ($languages as $language) { $slide->title[$language['id_lang']] = 'Sample ' . $i; $slide->description[$language['id_lang']] = 'This is a sample picture'; $slide->legend[$language['id_lang']] = 'sample-' . $i; $slide->url[$language['id_lang']] = 'http://www.syncrea.it'; $slide->image[$language['id_lang']] = 'sample-' . $i . '.jpg'; } $slide->add(true, false, (int) $id_shop); } } }
private function _postProcess() { $errors = array(); /* Processes Slider */ if (Tools::isSubmit('submitSlide')) { //get slide configuration $position = Tools::getValue('hook'); $confs = $this->configuration; $configuration = $confs[$position]; /* Sets ID if needed */ if (Tools::getValue('id_slide')) { $slide = new HomeSlidePro((int) Tools::getValue('id_slide')); if (!Validate::isLoadedObject($slide)) { $this->_html .= $this->displayError($this->l('Invalid id_slide')); return; } } else { $slide = new HomeSlidePro(); } /* Sets position */ $slide->position = (int) Tools::getValue('position'); /* Sets active */ $slide->active = (int) Tools::getValue('active_slide'); /* Sets new_window */ $slide->new_window = (int) Tools::getValue('new_window'); /* Sets has_area */ $slide->has_area = (int) Tools::getValue('has_area'); /* set hook */ $slide->id_hook = Tools::getValue('hook'); $languages = Language::getLanguages(false); $id_lang_default = (int) Configuration::get('PS_LANG_DEFAULT'); $usedefault = false; if ((int) Tools::getValue('crosslanguage') == 1) { $usedefault = true; if (isset($_FILES['image_' . $id_lang_default])) { $fileDefaultName = $_FILES['image_' . $id_lang_default]['name']; $typeDefault = strtolower(substr(strrchr($fileDefaultName, '.'), 1)); } } /* Sets each langue fields */ $salt = sha1(microtime()); $tempAreas = Tools::getValue('areas'); $areas = array(); if (!empty($tempAreas)) { // reset index of areas foreach ($tempAreas as $lang => $areaData) { $n = 0; foreach ($areaData as $area) { foreach ($area as $i => $field) { $area[$i] = $field; } $areas[$lang][$n] = $area; $n++; } } } /* quality for image resize */ $quality = isset($this->settings['img_ql']) ? $this->settings['img_ql'] : 90; foreach ($languages as $language) { $slide->title[$language['id_lang']] = Tools::getValue('title_' . $language['id_lang']); $slide->url[$language['id_lang']] = Tools::getValue('url_' . $language['id_lang']); $slide->legend[$language['id_lang']] = Tools::getValue('legend_' . $language['id_lang']); $slide->description[$language['id_lang']] = Tools::getValue('description_' . $language['id_lang']); $areaLang = $language['id_lang']; if (Tools::getValue('areacrosslang') == 1) { $areaLang = $id_lang_default; } if (isset($areas[$areaLang])) { $slide->areas[$language['id_lang']] = json_encode($areas[$areaLang], JSON_HEX_QUOT | JSON_HEX_TAG); } else { $slide->areas[$language['id_lang']] = ''; } $langID = $language['id_lang']; if ($usedefault) { $langID = $id_lang_default; } $type = strtolower(substr(strrchr($_FILES['image_' . $langID]['name'], '.'), 1)); $cleanFileName = str_replace('.' . $type, '', $_FILES['image_' . $langID]['name']); $cleanFileName = preg_replace("/[^a-zA-Z0-9.-]/", "", $cleanFileName); /* Uploads image and sets slide only if current language is the same */ if ($langID == $language['id_lang']) { $imagesize = array(); $imagesize = @getimagesize($_FILES['image_' . $langID]['tmp_name']); if (isset($_FILES['image_' . $langID]) && isset($_FILES['image_' . $langID]['tmp_name']) && !empty($_FILES['image_' . $langID]['tmp_name']) && !empty($imagesize) && in_array(strtolower(substr(strrchr($imagesize['mime'], '/'), 1)), array('jpg', 'gif', 'jpeg', 'png')) && in_array($type, array('jpg', 'gif', 'jpeg', 'png'))) { $fileName = $this->file_newname(_PS_MODULE_DIR_ . $this->module->name . '/images/', $cleanFileName, $type, $langID); //$temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS'); $temp_name = _PS_MODULE_DIR_ . $this->module->name . '/images/' . $fileName . '.' . $type; if ($error = PerfectResize::validateUpload($_FILES['image_' . $langID])) { $errors[] = $error; } elseif (!$temp_name || !move_uploaded_file($_FILES['image_' . $langID]['tmp_name'], $temp_name)) { return false; } else { // *** 1) Initialize / load image $resizeObj = new PerfectResize($temp_name); // *** 2) Resize image (options: exact, portrait, landscape, auto, crop) $resizeObj->resizeImage($configuration['width'], $configuration['height'], 'crop'); // *** 3) Save image $resizeObj->saveImage(_PS_MODULE_DIR_ . $this->module->name . '/images/resize_' . $fileName . '.' . $type, $quality); //creaThumb $resizeObj->resizeImage(60, 40, 'crop'); $resizeObj->saveImage(_PS_MODULE_DIR_ . $this->module->name . '/images/thumb_' . $fileName . '.' . $type, 90); } // save image into slide object $slide->image[$language['id_lang']] = $fileName . '.' . $type; } } elseif ($usedefault) { $fileName = $this->file_newname(_PS_MODULE_DIR_ . $this->module->name . '/images/', $cleanFileName, $type, $langID); $slide->image[$language['id_lang']] = $fileName . '.' . $typeDefault; } elseif (Tools::getValue('image_old_' . $language['id_lang']) != '') { $slide->image[$language['id_lang']] = Tools::getValue('image_old_' . $language['id_lang']); } } /* Processes if no errors */ if (!$errors) { /* Adds */ if (!Tools::getValue('id_slide')) { if (!$slide->add()) { $errors[] = $this->l('The slide could not be added.'); } else { $this->slide = $slide; } } elseif (!$slide->update()) { $errors[] = $this->l('The slide could not be updated.'); } } } elseif (Tools::isSubmit('delete_id_slide')) { $slide = new HomeSlidePro((int) Tools::getValue('delete_id_slide')); $res = $slide->delete(); if (!$res) { $this->_html .= $this->displayError('Could not delete'); } else { $this->_html .= $this->displayConfirmation($this->l('Slide deleted')); } } else { if (Tools::isSubmit('addHook')) { unset($_POST['sort']); $slideName = Tools::getValue('newSlide'); $slideName = strtolower(str_replace(' ', '_', $slideName)); $slideName = preg_replace('/[^a-za-z_\']/', '', $slideName); if (!empty($slideName) && $slideName != '') { //check if something is entered in hook name if (!in_array($slideName, $this->hook)) { //check if hook name is already used $this->hook[] = $slideName; //assign default configuration to the new slider $this->configuration[$slideName] = $this->defaultConfigs; //update the class array without a new query $this->module->saveConfig('HOMESLIDERPRO_HOOKS', $this->hook, (int) $this->module->getShopId()); $this->module->saveSlideConfiguration($this->configuration, $this->module->getShopId()); header("location:" . $_SERVER["REQUEST_URI"] . (isset($slide) && $slide->id ? '&id_slide=' . $slide->id : '')); } else { $errors[] = $this->l('Slider name already used.'); } } else { $errors[] = $this->l('Slider name cannot be empty.'); } } else { if (Tools::isSubmit('deleteHook')) { unset($_POST['sort']); $choiches = Tools::getValue('hooksetup'); if (!empty($choiches) && is_array($choiches)) { foreach ($choiches as $key => $hook) { $this->module->removeCatHook($hook); $slides = $this->module->getSlides(null, $hook); if ($slides) { foreach ($slides as $slide) { $slide = new HomeSlidePro((int) $slide['id_slide']); $slide->delete(); } } unset($this->hook[$key]); $this->module->deleteSlideConfiguration($hook); } $this->module->saveConfig('HOMESLIDERPRO_HOOKS', $this->hook, (int) $this->module->getShopId()); header("location:" . $_SERVER["REQUEST_URI"] . (isset($slide) && $slide->id ? '&id_slide=' . $slide->id : '')); } // save hooks and sort order } else { if (Tools::isSubmit('saveHooks')) { $error = false; $hooks_sort = Tools::getValue('sort'); $this->module->saveConfig('HOMESLIDERPRO_HOOKS', $hooks_sort, (int) $this->module->getShopId()); $standardHooks = Tools::getValue('standardHooks'); $this->module->saveConfig('HOMESLIDERPRO_STANDARD', $standardHooks, (int) $this->module->getShopId()); $catHooks = Tools::getValue('cat'); if ($this->checkduplicates($catHooks)) { foreach ($catHooks as $hook => $idCat) { if (Validate::isInt($idCat)) { if (!$this->module->saveCatHook($hook, $idCat)) { $error = true; } } else { if (empty($idCat) || $idCat == '') { $this->module->removeCatHook($hook); } else { $error = true; } } } } else { $error = true; $this->_html .= $this->displayError($this->l('Cannot set the same Category id on multiple hooks!')); } if (!$error) { $this->_html .= $this->displayConfirmation($this->l('Positions updated')); } header("location:" . $_SERVER["REQUEST_URI"] . (isset($slide) && $slide->id ? '&id_slide=' . $slide->id : '')); } } } } /* Display errors if needed */ if (count($errors)) { $this->_html .= $this->displayError(implode('<br />', $errors)); } elseif (Tools::isSubmit('submitSlide') && Tools::getValue('id_slide')) { $this->_html .= $this->displayConfirmation($this->l('Slide updated')); } elseif (Tools::isSubmit('submitSlide')) { $this->_html .= $this->displayConfirmation($this->l('Slide added')); } }