imagecms/ImageCMS

View on GitHub
application/modules/xbanners/admin.php

Summary

Maintainability
B
5 hrs
Test Coverage
<?php

(defined('BASEPATH')) OR exit('No direct script access allowed');

use Propel\Runtime\Exception\PropelException;
use xbanners\src\Installers\BannersModuleManager;
use xbanners\src\Managers\ImagesManager;
use CMSFactory\assetManager;
use xbanners\models\BannersQuery;
use xbanners\models\BannerImage;
use xbanners\models\BannerImageI18n;
use xbanners\models\BannerImageQuery;
use xbanners\models\BannerImageI18nQuery;
use xbanners\src\Managers\BannerPageTypesManager;
use xbanners\src\UrlFinder\DelegationFinder;

/**
 * Image CMS
 * Sample Module Admin
 */
class Admin extends BaseAdminController
{

    public function __construct() {
        parent::__construct();
        $lang = new MY_Lang();
        $lang->load('xbanners');
        $this->load->library('form_validation');
        $this->load->helper('xbanners');

    }

    public function deleteA() {
        BannersQuery::create()->setComment(__METHOD__)->deleteAll();
    }

    /**
     * Banners places list page
     */
    public function index() {

        ImagesManager::getInstance()->setInactiveOnTimeOut();
        $banners = BannersQuery::create()->setComment(__METHOD__)->joinWithI18n(MY_Controller::defaultLocale())->find();

        assetManager::create()
            ->setData(
                [
                 'banners'   => $banners,
                 'pageTypes' => BannerPageTypesManager::getInstance()->getPagesTypes(),
                ]
            )
            ->registerStyle('style')
            ->registerScript('script')
            ->renderAdmin('banner/list');
    }

    /**
     * Edit banner page
     * @param integer $id - banner id
     * @param string $locale - locale name
     * @throws PropelException
     */
    public function edit_banner($id, $locale = NULL) {
        $locale = $locale ?: MY_Controller::defaultLocale();

        $banner = BannersQuery::create()
            ->findPk($id);

        if (!$banner) {
            $this->core->error_404();
        }

        $banner->setLocale($locale);

        if ($this->input->post()) {
            $this->form_validation->set_rules('banner[name]', lang('Name', 'xbanners'), 'reguired|min_length[2]|max_length[255]|trim');
            $this->form_validation->set_rules('options[autoplaySpeed]', lang('autoplaySpeed', 'xbanners'), 'trim|floatval|reguired|greater_than[0]');
            $this->form_validation->set_rules('options[scrollSpeed]', lang('scrollSpeed', 'xbanners'), 'trim|floatval|reguired|greater_than[0]');

            if ($this->form_validation->run($this) === FALSE) {
                showMessage(validation_errors(), '', 'r');
            } else {
                $data = $this->input->post('banner');
                $banner->setName($data['name']);

                $banner->setEffects($this->input->post('options'));

                $banner->save();

                showMessage(lang('Banner successfully update', 'xbanners'), lang('Success', 'admin'));
                $this->lib_admin->log(lang('The banner was update', 'xbanners') . '. Id: ' . $banner->getId());

            }
        } else {
            $bannerImages = ImagesManager::getInstance()->getImagesByPageType($banner, $locale);
            $allowedPagesOptions = BannerPageTypesManager::getInstance()->getView($banner->getPageType(), $locale);
            $options = $banner->getEffects();

            assetManager::create()->setData(
                [
                 'banner'              => $banner,
                 'allowedPagesOptions' => $allowedPagesOptions,
                 'bannerImages'        => $bannerImages,
                 'locale'              => $locale,
                 'languages'           => $this->load->model('cms_admin')->get_langs(true),
                 'options'             => $options,
                ]
            )
                ->registerStyle('style')
                ->registerScript('script')
                ->renderAdmin('banner/edit');
        }
    }

