uawdijnntqw1x1x1
IP : 216.73.217.142
Hostname : localhost.localdomain
Kernel : Linux localhost.localdomain 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
OS : Linux
PATH:
/
var
/
www
/
consult-e-syn
/
public_html
/
administrator
/
components
/
com_ats
/
script.com_ats.php
/
/
<?php /** * @package ats * @copyright Copyright (c)2011-2022 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ /** @noinspection MissingSinceTagDocInspection */ defined('_JEXEC') or die(); use Akeeba\TicketSystem\Admin\Helper\PluginParameters; use FOF40\Container\Container; use Joomla\CMS\Factory as JFactory; use Joomla\CMS\Installer\Adapter\ComponentAdapter; use Joomla\CMS\Uri\Uri as JUri; use Joomla\Registry\Registry as JRegistry; // Load FOF if not already loaded if (!defined('FOF40_INCLUDED') && !@include_once(JPATH_LIBRARIES . '/fof40/include.php')) { throw new RuntimeException('This extension requires FOF 4.'); } /** * Post-installation script * * @since 2.0.0.b1 * * @noinspection PhpUnused */ class Com_AtsInstallerScript extends \FOF40\InstallScript\Component { /** * The component's name * * @var string */ public $componentName = 'com_ats'; /** * The title of the component (printed on installation and uninstallation messages) * * @var string */ protected $componentTitle = 'Akeeba Ticket System'; /** * The minimum PHP version required to install this extension * * @var string */ protected $minimumPHPVersion = '7.2.0'; /** * The minimum Joomla! version required to install this extension * * @var string */ protected $minimumJoomlaVersion = '3.9.0'; /** * Obsolete files and folders to remove from both paid and free releases. This is used when you refactor code and * some files inevitably become obsolete and need to be removed. * * @var array */ protected $removeFilesAllVersions = [ 'files' => [ // Obsolete CLI scripts 'cli/ats-upgrade.php', // Obsolete update information 'cache/com_ats.updates.php', 'cache/com_ats.updates.ini', 'administrator/cache/com_ats.updates.php', 'administrator/cache/com_ats.updates.ini', 'plugins/ats/postemail/test.email', // Obsolete Joomla! 2.5 support 'media/com_ats/css/chosen.min.css', 'media/com_ats/css/chosen-sprite.png', 'media/com_ats/js/chosen.jquery.min.js', // After migration to FOF 3 'administrator/components/com_ats/dispatcher.php', 'administrator/components/com_ats/toolbar.php', 'administrator/components/com_ats/index.html', 'administrator/components/com_ats/assets/cacert.pem', 'administrator/components/com_ats/assets/index.html', 'administrator/components/com_ats/helpers/autooffline.php', 'administrator/components/com_ats/helpers/avatar.php', 'administrator/components/com_ats/helpers/bbcode.php', 'administrator/components/com_ats/helpers/credits.php', 'administrator/components/com_ats/helpers/editor.php', 'administrator/components/com_ats/helpers/filter.php', 'administrator/components/com_ats/helpers/format.php', 'administrator/components/com_ats/helpers/html.php', 'administrator/components/com_ats/helpers/jsonlib.php', 'administrator/components/com_ats/helpers/mail.php', 'administrator/components/com_ats/helpers/select.php', 'administrator/components/com_ats/helpers/signature.php', 'administrator/components/com_ats/helpers/subscriptions.php', 'administrator/components/com_ats/models/autoreplies.php', 'administrator/components/com_ats/models/buckets.php', 'administrator/components/com_ats/models/cannedreplies.php', 'administrator/components/com_ats/models/cpanels.php', 'administrator/components/com_ats/models/creditconsumptions.php', 'administrator/components/com_ats/models/credittransactions.php', 'administrator/components/com_ats/models/emailtemplates.php', 'administrator/components/com_ats/models/index.html', 'administrator/components/com_ats/models/jusers.php', 'administrator/components/com_ats/models/managernotes.php', 'administrator/components/com_ats/models/posts.php', 'administrator/components/com_ats/models/stats.php', 'administrator/components/com_ats/models/tickets.php', 'administrator/components/com_ats/models/updates.php', 'administrator/components/com_ats/models/usertags.php', // Obsolete eAccelerator warning 'administrator/components/com_ats/View/eaccelerator.php', // jQPlot (replaced with Canvas.js) 'media/com_ats/css/jquery.jqplot.min.css', 'media/com_ats/js/excanvas.min.js', 'media/com_ats/js/jqplot.barRenderer.min.js', 'media/com_ats/js/jqplot.canvasAxisLabelRenderer.min.js', 'media/com_ats/js/jqplot.canvasAxisTickRenderer.min.js', 'media/com_ats/js/jqplot.canvasTextRenderer.min.js', 'media/com_ats/js/jqplot.categoryAxisRenderer.min.js', 'media/com_ats/js/jqplot.dateAxisRenderer.min.js', 'media/com_ats/js/jqplot.hermite.js', 'media/com_ats/js/jqplot.highlighter.min.js', 'media/com_ats/js/jqplot.pieRenderer.min.js', 'media/com_ats/js/jquery.jqplot.min.js', // Old CSS files (replaced by minified files created from SCSS sources) 'media/com_ats/css/backend.css', 'media/com_ats/css/frontend.css', 'media/com_ats/css/print.css', // Typo 'components/com_ats/Model/AutomaticReplies.php', // Old mail fetch implementation 'components/com_ats/Model/EmailCheck.php', 'administrator/components/com_ats/Model/EmailCheck.php', // Obsolete PHP version (replaced with common code) 'administrator/components/com_ats/ViewTemplates/ControlPanel/obsolete_php.blade.php', // Obsolete files 3.4.0 'administrator/components/com_ats/Controller/TraitSaveUserTags.php', 'administrator/components/com_ats/Helper/ComponentParams.php', 'administrator/components/com_ats/Helper/Editor.php', 'media/com_ats/css/uncompressed/sources/common/_markitup.scss', 'media/com_ats/js/adm_buckets_choose.js', 'media/com_ats/js/adm_control_panel.js', 'media/com_ats/js/adm_tickets.js', 'media/com_ats/js/ajax_posting.js', 'media/com_ats/js/assigned_tickets.js', 'media/com_ats/js/bbcode-set.js', // -- Note: the <!> marker indicates a case-sensitive file '<!>media/com_ats/js/buckets.js', 'media/com_ats/js/buckets_choose.js', 'media/com_ats/js/cannedreplies.js', 'media/com_ats/js/cannedreply-keyboard.js', '<!>media/com_ats/js/cannedreply.js', 'media/com_ats/js/editor_buckets.js', '<!>media/com_ats/js/instantreply.js', 'media/com_ats/js/jquery.blockUI.js', 'media/com_ats/js/jquery.form.js', 'media/com_ats/js/jquery.markitup.js', 'media/com_ats/js/latest.js', 'media/com_ats/js/latestopen-keyboard.js', 'media/com_ats/js/modal.js', '<!>media/com_ats/js/newticket.js', 'media/com_ats/js/namespaced.js', 'media/com_ats/js/preview.js', 'media/com_ats/js/priority_credits.js', 'media/com_ats/js/tabs_enable.js', 'media/com_ats/js/ticket.js', '<!>media/com_ats/js/tickets.js', 'media/com_ats/js/tickets_per_user.js', 'media/com_ats/js/ticket_timer.js', '<!>media/com_ats/js/timecards.js', 'media/com_ats/js/userfeedback.js', // Moving to Akeeba FEF 2 'media/com_ats/js/Ajax.js', 'media/com_ats/js/Ajax.min.js', 'media/com_ats/js/Modal.js', 'media/com_ats/js/Modal.min.js', 'media/com_ats/js/System.js', 'media/com_ats/js/System.min.js', ], 'folders' => [ // After migration to FOF 3 'administrator/components/com_ats/assets/datatables', 'administrator/components/com_ats/assets/customfields', 'administrator/components/com_ats/assets/mailer', 'administrator/components/com_ats/controllers', 'administrator/components/com_ats/fields', 'administrator/components/com_ats/fof', 'administrator/components/com_ats/tables', 'administrator/components/com_ats/views', 'components/com_ats/controllers', 'components/com_ats/helpers', 'components/com_ats/models', 'components/com_ats/views', // After conversion to FEF 'administrator/components/com_ats/Form', // Common tables (they're installed by FOF) 'administrator/components/com_ats/sql/common', // Very old SQL files being picked up by Joomla 4... 'administrator/components/com_ats/sql/install', 'administrator/components/com_ats/sql/update', 'administrator/components/com_ats/sql/updates', // CLI base script (replaced with FOF base CLI script) 'administrator/components/com_ats/assets/cli', // Flag icons 'media/com_ats/flags', // Refactored mail fetch 'administrator/components/com_ats/Utils', // Old mail fetch implementation 'administrator/components/com_ats/Model/EmailCheck', 'administrator/components/com_ats/vendor', // Obsolete BBcode support 'media/com_ats/css/markitup', 'media/com_ats/js/markitup', // Update notification 'administrator/components/com_ats/Controller/Updates.php', // Migrating to FOF 4 'administrator/components/com_ats/View/AutoReplies/tmpl', 'administrator/components/com_ats/View/Buckets/tmpl', 'administrator/components/com_ats/View/CannedReplies/tmpl', 'administrator/components/com_ats/View/ControlPanel/tmpl', 'administrator/components/com_ats/View/CreditTransactions/tmpl', 'administrator/components/com_ats/View/CustomFields/tmpl', 'administrator/components/com_ats/View/EmailTemplates/tmpl', 'administrator/components/com_ats/View/Log/tmpl', 'administrator/components/com_ats/View/ManagerNotes/tmpl', 'administrator/components/com_ats/View/OfflineSchedules/tmpl', 'administrator/components/com_ats/View/Posts/tmpl', 'administrator/components/com_ats/View/PostStatistics/tmpl', 'administrator/components/com_ats/View/SchedulingInfo/tmpl', 'administrator/components/com_ats/View/Tickets/tmpl', 'administrator/components/com_ats/View/TicketStatistics/tmpl', 'administrator/components/com_ats/View/TimeCards/tmpl', 'administrator/components/com_ats/View/UserTags/tmpl', 'administrator/components/com_ats/ViewTemplates', 'components/com_ats/View/AssignedTickets/tmpl', 'components/com_ats/View/Buckets/tmpl', 'components/com_ats/View/CannedReplies/tmpl', 'components/com_ats/View/Categories/tmpl', 'components/com_ats/View/InstantReplies/tmpl', 'components/com_ats/View/Jusers/tmpl', 'components/com_ats/View/Latests/tmpl', 'components/com_ats/View/ManagerNotes/tmpl', 'components/com_ats/View/Mies/tmpl', 'components/com_ats/View/NewTickets/tmpl', 'components/com_ats/View/Posts/tmpl', 'components/com_ats/View/Tickets/tmpl', 'components/com_ats/ViewTemplates', // Latests template folder had the wrong name 'components/com_ats/tmpl/Latest', // Update Charts.js 'media/com_ats/js/Chart.bundle.min.js', ], ]; /** * Obsolete files and folders to remove from the free version only. This is used when you move a feature from the * free version of your extension to its paid version. If you don't have such a distinction you can ignore this. * * @var array */ protected $removeFilesFree = [ 'files' => [ 'administrator/components/com_ats/Controller/Bucket.php', 'administrator/components/com_ats/Controller/EmailTemplate.php', 'administrator/components/com_ats/Helper/Mail.php', 'administrator/components/com_ats/Model/Buckets.php', 'administrator/components/com_ats/Model/CannedReplies.php', 'administrator/components/com_ats/Model/CreditConsumptions.php', 'administrator/components/com_ats/Model/CreditTransactions.php', 'administrator/components/com_ats/Model/EmailCheck.php', 'administrator/components/com_ats/Model/EmailTemplates.php', 'administrator/components/com_ats/Model/OfflineSchedules.php', 'administrator/components/com_ats/Model/TimeCards.php', 'components/com_ats/Controller/AssignedTicket.php', 'components/com_ats/Controller/Bucket.php', 'components/com_ats/Controller/CannedReply.php', 'components/com_ats/Model/Buckets.php', 'components/com_ats/Model/CannedReplies.php', ], 'folders' => [ 'administrator/components/com_ats/Helper/Mail', 'administrator/components/com_ats/View/Buckets', 'administrator/components/com_ats/View/CannedReplies', 'administrator/components/com_ats/View/EmailTemplates', 'administrator/components/com_ats/tmpl/Buckets', 'administrator/components/com_ats/tmpl/CannedReplies', 'administrator/components/com_ats/tmpl/CreditTransactions', 'administrator/components/com_ats/tmpl/EmailTemplates', 'administrator/components/com_ats/tmpl/OfflineSchedules', 'administrator/components/com_ats/tmpl/TimeCards', 'components/com_ats/View/AssignedTickets', 'components/com_ats/View/Buckets', 'components/com_ats/View/CannedReplies', 'components/com_ats/views/AssignedTickets', 'components/com_ats/views/Buckets', 'components/com_ats/tmpl/AssignedTickets', 'components/com_ats/tmpl/Buckets', 'components/com_ats/tmpl/CannedReplies', ], ]; /** * The list of obsolete extra modules and plugins to uninstall on component upgrade / installation. * * @var array */ protected $uninstallation_queue = [ // modules => { (folder) => { (module) }* }* 'modules' => [ 'admin' => [], 'site' => [], ], // plugins => { (folder) => { (element) }* }* 'plugins' => [ 'ats' => [ 'akeebasubslegacy', 'alphauserpoints', ], 'system' => [ 'atsreplybyemail', ], ], ]; public function postflight(string $type, ComponentAdapter $parent): void { // Remove the update sites for this component on installation. The update sites are now handled at the package // level. $this->removeObsoleteUpdateSites($parent); // If the default attachments folder is not there, let's make it if (!JFolder::exists(JPATH_ROOT . '/media/com_ats/attachments')) { JFolder::create(JPATH_ROOT . '/media/com_ats/attachments'); } // Call the parent method parent::postflight($type, $parent); // DO NOT REMOVE -- We need it to load the FOF autoloader and register ATS mappings on it. $container = Container::getInstance('com_ats'); // Migrate the component options into the plugins on update if (class_exists('\Akeeba\TicketSystem\Admin\Helper\PluginParameters')) { PluginParameters::migrate(); } // Make sure the attachments folder is protected from direct web access / directory listing if (class_exists('\Akeeba\TicketSystem\Admin\Model\Attachments')) { \Akeeba\TicketSystem\Admin\Model\Attachments::secureAttachmentsDirectory(); } } /** * Renders the post-installation message * * @param \JInstallerAdapterComponent */ protected function renderPostInstallation(ComponentAdapter $parent): void { $this->warnAboutJSNPowerAdmin(); ?> <h1>Akeeba Ticket System</h1> <img src="<?php echo JUri::base() ?>/../media/com_ats/images/ats-48.png" width="48" height="48" alt="Akeeba Ticket System" align="left" /> <h2 style="font-size: 14pt; font-weight: bold; padding: 0; margin: 0 0 0.5em;"> Welcome to Akeeba Ticket System!</h2> <span> The simplest and easiest ticket system for Joomla!™ </span> <?php $container = Container::getInstance('com_ats'); /** @var \Akeeba\TicketSystem\Admin\Model\Stats $model */ try { $model = $container->factory->model('Stats'); if (method_exists($model, 'collectStatistics')) { $iframe = $model->collectStatistics(true); if ($iframe) { echo $iframe; } } } catch (\Exception $e) { } } protected function renderPostUninstallation(ComponentAdapter $parent): void { ?> <h2 style="font-size: 14pt; font-weight: bold; padding: 0; margin: 0 0 0.5em;"> Akeeba Ticket System Uninstallation</h2> <p>We are sorry that you decided to uninstall Akeeba Ticket System. Please let us know why by using the Contact Us form on our site. We appreciate your feedback; it helps us develop better software!</p> <?php parent::renderPostUninstallation($parent); } /** * Removes obsolete update sites created for the component (we are now using an update site for the package, not the * component). * * @param JInstallerAdapterComponent $parent The parent installer */ protected function removeObsoleteUpdateSites($parent) { $db = $parent->getParent()->getDBO(); $query = $db->getQuery(true) ->select($db->qn('extension_id')) ->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('component')) ->where($db->qn('name') . ' = ' . $db->q($this->componentName)); $db->setQuery($query); $extensionId = $db->loadResult(); if (!$extensionId) { return; } $query = $db->getQuery(true) ->select($db->qn('update_site_id')) ->from($db->qn('#__update_sites_extensions')) ->where($db->qn('extension_id') . ' = ' . $db->q($extensionId)); $db->setQuery($query); $ids = $db->loadColumn(0); if (!is_array($ids) && empty($ids)) { return; } foreach ($ids as $id) { $query = $db->getQuery(true) ->delete($db->qn('#__update_sites')) ->where($db->qn('update_site_id') . ' = ' . $db->q($id)); $db->setQuery($query); try { $db->execute(); } catch (\Exception $e) { // Do not fail in this case } } } /** * The PowerAdmin extension makes menu items disappear. People assume it's our fault. JSN PowerAdmin authors don't * own up to their software's issue. I have no choice but to warn our users about the faulty third party software. */ private function warnAboutJSNPowerAdmin() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('COUNT(*)') ->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('component')) ->where($db->qn('element') . ' = ' . $db->q('com_poweradmin')) ->where($db->qn('enabled') . ' = ' . $db->q('1')); $hasPowerAdmin = $db->setQuery($query)->loadResult(); if (!$hasPowerAdmin) { return; } $query = $db->getQuery(true) ->select('manifest_cache') ->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('component')) ->where($db->qn('element') . ' = ' . $db->q('com_poweradmin')) ->where($db->qn('enabled') . ' = ' . $db->q('1')); $paramsJson = $db->setQuery($query)->loadResult(); $jsnPAManifest = new JRegistry(); $jsnPAManifest->loadString($paramsJson, 'JSON'); $version = $jsnPAManifest->get('version', '0.0.0'); if (version_compare($version, '2.1.2', 'ge')) { return; } echo <<<HTML <div class="well" style="margin: 2em 0;"> <h1 style="font-size: 32pt; line-height: 120%; color: red; margin-bottom: 1em">WARNING: Menu items for {$this->componentTitle} might not be displayed on your site.</h1> <p style="font-size: 18pt; line-height: 150%; margin-bottom: 1.5em"> We have detected that you are using JSN PowerAdmin on your site. This software ignores Joomla! standards and <b>hides</b> the Component menu items to {$this->componentTitle} in the administrator backend of your site. Unfortunately we can't provide support for third party software. Please contact the developers of JSN PowerAdmin for support regarding this issue. </p> <p style="font-size: 18pt; line-height: 120%; color: green;"> Tip: You can disable JSN PowerAdmin to see the menu items to {$this->componentTitle}. </p> </div> HTML; } /** @inheritDoc */ protected function removeFilesAndFolders(array $removeList): void { /** * Process case-sensitive files, denoted with <!> as the first 3 characters in the filename. * * This is necessary when we rename a file e.g. from foobar.php to FooBar.php. In this case we have a conundrum. * On case-sensitive filesystems e.g. Linux' ext4 we need to delete the all-lowercase file foobar.php. However, * on case-insensitive filesystems e.g. macOS' APFS or Windows' NTFS we can't do this. The file foobar.php has * been replaced with FooBar.php. Trying to delete foobar.php deletes the new file FooBar.php! * * The solution to that is marking case-sensitive obsolete files with the special mark "<!>" as the first * characters in their name. Then we check below if the filesystem behaves in a case-insensitive manner when we * check for its existence. We do that by checking whether an all uppercase (e.g. FOOBAR.PHP) version of the * file's name exists. We know that we never use all-uppercase filenames and extensions, therefore its existence * is proof of a case-insensitive filesystem. If this is detected we pluck this entry out of the list of files * to delete by setting it to null and filtering out null values below. * * That's how you properly manage updating your legacy code bases without breaking things. */ $removeList['files'] = array_map(function ($file) { // This check only applies on files which are marked as case-sensitive if (substr($file, 0, 3) !== '<!>') { return $file; } // Get the actual filename, without the case-sensitivity marker. $file = substr($file, 3); // There's no point processing files that are flat-out missing $filePath = JPATH_ROOT . '/' . $file; if (!is_file($filePath)) { return null; } // Check if the filesystem is case-insensitive. $altFile = dirname($filePath) . strtoupper(basename($filePath)); if (is_file($altFile)) { return null; } // Return the fixed filename return $file; }, $removeList['files']); // Remove empty entries. Empty entries are created by the array_map code above. See the big comment further up. array_filter($removeList['files'], function ($file) { return !empty($file); }); parent::removeFilesAndFolders($removeList); } }
/var/www/consult-e-syn/public_html/administrator/components/com_ats/script.com_ats.php