File Manager

Current Directory: /home/astoriaah/www/old15/administrator/components/com_foxcontact
Viewing File: /home/astoriaah/www/old15/administrator/components/com_foxcontact/foxinstall.php
<?php defined("_JEXEC") or die(file_get_contents("index.html")); /** * @package Fox Contact for Joomla * @copyright Copyright (c) 2010 - 2014 Demis Palma. All rights reserved. * @license Distributed under the terms of the GNU General Public License GNU/GPL v3 http://www.gnu.org/licenses/gpl-3.0.html * @see Documentation: http://www.fox.ra.it/forum/2-documentation.html */ // http://docs.joomla.org/How_to_use_the_filesystem_package // http://docs.joomla.org/API16:JFolder/files jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); class FoxInstaller { private $InstallLog; protected $component_name; protected $extension_name; protected $event; public function __construct($parent) { } public function install($parent) { $this->initialize($parent); // Environment data $this->InstallLog->Write("Running " . $this->event . " on: " . PHP_OS . " | " . $_SERVER["SERVER_SOFTWARE"] . " | php " . PHP_VERSION . " | safe_mode: " . intval(ini_get("safe_mode")) . " | interface: " . php_sapi_name()); $this->chain_install($parent); $this->logo($parent); } public function uninstall($parent) { } public function update($parent) { } public function preflight($type, $parent) { $jversion = new JVersion(); $jmin = (string)$parent->get("manifest")->attributes()->{"version"}; $jmax = (string)$parent->get("manifest")->{"version"}; if (version_compare($jversion->RELEASE, $jmin, "<") || version_compare($jversion->RELEASE, $jmax, ">")) { // Removes the build number $jmax = preg_replace('/\.[0-9]+$/', "", $jmax); JFactory::getApplication()->enqueueMessage("Fox Contact " . $jmax . " only works on Joomla " . $jmax . ". You need Fox Contact " . $jversion->RELEASE . " to work on Joomla " . $jversion->RELEASE . ".<br />If you are looking for product updates, get them now using the <a href=\"http://www.fox.ra.it/account-recovery.html\">account recovery form</a>.<br />If you are interested in product upgrades, please read our <a href=\"http://www.fox.ra.it/forum/14-licensing/8867-i-already-bought-fox-contact-2-do-i-have-to-buy-fox-contact-3.html\">upgrade policy</a>.", "error"); JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_installer', false)); } $this->component_name = $parent->get("element"); $this->extension_name = substr($this->component_name, 4); $this->event = $type; } public function postflight($type, $parent) { $this->check_environment($parent); $this->InstallLog->Write("Component installation seems successfull."); } protected function initialize(&$parent) { (include_once JPATH_ROOT . "/components/" . $parent->get('element') . "/helpers/flogger.php") or die(JText::sprintf("JLIB_FILESYSTEM_ERROR_READ_UNABLE_TO_OPEN_FILE", "flogger.php")); $this->InstallLog = new FLogger("installscript", "install"); } private function chain_install(&$parent) { $manifest = $parent->get("manifest"); $extensions = isset($manifest->chain->extension) ? $manifest->chain->extension : new stdClass(); $this->InstallLog->Write("Found " . count($extensions) . " chained extensions."); $result = array(); foreach ($extensions as $extension) { // We absolutely need to create a new installer instance each cycle, // otherwise the first failing extension would roll-back previuosly installed extensions. // Note that the library is the first in install chain and it contains the language files. $installer = new JInstaller(); $attributes = $extension->attributes(); $item = $parent->getParent()->getPath("source") . "/" . $attributes["directory"] . "/" . $attributes["name"]; $result["type"] = strtoupper((string)$attributes["type"]); $result["result"] = $installer->install($item) ? "SUCCESS" : "ERROR"; $this->results[(string)$attributes["name"]] = $result; $this->InstallLog->Write("Installing " . $result["type"] . "... [" . $result["result"] . "]"); } // If Installscript::install() method is running, the component is already installed $result["type"] = "COMPONENT"; $result["result"] = "SUCCESS"; $this->results[$this->component_name] = $result; } private function check_environment(&$parent) { $this->check_permissions($parent); $files = JFolder::files(JPATH_ROOT . "/components/" . $parent->get("element") . "/helpers", ".php") or $files = array(); foreach ($files as $file) { // Include the file (include_once JPATH_ROOT . "/components/" . $parent->get('element') . "/helpers/" . $file) or $this->InstallLog->Write(JText::sprintf("JLIB_FILESYSTEM_ERROR_READ_UNABLE_TO_OPEN_FILE", $file)); // Remove filename extension $name = JFile::stripExt($file); $classname = $name . "CheckEnvironment"; if (class_exists($classname)) { // create a new instance $installerclass = new $classname(); } } } private function check_permissions(&$parent) { // File permission needed in suexec environments $permissions = fileperms(JPATH_ADMINISTRATOR . "/index.php"); $buffer = sprintf("Determining correct file permissions... [%o]", $permissions); $this->InstallLog->Write($buffer); if ($permissions) { $files = JFolder::files(JPATH_ROOT . "/components/" . $parent->get("element") . '/lib', ".php", false, true); foreach ($files as $file) { $this->set_permissions($file, $permissions); } } // Directory permission needed in suexec environments $permissions = fileperms(JPATH_ADMINISTRATOR); $buffer = sprintf("Determining correct directory permissions... [%o]", $permissions); $this->InstallLog->Write($buffer); if ($permissions) { $this->set_permissions(JPATH_ROOT . "/components", $permissions); $this->set_permissions(JPATH_ROOT . "/components/" . $parent->get("element"), $permissions); $this->set_permissions(JPATH_ROOT . "/components/" . $parent->get("element") . "/lib", $permissions); } // Todo: If we are using FTP Layer we certainly need to set permissions to upload directory too. // ... } private function set_permissions($filename, $permissions) { jimport("joomla.client.helper"); $ftp_config = JClientHelper::getCredentials("ftp"); if ($ftp_config["enabled"]) { jimport("joomla.client.ftp"); jimport("joomla.filesystem.path"); $jpath_root = JPATH_ROOT; $filename = JPath::clean(str_replace(JPATH_ROOT, $ftp_config["root"], $filename), "/"); $ftp = new JFTP($ftp_config); $result = intval($ftp->chmod($filename, $permissions)); } else { $result = intval(@chmod($filename, $permissions)); } $this->InstallLog->Write("setting permissions for [$filename]... [$result]"); return $result; } private function logo(&$parent) { //JFactory::getLanguage()->load($this->extension_name . ".admin", JPATH_ROOT . "/libraries/" . $this->extension_name); $manifest = $parent->get("manifest"); // Current page is going to be refreshed //JFactory::getDocument()->addStyleSheet(JUri::base(true) . "/components/" . $this->component_name . "/css/install.css"); echo( '<style type="text/css">' . '@import url("' . JUri::base(true) . "/components/" . $this->component_name . "/css/install.css" . '");' . '</style>' . '<img ' . 'class="install_logo" width="128" height="128" ' . 'src="' . (string)$manifest->authorUrl . 'logo/' . $this->extension_name . "-" . $this->event . '-logo.jpg" ' . 'alt="' . JText::_((string)$manifest->name) . ' Logo" ' . '/>' . '<div class="install_container">' . '<div class="install_row">' . '<h2 class="install_title">' . JText::_((string)$manifest->name) . '</h2>' . '</div>'); foreach ($this->results as $name => $extension) { echo( '<div class="install_row">' . '<div class="install_' . strtolower($extension["type"]) . ' install_icon">' . JText::_("COM_INSTALLER_TYPE_" . $extension["type"]) . '</div>' . '<div class="install_icon">' . $name . '</div>' . '<div class="install_' . strtolower($extension["result"]) . ' install_icon">' . JText::sprintf("COM_INSTALLER_INSTALL_" . $extension["result"], "") . '</div>' . '</div>' ); } echo('</div>'); } }