123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- <?php
- ////////////////////////////////////////////////////////////////////////////////
- // Copyright (C) ReloadCMS Development Team //
- // http://reloadcms.sf.net //
- // //
- // This program is distributed in the hope that it will be useful, //
- // but WITHOUT ANY WARRANTY, without even the implied warranty of //
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
- // //
- // This product released under GNU General Public License v2 //
- ////////////////////////////////////////////////////////////////////////////////
- $gd_formats = '';
- if(function_exists('imagegif')) $gd_formats .= 'gif ';
- if(function_exists('imagejpeg')) $gd_formats .= 'jpg jpeg jpe ';
- if(function_exists('imagepng')) $gd_formats .= 'png ';
- define('GD_SUPPORTED_FORMATS', $gd_formats);
- define('GD_SUPPORTED_FORMATS_PREG', '#.*\.(' . implode('|', explode(' ', $gd_formats)) . ')$#i');
- define('GALLERY_UPLOAD_DIR', GALLERY_PATH . 'new/');
- define('GALLERY_INDEXES_DIR', GALLERY_PATH . 'indexes/');
- define('GALLERY_IMAGES_DIR', GALLERY_PATH . 'images/');
- define('GALLERY_THUMBS_DIR', GALLERY_PATH . 'thumbnails/');
- define('GALLERY_COMMENTS_DIR', GALLERY_PATH . 'comments/');
- class gallery{
- var $img_preg = '/.*\.(jpg|jpe|jpeg|gif|png|bmp)$/i';
- var $gd_preg = GD_SUPPORTED_FORMATS_PREG;
- var $path = GALLERY_PATH;
- var $indexes = array();
- public function __construct(){
- // Load Index files
- $this->loadIndexFiles();
- }
- function rebuildIndex(){
- @set_time_limit(0);
-
- $this->scanForRemovedImages();
- $this->cleanUpDirectories();
- $this->scanForNewImages();
- $this->cleanUpIndexes();
- $this->saveIndexFiles();
- }
-
- function scanForRemovedImages(){
- foreach ($this->indexes['filename'] as $filename){
- if(!is_file(GALLERY_IMAGES_DIR . $filename)){
- $this->removeImage($filename);
- }
- }
- }
-
- function cleanUpDirectories(){
- $images = rcms_scandir(GALLERY_IMAGES_DIR);
- foreach ($images as $image){
- if(!in_array($image, $this->indexes['filename'])){
- rcms_delete_files(GALLERY_IMAGES_DIR . $image);
- }
- }
- $images = rcms_scandir(GALLERY_COMMENTS_DIR);
- foreach ($images as $image){
- if(!in_array(substr($image, 0, -4), $this->indexes['filename'])){
- rcms_delete_files(GALLERY_COMMENTS_DIR . $image);
- }
- }
- $images = rcms_scandir(GALLERY_THUMBS_DIR);
- foreach ($images as $image){
- if(!in_array(substr($image, 0, -4), $this->indexes['filename'])){
- rcms_delete_files(GALLERY_THUMBS_DIR . $image);
- }
- }
- }
-
- function scanForNewImages(){
- $return = array();
- $new_images = $this->getImages(GALLERY_UPLOAD_DIR);
- foreach ($new_images as $image){
- $image_newname = $image;
- $temp_i = 0;
- $ext = array_reverse(explode('.', $image));
- $ext = $ext[0];
- while(in_array($image_newname, $this->indexes['filename']) || is_file(GALLERY_IMAGES_DIR . $image_newname)){
- $temp_i++;
- $image_newname = substr($image, 0, -(strlen($ext))-1) . '_' . $temp_i . '.' . $ext;
- }
- if(substr($ext, 0, 2) == 'jp') $type = 'jpeg'; else $type = $ext;
- list($width, $height, $x, $x) = getimagesize(GALLERY_UPLOAD_DIR . $image);
- $size = $width . 'x' . $height;
- rcms_rename_file(GALLERY_UPLOAD_DIR . $image, GALLERY_IMAGES_DIR . $image_newname);
- $this->registerInIndex($image_newname, $image_newname, $size, $type);
- $return[$image] = $image_newname;
- }
- return $return;
- }
- function cleanUpIndexes(){
- foreach ($this->indexes['type'] as $type => $images){
- if(empty($images)){
- rcms_remove_index($type, $this->indexes['type'][$type], true);
- }
- }
- foreach ($this->indexes['size'] as $size => $images){
- if(empty($images)){
- rcms_remove_index($size, $this->indexes['size'][$size], true);
- }
- }
- foreach ($this->indexes['keywords'] as $keyword => $images){
- if(empty($images)){
- rcms_remove_index($size, $this->indexes['keywords'][$keyword], true);
- }
- }
- }
-
- function loadIndexFiles(){
- if(!is_readable(GALLERY_INDEXES_DIR . 'main.dat') || !($this->indexes['main'] = @unserialize(file_get_contents(GALLERY_INDEXES_DIR . 'main.dat')))){
- $this->indexes['main'] = array();
- $this->indexes['filename'] = array();
- $this->indexes['title'] = array();
- $this->indexes['size'] = array();
- $this->indexes['type'] = array();
- $this->indexes['keywords'] = array();
- return true;
- }
- $this->indexes['filename'] = @unserialize(@file_get_contents(GALLERY_INDEXES_DIR . 'filename.dat'));
- $this->indexes['title'] = @unserialize(@file_get_contents(GALLERY_INDEXES_DIR . 'title.dat'));
- $this->indexes['size'] = @unserialize(@file_get_contents(GALLERY_INDEXES_DIR . 'size.dat'));
- $this->indexes['type'] = @unserialize(@file_get_contents(GALLERY_INDEXES_DIR . 'type.dat'));
- $this->indexes['keywords'] = @unserialize(@file_get_contents(GALLERY_INDEXES_DIR . 'keywords.dat'));
- return true;
- }
- function registerInIndex($filename, $title, $size, $type){
- $this->indexes['main'][$filename] = array('title' => $title, 'size' => $size, 'type' => $type);
- $this->indexes['filename'][] = $filename;
- $this->indexes['title'][$filename] = $title;
- $this->indexes['size'][$size][] = $filename;
- $this->indexes['type'][strtolower($type)][] = $filename;
- }
- function unregisterInIndex($filename){
- if(empty($this->indexes['main'][$filename])) return false;
- $k_f = array_search($filename, $this->indexes['filename']);
- $size = $this->indexes['main'][$filename]['size'];
- $type = strtolower($this->indexes['main'][$filename]['type']);
- $k_s = @array_search($filename, $this->indexes['size'][$size]);
- $k_t = @array_search($filename, $this->indexes['type'][$type]);
- $this->indexes['filename'][$k_f] = '';
- $this->indexes['size'][$size][$k_s] = '';
- $this->indexes['type'][$type][$k_t] = '';
- $this->unsetKeywords($filename);
- rcms_remove_index($k_f, $this->indexes['filename'], true);
- rcms_remove_index($filename, $this->indexes['title'], true);
- rcms_remove_index($k_s, $this->indexes['size'][$size], true);
- rcms_remove_index($k_t, $this->indexes['type'][$type], true);
- $this->indexes['main'][$filename] = array();
- rcms_remove_index($filename, $this->indexes['main'], true);
- return true;
- }
- function setKeywords($filename, $keywords){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- $this->indexes['main'][$filename]['keywords'] = $keywords;
- if(!empty($keywords)){
- $keywords_array = explode(';', $keywords);
- foreach ($keywords_array as $keyword){
- $keyword = trim($keyword);
- $this->indexes['keywords'][$keyword][] = $filename;
- }
- }
- return true;
- }
- function unsetKeywords($filename){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- $keywords = explode(';', @$this->indexes['main'][$filename]['keywords']);
- if(!empty($keywords)){
- foreach ($keywords as $keyword){
- $keyword = trim($keyword);
- $k = @array_search($filename, $this->indexes['keywords'][$keyword]);
- @rcms_remove_index($k, $this->indexes['keywords'][$keyword], true);
- }
- }
- return true;
- }
- function changeKeywords($filename, $keywords){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- if(!empty($this->indexes['main'][$filename]['keywords'])){
- $this->unsetKeywords($filename);
- }
- $this->setKeywords($filename, $keywords);
- return true;
- }
- function removeImage($filename){
- $this->unregisterInIndex($filename);
- if(is_file(GALLERY_IMAGES_DIR . $filename)) rcms_delete_files(GALLERY_IMAGES_DIR . $filename);
- if(is_file(GALLERY_COMMENTS_DIR . $filename . '.dat')) rcms_delete_files(GALLERY_COMMENTS_DIR . $filename . '.dat');
- if(is_file(GALLERY_THUMBS_DIR . $filename . '.jpg')) rcms_delete_files(GALLERY_THUMBS_DIR . $filename . '.jpg');
- return true;
- }
- function saveIndexFiles(){
- file_write_contents(GALLERY_INDEXES_DIR . 'main.dat', serialize($this->indexes['main']));
- file_write_contents(GALLERY_INDEXES_DIR . 'filename.dat', serialize($this->indexes['filename']));
- file_write_contents(GALLERY_INDEXES_DIR . 'title.dat', serialize($this->indexes['title']));
- file_write_contents(GALLERY_INDEXES_DIR . 'size.dat', serialize($this->indexes['size']));
- file_write_contents(GALLERY_INDEXES_DIR . 'type.dat', serialize($this->indexes['type']));
- file_write_contents(GALLERY_INDEXES_DIR . 'keywords.dat', serialize($this->indexes['keywords']));
- return true;
- }
- function getImages($directory){
- $directory = rcms_scandir($directory);
- $images = array();
- foreach ($directory as $file){
- if (preg_match($this->img_preg, $file)) {
- $images[] = $file;
- }
- }
- return $images;
- }
- function getFullImagesList(){
- $temp = $this->indexes['filename'];
- $this->indexes['filename'] = array();
- foreach ($temp as $key => $data){
- if(!empty($data)) $this->indexes['filename'][$key] = $data;
- }
- $this->saveIndexFiles();
- natsort($this->indexes['filename']);
- return $this->indexes['filename'];
- }
- function getAvaiableValues($field){
- if(empty($this->indexes[$field])) return false;
- $result = array();
- foreach (array_keys($this->indexes[$field]) as $key){
- if(!empty($this->indexes[$field][$key])){
- $result[] = $key;
- }
- }
- natsort($result);
- return $result;
- }
- function getLimitedImagesList($field, $value){
- if(empty($this->indexes[$field][$value])) return false;
- $result = array();
- foreach ($this->indexes[$field][$value] as $image){
- if(in_array($image, $this->indexes['filename'])) $result[] = $image;
- }
- natsort($result);
- return $result;
- }
- function getImage($filename){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- return '<div style="overflow: hidden; width: 100%;"><a href="' . GALLERY_IMAGES_DIR . $filename . '" target="_blank"><img src="' . GALLERY_IMAGES_DIR . $filename . '" alt="' . $this->indexes['main'][$filename]['title'] . '" style="max-width: 95%;" /></a></div>';
- }
- function getData($filename){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- return $this->indexes['main'][$filename];
- }
- function getComments($filename){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- if(true){
- $comments = guestbook_get_last_msgs(
- null,
- true,
- false,
- GALLERY_COMMENTS_DIR . $filename . '.dat'
- );
- foreach ($comments as $mid => $message) {
- $comments[$mid]['id'] = $mid;
- }
- return $comments;
- }
- return false;
- }
- function countComments($filename){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- if(true){
- return count(guestbook_get_last_msgs(null, false, false, GALLERY_COMMENTS_DIR . $filename . '.dat'));
- }
- return false;
- }
- function postComment($filename, $text){
- global $system;
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- if(!empty($text)){
- return guestbook_post_msg($system->user['username'],
- $system->user['nickname'],
- $text,
- GALLERY_COMMENTS_DIR . $filename . '.dat'
- );
- }
- }
- function removeComment($filename, $cid){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- return guestbook_post_remove($cid, GALLERY_COMMENTS_DIR . $filename . '.dat');
- }
- function getThumbnail($filename, $mw = 150, $mh = 150){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- if($return = $this->generateThumbnail($filename, $mw, $mh)){
- return $return;
- } else {
- $path = GALLERY_IMAGES_DIR . $filename;
- $stat = getimagesize($path);
- $iw = $stat[0];
- $ih = $stat[1];
- if(($iw > $mh) || ($iw < $mw)) {
- $sizefactor = (($ih > $iw) ? ($mh / $ih) : ($mw / $iw));
- } else {
- $sizefactor =1;
- }
- $nw = (int) ($iw * $sizefactor);
- $nh = (int) ($ih * $sizefactor);
- unset($sizefactor);
- return '<img src="' . $path . '" width="' . $nw . '" height="' . $nh . '" border="0" alt="" />';
- }
- }
- function generateThumbnail($filename, $mw, $mh){
- $path = GALLERY_IMAGES_DIR . $filename;
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename) || !preg_match($this->gd_preg, $filename)) return false;
- if(!is_file(GALLERY_THUMBS_DIR . $filename . '.jpg')){
- if(substr(strtolower($filename), -4) == '.jpg') {
- $img = imagecreatefromjpeg($path);
- } elseif(substr(strtolower($filename), -4) == '.gif') {
- $img = imagecreatefromgif($path);
- } elseif(substr(strtolower($filename), -4) == '.png') {
- $img = imagecreatefrompng($path);
- } else return false;
- if(!empty($img)){
- $stat = getimagesize($path);
- $iw = $stat[0];
- $ih = $stat[1];
- if(($iw > $mh) || ($iw < $mw)) {
- $sizefactor = (($ih > $iw) ? ($mh / $ih) : ($mw / $iw));
- } else {
- $sizefactor =1;
- }
- $nw = (int) ($iw * $sizefactor);
- $nh = (int) ($ih * $sizefactor);
- unset($sizefactor);
- $thumb = imagecreatetruecolor($nw, $nh);
- imagecopyresampled($thumb, $img, 0, 0, 0, 0, $nw, $nh, $iw, $ih);
- imagejpeg($thumb, GALLERY_THUMBS_DIR . $filename . '.jpg');
- imagedestroy($thumb);
- imagedestroy($img);
- }
- }
- return '<img src="' . GALLERY_THUMBS_DIR . $filename . '.jpg" alt="' . $filename . '" />';
- }
- function setDataValue($filename, $dataname, $value){
- if(empty($this->indexes['main'][$filename]) || !is_file(GALLERY_IMAGES_DIR . $filename)) return false;
- $this->indexes['main'][$filename][$dataname] = $value;
- $this->indexes[$dataname][$filename] = $value;
- return true;
- }
- }
- ?>
|