Uname:Linux server2.hostofiraq.site 5.15.0-186-generic #196-Ubuntu SMP Sat Jun 20 16:09:34 UTC 2026 x86_64

Base Dir : /home/iscmbt-kufa-atu/public_html

User : iscmbt-kufa-atu


403WebShell
403Webshell
Server IP : 89.117.53.150  /  Your IP : 216.73.216.11
Web Server : Apache
System : Linux server2.hostofiraq.site 5.15.0-186-generic #196-Ubuntu SMP Sat Jun 20 16:09:34 UTC 2026 x86_64
User : iscmbt-kufa-atu ( 1014)
PHP Version : 8.2.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/iscmbt-kufa-atu/quarantine/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/iscmbt-kufa-atu/quarantine/AdminLanguageGridHandler.php
<?php

/**
 * @file controllers/grid/admin/languages/AdminLanguageGridHandler.php
 *
 * Copyright (c) 2014-2021 Simon Fraser University
 * Copyright (c) 2000-2021 John Willinsky
 * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
 *
 * @class AdminLanguageGridHandler
 *
 * @ingroup controllers_grid_admin_languages
 *
 * @brief Handle administrative language grid requests. If in single context (e.g.
 * press) installation, this grid can also handle language management requests.
 * See _canManage().
 */

namespace PKP\controllers\grid\admin\languages;

use APP\core\Application;
use APP\core\Request;
use APP\core\Services;
use APP\facades\Repo;
use APP\notification\NotificationManager;
use PKP\controllers\grid\GridColumn;
use PKP\controllers\grid\languages\form\InstallLanguageForm;
use PKP\controllers\grid\languages\LanguageGridHandler;
use PKP\core\JSONMessage;
use PKP\core\PKPRequest;
use PKP\db\DAORegistry;
use PKP\facades\Locale;
use PKP\linkAction\LinkAction;
use PKP\linkAction\request\AjaxModal;
use PKP\notification\PKPNotification;
use PKP\security\authorization\PolicySet;
use PKP\security\authorization\RoleBasedHandlerOperationPolicy;
use PKP\security\Role;
use PKP\services\interfaces\EntityWriteInterface;
use PKP\site\Site;
use PKP\site\SiteDAO;

class AdminLanguageGridHandler extends LanguageGridHandler
{
    /**
     * Constructor
     */
    public function __construct()
    {
        parent::__construct();
        $this->addRoleAssignment(
            [Role::ROLE_ID_SITE_ADMIN],
            [
                'fetchGrid', 'fetchRow',
                'installLocale', 'saveInstallLocale', 'uninstallLocale',
                'disableLocale', 'enableLocale', 'setPrimaryLocale'
            ]
        );
    }


