diff --git a/e107_plugins/linkwords/admin_config.php b/e107_plugins/linkwords/admin_config.php
index b0b61b931..3460dd7c2 100644
--- a/e107_plugins/linkwords/admin_config.php
+++ b/e107_plugins/linkwords/admin_config.php
@@ -21,7 +21,7 @@ if (!getperms('P') || !e107::isInstalled('linkwords'))
e107::lan('linkwords', true);
-class linkwords_admin extends e_admin_dispatcher
+class linkwords_admin_config extends e_admin_dispatcher
{
protected $modes = array(
@@ -184,8 +184,10 @@ class linkwords_ui extends e_admin_ui
if(!empty($_POST['runLinkwordTest']))
{
- // $text .= "Result:
";
- $result = e107::getParser()->toHTML($_POST['test_body'], false, 'BODY');
+ /** @var linkwords_admin $hookObj */
+ $hookObj = e107::getAddon('linkwords', 'e_parse');
+ e107::callMethod($hookObj, 'init');
+ $result = e107::callMethod($hookObj, 'toHTML',$_POST['test_body'], 'BODY');
$text .= "
".$result."
";
$text .= "".htmlentities($result)."
";
@@ -216,7 +218,7 @@ class linkwords_form_ui extends e_admin_form_ui
}
-new linkwords_admin();
+new linkwords_admin_config();
require_once(e_ADMIN."auth.php");
e107::getAdminUI()->runPage();
diff --git a/e107_plugins/linkwords/e_admin.php b/e107_plugins/linkwords/e_admin.php
new file mode 100644
index 000000000..999a44676
--- /dev/null
+++ b/e107_plugins/linkwords/e_admin.php
@@ -0,0 +1,212 @@
+retrieve("news","*", "news_id IN(".$ids.")",true);
+ foreach($data as $row)
+ {
+ $id = (int) $row['news_id'];
+ $ret[$id]['stats'] = $row['news_body']."\n".$row['news_extended'];
+
+ }
+ break;
+
+
+ default:
+ // code to be executed if n is different from all labels;
+ }
+
+
+ return $ret;
+
+
+ }
+
+
+
+ /**
+ * Extend Admin-ui Parameters
+ * @param $ui admin-ui object
+ * @return array
+ */
+ public function config(e_admin_ui $ui)
+ {
+ $action = $ui->getAction(); // current mode: create, edit, list
+ $type = $ui->getEventName(); // 'wmessage', 'news' etc. (core or plugin)
+ $id = $ui->getId();
+
+ $config = array();
+
+ switch($type)
+ {
+ case 'news': // hook into the news admin form.
+ // $body = $ui->getListModel()->getData('news_body');
+ // var_dump($body);
+
+ $config['fields']['stats'] = array ('title' => LAN_PLUGIN_LINKWORDS_NAME, 'type' => 'method', 'tab' =>1, 'noedit'=>true, 'writeParms' => array(), 'width' => 'auto', 'help' => '', 'readParms' => '', 'class' => 'left', 'thclass' => 'left', );
+
+ // $config['batchOptions'] = array('custom' => 'Custom Batch Command');
+ break;
+ }
+
+ //Note: 'urls' will be returned as $_POST['x__blank_url']. ie. x_{PLUGIN_FOLDER}_{YOURFIELDKEY}
+
+ return $config;
+
+ }
+
+
+ /**
+ * Process Posted Data.
+ * @param object $ui admin-ui
+ * @param int|array $id - Primary ID of the record being created/edited/deleted or array data of a batch process.
+ */
+ public function process(e_admin_ui $ui, $id=null)
+ {
+
+ $data = $ui->getPosted(); // ie $_POST field-data
+ $type = $ui->getEventName(); // eg. 'news'
+ $action = $ui->getAction(); // current mode: create, edit, list, batch
+ $changed = $ui->getModel()->dataHasChanged(); // true when data has changed from what is in the DB.
+
+ if($action === 'delete')
+ {
+ return;
+ }
+
+ if($action === 'batch')
+ {
+ $id = (array) $id;
+ $arrayOfRecordIds = $id['ids'];
+ $command = $id['cmd'];
+
+ return;
+ }
+
+/*
+ if(!empty($id) )
+ {
+
+ if(!empty($data['x__blank_url']))
+ {
+
+ // eg. Save the data in 'blank' plugin table. .
+
+ }
+
+ }
+*/
+
+
+ }
+
+
+
+}
+
+
+class linkwords_admin_form extends e_form
+{
+ /** @var linkwords_parse lw */
+ private $lw;
+
+ function __construct()
+ {
+
+ $this->lw = e107::getAddon('linkwords','e_parse');
+ $this->lw->init();
+
+ }
+ /**
+ * @param $curval
+ * @param $mode
+ * @param $att
+ * @return null|string
+ */
+ function x_linkwords_stats($curval, $mode, $att=null)
+ {
+
+ unset($att);
+ $vals = array();
+
+ if(empty($curval))
+ {
+ return null;
+ }
+
+ switch($mode)
+ {
+ case "read":
+ $clsInt = '';
+ $clsExt = '';
+
+ $curval = str_replace(''', "'", $curval);
+ $this->lw->toHTML($curval,'BODY');
+
+ $stats = $this->lw->getStats();
+
+ if(empty($stats['internal']))
+ {
+ $clsInt = " style='opacity:0.7'";
+ }
+
+
+ if(empty($stats['external']))
+ {
+ $clsExt = " style='opacity:0.7'";
+ }
+
+ $text = " ".$stats['internal']." | ";
+ $text .= " ".$stats['external']."
";
+
+ return $text;
+ break;
+/*
+ case "write":
+ $text = "
+ No. | URL | Title |
";
+
+ for($i = 1; $i <= 20; $i++)
+ {
+ $text .= "
+ " . $i . " |
+ " . $this->text('x_reference_url[url][' . $i . ']', varset($vals['url'][$i]), 255, array('class' => 'x-reference-url', 'id' => 'x-reference-url-url-' . $i, 'size' => 'block-level')) . " |
+ " . $this->text('x_reference_url[name][' . $i . ']', varset($vals['name'][$i]), 255, array('id' => 'x-reference-url-name-' . $i, 'size' => 'block-level')) . " |
+
";
+ }
+
+ $text .= "
";
+
+ $text .= $this->hidden('meta-parse', SITEURLBASE . e_PLUGIN_ABS . "reference/meta.php", array('id' => 'meta-parse'));
+
+ return $text;
+ break;*/
+
+ default:
+ // code to be executed if n is different from all labels;
+ }
+
+
+
+
+
+ return null;
+
+
+ }
+
+}
+
+
diff --git a/e107_plugins/linkwords/e_parse.php b/e107_plugins/linkwords/e_parse.php
index fe5413d2e..260605f6c 100644
--- a/e107_plugins/linkwords/e_parse.php
+++ b/e107_plugins/linkwords/e_parse.php
@@ -20,6 +20,8 @@ class linkwords_parse
protected $utfMode = ''; // Flag to enable utf-8 on regex
protected $cache = true;
protected $suppressSamePageLink = false;
+ protected $hash;
+ protected $admin = false;
protected $word_list = array(); // List of link words/phrases
private $link_list = array(); // Corresponding list of links to apply
@@ -34,11 +36,28 @@ class linkwords_parse
protected $customClass = '';
protected $wordCount = array();
+ protected $intLinks = 0;
+ protected $extLinks = 0;
protected $word_limit = array();
const LW_CACHE_TAG = 'linkwords';
// protected $maxPerWord = 3;
+
+ /* constructor */
+ function __construct()
+ {
+
+ // See whether they should be active on this page - if not, no point doing anything!
+ if(e_ADMIN_AREA === true && empty($_POST['runLinkwordTest']))
+ {
+ return;
+ }
+
+ $this->init();
+
+ }
+
public function enable()
{
$this->lw_enabled = true;
@@ -49,6 +68,7 @@ class linkwords_parse
$this->cache = (bool) $var;
}
+
public function setWordData($arr = array())
{
foreach($arr as $val)
@@ -74,121 +94,6 @@ class linkwords_parse
}
- /* constructor */
- function __construct()
- {
-
- $tp = e107::getParser();
- $pref = e107::pref('linkwords');
- $frm = e107::getForm();
-
- // $this->maxPerWord = vartrue($pref['lw_max_per_word'], 25);
- $this->customClass = vartrue($pref['lw_custom_class']);
- $this->area_opts = (array) varset($pref['lw_context_visibility']);
- $this->utfMode = (strtolower(CHARSET) === 'utf-8') ? 'u' : '';
- $this->lwAjaxEnabled = varset($pref['lw_ajax_enable'],0);
- $this->suppressSamePageLink = (bool) vartrue($pref['lw_notsamepage'], false);
-
- // See whether they should be active on this page - if not, no point doing anything!
- if(e_ADMIN_AREA === true && empty($_POST['runLinkwordTest']))
- {
- return;
- }
-
- // Now see if disabled on specific pages
- $check_url = e_SELF.(defined('e_QUERY') ? "?".e_QUERY : '');
- $this->block_list = explode("|",substr(varset($pref['lw_page_visibility']),2)); // Knock off the 'show/hide' flag
-
- foreach($this->block_list as $p)
- {
- if($p=trim($p))
- {
- if(substr($p, -1) === '!')
- {
- $p = substr($p, 0, -1);
- if(substr($check_url, strlen($p)*-1) == $p) return;
- }
- else
- {
- if(strpos($check_url, $p) !== FALSE) return;
- }
- }
- }
-
-
-
- if($this->cache && ($temp = e107::getCache()->retrieve(self::LW_CACHE_TAG, false, true, true)))
- {
- if($data = e107::unserialize($temp))
- {
- foreach($data as $key=>$val)
- {
- $this->$key = $val;
- }
-
- $this->lw_enabled = TRUE;
- }
- else
- {
- trigger_error("Error reading linkwords cache: ".self::LW_CACHE_TAG);
- }
-
- }
-
- if(empty($temp)) // Either cache disabled, or no info in cache (or error reading/processing cache)
- {
- $link_sql = e107::getDb('link_sql');
-
- if($link_sql->select("linkwords", "*", "linkword_active!=1"))
- {
- $this->lw_enabled = true;
-
- while($row = $link_sql->fetch())
- {
-
- $lw = $tp->ustrtolower($row['linkword_word']); // It was trimmed when saved *utf
- $lw = str_replace(''', "'", $lw); // Fix for apostrophies.
-
- if($row['linkword_active'] == 2)
- {
- $row['linkword_link'] = ''; // Make sure linkword disabled
- }
-
- if($row['linkword_active'] < 2)
- {
- $row['linkword_tooltip'] = ''; // Make sure tooltip disabled
- }
-
-
- if(strpos($lw,',')) // Several words to same link
- {
- $lwlist = explode(',',$lw);
- foreach ($lwlist as $lw)
- {
- $this->loadRow($lw,$row);
- }
- }
- else
- {
- $this->loadRow($lw,$row);
- }
- }
-
- if($this->cache) // Write to file for next time
- {
- $temp = [];
- foreach (array('word_list', 'word_class', 'word_limit', 'link_list', 'tip_list', 'ext_list', 'rel_list', 'LinkID') as $var)
- {
- $temp[$var] = $this->$var;
- }
-
- e107::getCache()->set(self::LW_CACHE_TAG, e107::serialize($temp, 'json'), true, true, true);
- }
- }
- }
-
-
- }
private function loadRow($lw, $row)
{
@@ -390,6 +295,7 @@ class linkwords_parse
$class = implode(' ',$lwClass);
$hash = md5($lw);
+ $this->hash = $hash;
if(!isset($this->wordCount[$hash]))
{
@@ -402,6 +308,8 @@ class linkwords_parse
{
$this->wordCount[$hash]++;
+
+
$classCount = " lw-".$this->wordCount[$hash];
if(empty($linkwd))
@@ -410,6 +318,15 @@ class linkwords_parse
}
else
{
+ if(strpos($linkwd,'http')!==false)
+ {
+ $this->extLinks++;
+ }
+ else
+ {
+ $this->intLinks++;
+ }
+
$ret .= "".$sl."";
}
@@ -427,7 +344,130 @@ class linkwords_parse
return $ret;
}
+ function getStats()
+ {
+ return [
+ 'internal' => $this->intLinks,
+ 'external' => $this->extLinks,
+ ];
+ }
+
+ /**
+ * @return void
+ */
+ public function init(): void
+ {
+
+ $tp = e107::getParser();
+ $pref = e107::pref('linkwords');
+ $frm = e107::getForm();
+
+ // $this->maxPerWord = vartrue($pref['lw_max_per_word'], 25);
+ $this->customClass = vartrue($pref['lw_custom_class']);
+ $this->area_opts = (array) varset($pref['lw_context_visibility']);
+ $this->utfMode = (strtolower(CHARSET) === 'utf-8') ? 'u' : '';
+ $this->lwAjaxEnabled = varset($pref['lw_ajax_enable'], 0);
+ $this->suppressSamePageLink = (bool) vartrue($pref['lw_notsamepage'], false);
+
+
+ // Now see if disabled on specific pages
+ $check_url = e_SELF . (defined('e_QUERY') ? "?" . e_QUERY : '');
+ $this->block_list = explode("|", substr(varset($pref['lw_page_visibility']), 2)); // Knock off the 'show/hide' flag
+
+ foreach($this->block_list as $p)
+ {
+ if($p = trim($p))
+ {
+ if(substr($p, -1) === '!')
+ {
+ $p = substr($p, 0, -1);
+ if(substr($check_url, strlen($p) * -1) == $p)
+ {
+ return;
+ }
+ }
+ else
+ {
+ if(strpos($check_url, $p) !== false)
+ {
+ return;
+ }
+ }
+ }
+ }
+
+
+ if($this->cache && ($temp = e107::getCache()->retrieve(self::LW_CACHE_TAG, false, true, true)))
+ {
+ if($data = e107::unserialize($temp))
+ {
+ foreach($data as $key => $val)
+ {
+ $this->$key = $val;
+ }
+
+ $this->lw_enabled = true;
+ }
+ else
+ {
+ trigger_error("Error reading linkwords cache: " . self::LW_CACHE_TAG);
+ }
+
+ }
+
+ if(empty($temp)) // Either cache disabled, or no info in cache (or error reading/processing cache)
+ {
+ $link_sql = e107::getDb('link_sql');
+
+ if($link_sql->select("linkwords", "*", "linkword_active!=1"))
+ {
+ $this->lw_enabled = true;
+
+ while($row = $link_sql->fetch())
+ {
+
+ $lw = $tp->ustrtolower($row['linkword_word']); // It was trimmed when saved *utf
+ $lw = str_replace(''', "'", $lw); // Fix for apostrophies.
+
+ if($row['linkword_active'] == 2)
+ {
+ $row['linkword_link'] = ''; // Make sure linkword disabled
+ }
+
+ if($row['linkword_active'] < 2)
+ {
+ $row['linkword_tooltip'] = ''; // Make sure tooltip disabled
+ }
+
+
+ if(strpos($lw, ',')) // Several words to same link
+ {
+ $lwlist = explode(',', $lw);
+ foreach($lwlist as $lw)
+ {
+ $this->loadRow($lw, $row);
+ }
+ }
+ else
+ {
+ $this->loadRow($lw, $row);
+ }
+ }
+
+ if($this->cache) // Write to file for next time
+ {
+ $temp = [];
+ foreach(array('word_list', 'word_class', 'word_limit', 'link_list', 'tip_list', 'ext_list', 'rel_list', 'LinkID') as $var)
+ {
+ $temp[$var] = $this->$var;
+ }
+
+ e107::getCache()->set(self::LW_CACHE_TAG, e107::serialize($temp, 'json'), true, true, true);
+ }
+ }
+ }
+ }
}