%PDF- %PDF-
| Direktori : /home1/lightco1/www/lightcolab.com/components/com_jce/editor/libraries/classes/ |
| Current File : //home1/lightco1/www/lightcolab.com/components/com_jce/editor/libraries/classes/plugin.php |
<?php
/**
* @copyright Copyright (c) 2009-2017 Ryan Demmer. All rights reserved
* @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* JCE is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses
*/
defined('_JEXEC') or die('RESTRICTED');
wfimport('editor.libraries.classes.editor');
wfimport('editor.libraries.classes.language');
wfimport('editor.libraries.classes.utility');
wfimport('editor.libraries.classes.token');
wfimport('editor.libraries.classes.document');
wfimport('editor.libraries.classes.view');
wfimport('editor.libraries.classes.tabs');
wfimport('editor.libraries.classes.request');
/**
* JCE class.
*/
class WFEditorPlugin extends JObject
{
// Editor Plugin instance
private static $instance;
// array of alerts
private $_alerts = array();
/**
* Constructor activating the default information of the class.
*/
public function __construct($config = array())
{
// Call parent
parent::__construct();
// get plugin name
$plugin = JRequest::getCmd('plugin');
// get name and caller from plugin name
if (strpos($plugin, '.') !== false) {
$parts = explode('.', $plugin);
$plugin = $parts[0];
$caller = $parts[1];
// store caller
if ($caller !== $plugin) {
$this->set('caller', $caller);
}
}
// set plugin name
$this->set('name', $plugin);
// load core language
WFLanguage::load('com_jce', JPATH_ADMINISTRATOR);
// load pro language
if (WF_EDITOR_PRO) {
WFLanguage::load('com_jce_pro', JPATH_SITE);
}
if (!array_key_exists('base_path', $config)) {
$config['base_path'] = WF_EDITOR_PLUGINS.'/'.$plugin;
}
if (!defined('WF_EDITOR_PLUGIN')) {
define('WF_EDITOR_PLUGIN', $config['base_path']);
}
if (!array_key_exists('view_path', $config)) {
$config['view_path'] = WF_EDITOR_PLUGIN;
}
if (!array_key_exists('layout', $config)) {
$config['layout'] = 'default';
}
if (!array_key_exists('template_path', $config)) {
$config['template_path'] = WF_EDITOR_PLUGIN.'/tmpl';
}
$this->setProperties($config);
}
/**
* Returns a reference to a editor object.
*
* This method must be invoked as:
* <pre> $browser =JCE::getInstance();</pre>
*
* @return JCE The editor object
*
* @since 1.5
*/
public static function getInstance($config = array())
{
if (!isset(self::$instance)) {
self::$instance = new self($config);
}
return self::$instance;
}
/**
* Get plugin View.
*
* @return WFView
*/
public function getView()
{
static $view;
if (!is_object($view)) {
// create plugin view
$view = new WFView(array(
'view_path' => $this->get('base_path'),
'template_path' => $this->get('template_path'),
'name' => $this->get('name'),
'layout' => $this->get('layout'),
));
}
$view->assign('plugin', $this);
return $view;
}
protected function getVersion()
{
$wf = WFEditor::getInstance();
return $wf->getVersion();
}
protected function getProfile($plugin = '')
{
$wf = WFEditor::getInstance();
return $wf->getProfile($plugin);
}
protected function getPluginVersion()
{
$manifest = WF_EDITOR_PLUGIN.'/'.$this->get('name').'.xml';
$version = '';
if (is_file($manifest)) {
$version = md5_file($manifest);
}
return $version;
}
public function execute()
{
WFToken::checkToken() or die('Access to this resource is restricted');
// process requests if any - method will end here
WFRequest::getInstance()->process();
$wf = WFEditor::getInstance();
$version = $this->getVersion();
$name = $this->getName();
// process javascript languages
if (JRequest::getWord('task') == 'loadlanguages') {
wfimport('admin.classes.language');
$parser = new WFLanguageParser(array(
'plugins' => array('core' => array($name), 'external' => array()),
'sections' => array('dlg', $name.'_dlg', 'colorpicker'),
'mode' => 'plugin',
));
$data = $parser->load();
$parser->output($data);
}
// set default plugin version
$plugin_version = $this->getPluginVersion();
// add plugin version
if ($plugin_version && $plugin_version != $version) {
$version .= $plugin_version;
}
// create the document
$document = WFDocument::getInstance(array(
'version' => $version,
'title' => WFText::_('WF_'.strtoupper($this->getName().'_TITLE')),
'name' => $name,
'language' => WFLanguage::getTag(),
'direction' => WFLanguage::getDir(),
'compress_javascript' => $this->getParam('editor.compress_javascript', 0),
'compress_css' => $this->getParam('editor.compress_css', 0),
));
// set standalone mode
$document->set('standalone', JRequest::getInt('standalone', 0));
// create display
$this->display();
// ini language
$document->addScript(array('index.php?option=com_jce&view=editor&'.$document->getQueryString(array('task' => 'loadlanguages', 'lang' => WFLanguage::getCode()))), 'joomla');
// pack assets if required
$document->pack(true, $this->getParam('editor.compress_gzip', 0));
// get the view
$view = $this->getView();
// set body output
$document->setBody($view->loadTemplate());
// render document
$document->render();
}
/**
* Display plugin.
*/
public function display()
{
jimport('joomla.filesystem.folder');
$document = WFDocument::getInstance();
if ($document->get('standalone') === 0) {
$document->addScript(array('tiny_mce_popup'), 'tiny_mce');
}
$document->addScript(array('jquery.min'), 'jquery');
$document->addScript(array('jquery-ui.min'), 'jquery');
$document->addScript(array('plugin.min.js'));
$document->addStyleSheet(array('plugin.min.css'), 'libraries');
// add custom plugin.css if exists
if (is_file(JPATH_SITE.'/media/jce/css/plugin.css')) {
$document->addStyleSheet(array('media/jce/css/plugin.css'), 'joomla');
}
}
/**
* Return the plugin name.
*
* @return string
*/
public function getName()
{
return $this->get('name');
}
/**
* Get default values for a plugin.
* Key / Value pairs will be retrieved from the profile or plugin manifest.
*
* @param array $defaults
*
* @return array
*/
public function getDefaults($defaults = array())
{
$name = $this->getName();
$caller = $this->get('caller');
if ($caller) {
$name = $caller;
}
// get manifest path
$manifest = WF_EDITOR_PLUGIN.'/'.$name.'.xml';
// get parameter defaults
if (is_file($manifest)) {
$params = $this->getParams(array(
'key' => $name,
'path' => $manifest,
));
return array_merge($defaults, (array) $params->getAll('defaults'));
}
return $defaults;
}
/**
* Check the user is in an authorized group
* Check the users group is authorized to use the plugin.
*
* @return bool
*/
public function checkPlugin($plugin = null)
{
if ($plugin) {
// check existence of plugin directory
if (is_dir(WF_EDITOR_PLUGINS.'/'.$plugin)) {
// get profile
$profile = $this->getProfile($plugin);
// check for valid object and profile id
return is_object($profile) && isset($profile->id);
}
}
return false;
}
/**
* Add an alert array to the stack.
*
* @param object $class Alert classname
* @param object $title Alert title
* @param object $text Alert text
*/
protected function addAlert($class = 'info', $title = '', $text = '')
{
$alerts = $this->getAlerts();
$alerts[] = array(
'class' => $class,
'title' => $title,
'text' => $text,
);
$this->set('_alerts', $alerts);
}
/**
* Get current alerts.
*
* @return array Alerts
*/
private function getAlerts()
{
return $this->get('_alerts');
}
/**
* Convert a url to path.
*
* @param string The url to convert
*
* @return string Full path to file
*/
public function urlToPath($url)
{
$document = WFDocument::getInstance();
return $document->urlToPath($url);
}
/**
* Returns an image url.
*
* @param string The file to load including path and extension eg: libaries.image.gif
*
* @return string Image url
*/
public function image($image, $root = 'libraries')
{
$document = WFDocument::getInstance();
return $document->image($image, $root);
}
/**
* Load & Call an extension.
*
* @param array $config
*
* @return array
*/
protected function loadExtensions($type, $extension = null, $config = array())
{
return WFExtension::loadExtensions($type, $extension, $config);
}
/**
* Compile plugin settings from defaults and alerts.
*
* @param array $settings
*
* @return array
*/
public function getSettings($settings = array())
{
$default = array(
'alerts' => $this->getAlerts(),
'defaults' => $this->getDefaults(),
);
$settings = array_merge($default, $settings);
return $settings;
}
public function getParams($options = array())
{
$wf = WFEditor::getInstance();
return $wf->getParams($options);
}
/**
* Get a parameter by key.
*
* @param string $key Parameter key eg: editor.width
* @param mixed $fallback Fallback value
* @param mixed $default Default value
* @param string $type Variable type eg: string, boolean, integer, array
* @param bool $allowempty
*
* @return mixed
*/
public function getParam($key, $fallback = '', $default = '', $type = 'string', $allowempty = true)
{
// get plugin name
$name = $this->getName();
// get caller if any
$caller = $this->get('caller');
// get all keys
$keys = explode('.', $key);
$wf = WFEditor::getInstance();
// root key set
if ($keys[0] === 'editor' || $keys[0] === $name || $keys[0] === $caller) {
return $wf->getParam($key, $fallback, $default, $type, $allowempty);
// no root key set, treat as shared param
} else {
// get fallback param from editor key
$fallback = $wf->getParam('editor.'.$key, $fallback, $default, $type, $allowempty);
if ($caller) {
// get fallback from plugin (with editor parameter as fallback)
$fallback = $wf->getParam($name.'.'.$key, $fallback, $default, $type, $allowempty);
$name = $caller;
}
// return parameter
return $wf->getParam($name.'.'.$key, $fallback, $default, $type, $allowempty);
}
}
/**
* Named wrapper to check access to a feature.
*
* @param string The feature to check, eg: upload
* @param mixed The defalt value
*
* @return bool
*/
public function checkAccess($option, $default = 0)
{
return (bool) $this->getParam($option, $default);
}
/**
* Wrapper for oEmbed Request.
*
* @param $name Provider name
* @param $url Resource URL
*
* @return object
*/
public function oEmbedWrapper($name, $url)
{
$data = '';
$endpoint = '';
$providers = json_decode(file_get_contents(WF_EDITOR_LIBRARIES.'/oembed.json'));
$supported = array('youtube', 'vimeo', 'dailymotion', 'vine', 'instagram');
if (!empty($providers)) {
// find the correct provider
foreach ($providers as $provider) {
if ($name === strtolower($provider->provider_name) && in_array($supported, $name)) {
$endpoint = $provider->endpoints[0]->url;
}
}
if ($endpoint) {
// only json is supported
$endpoint = str_replace('{format}', 'json', $endpoint);
// only https
$endpoint = str_replace('http://', 'https://', $endpoint);
if (strpos($endpoint, '?') === false) {
$endpoint .= '?url=';
} else {
$endpoint .= '&url=';
}
$data = @file_get_contents($endpoint.rawurlencode(rawurldecode($url)));
}
}
$data = is_string($data) ? json_decode($data) : $data;
return $data;
}
}