From 3efe9358a2eef89e1bc561fc27a70b914d344dc8 Mon Sep 17 00:00:00 2001 From: Amol Thite Date: Wed, 6 Nov 2019 13:47:13 +0530 Subject: [PATCH] Task #53 feat: Create a bootsrap file --- src/com_tjvendors/site/controller.php | 17 +- src/com_tjvendors/site/includes/tjvendors.php | 198 ++++++++++++++++++ src/com_tjvendors/site/includes/version.php | 114 ++++++++++ src/com_tjvendors/site/router.php | 6 +- src/com_tjvendors/site/tjvendors.php | 34 +-- 5 files changed, 330 insertions(+), 39 deletions(-) create mode 100644 src/com_tjvendors/site/includes/tjvendors.php create mode 100644 src/com_tjvendors/site/includes/version.php diff --git a/src/com_tjvendors/site/controller.php b/src/com_tjvendors/site/controller.php index 197bf2ce..c0aef5de 100755 --- a/src/com_tjvendors/site/controller.php +++ b/src/com_tjvendors/site/controller.php @@ -11,14 +11,15 @@ // No direct access defined('_JEXEC') or die; -jimport('joomla.application.component.controller'); +use Joomla\CMS\Factory; +use Joomla\CMS\MVC\Controller\BaseController; /** * Class TjvendorsController * - * @since 1.6 + * @since 1.0.0 */ -class TjvendorsController extends JControllerLegacy +class TjvendorsController extends BaseController { /** * Method to display a view. @@ -28,15 +29,13 @@ class TjvendorsController extends JControllerLegacy * * @return JController This object to support chaining. * - * @since 1.5 + * @since 1.0.0 */ public function display($cachable = false, $urlparams = false) { - $view = JFactory::getApplication()->input->getCmd('view', 'vendors'); - JFactory::getApplication()->input->set('view', $view); + $view = Factory::getApplication()->input->getCmd('view', 'vendors'); + Factory::getApplication()->input->set('view', $view); - parent::display($cachable, $urlparams); - - return $this; + return parent::display($cachable, $urlparams); } } diff --git a/src/com_tjvendors/site/includes/tjvendors.php b/src/com_tjvendors/site/includes/tjvendors.php new file mode 100644 index 00000000..e6904794 --- /dev/null +++ b/src/com_tjvendors/site/includes/tjvendors.php @@ -0,0 +1,198 @@ + + * @copyright Copyright (C) 2009 - 2019 Techjoomla. All rights reserved. + * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + */ + +// No direct access +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\MVC\Model\BaseDatabaseModel; +use Joomla\CMS\Table\Table; +use Joomla\String\StringHelper; + +/** + * TJVendors factory class. + * + * This class perform the helpful operation required to TJVendors package + * + * @since __DEPLOY_VERSION__ + */ +class TJV +{ + /** + * Holds the record of the loaded TJVendors classes + * + * @var array + * @since __DEPLOY_VERSION__ + */ + private static $loadedClass = array(); + + /** + * Holds the record of the component config + * + * @var Joomla\Registry\Registry + * @since __DEPLOY_VERSION__ + */ + private static $config = null; + + /** + * Retrieves a table from the table folder + * + * @param string $name The table file name + * @param array $config Configuration array for model. Optional. + * + * @return Table|boolean object or false on failure + * + * @since __DEPLOY_VERSION__ + **/ + public static function table($name, $config = array()) + { + Table::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tjvendors/tables'); + $table = Table::getInstance($name, 'TjvendorsTable', $config); + + return $table; + } + + /** + * Retrieves a model from the model folder + * + * @param string $name The model name + * @param array $config Configuration array for model. Optional. + * + * @return BaseDatabaseModel|boolean object or false on failure + * + * @since __DEPLOY_VERSION__ + **/ + public static function model($name, $config = array()) + { + BaseDatabaseModel::addIncludePath(JPATH_SITE . '/components/com_tjvendors/models', 'TJVendorsModel'); + $model = BaseDatabaseModel::getInstance($name, 'TJVendorsModel', $config); + + return $model; + } + + /** + * Magic method to create instance of Tjvendors library + * + * @param string $name The name of the class + * @param mixed $arguments Arguments of class + * + * @return mixed return the Object of the respective class if exist OW return false + * + * @since __DEPLOY_VERSION__ + **/ + public static function __callStatic($name, $arguments) + { + self::loadClass($name); + + $className = 'Tjvendors' . StringHelper::ucfirst($name); + + if (class_exists($className)) + { + if (method_exists($className, 'getInstance')) + { + return call_user_func_array(array($className, 'getInstance'), $arguments); + } + + return new $className; + } + + return false; + } + + /** + * Load the class library if not loaded + * + * @param string $className The name of the class which required to load + * + * @return boolean True on success + * + * @since __DEPLOY_VERSION__ + **/ + public static function loadClass($className) + { + if (! isset(self::$loadedClass[$className])) + { + $className = (string) StringHelper::strtolower($className); + + $path = JPATH_SITE . '/components/com_tjvendors/includes/' . $className . '.php'; + + include_once $path; + + self::$loadedClass[$className] = true; + } + + return self::$loadedClass[$className]; + } + + /** + * Load the component configuration + * + * @return Joomla\Registry\Registry A Registry object. + */ + public static function config() + { + if (empty(self::$config)) + { + self::$config = ComponentHelper::getParams('com_tjvendors'); + } + + return self::$config; + } + + /** + * Initializes the css, js and necessary dependencies + * + * @param string $location The location where the assets needs to load + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public static function init($location = 'site') + { + static $loaded = null; + $docType = Factory::getDocument()->getType(); + $versionClass = self::version(); + + if ($loaded[$location] && ($docType != 'html')) + { + return; + } + + if (file_exists(JPATH_ROOT . '/media/techjoomla_strapper/tjstrapper.php')) + { + require_once JPATH_ROOT . '/media/techjoomla_strapper/tjstrapper.php'; + TjStrapper::loadTjAssets('com_tjvendors'); + } + + $version = $versionClass->getMediaVersion(); + $options = array("version" => $version); + + HTMLHelper::script('media/com_tjvendor/js/tjvendors.js', $options); + HTMLHelper::stylesheet('media/com_tjvendor/css/tjvendors.css', $options); + HTMLHelper::stylesheet('media/techjoomla_strapper/vendors/no-more-tables.css', $options); + + // Load Boostrap + if (self::config()->get('load_bootstrap') == '1') + { + define('COM_TJVENDORS_WRAPPAER_CLASS', "tjBs3"); + HTMLHelper::_('stylesheet', 'media/techjoomla_strapper/bs3/css/bootstrap.min.css'); + HTMLHelper::_('stylesheet', 'media/techjoomla_strapper/vendors/font-awesome/css/font-awesome.min.css'); + } + else + { + define('COM_TJVENDORS_WRAPPAER_CLASS', ''); + } + + $loaded[$location] = true; + } +} diff --git a/src/com_tjvendors/site/includes/version.php b/src/com_tjvendors/site/includes/version.php new file mode 100644 index 00000000..384a55f5 --- /dev/null +++ b/src/com_tjvendors/site/includes/version.php @@ -0,0 +1,114 @@ + + * @copyright Copyright (C) 2009 - 2019 Techjoomla. All rights reserved. + * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + */ + +use Joomla\CMS\Factory; + +defined('_JEXEC') or die(); + +/** + * Version information class for the TJVendors. + * + * @since __DEPLOY_VERSION__ + */ +class TjvendorsVersion +{ + /** + * Product name. + * + * @var string + * @since __DEPLOY_VERSION__ + */ + const PRODUCT = 'TJVendors'; + + /** + * Major release version. + * + * @var integer + * @since __DEPLOY_VERSION__ + */ + const MAJOR_VERSION = 1; + + /** + * Minor release version. + * + * @var integer + * @since __DEPLOY_VERSION__ + */ + const MINOR_VERSION = 4; + + /** + * Patch release version. + * + * @var integer + * @since __DEPLOY_VERSION__ + */ + const PATCH_VERSION = 0; + + /** + * Release date. + * + * @var string + * @since __DEPLOY_VERSION__ + */ + const RELDATE = '20-August-2019'; + + /** + * Gets a "PHP standardized" version string for the current TJVendors. + * + * @return string Version string. + * + * @since __DEPLOY_VERSION__ + */ + public function getShortVersion() + { + return self::MAJOR_VERSION . '.' . self::MINOR_VERSION . '.' . self::PATCH_VERSION; + } + + /** + * Gets a version string for the current TJVendors with all release information. + * + * @return string Complete version string. + * + * @since __DEPLOY_VERSION__ + */ + public function getLongVersion() + { + return self::PRODUCT . ' ' . $this->getShortVersion() . ' ' . self::RELDATE; + } + + /** + * Generate a media version string for assets + * Public to allow third party developers to use it + * + * @return string + * + * @since __DEPLOY_VERSION__ + */ + public function generateMediaVersion() + { + return md5($this->getLongVersion() . Factory::getConfig()->get('secret')); + } + + /** + * Gets a media version which is used to append to TJVendors core media files. + * + * This media version is used to append to TJVendors core media in order to trick browsers into + * reloading the CSS and JavaScript, because they think the files are renewed. + * The media version is renewed after TJVendors core update, install, discover_install and uninstallation. + * + * @return string The media version. + * + * @since __DEPLOY_VERSION__ + */ + public function getMediaVersion() + { + return $this->generateMediaVersion(); + } +} diff --git a/src/com_tjvendors/site/router.php b/src/com_tjvendors/site/router.php index 5fa73fdd..6b28cf35 100755 --- a/src/com_tjvendors/site/router.php +++ b/src/com_tjvendors/site/router.php @@ -11,6 +11,8 @@ // No direct access defined('_JEXEC') or die; +use Joomla\CMS\Component\Router\RouterBase; + JLoader::registerPrefix('Tjvendors', JPATH_SITE . '/components/com_tjvendors/'); require_once JPATH_SITE . '/components/com_tjvendors/helpers/fronthelper.php'; @@ -19,7 +21,7 @@ * * @since 3.3 */ -class TjvendorsRouter extends JComponentRouterBase +class TjvendorsRouter extends RouterBase { /** * Build method for URLs @@ -86,8 +88,6 @@ public function parse(&$segments) // View is always the first element of the array $vars['view'] = array_shift($segments); - $TjvendorFrontHelper = new TjvendorFrontHelper; - $model = $TjvendorFrontHelper->getModel($vars['view']); while (!empty($segments)) { diff --git a/src/com_tjvendors/site/tjvendors.php b/src/com_tjvendors/site/tjvendors.php index 0f87585a..0ab4da20 100755 --- a/src/com_tjvendors/site/tjvendors.php +++ b/src/com_tjvendors/site/tjvendors.php @@ -9,10 +9,10 @@ */ defined('_JEXEC') or die; -use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Factory; +use Joomla\CMS\MVC\Controller\BaseController; -// Include dependancies -jimport('joomla.application.component.controller'); +include_once JPATH_SITE . '/components/com_tjvendors/includes/tjvendors.php'; JLoader::registerPrefix('Tjvendors', JPATH_COMPONENT); @@ -25,29 +25,9 @@ JLoader::load('TjvendorFrontHelper'); } +TJV::init(); + // Execute the task. -$controller = JControllerLegacy::getInstance('Tjvendors'); -$controller->execute(JFactory::getApplication()->input->get('task')); +$controller = BaseController::getInstance('Tjvendors'); +$controller->execute(Factory::getApplication()->input->get('task')); $controller->redirect(); -$document = JFactory::getDocument(); -$options['relative'] = true; -JHtml::_('script', 'com_tjvendor/tjvendors.js', $options); - -// Frontend css -JHtml::_('stylesheet', 'com_tjvendor/tjvendors.css', $options); -JHtml::stylesheet(JUri::root() . 'media/techjoomla_strapper/vendors/no-more-tables.css', array(), true); - -// Load Boostrap -$params = ComponentHelper::getParams('com_tjvendors'); -$loadBootstrap = $params->get('load_bootstrap'); - -if ($loadBootstrap == '1') -{ - define('COM_TJVENDORS_WRAPPAER_CLASS', "tjBs3"); - JHtml::_('stylesheet', 'media/techjoomla_strapper/bs3/css/bootstrap.min.css'); - JHtml::_('stylesheet', 'media/techjoomla_strapper/vendors/font-awesome/css/font-awesome.min.css'); -} -else -{ - define('COM_TJVENDORS_WRAPPAER_CLASS', ''); -}