| | |
| | | private $caches = array(); |
| | | private $action_map = array(); |
| | | private $shutdown_functions = array(); |
| | | private $expunge_cache = false; |
| | | |
| | | |
| | | /** |
| | |
| | | } |
| | | else { |
| | | $this->set_storage_prop(); |
| | | return $storage->is_connected(); |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | return $storage->is_connected(); |
| | | } |
| | | |
| | | |
| | |
| | | $this->session = new rcube_session($this->get_dbh(), $this->config); |
| | | |
| | | $this->session->register_gc_handler('rcmail_temp_gc'); |
| | | if ($this->config->get('enable_caching')) |
| | | $this->session->register_gc_handler('rcmail_cache_gc'); |
| | | $this->session->register_gc_handler(array($this, 'cache_gc')); |
| | | |
| | | // start PHP session (if not in CLI mode) |
| | | if ($_SERVER['REMOTE_ADDR']) |
| | |
| | | // set initial session vars |
| | | if (!$_SESSION['user_id']) |
| | | $_SESSION['temp'] = true; |
| | | |
| | | // restore skin selection after logout |
| | | if ($_SESSION['temp'] && !empty($_SESSION['skin'])) |
| | | $this->config->set('skin', $_SESSION['skin']); |
| | | } |
| | | |
| | | |
| | |
| | | $this->plugins->exec_hook('session_destroy'); |
| | | |
| | | $this->session->kill(); |
| | | $_SESSION = array('language' => $this->user->language, 'temp' => true); |
| | | $_SESSION = array('language' => $this->user->language, 'temp' => true, 'skin' => $this->config->get('skin')); |
| | | $this->user->reset(); |
| | | } |
| | | |
| | |
| | | $cache->close(); |
| | | } |
| | | |
| | | if (is_object($this->storage)) |
| | | if (is_object($this->storage)) { |
| | | if ($this->expunge_cache) |
| | | $this->storage->expunge_cache(); |
| | | $this->storage->close(); |
| | | } |
| | | |
| | | // before closing the database connection, write session data |
| | | if ($_SERVER['REMOTE_ADDR'] && is_object($this->session)) { |
| | |
| | | public function add_shutdown_function($function) |
| | | { |
| | | $this->shutdown_functions[] = $function; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Garbage collector for cache entries. |
| | | * Set flag to expunge caches on shutdown |
| | | */ |
| | | function cache_gc() |
| | | { |
| | | // because this gc function is called before storage is initialized, |
| | | // we just set a flag to expunge storage cache on shutdown. |
| | | $this->expunge_cache = true; |
| | | } |
| | | |
| | | |
| | |
| | | $url = './'; |
| | | $delm = '?'; |
| | | foreach (array_reverse($p) as $key => $val) { |
| | | if ($val !== '') { |
| | | if ($val !== '' && $val !== null) { |
| | | $par = $key[0] == '_' ? $key : '_'.$key; |
| | | $url .= $delm.urlencode($par).'='.urlencode($val); |
| | | $delm = '&'; |
| | | } |
| | | } |
| | | return $url; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Use imagemagick or GD lib to read image properties |
| | | * |
| | | * @param string Absolute file path |
| | | * @return mixed Hash array with image props like type, width, height or False on error |
| | | */ |
| | | public static function imageprops($filepath) |
| | | { |
| | | $rcmail = rcmail::get_instance(); |
| | | if ($cmd = $rcmail->config->get('im_identify_path', false)) { |
| | | list(, $type, $size) = explode(' ', strtolower(rcmail::exec($cmd. ' 2>/dev/null {in}', array('in' => $filepath)))); |
| | | if ($size) |
| | | list($width, $height) = explode('x', $size); |
| | | } |
| | | else if (function_exists('getimagesize')) { |
| | | $imsize = @getimagesize($filepath); |
| | | $width = $imsize[0]; |
| | | $height = $imsize[1]; |
| | | $type = preg_replace('!image/!', '', $imsize['mime']); |
| | | } |
| | | |
| | | return $type ? array('type' => $type, 'width' => $width, 'height' => $height) : false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Convert an image to a given size and type using imagemagick (ensures input is an image) |
| | | * |
| | | * @param $p['in'] Input filename (mandatory) |
| | | * @param $p['out'] Output filename (mandatory) |
| | | * @param $p['size'] Width x height of resulting image, e.g. "160x60" |
| | | * @param $p['type'] Output file type, e.g. "jpg" |
| | | * @param $p['-opts'] Custom command line options to ImageMagick convert |
| | | * @return Success of convert as true/false |
| | | */ |
| | | public static function imageconvert($p) |
| | | { |
| | | $result = false; |
| | | $rcmail = rcmail::get_instance(); |
| | | $convert = $rcmail->config->get('im_convert_path', false); |
| | | $identify = $rcmail->config->get('im_identify_path', false); |
| | | |
| | | // imagemagick is required for this |
| | | if (!$convert) |
| | | return false; |
| | | |
| | | if (!(($imagetype = @exif_imagetype($p['in'])) && ($type = image_type_to_extension($imagetype, false)))) |
| | | list(, $type) = explode(' ', strtolower(rcmail::exec($identify . ' 2>/dev/null {in}', $p))); # for things like eps |
| | | |
| | | $type = strtr($type, array("jpeg" => "jpg", "tiff" => "tif", "ps" => "eps", "ept" => "eps")); |
| | | $p += array('type' => $type, 'types' => "bmp,eps,gif,jp2,jpg,png,svg,tif", 'quality' => 75); |
| | | $p['-opts'] = array('-resize' => $p['size'].'>') + (array)$p['-opts']; |
| | | |
| | | if (in_array($type, explode(',', $p['types']))) # Valid type? |
| | | $result = rcmail::exec($convert . ' 2>&1 -flatten -auto-orient -colorspace RGB -quality {quality} {-opts} {in} {type}:{out}', $p) === ""; |
| | | |
| | | return $result; |
| | | } |
| | | |
| | | |