%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/local/prospamfilter/application/controllers/
Upload File :
Create Path :
Current File : //usr/local/prospamfilter/application/controllers/AdminController.php

<?php
/*
*************************************************************************
*                                                                       *
* ProSpamFilter                                                         *
* Bridge between Webhosting panels & SpamExperts filtering				*
*                                                                       *
* Copyright (c) 2010-2011 SpamExperts B.V. All Rights Reserved,         *
*                                                                       *
*************************************************************************
*                                                                       *
* Email: support@spamexperts.com                                        *
* Website: htttp://www.spamexperts.com                                  *
*                                                                       *
*************************************************************************
*                                                                       *
* This software is furnished under a license and may be used and copied *
* only in accordance with the  terms of such license and with the       *
* inclusion of the above copyright notice. No title to and ownership    *
* of the software is  hereby  transferred.                              *
*                                                                       *
* You may not reverse engineer, decompile or disassemble this software  *
* product or software product license.                                  *
*                                                                       *
* SpamExperts may terminate this license if you don't comply with any   *
* of the terms and conditions set forth in our end user                 *
* license agreement (EULA). In such event, licensee agrees to return    *
* licensor  or destroy  all copies of software upon termination of the  *
* license.                                                              *
*                                                                       *
* Please see the EULA file for the full End User License Agreement.     *
*                                                                       *
*************************************************************************
* @category  SpamExperts
* @package   ProSpamFilter
* @author    $Author$
* @copyright Copyright (c) 2011, SpamExperts B.V., All rights Reserved. (http://www.spamexperts.com)
* @license   Closed Source
* @version   3.0
* @link      https://my.spamexperts.com/kb/34/Addons
* @since     2.5
*/
/** Zend_Controller_Action */
class AdminController extends Zend_Controller_Action
{
    /** @var SpamFilter_Acl */
    protected $_acl;

    /** @var SpamFilter_Controller_Action_Helper_FlashMessenger */
    var $_flashMessenger;

    /** @var Zend_Translate_Adapter_Gettext */
    var $t;

    /** @var SpamFilter_PanelSupport_Cpanel */
    protected $_panel;

    /** @var SpamFilter_Brand */
    private $_branding;

    protected $_hasAPIAccess;

    public function init()
    {
        try {
            // Enable the flash messenger helper so we can send messages.
            $this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        } catch (Zend_Session_Exception $e) {
            if (!$this->_helper->hasHelper('FlashMessenger')) {
                if (!Zend_Session::isStarted() && Zend_Session::sessionExists()) {
                    Zend_Controller_Action_HelperBroker::addHelper(
                        new SpamFilter_Controller_Action_Helper_FlashMessenger()
                    );
                    $this->_flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');
                } else {
                    Zend_Session::setOptions(array("strict" => false));
                    $this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
                    Zend_Session::setOptions(array("strict" => true));
                }
            }
        }
        $this->_branding   = new SpamFilter_Brand();
    }

