acf
This commit is contained in:
		
							
								
								
									
										91
									
								
								plugins/fields/acfphp/acfphp.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								plugins/fields/acfphp/acfphp.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package         Advanced Custom Fields | ||||
|  * @version         2.8.8 Pro | ||||
|  *  | ||||
|  * @author          Tassos Marinos <info@tassos.gr> | ||||
|  * @link            http://www.tassos.gr | ||||
|  * @copyright       Copyright © 2020 Tassos Marinos All Rights Reserved | ||||
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later | ||||
| */ | ||||
|  | ||||
| defined('_JEXEC') or die; | ||||
|  | ||||
| use Joomla\CMS\Factory; | ||||
| use Joomla\CMS\Plugin\PluginHelper; | ||||
| use Joomla\Registry\Registry; | ||||
|  | ||||
| JLoader::register('ACF_Field', JPATH_PLUGINS . '/system/acf/helper/plugin.php'); | ||||
|  | ||||
| if (!class_exists('ACF_Field')) | ||||
| { | ||||
| 	Factory::getApplication()->enqueueMessage('Advanced Custom Fields System Plugin is missing', 'error'); | ||||
| 	return; | ||||
| } | ||||
|  | ||||
| class PlgFieldsACFPHP extends ACF_Field | ||||
| { | ||||
| 	/** | ||||
| 	 * Transforms the field into a DOM XML element and appends it as a child on the given parent. | ||||
| 	 * | ||||
| 	 * @param   stdClass    $field   The field. | ||||
| 	 * @param   DOMElement  $parent  The field node parent. | ||||
| 	 * @param   Form        $form    The form. | ||||
| 	 * | ||||
| 	 * @return  DOMElement | ||||
| 	 * | ||||
| 	 * @since   3.7.0 | ||||
| 	 */ | ||||
| 	public function onCustomFieldsPrepareDom($field, DOMElement $parent, Joomla\CMS\Form\Form $form) | ||||
| 	{ | ||||
| 		if (!$fieldNode = parent::onCustomFieldsPrepareDom($field, $parent, $form)) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		$fieldNode->setAttribute('type', 'textarea'); | ||||
| 		$fieldNode->setAttribute('filter', 'raw'); | ||||
| 		$fieldNode->setAttribute('class', 'span12 w-100'); | ||||
| 		$fieldNode->setAttribute('rows', '10'); | ||||
| 		$fieldNode->setAttribute('hint', '$name = "John Doe";\nreturn $name;'); | ||||
|  | ||||
| 		return $fieldNode; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Prepares the field value for the (front-end) layout | ||||
| 	 * | ||||
| 	 * @param   string    $context  The context. | ||||
| 	 * @param   stdclass  $item     The item. | ||||
| 	 * @param   stdclass  $field    The field. | ||||
| 	 * | ||||
| 	 * @return  string | ||||
| 	 */ | ||||
| 	public function onCustomFieldsPrepareField($context, $item, $field) | ||||
| 	{ | ||||
| 		// Check if the field should be processed by us | ||||
| 		if (!$this->isTypeSupported($field->type)) | ||||
| 		{ | ||||
| 			return parent::onCustomFieldsPrepareField($context, $item, $field); | ||||
| 		} | ||||
| 				 | ||||
| 		// Get plugin params | ||||
| 		$plugin = PluginHelper::getPlugin('fields', 'acfphp'); | ||||
| 		$params = new Registry($plugin->params); | ||||
|  | ||||
| 		$payload = [ | ||||
| 			'field' => $field, | ||||
| 			'item'  => $item | ||||
| 		]; | ||||
|  | ||||
| 		// Enable buffer output | ||||
| 		$executer = new \NRFramework\Executer($field->value, $payload); | ||||
|  | ||||
| 		$field->value = $executer | ||||
| 			->setForbiddenPHPFunctions($params->get('forbidden_php_functions')) | ||||
| 			->run(); | ||||
|  | ||||
| 		return parent::onCustomFieldsPrepareField($context, $item, $field); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										34
									
								
								plugins/fields/acfphp/acfphp.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								plugins/fields/acfphp/acfphp.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| <?xml version="1.0" encoding="utf-8" ?> | ||||
| <extension type="plugin" version="3.7.0" group="fields" method="upgrade"> | ||||
| 	<name>ACF_PHP</name> | ||||
| 	<description>ACF_PHP_DESC</description> | ||||
| 	<author>Tassos Marinos</author> | ||||
| 	<creationDate>May 2019</creationDate> | ||||
| 	<copyright>Copyright (C) 2017 Tassos Marinos. All rights reserved.</copyright> | ||||
| 	<license>GNU General Public License version 2 or later; see LICENSE.txt</license> | ||||
| 	<authorEmail>info@tassos.gr</authorEmail> | ||||
| 	<authorUrl>www.tassos.gr</authorUrl> | ||||
| 	<version>1.0</version> | ||||
| 	<scriptfile>script.install.php</scriptfile> | ||||
| 	<files> | ||||
| 		<filename plugin="acfphp">acfphp.php</filename> | ||||
| 		<filename>script.install.helper.php</filename> | ||||
| 		<filename>version.php</filename> | ||||
| 		<folder>tmpl</folder> | ||||
| 		<folder>language</folder> | ||||
| 		<folder>params</folder> | ||||
| 	</files> | ||||
| 	<config> | ||||
| 		<fields name="params"> | ||||
| 			<fieldset name="basic"> | ||||
| 				<field name="forbidden_php_functions" type="textarea"  | ||||
| 					label="ACF_PHP_FORBIDDEN_PHP_FUNCTIONS" | ||||
| 					description="ACF_PHP_FORBIDDEN_PHP_FUNCTIONS_DESC" | ||||
| 					default="fopen, popen, unlink, rmdir, dl, escapeshellarg, escapeshellcmd, exec, passthru, proc_close, proc_open, shell_exec, symlink, system, pcntl_exec, eval, create_function" | ||||
| 					rows="5" | ||||
| 					class="span6" | ||||
| 				/> | ||||
| 			</fieldset> | ||||
| 		</fields> | ||||
| 	</config> | ||||
| </extension> | ||||
| @ -0,0 +1,13 @@ | ||||
| ; @package      Advanced Custom Fields | ||||
| ; @version      2.8.8 Pro | ||||
| ; | ||||
| ; @author		Tassos Marinos - http://www.tassos.gr/joomla-extensions | ||||
| ; @copyright	Copyright (c) 2016 Tassos Marinos. All rights reserved. | ||||
| ; @license		http://www.tassos.gr | ||||
|  | ||||
| PLG_FIELDS_ACFPHP_LABEL="ACF - PHP" | ||||
| ACF_PHP="Fields - ACF PHP" | ||||
| ACF_PHP_DESC="Execute PHP in a Joomla! Custom Field and display a dynamic value in the front-end." | ||||
| ACF_PHP_VALUE_DESC="The PHP code added here is executed just before the field is rendered in the front-end and must return a value using the return; statement.<br><br><b>Example 1:</b><br>$name = 'John Doe';<br>return $name;<br><br><b>Example 2:</b><br>return ($user->guest) ? 'Guest' : $user->name;<br><br>To access field settings use $field (Object) variable." | ||||
| ACF_PHP_FORBIDDEN_PHP_FUNCTIONS="Forbidden PHP Functions" | ||||
| ACF_PHP_FORBIDDEN_PHP_FUNCTIONS_DESC="A comma separated list of PHP functions that are forbidden. The whole PHP block of code will not be executed if it contains any of these functions." | ||||
| @ -0,0 +1,9 @@ | ||||
| ; @package      Advanced Custom Fields | ||||
| ; @version      2.8.8 Pro | ||||
| ; | ||||
| ; @author		Tassos Marinos - http://www.tassos.gr/joomla-extensions | ||||
| ; @copyright	Copyright (c) 2019 Tassos Marinos. All rights reserved. | ||||
| ; @license		http://www.tassos.gr | ||||
|  | ||||
| ACF_PHP="Fields - ACF PHP" | ||||
| ACF_PHP_DESC="Execute PHP in a Joomla! Custom Field and display a dynamic value in the front-end." | ||||
| @ -0,0 +1,13 @@ | ||||
| ; @package      Advanced Custom Fields | ||||
| ; @version      2.8.8 Pro | ||||
| ; | ||||
| ; @author		Tassos Marinos - http://www.tassos.gr/joomla-extensions | ||||
| ; @copyright	Copyright (c) 2016 Tassos Marinos. All rights reserved. | ||||
| ; @license		http://www.tassos.gr | ||||
|  | ||||
| PLG_FIELDS_ACFPHP_LABEL="ACF - PHP" | ||||
| ACF_PHP="Campos - ACF PHP" | ||||
| ACF_PHP_DESC="Ejecute PHP en un campo personalizado de Joomla y muestre un valor dinámico en el front-end." | ||||
| ACF_PHP_VALUE_DESC="El código PHP agregado aquí se ejecuta justo antes de que el campo se represente en el front-end y debe devolver un valor usando el retorno; declaración.<br><br><b>Ejemplo 1:</b><br>$name = 'John Doe';<br>return $name;<br><br><b>Ejemplo 2:</b><br>return ($user->guest) ? 'Guest' : $user->name;<br><br>Para acceder a la configuración de campo, use la variable $field (Object) ." | ||||
| ACF_PHP_FORBIDDEN_PHP_FUNCTIONS="Funciones PHP prohibidas" | ||||
| ACF_PHP_FORBIDDEN_PHP_FUNCTIONS_DESC="Una lista separada por comas de las funciones de PHP que están prohibidas. El bloque completo de código PHP no se ejecutará si contiene alguna de estas funciones." | ||||
| @ -0,0 +1,9 @@ | ||||
| ; @package      Advanced Custom Fields | ||||
| ; @version      2.8.8 Pro | ||||
| ; | ||||
| ; @author		Tassos Marinos - http://www.tassos.gr/joomla-extensions | ||||
| ; @copyright	Copyright (c) 2019 Tassos Marinos. All rights reserved. | ||||
| ; @license		http://www.tassos.gr | ||||
|  | ||||
| ACF_PHP="Campos - ACF PHP" | ||||
| ACF_PHP_DESC="Ejecute PHP en un campo personalizado de Joomla y muestre un valor dinámico en el front-end." | ||||
							
								
								
									
										11
									
								
								plugins/fields/acfphp/params/acfphp.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								plugins/fields/acfphp/params/acfphp.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <form> | ||||
| 	<field name="default_value" type="textarea"  | ||||
| 		label="COM_FIELDS_FIELD_DEFAULT_VALUE_LABEL" | ||||
| 		description="COM_FIELDS_FIELD_DEFAULT_VALUE_DESC" | ||||
| 		hint='$name = "John Doe";\nreturn $name;' | ||||
| 		class="span12" | ||||
| 		rows="10" | ||||
| 		filter="raw" | ||||
| 	/> | ||||
| </form> | ||||
							
								
								
									
										691
									
								
								plugins/fields/acfphp/script.install.helper.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										691
									
								
								plugins/fields/acfphp/script.install.helper.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,691 @@ | ||||
| <?php | ||||
| /** | ||||
|  * Installer Script Helper | ||||
|  * | ||||
|  * @author          Tassos Marinos <info@tassos.gr> | ||||
|  * @link            http://www.tassos.gr | ||||
|  * @copyright       Copyright © 2016 Tassos Marinos All Rights Reserved | ||||
|  * @license         http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL | ||||
|  */ | ||||
|  | ||||
| defined('_JEXEC') or die; | ||||
|  | ||||
| use Joomla\CMS\Installer\Installer; | ||||
| use Joomla\CMS\Factory; | ||||
| use Joomla\CMS\Language\Text; | ||||
| use Joomla\Filesystem\File; | ||||
| use Joomla\Filesystem\Folder; | ||||
|  | ||||
| class PlgFieldsAcfphpInstallerScriptHelper | ||||
| { | ||||
| 	public $name = ''; | ||||
| 	public $alias = ''; | ||||
| 	public $extname = ''; | ||||
| 	public $extension_type = ''; | ||||
| 	public $plugin_folder = 'system'; | ||||
| 	public $module_position = 'status'; | ||||
| 	public $client_id = 1; | ||||
| 	public $install_type = 'install'; | ||||
| 	public $show_message = true; | ||||
| 	public $autopublish = true; | ||||
| 	public $db = null; | ||||
| 	public $app = null; | ||||
| 	public $installedVersion; | ||||
|  | ||||
| 	public function __construct(&$params) | ||||
| 	{ | ||||
| 		$this->extname = $this->extname ?: $this->alias; | ||||
| 		$this->db = Factory::getDbo(); | ||||
| 		$this->app = Factory::getApplication(); | ||||
| 		$this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Preflight event | ||||
| 	 * | ||||
| 	 *  @param   string             | ||||
| 	 *  @param   JAdapterInstance | ||||
| 	 * | ||||
| 	 *  @return  boolean                       | ||||
| 	 */ | ||||
| 	public function preflight($route, $adapter) | ||||
| 	{ | ||||
| 		if (!in_array($route, array('install', 'update'))) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		Factory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); | ||||
|  | ||||
| 		if ($this->show_message && $this->isInstalled()) | ||||
| 		{ | ||||
| 			$this->install_type = 'update'; | ||||
| 		} | ||||
|  | ||||
| 		if ($this->onBeforeInstall() === false) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Preflight event | ||||
| 	 * | ||||
| 	 *  @param   string             | ||||
| 	 *  @param   JAdapterInstance | ||||
| 	 * | ||||
| 	 *  @return  boolean                       | ||||
| 	 */ | ||||
| 	public function postflight($route, $adapter) | ||||
| 	{ | ||||
| 		Factory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); | ||||
|  | ||||
| 		if (!in_array($route, array('install', 'update'))) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		if ($this->onAfterInstall() === false) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| 		if ($route == 'install' && $this->autopublish) | ||||
| 		{ | ||||
| 			$this->publishExtension(); | ||||
| 		} | ||||
|  | ||||
| 		if ($this->show_message) | ||||
| 		{ | ||||
| 			$this->addInstalledMessage(); | ||||
| 		} | ||||
|  | ||||
| 		Factory::getCache()->clean('com_plugins'); | ||||
| 		Factory::getCache()->clean('_system'); | ||||
| 	} | ||||
|  | ||||
| 	public function isInstalled() | ||||
| 	{ | ||||
| 		if (!is_file($this->getInstalledXMLFile())) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| 		$query = $this->db->getQuery(true) | ||||
| 			->select('extension_id') | ||||
| 			->from('#__extensions') | ||||
| 			->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) | ||||
| 			->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); | ||||
| 		$this->db->setQuery($query, 0, 1); | ||||
| 		$result = $this->db->loadResult(); | ||||
|  | ||||
| 		return empty($result) ? false : true; | ||||
| 	} | ||||
|  | ||||
| 	public function getMainFolder() | ||||
| 	{ | ||||
| 		switch ($this->extension_type) | ||||
| 		{ | ||||
| 			case 'plugin' : | ||||
| 				return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; | ||||
|  | ||||
| 			case 'component' : | ||||
| 				return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; | ||||
|  | ||||
| 			case 'module' : | ||||
| 				return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; | ||||
|  | ||||
| 			case 'library' : | ||||
| 				return JPATH_SITE . '/libraries/' . $this->extname; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function getInstalledXMLFile() | ||||
| 	{ | ||||
| 		return $this->getXMLFile($this->getMainFolder()); | ||||
| 	} | ||||
|  | ||||
| 	public function getCurrentXMLFile() | ||||
| 	{ | ||||
| 		return $this->getXMLFile(__DIR__); | ||||
| 	} | ||||
|  | ||||
| 	public function getXMLFile($folder) | ||||
| 	{ | ||||
| 		switch ($this->extension_type) | ||||
| 		{ | ||||
| 			case 'module' : | ||||
| 				return $folder . '/mod_' . $this->extname . '.xml'; | ||||
| 			default : | ||||
| 				return $folder . '/' . $this->extname . '.xml'; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function foldersExist($folders = array()) | ||||
| 	{ | ||||
| 		foreach ($folders as $folder) | ||||
| 		{ | ||||
| 			if (is_dir($folder)) | ||||
| 			{ | ||||
| 				return true; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| 	public function publishExtension() | ||||
| 	{ | ||||
| 		switch ($this->extension_type) | ||||
| 		{ | ||||
| 			case 'plugin' : | ||||
| 				$this->publishPlugin(); | ||||
|  | ||||
| 			case 'module' : | ||||
| 				$this->publishModule(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function publishPlugin() | ||||
| 	{ | ||||
| 		$query = $this->db->getQuery(true) | ||||
| 			->update('#__extensions') | ||||
| 			->set($this->db->quoteName('enabled') . ' = 1') | ||||
| 			->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) | ||||
| 			->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) | ||||
| 			->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); | ||||
| 		$this->db->setQuery($query); | ||||
| 		$this->db->execute(); | ||||
| 	} | ||||
|  | ||||
| 	public function publishModule() | ||||
| 	{ | ||||
| 		// Get module id | ||||
| 		$query = $this->db->getQuery(true) | ||||
| 			->select('id') | ||||
| 			->from('#__modules') | ||||
| 			->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) | ||||
| 			->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); | ||||
| 		$this->db->setQuery($query, 0, 1); | ||||
| 		$id = $this->db->loadResult(); | ||||
|  | ||||
| 		if (!$id) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		// check if module is already in the modules_menu table (meaning is is already saved) | ||||
| 		$query->clear() | ||||
| 			->select('moduleid') | ||||
| 			->from('#__modules_menu') | ||||
| 			->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); | ||||
| 		$this->db->setQuery($query, 0, 1); | ||||
| 		$exists = $this->db->loadResult(); | ||||
|  | ||||
| 		if ($exists) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		// Get highest ordering number in position | ||||
| 		$query->clear() | ||||
| 			->select('ordering') | ||||
| 			->from('#__modules') | ||||
| 			->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) | ||||
| 			->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) | ||||
| 			->order('ordering DESC'); | ||||
| 		$this->db->setQuery($query, 0, 1); | ||||
| 		$ordering = $this->db->loadResult(); | ||||
| 		$ordering++; | ||||
|  | ||||
| 		// publish module and set ordering number | ||||
| 		$query->clear() | ||||
| 			->update('#__modules') | ||||
| 			->set($this->db->quoteName('published') . ' = 1') | ||||
| 			->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) | ||||
| 			->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) | ||||
| 			->where($this->db->quoteName('id') . ' = ' . (int) $id); | ||||
| 		$this->db->setQuery($query); | ||||
| 		$this->db->execute(); | ||||
|  | ||||
| 		// add module to the modules_menu table | ||||
| 		$query->clear() | ||||
| 			->insert('#__modules_menu') | ||||
| 			->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) | ||||
| 			->values((int) $id . ', 0'); | ||||
| 		$this->db->setQuery($query); | ||||
| 		$this->db->execute(); | ||||
| 	} | ||||
|  | ||||
| 	public function addInstalledMessage() | ||||
| 	{ | ||||
| 		Factory::getApplication()->enqueueMessage( | ||||
| 			Text::sprintf( | ||||
| 				Text::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), | ||||
| 				'<strong>' . Text::_($this->name) . '</strong>', | ||||
| 				'<strong>' . $this->getVersion() . '</strong>', | ||||
| 				$this->getFullType() | ||||
| 			) | ||||
| 		); | ||||
| 	} | ||||
|  | ||||
| 	public function getPrefix() | ||||
| 	{ | ||||
| 		switch ($this->extension_type) | ||||
| 		{ | ||||
| 			case 'plugin'; | ||||
| 				return Text::_('plg_' . strtolower($this->plugin_folder)); | ||||
|  | ||||
| 			case 'component': | ||||
| 				return Text::_('com'); | ||||
|  | ||||
| 			case 'module': | ||||
| 				return Text::_('mod'); | ||||
|  | ||||
| 			case 'library': | ||||
| 				return Text::_('lib'); | ||||
|  | ||||
| 			default: | ||||
| 				return $this->extension_type; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function getElementName($type = null, $extname = null) | ||||
| 	{ | ||||
| 		$type = is_null($type) ? $this->extension_type : $type; | ||||
| 		$extname = is_null($extname) ? $this->extname : $extname; | ||||
|  | ||||
| 		switch ($type) | ||||
| 		{ | ||||
| 			case 'component' : | ||||
| 				return 'com_' . $extname; | ||||
|  | ||||
| 			case 'module' : | ||||
| 				return 'mod_' . $extname; | ||||
|  | ||||
| 			case 'plugin' : | ||||
| 			default: | ||||
| 				return $extname; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function getFullType() | ||||
| 	{ | ||||
| 		return Text::_('NRI_' . strtoupper($this->getPrefix())); | ||||
| 	} | ||||
|  | ||||
| 	public function isPro() | ||||
| 	{ | ||||
| 		$versionFile = __DIR__ . "/version.php"; | ||||
|  | ||||
| 		// If version file does not exist we assume a PRO version | ||||
| 		if (!is_file($versionFile)) | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
| 		// Load version file | ||||
| 		require_once $versionFile; | ||||
| 		return (bool) $NR_PRO; | ||||
| 	} | ||||
|  | ||||
| 	public function getVersion($file = '') | ||||
| 	{ | ||||
| 		$file = $file ?: $this->getCurrentXMLFile(); | ||||
|  | ||||
| 		if (!is_file($file)) | ||||
| 		{ | ||||
| 			return ''; | ||||
| 		} | ||||
|  | ||||
| 		$xml = Installer::parseXMLInstallFile($file); | ||||
|  | ||||
| 		if (!$xml || !isset($xml['version'])) | ||||
| 		{ | ||||
| 			return ''; | ||||
| 		} | ||||
|  | ||||
| 		return $xml['version']; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Checks wether the extension can be installed or not | ||||
| 	 * | ||||
| 	 *  @return  boolean   | ||||
| 	 */ | ||||
| 	public function canInstall() | ||||
| 	{ | ||||
| 		// The extension is not installed yet. Accept Install. | ||||
| 		if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
| 		// Path to extension's version file | ||||
| 		$versionFile = $this->getMainFolder() . "/version.php"; | ||||
| 		$NR_PRO = true; | ||||
|  | ||||
| 		// If version file does not exist we assume we have a PRO version installed | ||||
| 		if (file_exists($versionFile)) | ||||
| 		{ | ||||
| 			require_once($versionFile); | ||||
| 		} | ||||
|  | ||||
| 		// The free version is installed. Accept install. | ||||
| 		if (!(bool)$NR_PRO) | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
| 		// Current package is a PRO version. Accept install. | ||||
| 		if ($this->isPro()) | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
| 		// User is trying to update from PRO version to FREE. Do not accept install. | ||||
| 		Factory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); | ||||
|  | ||||
| 		Factory::getApplication()->enqueueMessage( | ||||
| 			Text::_('NRI_ERROR_PRO_TO_FREE'), 'error' | ||||
| 		); | ||||
|  | ||||
| 		Factory::getApplication()->enqueueMessage( | ||||
| 			html_entity_decode( | ||||
| 				Text::sprintf( | ||||
| 					'NRI_ERROR_UNINSTALL_FIRST', | ||||
| 					'<a href="http://www.tassos.gr/joomla-extensions/' . $this->getUrlAlias() . '" target="_blank">', | ||||
| 					'</a>', | ||||
| 					Text::_($this->name) | ||||
| 				) | ||||
| 			), 'error' | ||||
| 		);	 | ||||
|  | ||||
| 		return false;	 | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Returns the URL alias of the extension. | ||||
| 	 *  | ||||
| 	 * @return  string | ||||
| 	 */ | ||||
| 	private function getUrlAlias() | ||||
| 	{ | ||||
| 		$alias = $this->alias; | ||||
|  | ||||
| 		switch ($alias) | ||||
| 		{ | ||||
| 			case 'smilepack': | ||||
| 				$alias = 'smile-pack'; | ||||
| 				break; | ||||
| 			case 'convertforms': | ||||
| 				$alias = 'convert-forms'; | ||||
| 				break; | ||||
| 			case 'rstbox': | ||||
| 				$alias = 'engagebox'; | ||||
| 				break; | ||||
| 			case 'gsd': | ||||
| 				$alias = 'google-structured-data'; | ||||
| 				break; | ||||
| 		} | ||||
|  | ||||
| 		// ACF | ||||
| 		if ($this->plugin_folder === 'fields' && ($alias === 'acf' || $this->startsWith($alias, 'acf'))) | ||||
| 		{ | ||||
| 			$alias = 'advanced-custom-fields'; | ||||
| 		} | ||||
| 		 | ||||
| 		return $alias; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * Checks whether string starts with substring. | ||||
|      *  | ||||
|      * @param   string  $string | ||||
|      * @param   string  $query | ||||
|      *  | ||||
|      * @return  bool | ||||
|      */ | ||||
|     public static function startsWith($string, $query) | ||||
|     { | ||||
|         return substr($string, 0, strlen($query)) === $query; | ||||
|     } | ||||
|  | ||||
| 	/** | ||||
| 	 *  Checks if current version is newer than the installed one | ||||
| 	 *  Used for Novarain Framework | ||||
| 	 * | ||||
| 	 *  @return  boolean  [description] | ||||
| 	 */ | ||||
| 	public function isNewer() | ||||
| 	{ | ||||
| 		if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
| 		$package_version = $this->getVersion(); | ||||
|  | ||||
| 		return version_compare($installed_version, $package_version, '<='); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Helper method triggered before installation | ||||
| 	 * | ||||
| 	 *  @return  bool | ||||
| 	 */ | ||||
| 	public function onBeforeInstall() | ||||
| 	{ | ||||
| 		if (!$this->canInstall()) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Helper method triggered after installation | ||||
| 	 */ | ||||
| 	public function onAfterInstall() | ||||
| 	{ | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Delete files | ||||
| 	 * | ||||
| 	 *  @param   array   $folders | ||||
| 	 */ | ||||
| 	public function deleteFiles($files = array()) | ||||
| 	{ | ||||
| 	    foreach ($files as $key => $file) | ||||
|         { | ||||
| 			if (!is_file($file)) | ||||
| 			{ | ||||
| 				continue; | ||||
| 			} | ||||
| 			 | ||||
|             File::delete($file); | ||||
|         } | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Deletes folders | ||||
| 	 * | ||||
| 	 *  @param   array   $folders   | ||||
| 	 */ | ||||
| 	public function deleteFolders($folders = array()) | ||||
| 	{ | ||||
| 		foreach ($folders as $folder) | ||||
| 		{ | ||||
| 			if (!is_dir($folder)) | ||||
| 			{ | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			Folder::delete($folder); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function dropIndex($table, $index) | ||||
| 	{	 | ||||
| 		$db = $this->db; | ||||
|  | ||||
| 		// Check if index exists first | ||||
| 		$query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); | ||||
|         $db->setQuery($query); | ||||
|         $db->execute(); | ||||
|  | ||||
|         if (!$db->loadResult()) | ||||
|         { | ||||
|         	return; | ||||
|         } | ||||
|  | ||||
|         // Remove index | ||||
|         $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); | ||||
|         $db->setQuery($query); | ||||
|         $db->execute();  | ||||
| 	} | ||||
|  | ||||
|     public function dropUnwantedTables($tables) { | ||||
|  | ||||
|         if (!$tables) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         foreach ($tables as $table) { | ||||
|             $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); | ||||
|             $this->db->setQuery($query); | ||||
|             $this->db->execute(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| 	public function dropUnwantedColumns($table, $columns) { | ||||
|  | ||||
|         if (!$columns || !$table) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         $db = $this->db; | ||||
|  | ||||
|         // Check if columns exists in database | ||||
|         function qt($n) { | ||||
|             return(Factory::getDBO()->quote($n)); | ||||
|         } | ||||
|          | ||||
|         $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; | ||||
|         $db->setQuery($query); | ||||
|         $rows = $db->loadColumn(0); | ||||
|  | ||||
|         // Abort if we don't have any rows | ||||
|         if (!$rows) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Let's remove the columns | ||||
|         $q = ""; | ||||
|         foreach ($rows as $key => $column) { | ||||
|             $comma = (($key+1) < count($rows)) ? "," : ""; | ||||
|             $q .= "drop ".$this->db->escape($column).$comma; | ||||
|         } | ||||
|  | ||||
|         $query = "alter table #__".$table." $q"; | ||||
|  | ||||
|         $db->setQuery($query); | ||||
|         $db->execute(); | ||||
|     } | ||||
|  | ||||
|   	public function fetch($table, $columns = "*", $where = null, $singlerow = false) { | ||||
|         if (!$table) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         $db = $this->db; | ||||
|         $query = $db->getQuery(true); | ||||
|  | ||||
|         $query | ||||
|             ->select($columns) | ||||
|             ->from("#__$table"); | ||||
|          | ||||
|         if (isset($where)) { | ||||
|             $query->where("$where"); | ||||
|         } | ||||
|          | ||||
|         $db->setQuery($query); | ||||
|   | ||||
|         return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      *  Load the Novarain Framework | ||||
|      * | ||||
|      *  @return  boolean | ||||
|      */ | ||||
| 	public function loadFramework() | ||||
| 	{ | ||||
| 		if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) | ||||
| 		{ | ||||
| 			include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Re-orders plugin after passed array of plugins | ||||
| 	 * | ||||
| 	 *  @param   string  $plugin            Plugin element name | ||||
| 	 *  @param   array   $lowerPluginOrder  Array of plugin element names | ||||
| 	 * | ||||
| 	 *  @return  boolean | ||||
| 	 */ | ||||
| 	public function pluginOrderAfter($lowerPluginOrder) | ||||
|     { | ||||
|  | ||||
|         if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         $db = $this->db; | ||||
|  | ||||
|         // Get plugins max order | ||||
|         $query = $db->getQuery(true); | ||||
|         $query | ||||
|             ->select($db->quoteName('b.ordering')) | ||||
|             ->from($db->quoteName('#__extensions', 'b')) | ||||
|             ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') | ||||
|             ->order('b.ordering desc'); | ||||
|  | ||||
|         $db->setQuery($query); | ||||
|         $maxOrder = $db->loadResult(); | ||||
|  | ||||
|         if (is_null($maxOrder)) | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Get plugin details | ||||
|         $query | ||||
|             ->clear() | ||||
|             ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) | ||||
|             ->from($db->quoteName('#__extensions')) | ||||
|             ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); | ||||
|  | ||||
|         $db->setQuery($query); | ||||
|         $pluginInfo = $db->loadObject(); | ||||
|  | ||||
|         if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Update the new plugin order | ||||
|         $object = new stdClass(); | ||||
|         $object->extension_id = $pluginInfo->extension_id; | ||||
|         $object->ordering = ($maxOrder + 1); | ||||
|  | ||||
| 		try { | ||||
| 			$db->updateObject('#__extensions', $object, 'extension_id'); | ||||
| 		} catch (Exception $e) { | ||||
| 			return $e->getMessage(); | ||||
| 		} | ||||
|     } | ||||
| } | ||||
							
								
								
									
										23
									
								
								plugins/fields/acfphp/script.install.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								plugins/fields/acfphp/script.install.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package         Advanced Custom Fields | ||||
|  * @version         2.8.8 Pro | ||||
|  *  | ||||
|  * @author          Tassos Marinos <info@tassos.gr> | ||||
|  * @link            http://www.tassos.gr | ||||
|  * @copyright       Copyright © 2018 Tassos Marinos All Rights Reserved | ||||
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later | ||||
| */ | ||||
|  | ||||
| defined('_JEXEC') or die('Restricted access'); | ||||
|  | ||||
| require_once __DIR__ . '/script.install.helper.php'; | ||||
|  | ||||
| class PlgFieldsACFPHPInstallerScript extends PlgFieldsACFPHPInstallerScriptHelper | ||||
| { | ||||
| 	public $alias = 'acfphp'; | ||||
| 	public $extension_type = 'plugin'; | ||||
| 	public $plugin_folder = "fields"; | ||||
| 	public $show_message = false; | ||||
| } | ||||
							
								
								
									
										15
									
								
								plugins/fields/acfphp/tmpl/acfphp.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								plugins/fields/acfphp/tmpl/acfphp.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package         Advanced Custom Fields | ||||
|  * @version         2.8.8 Pro | ||||
|  *  | ||||
|  * @author          Tassos Marinos <info@tassos.gr> | ||||
|  * @link            http://www.tassos.gr | ||||
|  * @copyright       Copyright © 2021 Tassos Marinos All Rights Reserved | ||||
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later | ||||
| */ | ||||
|  | ||||
| defined('_JEXEC') or die; | ||||
|  | ||||
| echo $field->value; | ||||
							
								
								
									
										16
									
								
								plugins/fields/acfphp/version.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								plugins/fields/acfphp/version.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package         Advanced Custom Fields | ||||
|  * @version         2.8.8 Pro | ||||
|  * | ||||
|  * @author          Tassos Marinos <info@tassos.gr> | ||||
|  * @link            http://www.tassos.gr | ||||
|  * @copyright       Copyright © 2018 Tassos Marinos All Rights Reserved | ||||
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later | ||||
|  */ | ||||
|  | ||||
| defined('_JEXEC') or die('Restricted Access'); | ||||
| $NR_PRO = "1"; | ||||
|  | ||||
| ?> | ||||
		Reference in New Issue
	
	Block a user