public function saveAjaxAction(\Difra\Param\AjaxInt $perpage, \Difra\Param\AjaxString $imgSizes, \Difra\Param\AjaxString $format, \Difra\Param\AjaxCheckbox $waterOn, \Difra\Param\AjaxCheckbox $waterPreviewOn, \Difra\Param\AjaxString $waterText = null, \Difra\Param\AjaxFile $waterFile = null) { $imgSizes2 = explode("\n", str_replace("\r", '', $imgSizes)); $imgSizes3 = []; foreach ($imgSizes2 as $str) { $arr = explode(' ', $str); if (sizeof($arr) != 3 or !ctype_alpha($arr[0]) or !ctype_digit($arr[1]) or !ctype_digit($arr[2]) or $arr[0] == 'f' or isset($imgSizes3[$arr[0]]) or !$arr[1] or !$arr[2]) { $this->ajax->invalid('imgSizes'); return; } $imgSizes3[$arr[0]] = [(int) $arr[1], (int) $arr[2]]; } $conf = \Difra\Config::getInstance(); $conf->setValue('gallery', 'perpage', $perpage->val()); $conf->setValue('gallery', 'imgSizes', $imgSizes3); $conf->setValue('gallery', 'watermark', $waterOn->val()); $conf->setValue('gallery', 'waterOnPreview', $waterPreviewOn->val()); $waterText = !is_null($waterText) ? $waterText->val() : ''; $conf->setValue('gallery', 'waterText', $waterText); $conf->setValue('gallery', 'format', $format->val()); if (!is_null($waterFile)) { $path = DIR_DATA . 'gallery/'; @mkdir($path, 0777, true); file_put_contents($path . 'watermark.png', \Difra\Libs\Images::convert($waterFile->val(), 'png')); } $this->ajax->notify($this->locale->getXPath('gallery/adm/config/saved')); }
/** * Сохраняет в нужном месте картинку анонса * @param $id * @param $fileData * @throws Exception */ public function saveImage($id, $fileData) { @mkdir($this->imagePath, 0777, true); if (!is_writeable($this->imagePath)) { throw new Exception('Directory is not writeable!'); } $img = $fileData instanceof AjaxFile ? $fileData->val() : $fileData; try { $rawImg = Images::data2image($img); $newImg = Images::scaleAndCrop($rawImg, $this->settings['width'], $this->settings['height'], 'png'); $bigImg = Images::scaleAndCrop($rawImg, $this->settings['bigWidth'], $this->settings['bigHeight'], 'png'); } catch (Exception $ex) { throw new Exception('Bad image format. ' . $ex->getMessage()); } try { file_put_contents($this->imagePath . '/' . $id . '.png', $newImg); file_put_contents($this->imagePath . '/' . $id . '-big.png', $bigImg); } catch (Exception $ex) { throw new Exception("Can't save image"); } }
/** * Upload image */ public function indexAction() { \Difra\View::$rendered = true; if (!isset($_GET['CKEditorFuncNum'])) { die; } $funcnum = $_GET['CKEditorFuncNum']; if (!isset($_FILES['upload']) or $_FILES['upload']['error'] != UPLOAD_ERR_OK) { die("<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction({$funcnum}, '','" . \Difra\Locales::get('editor/upload-error') . "');</script>"); } $img = Images::convert(file_get_contents($_FILES['upload']['tmp_name'])); if (!$img) { die("<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction({$funcnum},'','" . \Difra\Locales::get('editor/upload-notimage') . "');</script>"); } try { $link = \Difra\Libs\Vault::add($img); $link = "/up/tmp/{$link}"; } catch (\Difra\Exception $ex) { die("<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction({$funcnum},'','" . $ex->getMessage() . "');</script>"); } die('<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(' . $funcnum . ",'" . $link . "');</script>"); }
/** * Сохраняет картинки работы портфолио * @param int $id * @param array $images * @throws \Difra\Exception */ public static function saveImages($id, $images) { if (!$images) { return; } elseif ($images instanceof \Difra\Param\AjaxFile) { $images = [$images->val()]; } elseif ($images instanceof \Difra\Param\AjaxFiles) { $images = $images->val(); } elseif (!is_array($images)) { $images = [$images]; } $imgSizes = self::getSizes(); if (empty($imgSizes)) { throw new \Difra\Exception('Not set image sizes for portfolio'); } $savePath = DIR_DATA . 'portfolio/'; @mkdir($savePath, 0777, true); $db = \Difra\MySQL::getInstance(); $pos = intval($db->fetchOne("SELECT MAX(`position`) FROM `portfolio_images` WHERE `portfolio`='" . intval($id) . "'")) + 1; foreach ($images as $img) { $query = "INSERT INTO `portfolio_images` SET `portfolio`='" . intval($id) . "', `position`='" . $pos . "'"; $db->query($query); $imgId = $db->getLastId(); foreach ($imgSizes as $k => $size) { if ($size) { $tmpImg = Images::createThumbnail($img, $size[0], $size[1]); } else { $tmpImg = Images::convert($img, 'png'); } $fSize = file_put_contents($savePath . $imgId . '-' . $k . '.png', $tmpImg); if ($fSize === false) { throw new \Difra\Exception('It is impossible to save the picture in the data folder.'); } } ++$pos; } }
public static function saveSettings($settings) { if (!empty($settings)) { if (isset($settings['logo'])) { $logoImage = $settings['logo']->val(); unset($settings['logo']); @mkdir(DIR_DATA . 'rss', 0777, true); try { $rawImg = Images::createThumbnail($logoImage, 256, 256, 'png'); } catch (\Difra\Exception $ex) { throw new \Difra\Exception('Bad image format.'); } try { file_put_contents(DIR_DATA . 'rss' . '/rsslogo.png', $rawImg); } catch (\Difra\Exception $ex) { throw new \Difra\Exception("Can't save image"); } } \Difra\Config::getInstance()->set('rss', $settings); } }
/** * Добавление изображения * @param string|\Difra\Param\AjaxFile $image * @param bool $main * @throws \Difra\Exception */ public function addImage($image, $main = false) { $path = DIR_DATA . 'catalog/items/'; @mkdir($path, 0777, true); $this->save(); $this->load(); $useScaleAndCrop = \Difra\Config::getInstance()->getValue('catalog', 'usescale'); try { $rawImg = Images::data2image($image); } catch (\Difra\Exception $ex) { throw new \Difra\Exception('Bad image format.'); } $db = MySQL::getInstance(); $db->query('INSERT INTO `catalog_images` SET ' . "`item`='" . $db->escape($this->id) . "'," . "`main`=" . ($main ? '1' : '0')); $imgId = $db->getLastId(); foreach ($this->imgSizes as $k => $size) { if ($size) { if (is_null($useScaleAndCrop) || intval($useScaleAndCrop) == 0) { $newImg = Images::createThumbnail($rawImg, $size[0], $size[1], 'png'); } else { $newImg = Images::scaleAndCrop($rawImg, $size[0], $size[1], 'png'); } } else { $newImg = Images::convert($rawImg, 'png'); } if (file_put_contents($path . $imgId . $k . '.png', $newImg) === false) { throw new \Difra\Exception('Can\'t save image file.'); } } }
public function updateValue($id, $value, $image = null) { $this->load(); $db = \Difra\MySQL::getInstance(); $db->query("UPDATE `catalog_ext_sets` SET `name`='" . $db->escape($value) . "' WHERE `id`='" . $db->escape($id) . "'"); if ($image and $this->set & self::SET_IMAGES) { $path = DIR_DATA . 'catalog/ext/'; @mkdir($path, 0777, true); $smallImage = \Difra\Libs\Images::scaleAndCrop($image, $this->imgWidth, $this->imgHeight, 'png', true); if (!$smallImage) { return self::BAD_IMAGE; } file_put_contents($path . $id . '.png', $smallImage); } return $id; }
/** * Сохраняет постер для видео * @param $video * @param $poster */ public function savePoster($video, $poster) { $db = \Difra\MySQL::getInstance(); $video = $db->escape($video); if (!is_dir($this->postersDir)) { return 'badPosterDir'; } foreach ($this->videoSizes as $size) { $res = @file_put_contents($this->postersDir . '/' . $video . '_' . $size . '_0' . '.png', Images::createThumbnail($poster, $size, $size, 'png')); if ($res === false) { return 'badPosterSave'; } } // отдельно сохраняем маленькую превьюшку для админки $res = @file_put_contents($this->postersDir . '/' . $video . '_thumb.png', Images::createThumbnail($poster, 78, 78, 'png')); if ($res === false) { return 'badPosterSave'; } $db->query("UPDATE `videos` SET `hasPoster`=1 WHERE `video`='" . $video . "'"); return true; }
/** * @param string|\Difra\Param\AjaxFile|\Difra\Param\AjaxFiles $image */ public function addImage($image) { if (!$image) { return; } elseif ($image instanceof \Difra\Param\AjaxFile) { $image = [$image->val()]; } elseif ($image instanceof \Difra\Param\AjaxFiles) { $image = $image->val(); } elseif (!is_array($image)) { $image = [$image]; } $path = DIR_DATA . 'gallery/'; @mkdir($path, 0777, true); $this->save(); $this->load(); $Config = \Difra\Config::getInstance(); $waterMarkOn = $Config->getValue('gallery', 'watermark'); $waterMarkOnPreview = $Config->getValue('gallery', 'waterOnPreview'); $waterText = $Config->getValue('gallery', 'waterText'); $watermarkImage = null; if (file_exists($path . 'watermark.png')) { $watermarkImage = file_get_contents($path . 'watermark.png'); } $db = \Difra\MySQL::getInstance(); $pos = intval($db->fetchOne("SELECT MAX(`position`) FROM `gallery_photos` WHERE `album`='" . $db->escape($this->id) . "'")) + 1; foreach ($image as $img) { $db->query('INSERT INTO `gallery_photos` SET ' . "`album`='" . $db->escape($this->id) . "'," . "`position`='{$pos}'"); $imgId = $db->getLastId(); foreach ($this->imgSizes as $k => $size) { if ($size) { $tmpImg = Images::scaleAndCrop($img, $size[0], $size[1], $this->format); if ($waterMarkOn && $waterMarkOnPreview) { if ($waterText != '') { $tmpImg = Images::setWatermark($tmpImg, $waterText, null, $this->format, 7); } elseif ($watermarkImage) { $tmpImg = Images::setWatermark($tmpImg, null, $watermarkImage, $this->format, 7); } } file_put_contents($path . $imgId . $k . '.' . $this->format, $tmpImg); } else { $tmpImg = Images::convert($img, $this->format); if ($waterMarkOn) { if ($waterText != '') { $tmpImg = Images::setWatermark($tmpImg, $waterText, null, $this->format, 15); } elseif ($watermarkImage) { $tmpImg = Images::setWatermark($tmpImg, null, $watermarkImage, $this->format, 15); } } file_put_contents($path . $imgId . $k . '.' . $this->format, $tmpImg); } } ++$pos; } }