    /**
     * Create/Update banner image
     * @param integer $bannerId - banner id
     * @param string $locale - locale name
     * @param integer $imageId - image id
     */
    public function saveImage($bannerId, $locale, $imageId = NULL) {
        try {
            if ($this->input->post()) {
                $this->form_validation->set_rules('image[name]', lang('Name', 'xbanners'), 'required|min_length[2]|max_length[255]|trim');
                $this->form_validation->set_rules('image[url]', lang('URL', 'xbanners'), 'trim|callback_validate_url');

                if ($this->form_validation->run($this) === FALSE) {
                    showMessage(validation_errors(), '', 'r');
                } else {
                    $data = $this->input->post('image');
                    $data = ImagesManager::getInstance()->prepareImageData($data, $bannerId, $locale);

                    if ($_FILES[ImagesManager::IMAGE_FILE_FIELD]) {
                        $data['src'] = ImagesManager::getInstance()->saveImage($imageId, $data['locale']);
                    } elseif (!$_FILES[ImagesManager::IMAGE_FILE_FIELD] && !$data['src']) {
                        showMessage(lang('Slide must have image', 'xbanners'), lang('Error', 'admin'), 'r');
                        exit;
                    }

                    $bannerImage = $imageId ? BannerImageQuery::create()->setComment(__METHOD__)->findPk($imageId) : (new BannerImage());
                    $bannerImage->fromArray($data);
                    $bannerImage->save();

                    if ($imageId || $bannerImage->setLastPosition()) {
                        $data['id'] = $bannerImage->getId();

                        $bannerImageI18n = BannerImageI18nQuery::create()->setComment(__METHOD__)->filterByLocale($locale)->findOneById($imageId);
                        if (!$bannerImageI18n) {
                            $bannerImageI18n = new BannerImageI18n();
                        }
                        $bannerImageI18n->fromArray($data);
                        $bannerImageI18n->save();

                        showMessage(lang('Successfully saved', 'xbanners'), lang('Success', 'admin'));
                        $this->lib_admin->log(lang('The banner image was be saved', 'xbanners') . '. Id: ' . $bannerImage->getId());

                        pjax(site_url('/admin/components/init_window/xbanners/edit_banner') . "/$bannerId/$locale");
                    }
                }
            }
        } catch (Exception $e) {
            showMessage($e->getMessage(), lang('Error', 'admin'), 'r');
        }
    }

    public function validate_url($url) {
        return TRUE;
    }

    public function uploadImage() {
        include_once 'assets/js/crop/src/php/core/PictureCut.php';
        ImagesManager::getInstance()->uploadImage();
    }

    /**
     * Delete banner slide image file
     * @param integer $bannerId - banner id
     * @param integer $imageId - banner image id
     * @param string $locale - locale name
     */
    public function deleteSlideImage($bannerId, $imageId, $locale) {
        if ($imageId && $locale) {
            if (ImagesManager::getInstance()->delete($imageId, $locale)) {
                showMessage(lang('Image successfully deleted', 'xbanners'), lang('Success', 'admin'));
            }
        } else {
            showMessage(lang('Can not delete image', 'xbanners'), lang('Error', 'admin'), 'r');
        }

        pjax(site_url('/admin/components/init_window/xbanners/edit_banner') . "/$bannerId/$locale");
    }

    /**
     * Delete banner slide
     * @param integer $bannerId - banner id
     * @param integer $imageId - image id
     * @param string $locale - locale name
     * @throws PropelException
     */
    public function deleteSlide($bannerId, $imageId, $locale) {
        if ($imageId && $locale) {
            ImagesManager::getInstance()->delete($imageId);
            BannerImageQuery::create()->setComment(__METHOD__)->findPk($imageId)->delete();
            showMessage(lang('Banner slide successfully deleted', 'xbanners'), lang('Success', 'admin'));

            $this->lib_admin->log(lang('The banner slide was be deleted', 'xbanners'));

        } else {
            showMessage(lang('Can not delete banner slide', 'xbanners'), lang('Error', 'admin'), 'r');
        }

        pjax(site_url('/admin/components/init_window/xbanners/edit_banner') . "/$bannerId/$locale");
    }

    public function changePositions() {
        $positions = array_reverse($this->input->post('positions'));
        foreach ($positions as $position => $id) {
            $image = BannerImageQuery::create()->setComment(__METHOD__)->findPk($id);
            $image->setPosition($position);
            $image->save();
        }
        showMessage(lang('Positions saved', 'admin'));
    }

    /**
     * @uses /xbanners/assets/js/script.js autocomplete
     * @param string $locale
     * @param string $_GET ['term']
     * @return string json : [
     *      GroupName: {'Name' : 'url', ... },
     *      Brands: {
     *          'Sony' : '/shop/brand/sony',
     *          'Apple': '/shop/brand/apple',
     *          ... }
     *      ]
     */
    public function url_search_autocomplete($locale) {
        $word = $this->input->get('term');
        $locale = $locale ?: MY_Controller::defaultLocale();
        echo (new DelegationFinder())
            ->getResultsFor($word, $locale)
            ->toJson();
    }

    public function updateBannersPlaces() {
        $man = new BannersModuleManager();
        try {
            $man->updateTemplatePlaces();
            showMessage(lang('Successfully saved', 'xbanners'), lang('Success', 'admin'));
        } catch (Exception $e) {
            showMessage($e->getMessage(), lang('Error', 'admin'), 'r');
        }
        pjax(site_url('/admin/components/cp/xbanners'));
    }

}