spotweb/spotweb

View on GitHub
lib/page/SpotPage_editfilter.php

Summary

Maintainability
B
6 hrs
Test Coverage
<?php

class SpotPage_editfilter extends SpotPage_Abs
{
    private $_editFilterForm;
    private $_filterId;
    private $_orderList;
    private $_search;
    private $_sorton;
    private $_sortorder;
    private $_data;

    public function __construct(Dao_Factory $daoFactory, Services_Settings_Container $settings, array $currentSession, array $params)
    {
        parent::__construct($daoFactory, $settings, $currentSession);
        $this->_editFilterForm = $params['editfilterform'];
        $this->_filterId = $params['filterid'];
        $this->_orderList = $params['orderfilterslist'];
        $this->_search = $params['search'];
        $this->_sorton = $params['sorton'];
        $this->_sortorder = $params['sortorder'];
        $this->_data = $params['data'];
    }

    // ctor

    public function render()
    {
        $result = new Dto_FormResult('notsubmitted');

        // Make sure the user has the appropriate rights
        $this->_spotSec->fatalPermCheck(SpotSecurity::spotsec_keep_own_filters, '');

        // Instantiate the SpotUser system
        $svcUserFilter = new Services_User_Filters($this->_daoFactory, $this->_settings);
        $spotFilter = $svcUserFilter->getFilter($this->_currentSession['user']['userid'], $this->_filterId);

        // set the page title
        $this->_pageTitle = 'spot: filters';

        /*
         * bring the forms' action into the local scope for
         * easier access
         */
        $formAction = $this->_editFilterForm['action'];

        // Are we submitting this form, or just rendering it?
        if (!empty($formAction)) {
            switch ($formAction) {
                case 'removefilter':
                    $result = $svcUserFilter->removeFilter($this->_currentSession['user']['userid'], $this->_filterId);

                    break;
                    // case 'removefilter'

                case 'discardfilters':
                    $result = $svcUserFilter->resetFilterList($this->_currentSession['user']['userid']);

                    break;
                    // case 'discardfilters'

                case 'setfiltersasdefault':
                    $this->_spotSec->fatalPermCheck(SpotSecurity::spotsec_set_filters_as_default, '');

                    $result = $svcUserFilter->setFiltersAsDefault($this->_currentSession['user']['userid']);

                    break;
                    // case 'setfiltersasdefault'

                case 'exportfilters':
                    $result = $svcUserFilter->filtersToXml($svcUserFilter->getPlainFilterList($this->_currentSession['user']['userid'], 'filter'));

                    break;
                    // case 'exportfilters'

                case 'importfilters':
                    $uploadHandler = new Services_Providers_FileUpload('editfilterform', 'filterimport');

                    if ($uploadHandler->isUploaded()) {
                        if ($uploadHandler->success()) {
                            try {
                                $xml = file_get_contents($uploadHandler->getTempName());
                                $filterList = $svcUserFilter->xmlToFilters($xml);
                                $svcUserFilter->setFilterList($this->_currentSession['user']['userid'], $filterList->getData('filters'));
                                echo '<script language = "javascript">';
                                echo 'alert("Successfully imported filters!")';
                                echo '</script>';
                                echo '<script language = "javascript">';
                                echo 'window.location.href = "?page=edituserprefs&userid='.$this->_currentSession['user']['userid'].'"';
                                echo '</script>';
                            } catch (Exception $x) {
                                echo '<script language = "javascript">';
                                echo 'alert("Spotwebfilters file invalid.")';
                                echo '</script>';
                                echo '<script language = "javascript">';
                                echo 'window.location.href = "?page=edituserprefs&userid='.$this->_currentSession['user']['userid'].'"';
                                echo '</script>';
                            } // catch
                        } else {
                            echo '<script language = "javascript">';
                            echo 'alert("Error uploading filters: '.$uploadHandler->errorText().'")';
                            echo '</script>';
                            echo '<script language = "javascript">';
                            echo 'window.location.href = "?page=edituserprefs&userid='.$this->_currentSession['user']['userid'].'"';
                            echo '</script>';
                        } // else
                    } else {
                        $result->addError(_("Filter hasn't been uploaded"));
                    } // else

                    break;
                    // case 'importfilters'

                case 'addfilter':
                    // Create a new filter record, we will always add the filter to the root with no children
                    $filter = $this->_editFilterForm;
                    $filter['valuelist'] = explode('&', $filter['valuelist']);
                    $filter['torder'] = 999;
                    $filter['tparent'] = 0;
                    $filter['children'] = [];
                    $filter['filtertype'] = 'filter';
                    $filter['enablenotify'] = isset($filter['enablenotify']) ? true : false;

                    // and actually add the filter
                    $result = $svcUserFilter->addFilter($this->_currentSession['user']['userid'], $filter);

                    break;
                    // case 'addfilter'

                case 'reorder':
                    /*
                     * The nestedSortable jquery widget will not pass an explicit sorting, we
                     * add it ourselves using the order of the elements we are given
                     */
                    $result = $svcUserFilter->reorderFilters($this->_currentSession['user']['userid'], $this->_orderList);
                    break;
                    // case 'reorder'

                case 'changefilter':
                    // Retrieve the filter we want to edit
                    $this->_editFilterForm['id'] = $this->_filterId;

                    $result = $svcUserFilter->changeFilter(
                        $this->_currentSession['user']['userid'],
                        $this->_editFilterForm
                    );

                    break;
                    // case 'changefilter'
            } // switch
        } // if

        //- display stuff -#
        $this->template('editfilter', ['filter' => $spotFilter,
            'sorton'                            => $this->_sorton,
            'sortorder'                         => $this->_sortorder,
            'sortby'                            => $this->_sorton,
            'sortdir'                           => $this->_sortorder,
            'lastformaction'                    => $formAction,
            'result'                            => $result,
            'data'                              => $this->_data,
            'http_referer'                      => $this->_editFilterForm['http_referer'], ]);
    }

    // render
} // class SpotPage_editfilter