[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
lib
/
pkp
/
classes
/
cliTool
/
[
Home
]
File: CommandLineTool.php
<?php /** * @defgroup tools Tools * Implements command-line management tools for PKP software. */ /** * @file classes/cliTool/CommandLineTool.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 CommandLineTool * * @ingroup tools * * @brief Initialization code for command-line scripts. * * FIXME: Write a PKPCliRequest and PKPCliRouter class and use the dispatcher * to bootstrap and route tool requests. */ namespace PKP\cliTool; use APP\core\Application; use APP\core\PageRouter; use APP\facades\Repo; use PKP\core\Registry; use PKP\plugins\PluginRegistry; use PKP\security\Role; use PKP\session\SessionManager; use PKP\user\User; use PKP\config\Config; /** Initialization code */ define('PWD', getcwd()); chdir(dirname(INDEX_FILE_LOCATION)); /* Change to base directory */ if (!defined('STDIN')) { define('STDIN', fopen('php://stdin', 'r')); } require_once './lib/pkp/includes/bootstrap.php'; SessionManager::disable(); class CommandLineTool { /** @var string the script being executed */ public $scriptName; /** @vary array Command-line arguments */ public $argv; /** @var string the username provided */ public ?string $username = null; /** @var \PKP\user\User the user provided */ public ?User $user = null; public function __construct($argv = []) { // Initialize the request object with a page router $application = Application::get(); $request = $application->getRequest(); // FIXME: Write and use a CLIRouter here (see classdoc) $router = new PageRouter(); $router->setApplication($application); $request->setRouter($router); // Initialize the locale and load generic plugins. PluginRegistry::loadCategory('generic'); $this->argv = isset($argv) && is_array($argv) ? $argv : []; if (isset($_SERVER['SERVER_NAME'])) { exit('This script can only be executed from the command-line'); } $this->scriptName = isset($this->argv[0]) ? array_shift($this->argv) : ''; if (Config::getVar('general', 'installed')) $this->checkArgsForUsername(); if (isset($this->argv[0]) && $this->argv[0] == '-h') { $this->exitWithUsageMessage(); } } public function usage() { } private function checkArgsForUsername() { $usernameKeyPos = array_search('--user_name', $this->argv); if (!$usernameKeyPos) { $usernameKeyPos = array_search('-u', $this->argv); } if ($usernameKeyPos) { $usernamePos = $usernameKeyPos + 1; if (count($this->argv) >= $usernamePos + 1) { $this->username = $this->argv[$usernamePos]; unset($this->argv[$usernamePos]); } unset($this->argv[$usernameKeyPos]); } if ($this->username) { $user = Repo::user()->getByUsername($this->username, true); $this->setUser($user); } if (!$this->user) { $adminGroups = Repo::userGroup()->getArrayIdByRoleId(Role::ROLE_ID_SITE_ADMIN); if (count($adminGroups)) { $groupUsers = Repo::user()->getCollector() ->filterByUserGroupIds([$adminGroups[0]]) ->getMany(); if ($groupUsers->isNotEmpty()) { $this->setUser($groupUsers->first()); } else { $this->exitWithUsageMessage(); } } } } /** * Sets the user for the CLI Tool * * @param \PKP\user\User $user The user to set as the execution user of this CLI command */ public function setUser($user) { $registeredUser = Registry::get('user', true, null); if (!isset($registeredUser)) { /** * This is used in order to reconcile with possible $request->getUser() * used inside import processes, when the import is done by CLI tool. */ if ($user) { Registry::set('user', $user); $this->user = $user; } } else { $this->user = $registeredUser; } } /** * Exit the CLI tool if an error occurs */ public function exitWithUsageMessage() { $this->usage(); exit(0); } } if (!PKP_STRICT_MODE) { class_alias('\PKP\cliTool\CommandLineTool', '\CommandLineTool'); }