Файловый менеджер - Редактировать - /home/lmsyaran/public_html/joomla5/plugins/fabrik_form/php/php.php
Назад
<?php /** * Run some php when the form is submitted * * @package Joomla.Plugin * @subpackage Fabrik.form.php * @copyright Copyright (C) 2005-2020 Media A-Team, Inc. - All rights reserved. * @license GNU/GPL http://www.gnu.org/copyleft/gpl.html */ // No direct access defined('_JEXEC') or die('Restricted access'); use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Filesystem\File; use Fabrik\Helpers\Php; // Require the abstract plugin class require_once COM_FABRIK_FRONTEND . '/models/plugin-form.php'; /** * Run some php when the form is submitted * * @package Joomla.Plugin * @subpackage Fabrik.form.php * @since 3.0 */ class PlgFabrik_FormPHP extends PlgFabrik_Form { /** * canEditGroup, called when canEdit called in group model * * @param FabrikFEModelGroup $groupModel Group model * * @return void */ public function onCanEditGroup($groupModel) { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onCanEditGroup') { if (is_array($groupModel)) { $groupModel = $groupModel[0]; } if ($this->_runPHP($groupModel) === false) { return false; } } return true; } /** * Sets up HTML to be injected into the form's bottom * * @return void */ public function getBottomContent() { $this->html = ''; $params = $this->getParams(); if ($params->get('only_process_curl') == 'getBottomContent') { $this->html = $this->_runPHP(); if ($this->html === false) { return false; } } return true; } /** * Get any html that needs to be written after the form close tag * * @return string html */ public function getTopContent_result() { return $this->html; } /** * Store the html to insert at the top of the form * * @return bool */ public function getTopContent() { $this->html = ''; $params = $this->getParams(); if ($params->get('only_process_curl') == 'getTopContent') { $this->html = $this->_runPHP(); if ($this->html === false) { return false; } } return true; } /** * Get any html that needs to be written after the form close tag * * @return string html */ public function getEndContent_result() { return $this->html; } /** * Sets up any end html (after form close tag) * * @return void */ public function getEndContent() { $this->html = ''; $params = $this->getParams(); if ($params->get('only_process_curl') == 'getEndContent') { $this->html = $this->_runPHP(); if ($this->html === false) { return false; } } return true; } /** * Run right at the beginning of the form processing * * @return bool */ public function onBeforeProcess() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onBeforeProcess') { if ($this->_runPHP() === false) { return false; } } return true; } /** * Before the record is stored, this plugin will see if it should process * and if so store the form data in the session. * * @return bool should the form model continue to save */ public function onBeforeStore() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onBeforeStore') { if ($this->_runPHP() === false) { return false; } } return true; } /** * Run before list calculations are applied * * @return bool */ public function onBeforeCalculations() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onBeforeCalculations') { if ($this->_runPHP() === false) { return false; } } return true; } /** * Run from list model when deleting rows * * @param array &$groups List data for deletion * * @return bool */ public function onDeleteRowsForm(&$groups) { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onDeleteRowsForm') { if ($this->_runPHP(null, $groups) === false) { return false; } } return true; } /** * Run from list model when deleting rows * * @param array &$groups List data for deletion * * @return bool */ public function onAfterDeleteRowsForm(&$groups) { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onAfterDeleteRowsForm') { if ($this->_runPHP(null, $groups) === false) { return false; } } return true; } /** * Run right at the end of the form processing * form needs to be set to record in database for this to hook to be called * * @return bool */ public function onAfterProcess() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onAfterProcess') { $formModel = $this->getModel(); if ($this->_runPHP() === false) { return false; } } return true; } /** * Run when the form is loaded - after its data has been created * data found in $formModel->data * * @return bool */ public function onLoad() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onLoad') { return $this->_runPHP(); } return true; } /** * Run when the form is loaded - before its data has been created * data found in $formModel->data * * @return bool */ public function onBeforeLoad() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onBeforeLoad') { return $this->_runPHP(); } return true; } /** * Run for each element's canUse. Return false to make an element read only * * @param array $args array containing element model being tested * * @return bool */ public function onElementCanUse($args) { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onElementCanUse') { if ($this->_requirePHP() === false) { return false; } $formModel = $this->getModel(); $elementModel = FArrayHelper::getValue($args, 0, false); if ($elementModel) { $w = new FabrikWorker; $code = $w->parseMessageForPlaceHolder($params->get('curl_code', ''), $formModel->data, true, true); FabrikWorker::clearEval(); $php_result = Php::Eval(['code' => $code, 'vars' => ['formModel' => $formModel,'elementModel' => $elementModel]]); FabrikWorker::logEval($php_result, 'Caught exception on eval of ' . $formModel->label . ': %s'); if ($php_result === false) { return false; } } } return true; } /** * Run for each element's canView. Return false to deny view access * * @param array $args array containing element model being tested * * @return bool */ public function onElementCanView($args) { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onElementCanView') { if ($this->_requirePHP() === false) { return false; } $formModel = $this->getModel(); $elementModel = FArrayHelper::getValue($args, 0, false); if ($elementModel) { $w = new FabrikWorker; $code = $w->parseMessageForPlaceHolder($params->get('curl_code', ''), $formModel->data, true, true); FabrikWorker::clearEval(); $php_result = Php::Eval(['code' => $code, 'vars' => ['formModel' => $formModel,'elementModel' => $elementModel]]); FabrikWorker::logEval($php_result, 'Caught exception on eval of ' . $formModel->label . ': %s'); if ($php_result === false) { return false; } } } return true; } /** * Run during form rendering, when all the form's JS is assembled and ready * data found in $formModel->data * * @return bool */ public function onJSReady() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onJSReady') { return $this->_runPHP(); } return true; } /** * Run during form rendering, when all the form's JS is assembled and ready * data found in $formModel->data * * @return bool */ public function onJSOpts(&$opts) { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onJSOpts') { return $this->_runPHP(); } return true; } /** * Run for each element's canView. Return false to deny view access * * @param array $args array containing element model being tested * * @return bool */ public function onElementContainerClass($args) { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onElementContainerClass') { if ($this->_requirePHP() === false) { return false; } $formModel = $this->getModel(); $elementModel = FArrayHelper::getValue($args, 0, false); if ($elementModel) { $w = new FabrikWorker; $code = $w->parseMessageForPlaceHolder($params->get('curl_code', ''), $formModel->data, true, true); FabrikWorker::clearEval(); $php_result = Php::Eval(['code' => $code, 'vars' => ['formModel' => $formModel,'elementModel' => $elementModel, 'data' => $data]]); FabrikWorker::logEval($php_result, 'Caught exception on eval of ' . $formModel->label . ': %s'); if ($php_result === false) { return false; } } } return true; } /** * Process the plugin, called when form is submitted * * @return bool */ public function onError() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onError') { $this->_runPHP(); } return true; } /** * Process the plugin, called when form is submitted * * @return bool */ public function onSavePage() { $params = $this->getParams(); if ($params->get('only_process_curl') == 'onSavePage') { return $this->_runPHP(); } return true; } /** * Require PHP file if specified * * @return bool */ private function _requirePHP() { $params = $this->getParams(); $php_result = null; if ($params->get('form_php_file') != -1) { $require_once = $params->get('form_php_require_once', '0') == '1'; $php_file = InputFilter::getInstance()->clean($params->get('form_php_file'), 'CMD'); $php_file = JPATH_ROOT . '/plugins/fabrik_form/php/scripts/' . $php_file; if (!File::exists($php_file)) { throw new RuntimeException('Missing PHP form plugin file'); } $php_result = $require_once ? require_once $php_file : require $php_file; // Bail out if code specifically returns false if ($php_result === false) { return false; } } return $php_result; } /** * Run plugins php code/script * * @param FabrikFEModelGroup &$groupModel Group model * @param array $data List rows when deleteing record(s) * * @return bool false if error running php code */ private function _runPHP($groupModel = null, $data = null) { $params = $this->getParams(); if (is_null($data)) { $data = $this->getProcessData(); } /** * if you want to modify the submitted form data * $formModel->updateFormData('tablename___elementname', $newvalue); */ $formModel = $this->getModel(); $listModel = $formModel->getListModel(); $method = $params->get('only_process_curl'); /* * $$$ rob this is poor when submitting the form the data is stored in formData, when editing its stored in _data - * as this method can run on render or on submit we have to do a little check to see which one we should use. * really we should use the same form property to store the data regardless of form state */ // $$$ hugh - erm, why are we putting data in $this->html? It's only used by onGetFooContent plugins, for, well, html! $this->html = array(); if (!empty($formModel->formData)) { $this->html = $formModel->formData; } elseif (!empty($formModel->data)) { $this->html = $formModel->data; } $w = new FabrikWorker; if ($params->get('form_php_file') == -1) { $code = $w->parseMessageForPlaceHolder($params->get('curl_code', ''), $this->html, true, true); if ($method == 'getBottomContent' || $method == 'getTopContent' || $method == 'getEndContent') { /* For these types of scripts any out put you want to inject into the form should be echoed out * $$$ hugh - the tooltip on the PHP plugin says specifically NOT to echo, but to return the content. * Rather than break any existing code by changing this code to do what the tooltip says, here's a * Horrible Hack so either way should work. */ ob_start(); FabrikWorker::clearEval(); $php_result = Php::Eval(['code' => $code, 'vars' => ['groupModel' => $groupModel,'formModel' => $formModel, 'data' => $data]]); FabrikWorker::logEval($php_result, 'Caught exception on eval of ' . $formModel->label . ': %s'); $output = ob_get_contents(); ob_end_clean(); if (!empty($output)) { return $output; } else { if (is_string($php_result)) { return $php_result; } } // Didn't get a viable response from either OB or result, so just return empty string return ''; } else { FabrikWorker::clearEval(); $php_result = Php::Eval(['code' => $code, 'vars' => ['groupModel' => $groupModel,'formModel' => $formModel, 'data' => $data]]); FabrikWorker::logEval($php_result, 'Caught exception on eval of ' . $formModel->label . ': %s'); // Bail out if code specifically returns false if ($php_result === false) { return false; } } } else { // Added require_once param, for (kinda) corner case of having a file that defines functions, which gets used // more than once on the same page. $require_once = $params->get('form_php_require_once', '0') == '1'; /* $$$ hugh - give them some way of getting at form data * (I'm never sure if $_REQUEST is 'safe', i.e. if it has post-validation data) * $$$ hugh - pretty sure we can dump this, but left it in for possible backward compat issues */ global $fabrikFormData, $fabrikFormDataWithTableName; // For some reason, = wasn't working?? $fabrikFormData = $this->html; // $$$ hugh - doesn't exist for tableless forms if (isset($formModel->formDataWithtableName)) { $fabrikFormDataWithTableName = $formModel->formDataWithtableName; } $php_file = InputFilter::getInstance()->clean($params->get('form_php_file'), 'CMD'); $php_file = JPATH_ROOT . '/plugins/fabrik_form/php/scripts/' . $php_file; if (!File::exists($php_file)) { throw new RuntimeException('Missing PHP form plugin file'); } // If it's a form load method, needs to be handled this way if ($method == 'getBottomContent' || $method == 'getTopContent' || $method == 'getEndContent') { /* * For these types of scripts any out put you want to inject into the form should be echo'd out * @TODO - shouldn't we apply this logic above as well (direct eval)? * $$$ hugh - AAAAGH. Tbe tooltip on the form plugin itself specifically says NOT to echo, but to * return the content. Rather than just changing this code to do what the comment says, which would * break any existing code folk have, I'll do a Horrible Hack so it works either way. */ ob_start(); $php_result = $require_once ? require_once $php_file : require $php_file; $output = ob_get_contents(); ob_end_clean(); if (!empty($output)) { return $output; } else { if (is_string($php_result)) { return $php_result; } } // Didn't get a viable response from either OB or result, so just return empty string return ''; } // OK, it's a form submit method, so handle it this way $php_result = $require_once ? require_once $php_file : require $php_file; // Bail out if code specifically returns false if ($php_result === false) { return false; } /* * $$$ hugh - added this to make it more convenient for defining functions to call in form PHP. * So you can have a 'script file' that defines function(s), AND a direct eval that calls them, * without having to stick a require() in the eval code. * @TODO add an option to specify which way round to execute (file first or eval first) * as per Skype convo with Rob. */ $code = $w->parseMessageForPlaceHolder($params->get('curl_code', ''), $this->html, true, true); if (!empty($code)) { FabrikWorker::clearEval(); $php_result = Php::Eval(['code' => $code, 'vars' => ['groupModel' => $groupModel,'formModel' => $formModel, 'data' => $data]]); FabrikWorker::logEval($php_result, 'Caught exception on eval of ' . $formModel->label . ': %s'); // Bail out if code specifically returns false if ($php_result === false) { return false; } } } // Well, we seemed to have got here without blowing up, so return true return true; } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.13 |
proxy
|
phpinfo
|
Настройка