index.html000060400000000054152457551340006547 0ustar00tablecontents.php000060400000021112152457551340010126 0ustar00params)){ $plugin = JPluginHelper::getPlugin('acymailing', 'tablecontents'); $this->params = new acyParameter($plugin->params); } } function acymailing_getPluginType(){ $onePlugin = new stdClass(); $onePlugin->name = acymailing_translation('ACY_TABLECONTENTS'); $onePlugin->function = 'acymailingtablecontents_show'; $onePlugin->help = 'plugin-tablecontents'; return $onePlugin; } function acymailingtablecontents_show(){ $contenttype = array(); $contenttype[] = acymailing_selectOption('', acymailing_translation('ACY_EXISTINGANCHOR')); for($i = 1; $i < 6; $i++){ $contenttype[] = acymailing_selectOption("|type:h".$i, 'H'.$i); } $contenttype[] = acymailing_selectOption('class', acymailing_translation('CLASS_NAME')); $contentsubtype = array(); $contentsubtype[] = acymailing_selectOption('', acymailing_translation('ACY_NONE')); for($i = 1; $i < 6; $i++){ $contentsubtype[] = acymailing_selectOption("|subtype:h".$i, 'H'.$i); } $contentsubtype[] = acymailing_selectOption('class', acymailing_translation('CLASS_NAME')); ?>
noResult[intval($email->mailid)])) return; $match = '#{tableofcontents(.*)}#Ui'; $variables = array('subject', 'body', 'altbody'); $found = false; foreach($variables as $var){ if(empty($email->$var)) continue; $found = preg_match_all($match, $email->$var, $results[$var]) || $found; if(empty($results[$var][0])) unset($results[$var]); } if(!$found){ $this->noResult[intval($email->mailid)] = true; return; } $mailerHelper = acymailing_get('helper.mailer'); $htmlreplace = array(); $textreplace = array(); foreach($results as $var => $allresults){ foreach($allresults[0] as $i => $oneTag){ if(isset($htmlreplace[$oneTag])) continue; $article = $this->_generateTable($allresults, $i, $email); $htmlreplace[$oneTag] = $article; $textreplace[$oneTag] = $mailerHelper->textVersion($article); $subjectreplace[$oneTag] = strip_tags($article); } } $email->body = str_replace(array_keys($htmlreplace), $htmlreplace, $email->body); $email->altbody = str_replace(array_keys($textreplace), $textreplace, $email->altbody); $email->subject = str_replace(array_keys($subjectreplace), $subjectreplace, $email->subject); } function _generateTable(&$results, $i, &$email){ $arguments = explode('|', strip_tags($results[1][$i])); $tag = new stdClass(); $tag->divider = $this->params->get('divider', 'br'); $tag->before = ''; $tag->after = ''; $tag->subdivider = $this->params->get('divider', 'br'); $tag->subbefore = ''; $tag->subafter = ''; for($i = 1, $a = count($arguments); $i < $a; $i++){ $args = explode(':', $arguments[$i]); if(isset($args[1])){ $tag->{$args[0]} = $args[1]; }else{ $tag->{$args[0]} = true; } } if($tag->divider == 'br'){ $tag->divider = '
'; $tag->subbefore = $tag->subdivider = '
- '; }elseif($tag->divider == 'space'){ $tag->subdivider = ', '; $tag->divider = ' '; $tag->subbefore = ' ( '; $tag->subafter = ' ) '; }elseif($tag->divider == 'li'){ $tag->subdivider = $tag->divider = '
  • '; $tag->subbefore = $tag->before = ''; } $this->updateMail = array(); $this->links = array(); $this->sublinks = array(); $anchorLinks = $this->_findLinks($tag, $email); if(!empty($tag->subtype) || !empty($tag->subclass)){ $anchorSubLinks = $this->_findLinks($tag, $email, true); if(empty($this->links)){ $this->links = $this->sublinks; unset($this->sublinks); } } $links = $this->links; if(!empty($tag->limit)){ $links = array_slice($links, 0, $tag->limit); } if(empty($links)) return ''; if(!empty($this->updateMail)) $email->body = str_replace(array_keys($this->updateMail), $this->updateMail, $email->body); if(!empty($this->sublinks)){ $sublinks = $this->sublinks; foreach($links as $ilink => $oneLink){ $allsublinks = array(); $from = $anchorLinks['pos'][$ilink]; $to = empty($anchorLinks['pos'][$ilink + 1]) ? 9999999999999 : $anchorLinks['pos'][$ilink + 1]; foreach($sublinks as $isublink => $oneSubLink){ if($anchorSubLinks['pos'][$isublink] > $to) break; if($anchorSubLinks['pos'][$isublink] > $from) $allsublinks[] = $oneSubLink; } if(!empty($allsublinks)) $links[$ilink] = $links[$ilink].$tag->subbefore.implode($tag->subdivider, $allsublinks).$tag->subafter; } } $result = '
    '.$tag->before.implode($tag->divider, $links).$tag->after.'
    '; if(file_exists(ACYMAILING_MEDIA.'plugins'.DS.'tablecontents.php')){ ob_start(); require(ACYMAILING_MEDIA.'plugins'.DS.'tablecontents.php'); $result = ob_get_clean(); } return $result; } function _findLinks(&$tag, &$email, $sub = false){ if($sub){ $varType = 'subtype'; $varClass = 'subclass'; $varLink = &$this->sublinks; }else{ $varType = 'type'; $varClass = 'class'; $varLink = &$this->links; } if(!empty($tag->$varType)){ preg_match_all('#<'.$tag->$varType.'[^>]*>((?!$varType.'>).)*$varType.'>#Uis', $email->body, $anchorresults); }elseif(!empty($tag->class)){ preg_match_all('#<[^>]*class="'.$tag->$varClass.'"[^>]*>(<[^>]*>|[^<>])*#Uis', $email->body, $anchorresults); $tag->$varType = 'item'; }else{ preg_match_all('#]*name="([^">]*)"[^>]*>((?!).)*#Uis', $email->body, $anchorresults); } if(empty($anchorresults)) return ''; foreach($anchorresults[0] as $i => $oneContent){ $anchorresults['pos'][$i] = strpos($email->body, $oneContent); $linktext = strip_tags($oneContent); if(empty($linktext)) continue; if(empty($tag->$varType)){ $varLink[$i] = ''.$linktext.''; }else{ $varLink[$i] = ''.$linktext.''; if(preg_match('#]*>[^<]*'.preg_quote($oneContent, '#').'#Uis', $email->body, $linkBefore)){ $this->updateMail[$linkBefore[0]] = ''.$linkBefore[0]; }else{ $this->updateMail[$oneContent] = ''.$oneContent; } } } return $anchorresults; } }//endclass tablecontents.xml000060400000003220152457551340010137 0ustar00 AcyMailing table of contents generator January 2011 1.0.0 Acyba dev@acyba.com http://www.acyba.com Copyright (C) 2009-2018 ACYBA SAS - All rights reserved.. GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html This plugin enables you to generate table of contents tablecontents.php