diff --git a/e107_plugins/linkwords/e_tohtml.php b/e107_plugins/linkwords/e_tohtml.php new file mode 100755 index 000000000..f9d8691bc --- /dev/null +++ b/e107_plugins/linkwords/e_tohtml.php @@ -0,0 +1,159 @@ +block_list = explode("|",substr($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 + $this->lw_enabled = TRUE; + $link_sql = new db; + if($link_sql -> db_Select("linkwords", "*", "linkword_active=0")) + { + while ($row = $link_sql->db_Fetch()) + { + $lw = trim(strtolower($row['linkword_word'])); + if (strpos($lw,',')) + { // Several words to same link + $lwlist = explode(',',$lw); + foreach ($lwlist as $lw) + { + $this->word_list[] = trim($lw); + $this->link_list[] = $row['linkword_link']; + } + } + else + { + $this->word_list[] = $lw; + $this->link_list[] = $row['linkword_link']; + } + } + } + if (is_array($pref['lw_context_visibility'])) + { + $this->area_opts = $pref['lw_context_visibility']; + } + } + + + function linkwords($text,$area = 'olddefault') + { + if (!$this->lw_enabled || !array_key_exists($area,$this->area_opts) || !$this->area_opts[$area]) return $text; // No linkwords in disabled areas + + +// Split up by HTML tags and process the odd bits here + $ptext = ""; + $lflag = FALSE; + + $content = preg_split('#(<.*?>)#mis', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); + foreach($content as $cont) + { + if (strpos($cont, "<") !== FALSE) + { // Its some HTML + $ptext .= $cont; + if (strpos($cont,"linksproc($cont,0,count($this->word_list)); + } + else + { + $ptext .= $cont; + } + } + } + } + return $ptext; + } + + function linksproc($text,$first,$limit) + { // This function is called recursively - it splits the text up into blocks - some containing a particular linkword + while (($first < $limit) && (stripos($text,$this->word_list[$first]) === FALSE)) { $first++; }; + if ($first == $limit) return $text; // Return if no linkword found + + // There's at least one occurrence of the linkword in the text + $ret = ''; + $lw = $this->word_list[$first]; + // This splits the text into blocks, some of which will precisely contain a linkword + $split_line = preg_split('#\b('.$lw.')\b#i', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); + foreach ($split_line AS $sl) + { + if (strcasecmp($sl,$lw) == 0) + { // Do linkword replace + $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; + } +} + +?> \ No newline at end of file