    //
    // Implement template methods from PKPHandler.
    //
    /**
     * @copydoc GridHandler::authorize()
     */
    public function authorize($request, &$args, $roleAssignments)
    {
        $rolePolicy = new PolicySet(PolicySet::COMBINING_PERMIT_OVERRIDES);

        foreach ($roleAssignments as $role => $operations) {
            $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, $role, $operations));
        }
        $this->addPolicy($rolePolicy);

        return parent::authorize($request, $args, $roleAssignments);
    }

    /**
     * @copydoc LanguageGridHandler::initialize()
     *
     * @param null|mixed $args
     */
    public function initialize($request, $args = null)
    {
        parent::initialize($request, $args);

        // Grid actions.
        $router = $request->getRouter();

        $this->addAction(
            new LinkAction(
                'installLocale',
                new AjaxModal(
                    $router->url($request, null, null, 'installLocale', null, null),
                    __('admin.languages.installLocale'),
                    null,
                    true
                ),
                __('admin.languages.installLocale'),
                'add'
            )
        );

        // Columns.
        // Enable locale.
        $this->addColumn(
            new GridColumn(
                'enable',
                'common.enable',
                null,
                'controllers/grid/common/cell/selectStatusCell.tpl',
                $this->getCellProvider(),
                ['width' => 10]
            )
        );

        $this->addNameColumn(); // Locale name.
        $this->addLocaleCodeColumn(); // Locale code.

        // Primary locale.
        if ($this->_canManage($request)) {
            $primaryId = 'contextPrimary';
        } else {
            $primaryId = 'sitePrimary';
        }
        $this->addPrimaryColumn($primaryId);

        if ($this->_canManage($request)) {
            $this->addManagementColumns();
        }

        $this->setFootNote('admin.locale.maybeIncomplete');
    }


    //
    // Implement methods from GridHandler.
    //
    /**
     * @copydoc GridHandler::loadData()
     */
    protected function loadData($request, $filter)
    {
        $site = $request->getSite(); /** @var Site $site */
        $data = [];

        $installedLocales = $site->getInstalledLocaleNames();
        $supportedLocales = $site->getSupportedLocales();
        $primaryLocale = $site->getPrimaryLocale();

        foreach ($installedLocales as $localeKey => $localeName) {
            $data[$localeKey] = [];
            $data[$localeKey]['code'] = $localeKey;
            $data[$localeKey]['name'] = $localeName;
            $data[$localeKey]['incomplete'] = !Locale::getMetadata($localeKey)->isComplete();
            $data[$localeKey]['supported'] = in_array($localeKey, $supportedLocales);

            if ($this->_canManage($request)) {
                $context = $request->getContext();
                $primaryLocale = $context->getPrimaryLocale();
            }

            $data[$localeKey]['primary'] = $localeKey === $primaryLocale;
        }

        if ($this->_canManage($request)) {
            $data = $this->addManagementData($request, $data);
        }

        return $data;
    }


    //
    // Public grid actions.
    //
    /**
     * Open a form to select locales for installation.
     *
     * @param array $args
     * @param PKPRequest $request
     *
     * @return JSONMessage JSON object
     */
    public function installLocale($args, $request)
    {
        // Form handling.
        $installLanguageForm = new InstallLanguageForm();
        $installLanguageForm->initData();
        return new JSONMessage(true, $installLanguageForm->fetch($request));
    }

    /**
     * Save the install language form.
     *
     * @param array $args
     * @param PKPRequest $request
     *
     * @return JSONMessage JSON object
     */
    public function saveInstallLocale($args, $request)
    {
        $installLanguageForm = new InstallLanguageForm();
        $installLanguageForm->readInputData();

        if ($installLanguageForm->validate()) {
            $installLanguageForm->execute();
            $this->_updateContextLocaleSettings($request);

            $notificationManager = new NotificationManager();
            $user = $request->getUser();
            $notificationManager->createTrivialNotification(
                $user->getId(),
                PKPNotification::NOTIFICATION_TYPE_SUCCESS,
                ['contents' => __('notification.localeInstalled')]
            );
        }
        return \PKP\db\DAO::getDataChangedEvent();
    }

    /**
     * Uninstall a locale.
     *
     * @param array $args
     * @param Request $request
     *
     * @return JSONMessage JSON object
     */
    public function uninstallLocale($args, $request)
    {
        $site = $request->getSite();
        $locale = $request->getUserVar('rowId');
        $gridData = $this->getGridDataElements($request);

        if ($request->checkCSRF() && array_key_exists($locale, $gridData)) {
            $localeData = $gridData[$locale];
            if ($localeData['primary']) {
                return new JSONMessage(false);
            }

            $installedLocales = $site->getInstalledLocales();
            if (in_array($locale, $installedLocales)) {
                $installedLocales = array_diff($installedLocales, [$locale]);
                $site->setInstalledLocales($installedLocales);
                $supportedLocales = $site->getSupportedLocales();
                $supportedLocales = array_diff($supportedLocales, [$locale]);
                $site->setSupportedLocales($supportedLocales);
                $siteDao = DAORegistry::getDAO('SiteDAO'); /** @var SiteDAO $siteDao */
                $siteDao->updateObject($site);

                $this->_updateContextLocaleSettings($request);
                Locale::uninstallLocale($locale);

                $notificationManager = new NotificationManager();
                $user = $request->getUser();
                $notificationManager->createTrivialNotification(
                    $user->getId(),
                    PKPNotification::NOTIFICATION_TYPE_SUCCESS,
                    ['contents' => __('notification.localeUninstalled', ['locale' => $localeData['name']])]
                );
            }
            return \PKP\db\DAO::getDataChangedEvent($locale);
        }

        return new JSONMessage(false);
    }

    /**
     * Enable an existing locale.
     *
     * @param array $args
     * @param Request $request
     *
     * @return JSONMessage JSON object
     */
    public function enableLocale($args, $request)
    {
        $rowId = $request->getUserVar('rowId');
        $gridData = $this->getGridDataElements($request);

        if (array_key_exists($rowId, $gridData)) {
            $this->_updateLocaleSupportState($request, $rowId, true);

            $notificationManager = new NotificationManager();
            $user = $request->getUser();
            $notificationManager->createTrivialNotification(
                $user->getId(),
                PKPNotification::NOTIFICATION_TYPE_SUCCESS,
                ['contents' => __('notification.localeEnabled')]
            );
        }

        return \PKP\db\DAO::getDataChangedEvent($rowId);
    }

    /**
     * Disable an existing locale.
     *
     * @param array $args
     * @param Request $request
     *
     * @return JSONMessage JSON object
     */
    public function disableLocale($args, $request)
    {
        $locale = $request->getUserVar('rowId');
        $gridData = $this->getGridDataElements($request);
        $notificationManager = new NotificationManager();
        $user = $request->getUser();

        if ($request->checkCSRF() && array_key_exists($locale, $gridData)) {
            // Don't disable primary locales.
            if ($gridData[$locale]['primary']) {
                $notificationManager->createTrivialNotification(
                    $user->getId(),
                    PKPNotification::NOTIFICATION_TYPE_ERROR,
                    ['contents' => __('admin.languages.cantDisable')]
                );
            } else {
                $this->_updateLocaleSupportState($request, $locale, false);
                $notificationManager->createTrivialNotification(
                    $user->getId(),
                    PKPNotification::NOTIFICATION_TYPE_SUCCESS,
                    ['contents' => __('notification.localeDisabled')]
                );
            }
            return \PKP\db\DAO::getDataChangedEvent($locale);
        }

        return new JSONMessage(false);
    }


    /**
     * Set primary locale.
     *
     * @param array $args
     * @param Request $request
     *
     * @return JSONMessage JSON object
     */
    public function setPrimaryLocale($args, $request)
    {
        $rowId = $request->getUserVar('rowId');
        $gridData = $this->getGridDataElements($request);
        $localeData = $gridData[$rowId];
        $notificationManager = new NotificationManager();
        $user = $request->getUser();
        $site = $request->getSite();

        if (array_key_exists($rowId, $gridData)) {
            if (Locale::isLocaleValid($rowId)) {
                $oldSitePrimaryLocale = $site->getPrimaryLocale();
                Repo::user()->dao->changeSitePrimaryLocale($oldSitePrimaryLocale, $rowId);
                $site->setPrimaryLocale($rowId);
                $siteDao = DAORegistry::getDAO('SiteDAO'); /** @var SiteDAO $siteDao */
                $siteDao->updateObject($site);

                $notificationManager->createTrivialNotification(
                    $user->getId(),
                    PKPNotification::NOTIFICATION_TYPE_SUCCESS,
                    ['contents' => __('notification.primaryLocaleDefined', ['locale' => $localeData['name']])]
                );
            }
        }

        // Need to refresh whole grid to remove the check in others
        // primary locale radio buttons.
        return \PKP\db\DAO::getDataChangedEvent();
    }


    //
    // Helper methods.
    //
    /**
     * Update the locale support state (enabled or disabled).
     *
     * @param Request $request
     * @param string $rowId The locale row id.
     * @param bool $enable Enable locale flag.
     */
    protected function _updateLocaleSupportState($request, $rowId, $enable)
    {
        $newSupportedLocales = [];
        $gridData = $this->getGridDataElements($request);

        foreach ($gridData as $locale => $data) {
            if ($data['supported']) {
                array_push($newSupportedLocales, $locale);
            }
        }

        if (Locale::isLocaleValid($rowId)) {
            if ($enable) {
                array_push($newSupportedLocales, $rowId);
            } else {
                $key = array_search($rowId, $newSupportedLocales);
                if ($key !== false) {
                    unset($newSupportedLocales[$key]);
                }
            }
        }

        $site = $request->getSite();
        $site->setSupportedLocales($newSupportedLocales);

        $siteDao = DAORegistry::getDAO('SiteDAO'); /** @var SiteDAO $siteDao */
        $siteDao->updateObject($site);

        $this->_updateContextLocaleSettings($request);
    }

    /**
     * Helper function to update locale settings in all
     * installed contexts, based on site locale settings.
     *
     * @param object $request
     */
    protected function _updateContextLocaleSettings($request)
    {
        $site = $request->getSite();
        $siteSupportedLocales = $site->getSupportedLocales();
        $contextService = Services::get('context');

        $contextDao = Application::getContextDAO();
        $contexts = $contextDao->getAll();
        while ($context = $contexts->next()) {
            $params = [];
            $primaryLocale = $context->getPrimaryLocale();
            foreach (['supportedLocales', 'supportedFormLocales', 'supportedSubmissionLocales'] as $settingName) {
                $localeList = $context->getData($settingName);

                if (is_array($localeList)) {
                    $params[$settingName] = array_intersect($localeList, $siteSupportedLocales);
                }
            }
            if (!in_array($primaryLocale, $siteSupportedLocales)) {
                $params['primaryLocale'] = $site->getPrimaryLocale();
                $primaryLocale = $params['primaryLocale'];
            }
            $errors = $contextService->validate(EntityWriteInterface::VALIDATE_ACTION_EDIT, $params, $params['supportedLocales'], $primaryLocale);
            // If there are errors, it's too late to do anything about it
            assert(empty($errors));
            $contextService->edit($context, $params, $request);
        }
    }

    /**
     * This grid can also present management functions
     * if the conditions above are true.
     *
     * @param Request $request
     *
     * @return bool
     */
    protected function _canManage($request)
    {
        $contextDao = Application::getContextDAO();
        $contexts = $contextDao->getAll();
        $userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
        [$firstContext, $secondContext] = [$contexts->next(), $contexts->next()];
        return ($firstContext && !$secondContext && $request->getContext() && in_array(Role::ROLE_ID_MANAGER, $userRoles));
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit