Your IP : 216.73.216.61


Current Path : /home/gonzalx/www/administrator/components/com_sigpro/models/
Upload File :
Current File : /home/gonzalx/www/administrator/components/com_sigpro/models/gallery.php

<?php
/**
 * @version    3.8.x
 * @package    Simple Image Gallery Pro
 * @author     JoomlaWorks - https://www.joomlaworks.net
 * @copyright  Copyright (c) 2006 - 2021 JoomlaWorks Ltd. All rights reserved.
 * @license    https://www.joomlaworks.net/license
 */

// no direct access
defined('_JEXEC') or die;

class SigProModelGallery extends SigProModel
{
    public function getData()
    {
        $app = JFactory::getApplication();
        $path = SigProHelper::getPath($this->getState('type', 'site'));
        $folder = $this->getState('folder');
        $language = $this->getState('language');
        if (!$language) {
            $params = JComponentHelper::getParams('com_languages');
            $language = $params->get('site');
        }
        if (!$folder || !JFolder::exists($path.'/'.$folder)) {
            $app->redirect('index.php?option=com_sigpro', JText::_('COM_SIGPRO_THE_SPECIFIED_FOLDER_DOES_NOT_EXIST'), 'error');
        }

        $labels = array();
        $labelsFile = false;
        if (JFile::exists($path.'/'.$folder.'/'.$language.'.labels.txt')) {
            $labelsFile = $language.'.labels.txt';
        } elseif (JFile::exists($path.'/'.$folder.'/labels.txt')) {
            $labelsFile = 'labels.txt';
        }
        if ($labelsFile) {
            $contents = JFile::read($path.'/'.$folder.'/'.$labelsFile);
            $lines = preg_split('/(?:\r\n?|\n)/', $contents);
            if ($lines) {
                foreach ($lines as $line) {
                    $data = explode('|', $line);
                    $label = new JObject;
                    $label->set('title', @$data[1]);
                    $label->set('description', @$data[2]);
                    $labels[@$data[0]] = $label;
                }
            }
        }
        $images = array();
        $files = JFolder::files($path.'/'.$folder, '.jpg|.jpeg|.png|.gif|.JPG|.JPEG|.PNG|.GIF');
        $httpPath = SigProHelper::getHTTPPath($path.'/'.$folder);
        foreach ($files as $file) {
            $image = new JObject();
            $image->set('name', $file);
            $image->set('path', $httpPath.'/'.$file);
            if (isset($labels[$file])) {
                $image->set('title', $labels[$file]->title);
                $image->set('description', $labels[$file]->description);
            } else {
                $image->set('title', '');
                $image->set('description', '');
            }
            $info = @getimagesize($path.'/'.$folder.'/'.$image->name);
            if (isset($info[0])) {
                $image->dimensions = $info[0].'x'.$info[1];
            } else {
                $image->dimensions = '';
            }
            $image->size = round((filesize($path.'/'.$folder.'/'.$image->name) / 1024), 2);
            $image->url = SigProHelper::getImageURL($image->path);
            $images[] = $image;
        }
        $gallery = new JObject;
        if ($this->getState('type') == 'k2') {
            if (is_numeric($folder)) {
                $db = JFactory::getDBO();
                $db->setQuery("SELECT title FROM #__k2_items WHERE id = ".(int)$folder);
                $title = $db->loadResult();
                $gallery->set('name', $title);
            } else {
                $gallery->set('name', null);
            }
        } else {
            $gallery->set('name', $folder);
        }
        $gallery->set('folder', $folder);
        $gallery->set('images', $images);
        return $gallery;
    }

    public function upload()
    {
        jimport('joomla.filesystem.file');

        $file = $this->getState('file');
        $filename = $this->getState('filename');

        $response = array(
            'status' => 0,
            'error' => ''
        );

        // Check if file is uploaded & valid for processing
        if (is_null($file) || !is_uploaded_file($file['tmp_name'])) {
            $response['error'] = JText::_('COM_SIGPRO_FILE_WAS_NOT_UPLOADED');
        } else {
            // Check if uploaded file is an image of valid type
            if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                // Check for Windows servers
                $finfo = finfo_open(FILEINFO_MIME_TYPE);
                $type = finfo_file($finfo, $file['tmp_name']);
                if (!isset($type)) {
                    $response['error'] = JText::_('COM_SIGPRO_FILE_IS_NOT_AN_IMAGE');
                } elseif (!in_array($type, array("image/png", "image/jpeg", "image/gif", "image/tiff"))) {
                    $response['error'] = JText::_('COM_SIGPRO_THIS_IMAGE_IS_NOT_SUPPORTED');
                }
            } else {
                // Check for Linux servers
                $info = @getimagesize($file['tmp_name']);
                if (!$info) {
                    $response['error'] = JText::_('COM_SIGPRO_FILE_IS_NOT_AN_IMAGE');
                } elseif (!in_array($info[2], array(1, 2, 3, 7, 8))) {
                    $response['error'] = JText::_('COM_SIGPRO_THIS_IMAGE_IS_NOT_SUPPORTED');
                }
            }
        }

        if ($response['error'] == '') {
            // Perform the upload
            $type = $this->getState('type');
            $folder = $this->getState('folder');
            $path = SigProHelper::getPath($type);
            if ($folder && JFolder::exists($path.'/'.$folder)) {
                $result = JFile::upload($file['tmp_name'], $path.'/'.$folder.'/'.JFile::makeSafe($filename));
                if ($result) {
                    $response['status'] = 1;
                    $response['name'] = JFile::makeSafe($filename);
                    $response['width'] = $info[0];
                    $response['height'] = $info[1];
                    $response['mime'] = $info['mime'];
                    $response['size'] = round((filesize($path.'/'.$folder.'/'.JFile::makeSafe($filename)) / 1024), 2);
                    $httpPath = SigProHelper::getHTTPPath($path.'/'.$folder);
                    $response['path'] = $httpPath.'/'.$response['name'];
                    $response['url'] = SigProHelper::getImageURL($response['path']);
                } else {
                    $response['error'] = JText::_('COM_SIGPRO_COULD_NOT_UPLOAD_FILE');
                }
            } else {
                $response['error'] = JText::_('COM_SIGPRO_TARGET_FOLDER_DOES_NOT_EXIST');
            }
        }
        return $response;
    }

    public function save()
    {
        jimport('joomla.filesystem.file');
        $type = $this->getState('type');
        $path = SigProHelper::getPath($type);
        $folder = $this->getState('folder');
        $files = $this->getState('files');
        $titles = $this->getState('titles');
        $descriptions = $this->getState('descriptions');
        $language = $this->getState('language');
        if (!$language) {
            $params = JComponentHelper::getParams('com_languages');
            $language = $params->get('site');
        }
        $labels = '';
        foreach ($files as $key => $file) {
            $title = preg_replace("#(\r\n|\r|\n|\t|\s+)#s", ' ', $titles[$key]);
            $description = preg_replace("#(\r\n|\r|\n|\t|\s+)#s", ' ', $descriptions[$key]);
            if (JFile::exists($path.'/'.$folder.'/'.$file)) {
                $labels .= $file.'|'.$title.'|'.$description."\n";
            }
        }
        JFile::write($path.'/'.$folder.'/'.$language.'.labels.txt', $labels);
        return true;
    }

    public function add()
    {
        jimport('joomla.filesystem.file');
        jimport('joomla.filesystem.folder');
        $db = JFactory::getDBO();
        $type = $this->getState('type');
        $path = SigProHelper::getPath($type);
        $folder = $this->getState('folder');
        $response = $this->validate();
        if ($response->status == 0) {
            $this->setState('message', $response->message);
            return false;
        }
        $params = JComponentHelper::getParams('com_languages');
        $language = $params->get('site');
        if (JFolder::exists($path.'/'.$folder)) {
            $this->setState('message', JText::_('COM_SIGPRO_FOLDER_ALREADY_EXISTS'));
            return false;
        } else {
            if (JFolder::create($path.'/'.$folder)) {
                $buffer = '';
                JFile::write($path.'/'.$folder.'/'.$language.'.labels.txt', $buffer);
                $this->setState('message', JText::_('COM_SIGPRO_GALLERY_CREATED'));
                $this->setState('folder', $folder);
                $gallery = '{gallery}'.$folder.'{/gallery}';
                if (!SigProHelper::isK2v3()) {
                    if ($this->getState('type') == 'k2') {
                        $db->setQuery('UPDATE #__k2_items SET gallery = '.$db->quote($gallery).'  WHERE id = '.(int)$folder);
                        $db->query();
                    }
                }
                return true;
            } else {
                $this->setState('message', JText::_('COM_SIGPRO_ERROR_CREATING_THE_FOLDER'));
                return false;
            }
        }
    }

    public function delete()
    {
        jimport('joomla.filesystem.file');
        $type = $this->getState('type');
        $path = SigProHelper::getPath($type);
        $folder = $this->getState('folder');
        $file = $this->getState('file');
        $response = new stdClass;
        $response->status = 0;
        $response->message = '';
        if (!JFile::exists($path.'/'.$folder.'/'.$file)) {
            $response->message = JText::_('COM_SIGPRO_FILE_DOES_NOT_EXIST');
        } else {
            $result = JFile::delete($path.'/'.$folder.'/'.$file);
            if ($result) {
                $response->status = 1;
                $response->message = JText::_('COM_SIGPRO_FILE_DELETED');
            } else {
                $response->message = JText::_('COM_SIGPRO_DELETE_FAILED');
            }
        }
        return $response;
    }

    public function validate()
    {
        jimport('joomla.filesystem.folder');
        $type = $this->getState('type');
        $path = SigProHelper::getPath($type);
        $folder = $this->getState('folder');
        $response = new stdClass;
        $response->status = 0;
        $response->message = '';
        if (JString::trim($folder) == '') {
            $response->status = 0;
            $response->message = JText::_('COM_SIGPRO_INVALID_FOLDER_NAME');
        } elseif (JFolder::exists($path.'/'.$folder)) {
            $response->status = 0;
            $response->message = JText::_('COM_SIGPRO_FOLDER_ALREADY_EXISTS');
        } else {
            $response->status = 1;
            $response->message = JText::_('COM_SIGPRO_FOLDER_DOES_NOT_EXIST');
        }
        return $response;
    }
}