public function uploadAction() { $this->disableLayout(); $this->setNoRender(); $request = $this->getRequest(); if (!$request->isPost()) { exit; } /** * Authentication */ $phpSessionId = $request->getPost('PHPSESSID'); $session = Gio_Core_Session::getSessionById($phpSessionId); $json = new Services_JSON(); $user = null == $session || null == $session['data'] ? null : $json->decode($session['data']); if (null == $user) { return; } /** * Get config */ $configFile = MOD_DIR . DS . 'upload' . DS . 'configs' . DS . 'config.ini'; $iniArray = @parse_ini_file($configFile, true); $tool = isset($iniArray['thumbnail']['tool']) ? $iniArray['thumbnail']['tool'] : 'gd'; $sizes = array(); foreach ($iniArray['size'] as $key => $value) { list($method, $width, $height) = explode('_', $value); $sizes[$key] = array('method' => $method, 'width' => $width, 'height' => $height); } $user = (array) $user; $userName = $user['username']; $module = $request->getPost('mod'); $thumbnailSizes = $request->getPost('thumbnails', null); /** * Prepare folders */ $dir = ROOT_DIR . DS . 'upload'; $path = implode(DS, array($module, $userName, date('Y'), date('m'))); Gio_Core_File::createDirs($dir, $path); /** * Upload file */ $ext = explode('.', $_FILES['Filedata']['name']); $extension = $ext[count($ext) - 1]; unset($ext[count($ext) - 1]); $fileName = date('YmdHis_') . implode('', $ext); $file = $dir . DS . $path . DS . $fileName . '.' . $extension; move_uploaded_file($_FILES['Filedata']['tmp_name'], $file); /** * Water mark * @since 2.0.4 */ $watermark = $request->getParam('watermark'); $overlayText = $color = $overlayImage = $position = $sizesApplied = null; if ((bool) $watermark) { $overlayText = $request->getParam('text'); $color = $request->getParam('color'); $overlayImage = $request->getParam('image'); $position = $request->getParam('position'); $sizesApplied = $request->getParam('sizes'); $sizesApplied = explode(',', $sizesApplied); } /** * Generate thumbnails if requested */ if (!isset($thumbnailSizes) || $thumbnailSizes == null) { $thumbnailSizes = array_keys($sizes); } else { if ($thumbnailSizes != 'none') { $thumbnailSizes = explode(',', $thumbnailSizes); } } $service = null; switch (strtolower($tool)) { case 'imagemagick': $service = new Gio_Image_ImageMagick(); break; case 'gd': $service = new Gio_Image_GD(); break; } $ret = array(); /** * Remove script filename from base URL */ $baseUrl = $request->getBaseUrl(); $prefixUrl = rtrim($baseUrl, '/') . '/upload/' . $module . '/' . $userName . '/' . date('Y') . '/' . date('m'); $ret['original'] = array('url' => $prefixUrl . '/' . $fileName . '.' . $extension, 'size' => null); if ($thumbnailSizes != 'none') { $service->setFile($file); $ret['original']['size'] = $service->getWidth() . ' x ' . $service->getHeight(); foreach ($thumbnailSizes as $s) { $service->setFile($file); $method = $sizes[$s]['method']; $width = $sizes[$s]['width']; $height = $sizes[$s]['height']; $f = $fileName . '_' . $s . '.' . $extension; $newFile = $dir . DS . $path . DS . $f; /** * Create thumbnail */ switch ($method) { case 'resize': $service->resizeLimit($newFile, $width, $height); break; case 'crop': $service->crop($newFile, $width, $height); break; } /** * Create watermark if requested */ if ((bool) $watermark) { $service->setWatermarkFont(ROOT_DIR . DS . 'data' . DS . 'upload' . DS . self::WATERMARK_FONT); $service->setFile($newFile); if ($overlayText && in_array($s, $sizesApplied)) { $service->watermarkText($overlayText, $position, array('color' => $color, 'rotation' => 0, 'opacity' => 50, 'size' => null)); } if ($overlayImage && in_array($s, $sizesApplied)) { $overlay = explode('/', $overlayImage); $n = count($overlay); $overlay = implode(DS, array($dir, 'multimedia', $overlay[$n - 4], $overlay[$n - 3], $overlay[$n - 2], $overlay[$n - 1])); $service->watermarkImage($overlay, $position); } } $ret[$s] = array('url' => $prefixUrl . '/' . $f, 'size' => $width . ' x ' . $height); } } /** * Return the reponse */ $json = new Services_JSON(); $this->getResponse()->setBody($json->encodeUnsafe($ret)); }