    public function preDispatch()
    {
        // Setup ACL
        $this->_acl = new SpamFilter_Acl();

        $username = SpamFilter_Core::getUsername();

        // Retrieve usertype using the Panel driver
        $this->_panel = new SpamFilter_PanelSupport();
        $userlevel    = $this->_panel->getUserLevel();

        // Feed the ACL system the current username
        $this->_acl->setRole($username, $userlevel);

        // Get the translator
        $this->t = Zend_Registry::get('translator');

        if (! empty($_POST['apipass'])) {
            SpamFilter_ResellerAPI_Action::disableMessageRegistrationOnInvalidCredentials();
        }

        /**
         * Get changed brandname (in case of it was set)
         * @see https://trac.spamexperts.com/ticket/16804
         */
        $brandname  = $this->_branding->getBrandUsed();

        if (!$brandname) {
            $brandname = 'Professional Spam Filter';
        }

        SpamFilter_ResellerAPI_Action::enableMessageRegistrationOnInvalidCredentials();

        $this->view->headTitle()->set($brandname);
        $this->view->headTitle()->setSeparator(' | ');
        $this->view->headStyle()->appendStyle(file_get_contents(BASE_PATH . DS . 'public' . DS . 'css' . DS . 'bootstrap.min.css'));
        $this->view->headStyle()->appendStyle(
            file_get_contents(BASE_PATH . '/public' . DS . 'css' . DS . 'bootstrap-responsive.min.css')
        );
        $this->view->headStyle()->appendStyle(file_get_contents(BASE_PATH . DS . 'public' . DS . 'css' . DS . 'addon.css'));
        $this->view->headScript()->appendScript(file_get_contents(BASE_PATH . DS . 'public' . DS . 'js' . DS . 'jquery.min.js'));
        $this->view->headScript()->appendScript(file_get_contents(BASE_PATH . DS . 'public' . DS . 'js' . DS . 'bootstrap.min.js'));

        $this->view->acl = $this->_acl;
        $this->view->t = $this->t;
        $this->view->hasAPIAccess = $this->_hasAPIAccess = $this->_branding->hasAPIAccess();
    }

