PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/com_acymailing_starter_2.0.0_2011-07-06/back/extensions/plg_acymailing_tablecontents/tablecontents.php

https://gitlab.com/endomorphosis/OLAAaction
PHP | 207 lines | 201 code | 1 blank | 5 comment | 36 complexity | e78fff9d7740f2831139300650b9363a MD5 | raw file
  1. <?php
  2. /**
  3. * @copyright Copyright (C) 2009-2011 ACYBA SARL - All rights reserved.
  4. * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
  5. */
  6. defined('_JEXEC') or die('Restricted access');
  7. ?>
  8. <?php
  9. defined('_JEXEC') or die('Restricted access');
  10. class plgAcymailingTablecontents extends JPlugin
  11. {
  12. var $noResult = array();
  13. function plgAcymailingTablecontents(&$subject, $config){
  14. parent::__construct($subject, $config);
  15. if(!isset($this->params)){
  16. $plugin =& JPluginHelper::getPlugin('acymailing', 'tablecontents');
  17. $this->params = new JParameter( $plugin->params );
  18. }
  19. }
  20. function acymailing_replaceusertagspreview(&$email,&$user){
  21. return $this->acymailing_replaceusertags($email,$user);
  22. }
  23. function acymailing_getPluginType() {
  24. $onePlugin = null;
  25. $onePlugin->name = JText::_('ACY_TABLECONTENTS');
  26. $onePlugin->function = 'acymailingtablecontents_show';
  27. $onePlugin->help = 'plugin-tablecontents';
  28. return $onePlugin;
  29. }
  30. function acymailingtablecontents_show(){
  31. $contenttype = array();
  32. $contenttype[] = JHTML::_('select.option', '',JText::_('ACY_EXISTINGANCHOR'));
  33. for($i = 1;$i<6;$i++){
  34. $contenttype[] = JHTML::_('select.option', "|type:h".$i,'H'.$i);
  35. }
  36. $contenttype[] = JHTML::_('select.option', 'class',JText::_('CLASS_NAME'));
  37. $contentsubtype = array();
  38. $contentsubtype[] = JHTML::_('select.option', '',JText::_('ACY_NONE'));
  39. for($i = 1;$i<6;$i++){
  40. $contentsubtype[] = JHTML::_('select.option', "|subtype:h".$i,'H'.$i);
  41. }
  42. $contentsubtype[] = JHTML::_('select.option', 'class',JText::_('CLASS_NAME'));
  43. ?>
  44. <script language="javascript" type="text/javascript">
  45. <!--
  46. function updateTag(){
  47. var tag = '{tableofcontents';
  48. if(document.adminForm.contenttype.value){
  49. if(document.adminForm.contenttype.value == 'class'){
  50. document.adminForm.classvalue.style.display = '';
  51. tag += '|class:'+document.adminForm.classvalue.value;
  52. }else{
  53. document.adminForm.classvalue.style.display = 'none';
  54. tag += document.adminForm.contenttype.value;
  55. }
  56. }
  57. if(document.adminForm.contentsubtype.value){
  58. if(document.adminForm.contentsubtype.value == 'class'){
  59. document.adminForm.subclassvalue.style.display = '';
  60. tag += '|subclass:'+document.adminForm.subclassvalue.value;
  61. }else{
  62. document.adminForm.subclassvalue.style.display = 'none';
  63. tag += document.adminForm.contentsubtype.value;
  64. }
  65. }
  66. tag += '}';
  67. setTag(tag);
  68. }
  69. //-->
  70. </script>
  71. <table width="100%" class="adminform">
  72. <tr><td colspan="2"><?php echo JText::_('ACY_GENERATEANCHOR'); ?></td></tr>
  73. <tr><td><?php echo JText::sprintf('ACY_LEVEL',1)?></td><td><?php echo JHTML::_('select.genericlist', $contenttype, 'contenttype' , 'size="1" onchange="updateTag();"', 'value', 'text'); ?><input style="display:none" onchange="updateTag();" name="classvalue" /></td></tr>
  74. <tr><td><?php echo JText::sprintf('ACY_LEVEL',2)?></td><td><?php echo JHTML::_('select.genericlist', $contentsubtype, 'contentsubtype' , 'size="1" onchange="updateTag();"', 'value', 'text'); ?><input style="display:none" onchange="updateTag();" name="subclassvalue" /></td></tr>
  75. </table>
  76. <?php
  77. $doc =& JFactory::getDocument();
  78. $doc->addScriptDeclaration("window.addEvent('domready', function(){ updateTag(); });");
  79. }
  80. function acymailing_replaceusertags(&$email,&$user){
  81. if(isset($this->noResult[intval($email->mailid)])) return;
  82. $match = '#{tableofcontents(.*)}#Ui';
  83. $variables = array('body','altbody');
  84. $found = false;
  85. foreach($variables as $var){
  86. if(empty($email->$var)) continue;
  87. $found = preg_match_all($match,$email->$var,$results[$var]) || $found;
  88. if(empty($results[$var][0])) unset($results[$var]);
  89. }
  90. if(!$found){
  91. $this->noResult[intval($email->mailid)] = true;
  92. return;
  93. }
  94. $mailerHelper = acymailing_get('helper.mailer');
  95. $htmlreplace = array();
  96. $textreplace = array();
  97. foreach($results as $var => $allresults){
  98. foreach($allresults[0] as $i => $oneTag){
  99. if(isset($htmlreplace[$oneTag])) continue;
  100. $article = $this->_generateTable($allresults,$i,$email);
  101. $htmlreplace[$oneTag] = $article;
  102. $textreplace[$oneTag] = $mailerHelper->textVersion($article);
  103. }
  104. }
  105. $email->body = str_replace(array_keys($htmlreplace),$htmlreplace,$email->body);
  106. $email->altbody = str_replace(array_keys($textreplace),$textreplace,$email->altbody);
  107. }
  108. function _generateTable(&$results,$i,&$email){
  109. $arguments = explode('|',strip_tags($results[1][$i]));
  110. $tag = null;
  111. $tag->divider = $this->params->get('divider','br');
  112. $tag->before = '';
  113. $tag->after = '';
  114. $tag->subdivider = $this->params->get('divider','br');
  115. $tag->subbefore = '';
  116. $tag->subafter = '';
  117. for($i=1,$a=count($arguments);$i<$a;$i++){
  118. $args = explode(':',$arguments[$i]);
  119. if(isset($args[1])){
  120. $tag->$args[0] = $args[1];
  121. }else{
  122. $tag->$args[0] = true;
  123. }
  124. }
  125. if($tag->divider == 'br'){
  126. $tag->divider = '<br />';
  127. $tag->subbefore = $tag->subdivider = '<br /> - ';
  128. }
  129. elseif($tag->divider == 'space'){
  130. $tag->subdivider = ', ';
  131. $tag->divider = ' ';
  132. $tag->subbefore = ' ( ';
  133. $tag->subafter = ' ) ';
  134. }
  135. elseif($tag->divider == 'li'){
  136. $tag->subdivider = $tag->divider = '</li><li>';
  137. $tag->subbefore = $tag->before = '<ul><li>';
  138. $tag->subafter = $tag->after = '</li></ul>';
  139. }
  140. $this->updateMail = array();
  141. $this->links = array();
  142. $this->sublinks = array();
  143. $anchorLinks = $this->_findLinks($tag,$email);
  144. if(!empty($tag->subtype) || !empty($tag->subclass)){
  145. $anchorSubLinks = $this->_findLinks($tag,$email,true);
  146. if(empty($this->links)){
  147. $this->links = $this->sublinks; unset($this->sublinks);
  148. }
  149. }
  150. $links = $this->links;
  151. if(empty($links)) return '';
  152. if(!empty($this->updateMail)) $email->body = str_replace(array_keys($this->updateMail),$this->updateMail,$email->body);
  153. if(!empty($this->sublinks)){
  154. $sublinks = $this->sublinks;
  155. foreach($links as $ilink => $oneLink){
  156. $allsublinks = array();
  157. $from = $anchorLinks['pos'][$ilink];
  158. $to = empty($anchorLinks['pos'][$ilink+1]) ? 9999999999999 : $anchorLinks['pos'][$ilink+1];
  159. foreach($sublinks as $isublink => $oneSubLink){
  160. if($anchorSubLinks['pos'][$isublink] > $to) break;
  161. if($anchorSubLinks['pos'][$isublink] > $from) $allsublinks[] = $oneSubLink;
  162. }
  163. if(!empty($allsublinks)) $links[$ilink] = $links[$ilink].$tag->subbefore.implode($tag->subdivider,$allsublinks).$tag->subafter;
  164. }
  165. }
  166. $result = '<div class="tableofcontents">'.$tag->before.implode($tag->divider,$links).$tag->after.'</div>';
  167. if(file_exists(ACYMAILING_MEDIA.'plugins'.DS.'tablecontents.php')){
  168. ob_start();
  169. require(ACYMAILING_MEDIA.'plugins'.DS.'tablecontents.php');
  170. $result = ob_get_clean();
  171. }
  172. return $result;
  173. }
  174. function _findLinks(&$tag,&$email,$sub = false){
  175. if($sub){
  176. $varType = 'subtype';
  177. $varClass = 'subclass';
  178. $varLink = &$this->sublinks;
  179. }else{
  180. $varType = 'type';
  181. $varClass = 'class';
  182. $varLink = &$this->links;
  183. }
  184. if(!empty($tag->$varType)){
  185. preg_match_all('#<'.$tag->$varType.'[^>]*>((?!</ *'.$tag->$varType.'>).)*</ *'.$tag->$varType.'>#Uis',$email->body,$anchorresults);
  186. }elseif(!empty($tag->class)){
  187. preg_match_all('#<[^>]*class="'.$tag->$varClass.'"[^>]*>(<[^>]*>|[^<>])*</.*>#Uis',$email->body,$anchorresults);
  188. $tag->$varType = 'item';
  189. }else{
  190. preg_match_all('#<a[^>]*name="([^">]*)"[^>]*>((?!</ *a>).)*</ *a>#Uis',$email->body,$anchorresults);
  191. }
  192. if(empty($anchorresults)) return '';
  193. foreach($anchorresults[0] as $i => $oneContent){
  194. $anchorresults['pos'][$i] = strpos($email->body,$oneContent);
  195. $linktext = strip_tags($oneContent);
  196. if(empty($linktext)) continue;
  197. if(empty($tag->$varType)){
  198. $varLink[$i] = '<a href="#'.$anchorresults[1][$i].'" class="oneitem" >'.$linktext.'</a>';
  199. }else{
  200. $varLink[$i] = '<a href="#'.$tag->$varType.$i.'" class="oneitem" >'.$linktext.'</a>';
  201. $this->updateMail[$oneContent] = $oneContent.'<a name="'.$tag->$varType.$i.'"></a>';
  202. }
  203. }
  204. return $anchorresults;
  205. }
  206. }//endclass