Source of file api.onepunch.php
Size: 15,209 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.onepunch.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 | <?php /** * Allows you to be an Saitama! */ class OnePunch { /** * Contains available punch scripts as alias=>data * * @var array */ protected $punchScripts = array(); /** * System message helper object placeholder * * @var object */ protected $messages = ''; /** * Placeholder for ONEPUNCH_DEFAULT_SORT_FIELD * * @var string */ protected $defaultSortField = ''; /** * System config object placeholder * * @var object */ protected $ubConfig = ''; /** * Punch scripts database abstraction layer placeholder * * @var object */ protected $punchDb = ''; /** * Some predefined URLs, routes, tables etc... */ const URL_DEVCON = '?module=sqlconsole&devconsole=true'; const TABLE_DATASOURCE = 'punchscripts'; // ⠀⠀⠀⣠⣶⡾⠏⠉⠙⠳⢦⡀⠀⠀⠀⢠⠞⠉⠙⠲⡀⠀ // ⠀⠀⠀⣴⠿⠏⠀⠀⠀⠀⠀⠀⢳⡀⠀⡏⠀⠀⠀⠀⠀⢷ // ⠀⠀⢠⣟⣋⡀⢀⣀⣀⡀⠀⣀⡀⣧⠀⢸⠀⠀⠀⠀⠀ ⡇ // ⠀⠀⢸⣯⡭⠁⠸⣛⣟⠆⡴⣻⡲⣿⠀⣸⠀⠀OK⠀ ⡇ // ⠀⠀⣟⣿⡭⠀⠀⠀⠀⠀⢱⠀⠀⣿⠀⢹⠀⠀⠀⠀⠀ ⡇ // ⠀⠀⠙⢿⣯⠄⠀⠀⠀⢀⡀⠀⠀⡿⠀⠀⡇⠀⠀⠀⠀⡼ // ⠀⠀⠀⠀⠹⣶⠆⠀⠀⠀⠀⠀⡴⠃⠀⠀⠘⠤⣄⣠⠞⠀ // ⠀⠀⠀⠀⠀⢸⣷⡦⢤⡤⢤⣞⣁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ // ⠀⠀⢀⣤⣴⣿⣏⠁⠀⠀⠸⣏⢯⣷⣖⣦⡀⠀⠀⠀⠀⠀⠀ // ⢀⣾⣽⣿⣿⣿⣿⠛⢲⣶⣾⢉⡷⣿⣿⠵⣿⠀⠀⠀⠀⠀⠀ // ⣼⣿⠍⠉⣿⡭⠉⠙⢺⣇⣼⡏⠀⠀⠀⣄⢸⠀⠀⠀⠀⠀⠀ // ⣿⣿⣧⣀⣿………⣀⣰⣏⣘⣆⣀⠀⠀ /** * Creates new object instance * * @param string alias only one alias to load * * @return void */ public function __construct($alias = '') { $this->loadOptions(); $this->initMessages(); $this->initDatabase(); $this->loadScripts($alias); } /** * Inits system message helper object instance for further usage * * @return void */ protected function initMessages() { $this->messages = new UbillingMessageHelper(); } /** * Inits database abstraction layer * * @return void */ protected function initDatabase() { $this->punchDb = new NyanORM(self::TABLE_DATASOURCE); } /** * Load required configs and sets some properties depends by options * * @return void */ protected function loadOptions() { global $ubillingConfig; $this->ubConfig = $ubillingConfig; $customSortField = $this->ubConfig->getAlterParam('ONEPUNCH_DEFAULT_SORT_FIELD'); if ($customSortField) { $this->defaultSortField = $customSortField; } } /** * Loads existing punch scripts from database * * @param string $alias * * @return void */ protected function loadScripts($alias = '') { $alias = ubRouting::filters($alias, 'callback', 'vf'); if (!empty($alias)) { $this->punchDb->where('alias', '=', $alias); } if (!empty($this->defaultSortField)) { $this->punchDb->orderBy($this->defaultSortField, 'ASC'); } $this->punchScripts = $this->punchDb->getAll('alias'); } /** * Returns array of loaded scripts as alias=>scriptData * * @return array */ public function getAllScripts() { return($this->punchScripts); } /** * Checks is some script alias unused? * * @param sring $alias * * @return bool false - script exists, true - alias free. */ protected function checkAlias($alias) { $alias = ubRouting::filters($alias, 'callback', 'vf'); $result = true; if (isset($this->punchScripts[$alias])) { $result = false; } return ($result); } /** * Renders new script creation form * * @return string */ public function renderCreateForm() { $result = ''; $inputs = ''; $namePreset = (ubRouting::checkPost('newscriptname')) ? ubRouting::post('newscriptname') : ''; $aliasPreset = (ubRouting::checkPost('newscriptalias')) ? ubRouting::post('newscriptalias') : ''; $contentPreset = (ubRouting::checkPost('newscriptcontent')) ? ubRouting::post('newscriptcontent') : ''; // sanjou! hisshou! shijou saikyou // nan dattenda? FURASUTOREESHON ore wa tomaranai $inputs .= wf_TextInput('newscriptname', __('Name'), $namePreset, true, 30); $inputs .= wf_TextInput('newscriptalias', __('Alias'), $aliasPreset, true, 15, 'alphanumeric'); $inputs .= wf_tag('textarea', false, 'fileeditorarea', 'name="newscriptcontent" cols="145" rows="30" spellcheck="false"'); $inputs .= $contentPreset; $inputs .= wf_tag('textarea', true); $inputs .= wf_Submit(__('Create')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); $result .= wf_delimiter(); $result .= wf_BackLink(self::URL_DEVCON); return ($result); } /** * Renders script editing form * * @param string $alias * * @return string */ public function renderEditForm($alias) { $result = ''; $alias = ubRouting::filters($alias, 'callback', 'vf'); if (isset($this->punchScripts[$alias])) { $inputs = ''; $scriptData = $this->punchScripts[$alias]; $namePreset = $scriptData['name']; $aliasPreset = $scriptData['alias']; $contentPreset = htmlentities($scriptData['content'], ENT_COMPAT, "UTF-8"); $scriptId = $scriptData['id']; $inputs .= wf_HiddenInput('editscriptid', $scriptId); $inputs .= wf_HiddenInput('editscriptoldalias', $aliasPreset); $inputs .= wf_TextInput('editscriptname', __('Name'), $namePreset, true, 30); $inputs .= wf_TextInput('editscriptalias', __('Alias'), $aliasPreset, true, 15, 'alphanumeric'); $inputs .= wf_tag('textarea', false, 'fileeditorarea', 'name="editscriptcontent" cols="145" rows="30" spellcheck="false"'); $inputs .= $contentPreset; $inputs .= wf_tag('textarea', true); $inputs .= wf_Submit(__('Save')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); $result .= wf_delimiter(); $result .= wf_BackLink(self::URL_DEVCON); } return ($result); } /** * Creates new script in database * * @param string $alias * @param string $name * @param string $content * * @return void/string on error */ public function createScript($alias, $name, $content) { $result = ''; $alias = ubRouting::filters($alias, 'callback', 'vf'); $name = ubRouting::filters($name, 'mres'); $content = ubRouting::filters($content, 'mres'); if ($this->checkAlias($alias)) { $this->punchDb->data('alias', $alias); $this->punchDb->data('name', $name); $this->punchDb->data('content', $content); $this->punchDb->create(); log_register('ONEPUNCH CREATE ALIAS `' . $alias . '`'); } else { $result .= __('Something went wrong') . ': ' . __('Script with this alias already exists'); log_register('ONEPUNCH CREATE ALIAS `' . $alias . '` FAIL'); } return ($result); } /** * Deletes some script from database by his alias * * @param string $alias * * @return void/string on error */ public function deleteScript($alias) { $result = ''; $alias = ubRouting::filters($alias, 'callback', 'vf'); if (isset($this->punchScripts[$alias])) { $this->punchDb->where('alias', '=', $alias); $this->punchDb->delete(); log_register('ONEPUNCH DELETE ALIAS `' . $alias . '`'); } else { $result .= __('Something went wrong') . ': ' . __('Script with this alias not exists'); log_register('ONEPUNCH DELETE ALIAS `' . $alias . '` FAIL'); } return ($result); } /** * Saves script data into database * * @return void */ public function saveScript() { if (ubRouting::checkPost(array('editscriptid', 'editscriptoldalias', 'editscriptname', 'editscriptalias', 'editscriptcontent'))) { $scriptId = ubRouting::post('editscriptid', 'int'); $newScriptAlias = ubRouting::post('editscriptalias', 'callback', 'vf'); $oldScriptAlias = ubRouting::post('editscriptoldalias', 'callback', 'vf'); $newScriptName = ubRouting::post('editscriptname', 'mres'); $newScriptContent = ubRouting::post('editscriptcontent', 'mres'); if (isset($this->punchScripts[$oldScriptAlias])) { $scriptData = $this->punchScripts[$oldScriptAlias]; if ($scriptData['alias'] != $newScriptAlias) { if ($this->checkAlias($newScriptAlias)) { $this->punchDb->where('id', '=', $scriptId); $this->punchDb->data('alias', $newScriptAlias); $this->punchDb->save(); log_register('ONEPUNCH CHANGE ALIAS `' . $oldScriptAlias . '` ON `' . $newScriptAlias . '`'); } else { log_register('ONEPUNCH CHANGE ALIAS `' . $newScriptAlias . '` FAIL'); } } if ($scriptData['name'] != $newScriptName) { $this->punchDb->where('id', '=', $scriptId); $this->punchDb->data('name', $newScriptName); $this->punchDb->save(); log_register('ONEPUNCH CHANGE NAME `' . $oldScriptAlias . '`'); } if ($scriptData['content'] != $newScriptContent) { $this->punchDb->where('id', '=', $scriptId); $this->punchDb->data('content', $newScriptContent); $this->punchDb->save(); log_register('ONEPUNCH CHANGE CONTENT `' . $oldScriptAlias . '`'); } } } } /** * Performs old dev console code templates migration into one-punch scripts * * @return void */ public function importOldTemplates() { $keyMask = 'PHPCONSOLETEMPLATE:'; $allTemplateKeys = zb_StorageFindKeys($keyMask); if (!empty($allTemplateKeys)) { foreach ($allTemplateKeys as $eachTemplateKey) { $newAlias = str_replace($keyMask, '', $eachTemplateKey['key']); $templateRaw = zb_StorageGet($eachTemplateKey['key']); @$templateData = unserialize($templateRaw); if (!empty($templateData)) { if ((isset($templateData['name'])) AND ( isset($templateData['body']))) { if ($this->checkAlias($newAlias)) { //alias not exists yet $this->createScript($newAlias, $templateData['name'], $templateData['body']); //flush old code template zb_StorageDelete($eachTemplateKey['key']); } } } } } } /** * Renders list of available punch scripts with some controls * * @return string */ public function renderScriptsList() { $result = ''; if (!empty($this->punchScripts)) { $cells = wf_TableCell(__('Name')); $cells .= wf_TableCell(__('Alias')); $cells .= wf_TableCell(__('Actions')); $rows = wf_TableRow($cells, 'row1'); foreach ($this->punchScripts as $io => $each) { $runLink = wf_JSAlert(self::URL_DEVCON . '&runscript=' . $each['alias'], $each['name'], 'Insert this template into PHP console'); $cells = wf_TableCell($runLink); $cells .= wf_TableCell($each['alias']); $actLinks = wf_JSAlert(self::URL_DEVCON . '&delscript=' . $each['alias'], web_delete_icon(), $this->messages->getDeleteAlert()) . ' '; $actLinks .= wf_JSAlert(self::URL_DEVCON . '&editscript=' . $each['alias'], web_edit_icon(), $this->messages->getEditAlert()); $cells .= wf_TableCell($actLinks); $rows .= wf_TableRow($cells, 'row5'); } $result .= wf_TableBody($rows, '100%', 0, 'sortable'); } else { $result .= $this->messages->getStyledMessage(__('No available code templates'), 'warning'); $result .= wf_tag('br'); $result .= wf_JSAlertStyled(self::URL_DEVCON . '&importoldcodetemplates=true', wf_img('skins/shovel.png') . ' ' . __('Import old code templates if available'), $this->messages->getEditAlert(), 'ubButton'); $result .= wf_tag('br'); } return ($result); } /** * Returns executable content of existing punch script * * @param string $alias * * @return string */ public function getScriptContent($alias) { $alias = ubRouting::filters($alias, 'callback', 'vf'); $result = ''; if (isset($this->punchScripts[$alias])) { $result .= $this->punchScripts[$alias]['content']; } return ($result); } /** * Checks is some script alias exists? * * @param string $alias * * @return bool */ public function isAliasFree($alias) { return($this->checkAlias($alias)); } /** * Installs some third-party script * * @param array $scriptData * * @return void/string on error */ public function installScript($scriptData) { $result = ''; if (is_array($scriptData)) { if (isset($scriptData['alias']) AND isset($scriptData['name']) AND isset($scriptData['content'])) { $alias = $scriptData['alias']; $name = $scriptData['name']; $content = $scriptData['content']; if (!empty($alias) AND !empty($name) AND !empty($content)) { if ($this->isAliasFree($alias)) { $result .= $this->createScript($alias, $name, $content); } else { $result .= __('One-punch') . ' ' . __('Alias') . ' ' . _('already exists'); } } else { $result .= __('One-punch') . ' ' . __('script') . ' ' . _('is corrupted'); } } else { $result .= __('One-punch') . ' ' . __('script') . ' ' . _('is corrupted'); } } else { $result .= __('One-punch') . ' ' . __('script') . ' ' . _('is corrupted'); } return($result); } } |