    public function settingsAction()
    {
        $this->view->headTitle()->append("Settings");

        if (!$this->_acl->isAllowed('settings_admin')) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('You do not have permission to this part of the system.'), 'status' => 'error')
            );

            return false;
        }

        $settings = new SpamFilter_Configuration(CFG_PATH . DS . 'settings.conf'); // <-- General settings

        /** @see https://trac.spamexperts.com/ticket/19688 */
        if (!$settings->GetConfig()->provision_dns && $settings->GetConfig()->bulk_force_change) {
            $this->_flashMessenger->addMessage(
                array('message' => sprintf(
                    "The option's '%s' status has no effect if '%s' is disabled.",
                    'Force changing route & MX records, even if the domain exists.',
                    'Automatically change the MX records for domains'
                ), 'status' => 'error')
            );
        }

        $form = new SpamFilter_Forms_AdminConfig;
        if ($this->_request->isPost()) {
            $values = $_POST;
            if ($form->isValid($_POST)) {

                /**
                 * Do not overwrite value of last_bulkprotect
                 * @see https://trac.spamexperts.com/ticket/14699
                 */
                $config = Zend_Registry::get('general_config');
                if (!empty($config->last_bulkprotect)) {
                    $values['last_bulkprotect'] = $config->last_bulkprotect;
                }

                // When updating the settings keep the configured updatetier, if available
                if (!empty($config->updatetier)) {
                    $values['updatetier'] = $config->updatetier;
                }

                // We don't need it stored in the config file
                unset($values['submit']);

                if ($settings->WriteConfig($values)) {
                    //clear domains list cache if "Add addon- and parked domains as an alias instead of a normal domain." option was changed
                    if ( $config->add_extra_alias != $_POST['add_extra_alias'] ||
                         $config->handle_extra_domains != $_POST['handle_extra_domains']
                    ) {
                        // refresh domains for other users as well
                        SpamFilter_Core::invalidateDomainsCaches();

                        $cacheKey = SpamFilter_Core::getDomainsCacheId();
                        $domains = $this->_panel->getDomains( array('username' => SpamFilter_Core::getUsername(), 'level' => 'owner' ) );
                        SpamFilter_Panel_Cache::set($cacheKey, $domains);
                    }

                    $this->_flashMessenger->addMessage(
                        array('message' => $this->t->_('The settings have been saved.'), 'status' => 'success')
                    );

                    $this->redirectTo('admin', 'settings');
                } else {
                    $this->_flashMessenger->addMessage(
                        array('message' => $this->t->_('The configuration could not be saved.'), 'status' => 'error')
                    );
                }
            } else {
                $form->populate($values);
                $this->_flashMessenger->addMessage(
                    array('message' => $this->t->_('One or more settings are not correctly set.'), 'status' => 'error')
                );
            }
        }

        $this->view->form = $form;
    }

    public function brandingAction()
    {
        if (!$this->_hasAPIAccess) { return;}

        $this->view->headTitle()->append("Branding");

        if (!$this->_acl->isAllowed('settings_branding')) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('You do not have permission to this part of the system.'), 'status' => 'error')
            );
            $this->_helper->viewRenderer->setNoRender(); // Do not render the page
            return false;
        }

        $this->view->hasWhitelabel = $this->_branding->hasWhitelabel();

        if ($this->view->hasWhitelabel) // Save on resources, only continue if we actually have something to do here.
        {
            // Initialize Branding config handler.
            $form = new SpamFilter_Forms_BrandingConfig($this->_branding->getBrandUsed());
            if ($this->_request->isPost()) {
                $flashMessenger = $this->_helper->FlashMessenger;
                $values         = $this->_request->getPost(); // Technically we should use *this*
                if ($form->isValid($_POST)) {
                    $uploadedData = $form->getValues();

                    if (empty($uploadedData['brandicon'])) {
                        $values['brandicon'] = trim($this->_branding->getBrandIcon());
                        $this->_flashMessenger->addMessage(
                            array('message' => $this->t->_('No new icon uploaded, using the current one.'), 'status' => 'info')
                        );
                    } else {
                        $values['brandicon'] = trim(
                            base64_encode(file_get_contents(TMP_PATH . DS . $uploadedData['brandicon']))
                        );
                    }
                    if ($this->_branding->updateBranding($values)) {
                        $this->_flashMessenger->addMessage(
                            array('message' => $this->t->_('The branding settings have been saved.'), 'status' => 'success')
                        );
                        $this->_flashMessenger->addMessage(
                            array('message' => $this->t->_("Brandname is set to ") ."'{$values['brandname']}'.", 'status' => 'success')
                        );
                        $icon_size = 0;

                        ($icon_size > 0) ? $this->_flashMessenger->addMessage(
                            array('message' =>
                                  'Brand icon <img src="psf' . DS . 'brandicon.png?' . (filemtime('psf' . DS . 'brandicon.png')) . '">',
                                  'status'  => 'success')
                        ) : '';

                        // Setup data for frontend
                        $this->view->brandname = $values['brandname'];
                        $this->view->brandicon = $values['brandicon'];
                    } else {
                        $this->_flashMessenger->addMessage(
                            array('message' => $this->t->_('The branding settings could not be saved.'), 'status' => 'error')
                        );
                    }
                } else {
                    $form->populate($values);
                    $this->_flashMessenger->addMessage(
                        array('message' => $this->t->_('One or more settings are not correctly set.'), 'status' => 'error')
                    );
                }
            } else {
                // Setup data for frontend
                $this->view->brandname = $this->_branding->getBrandUsed();
                $this->view->brandicon = $this->_branding->getBrandIcon();
            }
            $this->view->form = $form;
        }
    }

    public function listresellersAction()
    {
        $this->view->headTitle()->append("List Resellers");

        if (!$this->_acl->isAllowed('list_resellers')) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('You do not have permission to this part of the system.'), 'status' => 'error')
            );
            $this->_helper->viewRenderer->setNoRender(); // Do not render the page
            return false;
        }
        $resellers = $this->_panel->getResellers();

        if ((!isset($resellers)) || (empty($resellers)) || (is_array($resellers) && count($resellers) === 0)) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('Unable to retrieve resellers.'), 'status' => 'error')
            );

            return false;
        }

        $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($resellers));
        $paginator->setItemCountPerPage(25)
            ->setCurrentPageNumber($this->_getParam('page', 1));
        $this->view->paginator = $paginator;
    }

    public function updateAction()
    {
        $this->view->headTitle()->append("Update");

        if (SpamFilter_Core::isRestrictedToFrozenTier()) {
            $this->_flashMessenger->addMessage(array(
                'message' => sprintf(
                    $this->t->_('You are running an old PHP version (%s) no longer actively supported by this addon so only the \'frozen\' update tier is available, for critical bugfixes. It is highly recommended to upgrade to a newer PHP version (>=%s) to have access to all the latest features.'),
                    phpversion(), SpamFilter_Core::PHP5_RECOMMENDED_VERSION
                ),
                'status' => 'notice'
            ));
        }

        if (!$this->_acl->isAllowed('update')) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('You do not have permission to this part of the system.'), 'status' => 'error')
            );
            $this->_helper->viewRenderer->setNoRender(); // Do not render the page
            return false;
        }

        $form = new SpamFilter_Forms_UpdateConfig();
        if ($this->_request->isPost()) {

            /**
             * A specific PHP binary should exist overwise the update process should be interrupted
             * @see https://trac.spamexperts.com/ticket/17256
             */
            if (SpamFilter_Core::isCpanel()) {
                $phpBinary = str_replace('/', DIRECTORY_SEPARATOR, '/usr/local/cpanel/3rdparty/bin/php-cgi');
                if (!file_exists($phpBinary) || !is_executable($phpBinary)) {
                    $this->_flashMessenger->addMessage(array(
                        'message' => sprintf($this->t->_("Your system seems to be quite outdated - the required binary (%s) cannot be found. The update process has been interrupted."), $phpBinary),
                        'status' => 'error',
                    ));

                    $this->view->form = $form;

                    $config                 = Zend_Registry::get('general_config');
                    $this->view->autoUpdate = ($config->auto_update) ? 'enabled' : 'disabled';

                    return false;
                }
            }

            $values = $this->_request->getPost(); // Technically we should use *this*
            if ($form->isValid($values)) {
                // Write value to config as "tier"
                $settings = new SpamFilter_Configuration(CFG_PATH . DS . 'settings.conf'); // <-- General settings
                $settings->updateOption('updatetier', $values['update_type']);

                if (($values['force_reinstall'] == 1)
                    || SpamFilter_Version::updateAvailable(
                        $values['update_type'], true
                    )
                ) {
                    // Update to latest version
                    $newver = SpamFilter_Version::getCurrentVersion(
                        $values['update_type'], true
                    ); // realtime checking enabled
                    $newver = $newver ?: SpamFilter_Version::getUsedVersion();
                    $this->_flashMessenger->addMessage(
                        array(
                            'message' => $this->t->_('Installing addon update') . ' <strong>v' . $newver . '</strong> ' . $this->t->_('in tier') . ' <strong>' . $values['update_type'] . '</strong>',
                            'status' => 'info'
                        )
                    );
                    $status = SpamFilter_Updater::update(
                        $values['update_type'],
                        $values['force_reinstall'],
                        true
                    );
                    if ($status) {
                        $this->_flashMessenger->addMessage(
                            array(
                                'message' => 'The update process has been initiated successfully. Please wait around 30 seconds before opening other pages to allow the update process to complete',
                                'status' => 'success'
                            )
                        );
                    } else {
                        $this->_flashMessenger->addMessage(
                            array(
                                'message' => 'Unable to install the update, please refer to your logfile for more details.',
                                'status'  => 'error'
                            )
                        );
                    }
                } else {
                    $this->_flashMessenger->addMessage(
                        array(
                            'message' => sprintf($this->t->_('There is no %s update available to install. You are already at the latest version.'), $values['update_type']),
                            'status' => 'info'
                        )
                    );
                }
            } else {
                $form->populate($values);
                $this->_flashMessenger->addMessage(
                    array('message' => $this->t->_('One or more settings are not correctly set.'), 'status' => 'error')
                );
            }
        }
        $this->view->form = $form;

        $config                 = Zend_Registry::get('general_config');
        $this->view->autoUpdate = ($config->auto_update) ? 'enabled' : 'disabled';
    }

    public function loginresellerAction()
    {
        if (!$this->_acl->isAllowed('loginas_reseller')) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('You do not have permission to this part of the system.'), 'status' => 'error')
            );

            return false;
        }

        // disable view
        $this->_flashMessenger->addMessage(
            array('message' => $this->t->_('This feature is not yet implemented.'), 'status' => 'info')
        );
        $this->_helper->viewRenderer->setNoRender(); // Do not render the page
    }

    public function supportAction()
    {
        $this->view->headTitle()->append("Support");
        if (!$this->_acl->isAllowed('support')) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('You do not have permission to this part of the system.'), 'status' => 'error')
            );
            $this->_helper->viewRenderer->setNoRender(); // Do not render the page
            return false;
        }

        $diagform = new SpamFilter_Forms_Diagnostics();
        if ($this->_request->isPost()) {
            if ($diagform->isValid($this->_request->getPost())) {
                #$this->_flashMessenger->addMessage( array('message' => 'Running diagnostics..', 'status' => 'success') );
                $diag    = new SpamFilter_Diagnostics();
                $results = $diag->run();

                $this->view->results = $results;
            }
        }
        $this->view->diagnostics = $diagform;

        $paneltype = ucfirst(strtolower(SpamFilter_Core::getPanelType()));

        $this->view->type_controlpanel    = $paneltype;
        $this->view->version_controlpanel = $this->_panel->getVersion();
        $this->view->php_version          = phpversion();
        $this->view->addon_version        = SpamFilter_Version::getUsedVersion();
    }

    public function migrateAction()
    {
        if (!$this->_hasAPIAccess) { return;}
        // Change the user to a different one and migrate things.
        $this->view->headTitle()->append("Migration");

        if (!$this->_acl->isAllowed('migration')) {
            $this->_flashMessenger->addMessage(
                array('message' => $this->t->_('You do not have permission to this part of the system.'), 'status' => 'error')
            );
            $this->_helper->viewRenderer->setNoRender(); // Do not render the page
            return false;
        }

        $settings = new SpamFilter_Configuration(CFG_PATH . DS . 'settings.conf'); // <-- General settings

        // Check if configured
        $config                   = Zend_Registry::get('general_config');
        $this->view->isConfigured = (!empty($config->apiuser)) ? true : false;
        if (!$this->view->isConfigured) {
            return false;
        }

        $form = new SpamFilter_Forms_Migrate();
        if ($this->_request->isPost()) {
            $values = $_POST;
            if ($form->isValid($_POST)) // Verify new credentials
            {
                Zend_Registry::get('logger')->debug(
                    "[Migrate] Going to migrate all domains to '{$_POST['new_user']}'.. "
                );
                if ($result = $this->_panel->migrateDomainsTo(
                    array(
                         'username' => $_POST['new_user'],
                         'password' => $_POST['new_password']
                    )
                )
                ) {
                    foreach ($result['messages'] as $message) {
                        $this->_flashMessenger->addMessage(
                            array('message' => $message['message'], 'status' => $message['status'])
                        );
                    }
                    if ($result['is_success']) {
                        // Change the settings to update the credentials to the newly provided.
                        $settings->updateOptionsArray(array('apiuser' => filter_input(INPUT_POST, 'new_user', FILTER_SANITIZE_EMAIL), 'apipass' => filter_input(INPUT_POST, 'new_password')));
                        $this->_flashMessenger->addMessage(
                            array('message' => $this->t->_('Credentials have been saved.'), 'status' => 'success')
                        );
                    }
                } else {
                    $this->_flashMessenger->addMessage(
                        array('message' => $this->t->_('Unable to migrate to new user.'), 'status' => 'error')
                    );
                }
            } else {
                $form->populate($values);
                $this->_flashMessenger->addMessage(
                    array('message' => $this->t->_('One or more settings are not correctly set.'), 'status' => 'error')
                );
            }
        }
        $this->view->form = $form;
    }

    private function redirectTo($controller, $action)
    {
        $urlbase = ((false !== stristr($_SERVER['SCRIPT_NAME'], "index.raw")) ? '' : $_SERVER['SCRIPT_NAME']);
        $this->_redirect($urlbase . '?q=' . $this->view->url(array(
            'controller' => $controller,
            'action' => $action,
        )));
    }
}

Zerion Mini Shell 1.0