From 06e88e5fb7aafce1e19d3b8c0167e46fb0a41f04 Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Sep 2021 08:56:54 -0700 Subject: [PATCH] Linkwords plugin update. Fixes issue with admin preferences not being respected or no linking occurring. Prefs now moved out of core and into plugin prefs. Test page added to admin area. Relationship field added. e_tohtml.php deprecated in favor of e_parse.php Tests updated. --- e107_plugins/linkwords/admin_config.php | 40 +- e107_plugins/linkwords/e_header.php | 2 +- e107_plugins/linkwords/e_parse.php | 403 ++++++++++++++++++ e107_plugins/linkwords/e_tohtml.php | 382 +---------------- e107_plugins/linkwords/linkwords.php | 68 +-- e107_plugins/linkwords/linkwords_setup.php | 82 ++++ e107_plugins/linkwords/linkwords_sql.php | 1 + e107_plugins/linkwords/plugin.xml | 6 +- .../linkwords/e_tohtml_linkwordsTest.php | 6 +- e107_tests/tests/unit/pluginsTest.php | 6 +- 10 files changed, 537 insertions(+), 459 deletions(-) create mode 100644 e107_plugins/linkwords/e_parse.php create mode 100644 e107_plugins/linkwords/linkwords_setup.php diff --git a/e107_plugins/linkwords/admin_config.php b/e107_plugins/linkwords/admin_config.php index ce40ff9b1..0f7baa8ea 100644 --- a/e107_plugins/linkwords/admin_config.php +++ b/e107_plugins/linkwords/admin_config.php @@ -19,9 +19,10 @@ if (!getperms('P') || !e107::isInstalled('linkwords')) } e107::lan('linkwords', true); - -define('LW_CACHE_TAG', 'nomd5_linkwords'); - +if(!defined('LW_CACHE_TAG')) +{ + define('LW_CACHE_TAG', 'nomd5_linkwords'); +} class linkwords_admin extends e_admin_dispatcher { @@ -40,7 +41,7 @@ class linkwords_admin extends e_admin_dispatcher 'main/list' => array('caption'=> LAN_MANAGE, 'perm' => 'P'), 'main/create' => array('caption'=> LAN_CREATE, 'perm' => 'P'), 'main/prefs' => array('caption'=> LAN_PREFS, 'perm' => 'P'), - // 'main/custom' => array('caption'=> 'Custom Page', 'perm' => 'P') + 'main/test' => array('caption'=> LAN_TEST, 'perm' => 'P') ); protected $adminMenuAliases = array( @@ -79,6 +80,8 @@ class linkwords_ui extends e_admin_ui 'linkword_limit' => array ( 'title' => LWLAN_67, 'type' => 'number', 'data' => 'int', 'width' => '10%', 'help' => LAN_LW_HELP_15, 'readParms' => '', 'writeParms' => array('default'=>3), 'class' => 'right', 'thclass' => 'right', ), 'linkword_tip_id' => array ( 'title' => LAN_ID, 'type' => 'number', 'data' => 'int', 'width' => '5%', 'help' => LAN_LW_HELP_16, 'readParms' => '', 'writeParms' => '', 'class' => 'right', 'thclass' => 'right', ), 'linkword_newwindow' => array ( 'title' => LWLAN_55, 'type' => 'boolean', 'data' => 'int', 'width' => 'auto', 'inline' => true, 'help' => LAN_LW_HELP_17, 'filter'=>true, 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ), + 'linkword_rel' => array ( 'title' => LAN_RELATIONSHIP, 'type' => 'tags', 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => LAN_RELATIONSHIP_HELP, 'filter'=>false, 'readParms' => '', 'writeParms'=>array('placeholder'=>'eg.nofollow,noreferrer','size'=>'xlarge'), 'class' => 'center', 'thclass' => 'center', ), + 'options' => array ( 'title' => LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', ), ); @@ -176,6 +179,35 @@ class linkwords_ui extends e_admin_ui } + public function testPage() + { + $text = ''; + + if(!empty($_POST['runLinkwordTest'])) + { + // $text .= "Result:
"; + $result = e107::getParser()->toHTML($_POST['test_body'], false, 'BODY'); + + $text .= "
".$result."
"; + $text .= "
".htmlentities($result)."
"; + } + + $frm = $this->getUI(); + $text .= $frm->open('linkwordsTest'); + $text .= "
"; + $text .= $frm->textarea('test_body', varset($_POST['test_body']), 10, 80, ['class'=>'form-control','placeholder'=>'Start writing...']); + + $text .= "

"; + $text .= $frm->submit('runLinkwordTest', LAN_TEST); + $text .= "

"; + $text .= "
"; + $text .= $frm->close(); + + return $text; + + + } + } diff --git a/e107_plugins/linkwords/e_header.php b/e107_plugins/linkwords/e_header.php index a92655e4d..a49d8b9c4 100644 --- a/e107_plugins/linkwords/e_header.php +++ b/e107_plugins/linkwords/e_header.php @@ -1,6 +1,6 @@ lw_enabled = true; + } + + public function setWordData($arr = array()) + { + foreach($arr as $val) + { + $this->word_list[] = $val['word']; + $this->link_list[] = $val['link']; + $this->ext_list[] = $val['ext']; + $this->tip_list[] = $val['tip']; + $this->word_limit[] = $val['limit']; + } + } + + public function setAreaOpts($arr = array()) + { + $this->area_opts = $arr; + } + + + public function setLink($arr) + { + $this->word_list = $arr; + } + + + /* 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' : ''; // Flag to enable utf-8 on regex //@TODO utfMode probably obsolete + $this->lwAjaxEnabled = varset($pref['lw_ajax_enable'],0); + + // 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; + } + } + } + + // Will probably need linkwords on this page - so get the info + if(!defined('LW_CACHE_TAG')) + { + define('LW_CACHE_TAG', 'nomd5_linkwords'); // Put it here to avoid conflict on admin pages + } + + if(LW_CACHE_ENABLE && ($temp = e107::getCache()->retrieve_sys(LW_CACHE_TAG))) + { + $ret = eval($temp); + if ($ret) + { + echo "Error reading linkwords cache: {$ret}
"; + $temp = ''; + } + else + { + $this->lw_enabled = TRUE; + } + } + + if(!vartrue($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 + + 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(deftrue('LW_CACHE_ENABLE')) // Write to file for next time + { + $temp = ''; + foreach (array('word_list', 'link_list', 'tip_list', 'ext_list', 'LinkID') as $var) + { + $temp .= '$this->'.$var.'='.var_export($this->$var, TRUE).";\n"; + } + + e107::getCache()->set_sys(LW_CACHE_TAG,$temp); + } + } + } + + + + } + + private function loadRow($lw, $row) + { + $lw = trim($lw); + + if(empty($lw)) + { + return; + } + + $frm = e107::getForm(); + + $this->word_list[] = $lw; + $this->word_class[] = 'lw-'.$frm->name2id($lw); + $this->word_limit[] = vartrue($row['linkword_limit'],3); + $this->link_list[] = $row['linkword_link']; + $this->tip_list[] = $row['linkword_tooltip']; + $this->ext_list[] = $row['linkword_newwindow']; + $this->rel_list[] = str_replace(",", ' ', $row['linkword_rel']); + $this->LinkID[] = max($row['linkword_tip_id'], $row['linkword_id']); // If no specific ID defined, use the DB record ID + + } + + + public function toHTML($text,$area = 'olddefault') + { + + if(is_string($this->area_opts)) + { + $this->area_opts = e107::unserialize($this->area_opts); + } + + if($this->area_opts === null) + { + $this->area_opts = array(); + } + + if (!$this->lw_enabled || empty($this->area_opts) || !array_key_exists($area,$this->area_opts) || !$this->area_opts[$area]) + { + // e107::getDebug()->log("Link words skipped on ".substr($text, 0, 50)); + return $text; // No linkwords in disabled areas + } + + // Split up by HTML tags and process the odd bits here + $ptext = ""; + $lflag = FALSE; + + // Shouldn't need utf-8 on next line - just looking for HTML tags + $content = preg_split('#(<.*?>)#mis', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); + + foreach($content as $cont) + { + + + if ($cont[0] == "<") + { // Its some HTML + $ptext .= $cont; + if (substr($cont,0,2) == "linksproc($cont,0,count($this->word_list)); + // echo "Check linkwords: ".count($this->word_list).'
'; + } + else + { + $ptext .= $cont; + } + } + } + } + + // print_a($this->wordCount); + return $ptext; + } + + + /** + * This function is called recursively - it splits the text up into blocks - some containing a particular linkword + * @param $text + * @param $first + * @param $limit + * @return string + */ + function linksproc($text,$first,$limit) + { + $tp = e107::getParser(); + $doSamePage = !e107::getPref('lw_notsamepage'); + + + for (; $first < $limit; $first ++) + { + if (empty($this->word_list[$first])) continue; + if (strpos($tp->ustrtolower($text), $this->word_list[$first]) !== false) break; + } + + if ($first == $limit) + { + return $text; // Return if no linkword found + } + + // There's at least one occurrence of the linkword in the text + // Prepare all info once only + // If supporting Ajax, use the following: + // + // linkwordId::122 is a unique ID + + $ret = ''; + $linkwd = ''; + $linkrel = array(); + // $linkwd = "href='#' "; // Not relevant for Prototype, but needed with 'pure' JS to make tooltip stuff work - doesn't find link elements without href + $lwClass = array(); + $lw = $this->word_list[$first]; // This is the word we're matching - in lower case in our 'master' list + $tooltip = ''; + + if ($this->tip_list[$first]) + { // Got tooltip + if ($this->lwAjaxEnabled) + { + $linkrel[] = 'linkwordID::'.$this->LinkID[$first]; + $lwClass[] = 'lw-ajax '.$this->customClass; + } + else + { + $tooltip = " title=\"{$this->tip_list[$first]}\" "; + $lwClass[] = 'lw-tip '.$this->customClass; + } + } + + if ($this->link_list[$first]) // Got link + { + $newLink = $tp->replaceConstants($this->link_list[$first], 'full'); + if ($doSamePage || ($newLink != e_SELF.'?'.e_QUERY)) + { + $linkwd = " href=\"".$newLink."\" "; + + if(!empty($this->rel_list[$first])) + { + $linkrel[] = $this->rel_list[$first]; + } + elseif($this->ext_list[$first]) // Determine external links + { + $linkrel[] = 'noopener external'; + } + + $lwClass[] = 'lw-link '.$this->customClass; + } + } + elseif(!empty($this->word_class[$first])) + { + $lwClass[] = $this->word_class[$first]; + } + + // if (!count($lwClass)) + // { + // return $this->linksproc($sl,$first+1,$limit); // Nothing to do - move on to next word (shouldn't really get here) + // } + + if (count($linkrel)) + { + $linkwd .= " rel='".implode(' ',$linkrel)."'"; + } + + // This splits the text into blocks, some of which will precisely contain a linkword + $split_line = preg_split('#\b('.$lw.')(\s|\b)#i'.$this->utfMode, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); // *utf (selected) + // $class = "".implode(' ',$lwClass)."' "; + $class = implode(' ',$lwClass); + + $hash = md5($lw); + + if(!isset($this->wordCount[$hash])) + { + $this->wordCount[$hash] = 0; + } + + foreach ($split_line as $count=>$sl) + { + if ($tp->ustrtolower($sl) == $lw && $this->wordCount[$hash] < (int) $this->word_limit[$first]) // Do linkword replace // We know the linkword is already lower case // *utf + { + $this->wordCount[$hash]++; + + $classCount = " lw-".$this->wordCount[$hash]; + + if(empty($linkwd)) + { + $ret .= "".$sl.""; + } + else + { + $ret .= "".$sl.""; + } + + } + elseif (trim($sl)) // Something worthwhile left - look for more linkwords in it + { + $ret .= $this->linksproc($sl,$first+1,$limit); + } + else + { + $ret .= $sl; // Probably just some white space + } + } + + return $ret; + } + + +} + + + + diff --git a/e107_plugins/linkwords/e_tohtml.php b/e107_plugins/linkwords/e_tohtml.php index ec75a8e13..ddfe063ce 100755 --- a/e107_plugins/linkwords/e_tohtml.php +++ b/e107_plugins/linkwords/e_tohtml.php @@ -9,387 +9,7 @@ */ /** - * e107 Linkword plugin - * - * 'Hook' page - * The class is 'hooked' by the parser, to add linkword capability to any context where its enabled. - * - * @todo Link to capability for clever display options on tooltips + * @deprecated see linkwords/e_parse.php */ if (!defined('e107_INIT')) { exit; } -// if (!e107::isInstalled('linkwords')) exit; // This will completely break a site during upgrades. - -define('LW_CACHE_ENABLE', FALSE); - -class e_tohtml_linkwords -{ - protected $lw_enabled = FALSE; // Default to disabled to start - var $lwAjaxEnabled = FALSE; // Adds in Ajax-compatible links - var $utfMode = ''; // Flag to enable utf-8 on regex - - protected $word_list = array(); // List of link words/phrases - var $link_list = array(); // Corresponding list of links to apply - var $ext_list = array(); // Flags to determine 'open in new window' for link - var $tip_list = array(); // Store for tooltips - var $LinkID = array(); // Unique ID for each linkword - var $area_opts = array(); // Process flags for the various contexts - var $block_list = array(); // Array of 'blocked' pages - - protected $word_class = array(); - - protected $customClass = ''; - protected $wordCount = array(); - protected $word_limit = array(); -// protected $maxPerWord = 3; - - public function enable() - { - $this->lw_enabled = true; - } - - public function setWordData($arr = array()) - { - foreach($arr as $val) - { - $this->word_list[] = $val['word']; - $this->link_list[] = $val['link']; - $this->ext_list[] = $val['ext']; - $this->tip_list[] = $val['tip']; - $this->word_limit[] = $val['limit']; - } - } - - public function setAreaOpts($arr = array()) - { - $this->area_opts = $arr; - } - - - public function setLink($arr) - { - $this->word_list = $arr; - } - - - /* constructor */ - function __construct() - { - $tp = e107::getParser(); - $pref = e107::pref('core'); - $frm = e107::getForm(); - - // $this->maxPerWord = vartrue($pref['lw_max_per_word'], 25); - $this->customClass = vartrue($pref['lw_custom_class'],''); - $this->area_opts = varset($pref['lw_context_visibility']); - $this->utfMode = (strtolower(CHARSET) == 'utf-8') ? 'u' : ''; // Flag to enable utf-8 on regex //@TODO utfMode probably obsolete - $this->lwAjaxEnabled = varset($pref['lw_ajax_enable'],0); - - // See whether they should be active on this page - if not, no point doing anything! - if(e_ADMIN_AREA === true) { return; } - // if ((strpos(e_SELF, ADMINDIR) !== FALSE) || (strpos(e_PAGE, "admin_") !== FALSE)) return; // No linkwords on admin directories - - // 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; - } - } - } - - // Will probably need linkwords on this page - so get the info - define('LW_CACHE_TAG', 'nomd5_linkwords'); // Put it here to avoid conflict on admin pages - - if(LW_CACHE_ENABLE && ($temp = e107::getCache()->retrieve_sys(LW_CACHE_TAG))) - { - $ret = eval($temp); - if ($ret) - { - echo "Error reading linkwords cache: {$ret}
"; - $temp = ''; - } - else - { - $this->lw_enabled = TRUE; - } - } - - if(!vartrue($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 - - if($row['linkword_active'] == 2) - { - $row['linkword_link'] = ''; // Make sure linkword disabled - } - - if($row['linkword_active'] < 2) - { - $row['linkword_tooltip'] = ''; // Make sure tooltip disabled - } - - $lwID = max($row['linkword_tip_id'], $row['linkword_id']); // If no specific ID defined, use the DB record ID - - - if(strpos($lw,',')) // Several words to same link - { - $lwlist = explode(',',$lw); - foreach ($lwlist as $lw) - { - $lw = trim($lw); - - if(empty($lw)) - { - continue; - } - - $this->word_list[] = $lw; - $this->word_class[] = 'lw-'.$frm->name2id($lw); - $this->word_limit[] = vartrue($row['linkword_limit'],3); - - $this->link_list[] = $row['linkword_link']; - $this->tip_list[] = $row['linkword_tooltip']; - $this->ext_list[] = $row['linkword_newwindow']; - - $this->LinkID[] = $lwID; - } - } - else - { - - $lw = trim($lw); - - if(empty($lw)) - { - continue; - } - - $this->word_list[] = $lw; - $this->word_class[] = 'lw-'.$frm->name2id($lw); - $this->word_limit[] = vartrue($row['linkword_limit'],3); - $this->link_list[] = $row['linkword_link']; - $this->tip_list[] = $row['linkword_tooltip']; - $this->ext_list[] = $row['linkword_newwindow']; - - $this->LinkID[] = $lwID; - } - } - - if(LW_CACHE_ENABLE) // Write to file for next time - { - $temp = ''; - foreach (array('word_list', 'link_list', 'tip_list', 'ext_list', 'LinkID') as $var) - { - $temp .= '$this->'.$var.'='.var_export($this->$var, TRUE).";\n"; - } - - e107::getCache()->set_sys(LW_CACHE_TAG,$temp); - } - } - } - - - } - - - function to_html($text,$area = 'olddefault') - { - - if(is_string($this->area_opts)) - { - $this->area_opts = e107::unserialize($this->area_opts); - } - - if($this->area_opts === null) - { - $this->area_opts = array(); - } - - if (!$this->lw_enabled || empty($this->area_opts) || !array_key_exists($area,$this->area_opts) || !$this->area_opts[$area]) - { - // e107::getDebug()->log("Link words skipped on ".substr($text, 0, 50)); - return $text; // No linkwords in disabled areas - } - - // Split up by HTML tags and process the odd bits here - $ptext = ""; - $lflag = FALSE; - - // Shouldn't need utf-8 on next line - just looking for HTML tags - $content = preg_split('#(<.*?>)#mis', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); - - foreach($content as $cont) - { - if ($cont[0] == "<") - { // Its some HTML - $ptext .= $cont; - if (substr($cont,0,2) == "linksproc($cont,0,count($this->word_list)); - // echo "Check linkwords: ".count($this->word_list).'
'; - } - else - { - $ptext .= $cont; - } - } - } - } - - // print_a($this->wordCount); - return $ptext; - } - - - /** - * This function is called recursively - it splits the text up into blocks - some containing a particular linkword - * @param $text - * @param $first - * @param $limit - * @return string - */ - function linksproc($text,$first,$limit) - { - $tp = e107::getParser(); - $doSamePage = !e107::getPref('lw_notsamepage'); - - for (; $first < $limit; $first ++) - { - if (empty($this->word_list[$first])) continue; - if (strpos($tp->ustrtolower($text), $this->word_list[$first]) !== false) break; - } - - if ($first == $limit) - { - return $text; // Return if no linkword found - } - - // There's at least one occurrence of the linkword in the text - // Prepare all info once only - // If supporting Ajax, use the following: - // - // linkwordId::122 is a unique ID - - $ret = ''; - $linkwd = ''; - $linkrel = array(); - // $linkwd = "href='#' "; // Not relevant for Prototype, but needed with 'pure' JS to make tooltip stuff work - doesn't find link elements without href - $lwClass = array(); - $lw = $this->word_list[$first]; // This is the word we're matching - in lower case in our 'master' list - $tooltip = ''; - - if ($this->tip_list[$first]) - { // Got tooltip - if ($this->lwAjaxEnabled) - { - $linkrel[] = 'linkwordID::'.$this->LinkID[$first]; - $lwClass[] = 'lw-ajax '.$this->customClass; - } - else - { - $tooltip = " title=\"{$this->tip_list[$first]}\" "; - $lwClass[] = 'lw-tip '.$this->customClass; - } - } - - if ($this->link_list[$first]) // Got link - { - $newLink = $tp->replaceConstants($this->link_list[$first], 'full'); - if ($doSamePage || ($newLink != e_SELF.'?'.e_QUERY)) - { - $linkwd = " href=\"".$newLink."\" "; - if ($this->ext_list[$first]) { $linkrel[] = 'noopener external'; } // Determine external links - $lwClass[] = 'lw-link '.$this->customClass; - } - } - elseif(!empty($this->word_class[$first])) - { - $lwClass[] = $this->word_class[$first]; - } - - // if (!count($lwClass)) - // { - // return $this->linksproc($sl,$first+1,$limit); // Nothing to do - move on to next word (shouldn't really get here) - // } - - if (count($linkrel)) - { - $linkwd .= " rel='".implode(' ',$linkrel)."'"; - } - - // This splits the text into blocks, some of which will precisely contain a linkword - $split_line = preg_split('#\b('.$lw.')(\s|\b)#i'.$this->utfMode, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); // *utf (selected) - // $class = "".implode(' ',$lwClass)."' "; - $class = implode(' ',$lwClass); - - $hash = md5($lw); - - if(!isset($this->wordCount[$hash])) - { - $this->wordCount[$hash] = 0; - } - - foreach ($split_line as $count=>$sl) - { - if ($tp->ustrtolower($sl) == $lw && $this->wordCount[$hash] < (int) $this->word_limit[$first]) // Do linkword replace // We know the linkword is already lower case // *utf - { - $this->wordCount[$hash]++; - - $classCount = " lw-".$this->wordCount[$hash]; - - if(empty($linkwd)) - { - $ret .= "".$sl.""; - } - else - { - $ret .= "".$sl.""; - } - - } - elseif (trim($sl)) // Something worthwhile left - look for more linkwords in it - { - $ret .= $this->linksproc($sl,$first+1,$limit); - } - else - { - $ret .= $sl; // Probably just some white space - } - } - return $ret; - } -} - diff --git a/e107_plugins/linkwords/linkwords.php b/e107_plugins/linkwords/linkwords.php index 52199604c..663a14297 100644 --- a/e107_plugins/linkwords/linkwords.php +++ b/e107_plugins/linkwords/linkwords.php @@ -1,73 +1,13 @@ add('LINKWD_05',LWLAN_58.'[!br!]'.$pref['tohtml_hook'],''); // Log that the update was done - return; - } - - - // This avoids confusing the parser! - function to_html($text,$area = 'olddefault') - { - return $text; - } - - - function linkwords($text,$area = 'olddefault') - { - return $text; - } - - function linksproc($text,$first,$limit) - { - return $text; // Shouldn't get called - but just in case - } -} - diff --git a/e107_plugins/linkwords/linkwords_setup.php b/e107_plugins/linkwords/linkwords_setup.php new file mode 100644 index 000000000..ea1978c53 --- /dev/null +++ b/e107_plugins/linkwords/linkwords_setup.php @@ -0,0 +1,82 @@ +addDebug("Prefs need to be migrated out of core prefs and into linkwords prefs."); + return true; + } + + return false; + } + + + function upgrade_post($var) + { + + $plugPrefs = array( + 'lw_context_visibility' => 'lw_context_visibility', + 'lw_ajax_enable' => 'lw_ajax_enable', + 'lw_notsamepage' => 'lw_notsamepage', + 'linkword_omit_pages' => 'linkword_omit_pages', + 'lw_custom_class' => 'lw_custom_class', + ); + + if($saveData = e107::getConfig()->migrateData($plugPrefs, true)) + { + e107::getPlugConfig('linkwords')->setPref($saveData)->save(true,true,true); + } + + } + + } + +} \ No newline at end of file diff --git a/e107_plugins/linkwords/linkwords_sql.php b/e107_plugins/linkwords/linkwords_sql.php index 3aa15daea..37b5869d0 100644 --- a/e107_plugins/linkwords/linkwords_sql.php +++ b/e107_plugins/linkwords/linkwords_sql.php @@ -7,5 +7,6 @@ linkword_tooltip text NOT NULL, linkword_tip_id int(10) UNSIGNED NOT NULL Default '0', linkword_newwindow tinyint(1) unsigned NOT NULL default '1', linkword_limit int(3) UNSIGNED NOT NULL default '0', +linkword_rel varchar(250) NOT NULL default '', PRIMARY KEY (linkword_id) ) ENGINE=MyISAM AUTO_INCREMENT=1; \ No newline at end of file diff --git a/e107_plugins/linkwords/plugin.xml b/e107_plugins/linkwords/plugin.xml index 0686d9371..4788eb8bc 100644 --- a/e107_plugins/linkwords/plugin.xml +++ b/e107_plugins/linkwords/plugin.xml @@ -1,12 +1,12 @@ - + This plugin will link specified words with a defined link and/or tooltip. content Configure LinkWords - + 0 2 @@ -23,5 +23,5 @@ 'RAWTEXT' => '' ) - + \ No newline at end of file diff --git a/e107_tests/tests/unit/plugins/linkwords/e_tohtml_linkwordsTest.php b/e107_tests/tests/unit/plugins/linkwords/e_tohtml_linkwordsTest.php index 550552f34..cf78b41fd 100644 --- a/e107_tests/tests/unit/plugins/linkwords/e_tohtml_linkwordsTest.php +++ b/e107_tests/tests/unit/plugins/linkwords/e_tohtml_linkwordsTest.php @@ -17,10 +17,10 @@ protected function _before() { - require_once(e_PLUGIN."linkwords/e_tohtml.php"); + require_once(e_PLUGIN."linkwords/e_parse.php"); try { - $this->lw = $this->make('e_tohtml_linkwords'); + $this->lw = $this->make('linkwords_parse'); } catch(Exception $e) { $this->assertTrue(false, "Couldn't load e_tohtml_linkwords object"); @@ -65,7 +65,7 @@ foreach($tests as $val) { - $result = $this->lw->to_html($val['text'], 'BODY'); + $result = $this->lw->toHTML($val['text'], 'BODY'); $this->assertEquals($val['expected'],$result); } diff --git a/e107_tests/tests/unit/pluginsTest.php b/e107_tests/tests/unit/pluginsTest.php index 13a2c202e..58b8de013 100644 --- a/e107_tests/tests/unit/pluginsTest.php +++ b/e107_tests/tests/unit/pluginsTest.php @@ -308,15 +308,15 @@ { $this->pluginInstall('linkwords'); - $pref1 = e107::pref('core', 'lw_custom_class'); + $pref1 = e107::pref('linkwords', 'lw_custom_class'); $this->assertNotEmpty($pref1); - $pref2 = e107::pref('core', 'lw_context_visibility'); + $pref2 = e107::pref('linkwords', 'lw_context_visibility'); $this->assertNotEmpty($pref2['SUMMARY']); $this->pluginUninstall('linkwords'); - $pref2 = e107::pref('core', 'lw_context_visibility'); + $pref2 = e107::pref('linkwords', 'lw_context_visibility'); $this->assertEmpty($pref2); }