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

/templates/ecard/functions.php

http://j-ecard-28022011.googlecode.com/
PHP | 459 lines | 400 code | 58 blank | 1 comment | 97 complexity | fa761afc2f8ae874cc37887e87a3756a MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. <?php
  2. defined('_JEXEC') or die('Restricted access'); // no direct access
  3. if (!defined('_ARTX_FUNCTIONS')) {
  4. define('_ARTX_FUNCTIONS', 1);
  5. $GLOBALS['artx_settings'] = array(
  6. 'block' => array('has_header' => true),
  7. 'menu' => array('show_submenus' => true),
  8. 'vmenu' => array('show_submenus' => true, 'simple' => false)
  9. );
  10. function artxHasMessages()
  11. {
  12. global $mainframe;
  13. $messages = $mainframe->getMessageQueue();
  14. if (is_array($messages) && count($messages))
  15. foreach ($messages as $msg)
  16. if (isset($msg['type']) && isset($msg['message']))
  17. return true;
  18. return false;
  19. }
  20. function artxPost($caption, $content)
  21. {
  22. $hasCaption = (null !== $caption && strlen(trim($caption)) > 0);
  23. $hasContent = (null !== $content && strlen(trim($content)) > 0);
  24. if (!$hasCaption && !$hasContent)
  25. return '';
  26. ob_start();
  27. ?>
  28. <div class="art-post">
  29. <div class="art-post-tl"></div>
  30. <div class="art-post-tr"></div>
  31. <div class="art-post-bl"></div>
  32. <div class="art-post-br"></div>
  33. <div class="art-post-tc"></div>
  34. <div class="art-post-bc"></div>
  35. <div class="art-post-cl"></div>
  36. <div class="art-post-cr"></div>
  37. <div class="art-post-cc"></div>
  38. <div class="art-post-body">
  39. <div class="art-post-inner">
  40. <?php if ($hasCaption): ?>
  41. <h2 class="art-postheader">
  42. <?php echo $caption; ?>
  43. </h2>
  44. <?php endif; ?>
  45. <?php if ($hasContent): ?>
  46. <div class="art-postcontent">
  47. <!-- article-content -->
  48. <?php echo artxReplaceButtons($content); ?>
  49. <!-- /article-content -->
  50. </div>
  51. <div class="cleared"></div>
  52. <?php endif; ?>
  53. </div>
  54. <div class="cleared"></div>
  55. </div>
  56. </div>
  57. <?php
  58. return ob_get_clean();
  59. }
  60. function artxBlock($caption, $content)
  61. {
  62. $hasCaption = ($GLOBALS['artx_settings']['block']['has_header']
  63. && null !== $caption && strlen(trim($caption)) > 0);
  64. $hasContent = (null !== $content && strlen(trim($content)) > 0);
  65. if (!$hasCaption && !$hasContent)
  66. return '';
  67. ob_start();
  68. ?>
  69. <div class="art-block">
  70. <div class="art-block-tl"></div>
  71. <div class="art-block-tr"></div>
  72. <div class="art-block-bl"></div>
  73. <div class="art-block-br"></div>
  74. <div class="art-block-tc"></div>
  75. <div class="art-block-bc"></div>
  76. <div class="art-block-cl"></div>
  77. <div class="art-block-cr"></div>
  78. <div class="art-block-cc"></div>
  79. <div class="art-block-body">
  80. <?php if ($hasCaption): ?>
  81. <div class="art-blockheader">
  82. <div class="t">
  83. <?php echo $caption; ?>
  84. </div>
  85. </div>
  86. <?php endif; ?>
  87. <?php if ($hasContent): ?>
  88. <div class="art-blockcontent">
  89. <div class="art-blockcontent-body">
  90. <!-- block-content -->
  91. <?php echo artxReplaceButtons($content); ?>
  92. <!-- /block-content -->
  93. <div class="cleared"></div>
  94. </div>
  95. </div>
  96. <?php endif; ?>
  97. <div class="cleared"></div>
  98. </div>
  99. </div>
  100. <?php
  101. return ob_get_clean();
  102. }
  103. function artxVMenuBlock($caption, $content)
  104. {
  105. $hasCaption = (null !== $caption && strlen(trim($caption)) > 0);
  106. $hasContent = (null !== $content && strlen(trim($content)) > 0);
  107. if (!$hasCaption && !$hasContent)
  108. return '';
  109. ob_start();
  110. ?><div class="art-vmenublock">
  111. <div class="art-vmenublock-tl"></div>
  112. <div class="art-vmenublock-tr"></div>
  113. <div class="art-vmenublock-bl"></div>
  114. <div class="art-vmenublock-br"></div>
  115. <div class="art-vmenublock-tc"></div>
  116. <div class="art-vmenublock-bc"></div>
  117. <div class="art-vmenublock-cl"></div>
  118. <div class="art-vmenublock-cr"></div>
  119. <div class="art-vmenublock-cc"></div>
  120. <div class="art-vmenublock-body">
  121. <?php if ($hasCaption): ?><div class="art-vmenublockheader">
  122. <div class="t">
  123. <?php echo $caption; ?></div>
  124. </div>
  125. <?php endif; ?>
  126. <?php if ($hasContent): ?><div class="art-vmenublockcontent">
  127. <div class="art-vmenublockcontent-body">
  128. <!-- block-content -->
  129. <?php echo $content; ?>
  130. <!-- /block-content -->
  131. <div class="cleared"></div>
  132. </div>
  133. </div>
  134. <?php endif; ?>
  135. <div class="cleared"></div>
  136. </div>
  137. </div>
  138. <?php
  139. return ob_get_clean();
  140. }
  141. function artxPageTitle($page, $criteria = null, $key = null)
  142. {
  143. if ($criteria === null)
  144. $criteria = $page->params->def('show_page_title', 1);
  145. return $criteria
  146. ? ('<span class="componentheading' . $page->params->get('pageclass_sfx') . '">'
  147. . $page->escape($page->params->get($key === null ? 'page_title' : $key)) . '</span>')
  148. : '';
  149. }
  150. function artxCountModules(&$document, $position)
  151. {
  152. return $document->countModules($position);
  153. }
  154. function artxPositions(&$document, $positions, $style)
  155. {
  156. ob_start();
  157. if (count($positions) == 3) {
  158. if (artxCountModules($document, $positions[0])
  159. && artxCountModules($document, $positions[1])
  160. && artxCountModules($document, $positions[2]))
  161. {
  162. ?>
  163. <table class="position" cellpadding="0" cellspacing="0" border="0">
  164. <tr valign="top">
  165. <td width="33%"><?php echo artxModules($document, $positions[0], $style); ?></td>
  166. <td width="33%"><?php echo artxModules($document, $positions[1], $style); ?></td>
  167. <td><?php echo artxModules($document, $positions[2], $style); ?></td>
  168. </tr>
  169. </table>
  170. <?php
  171. } elseif (artxCountModules($document, $positions[0]) && artxCountModules($document, $positions[1])) {
  172. ?>
  173. <table class="position" cellpadding="0" cellspacing="0" border="0">
  174. <tr valign="top">
  175. <td width="33%"><?php echo artxModules($document, $positions[0], $style); ?></td>
  176. <td><?php echo artxModules($document, $positions[1], $style); ?></td>
  177. </tr>
  178. </table>
  179. <?php
  180. } elseif (artxCountModules($document, $positions[1]) && artxCountModules($document, $positions[2])) {
  181. ?>
  182. <table class="position" cellpadding="0" cellspacing="0" border="0">
  183. <tr valign="top">
  184. <td width="67%"><?php echo artxModules($document, $positions[1], $style); ?></td>
  185. <td><?php echo artxModules($document, $positions[2], $style); ?></td>
  186. </tr>
  187. </table>
  188. <?php
  189. } elseif (artxCountModules($document, $positions[0]) && artxCountModules($document, $positions[2])) {
  190. ?>
  191. <table class="position" cellpadding="0" cellspacing="0" border="0">
  192. <tr valign="top">
  193. <td width="50%"><?php echo artxModules($document, $positions[0], $style); ?></td>
  194. <td><?php echo artxModules($document, $positions[2], $style); ?></td>
  195. </tr>
  196. </table>
  197. <?php
  198. } else {
  199. echo artxModules($document, $positions[0], $style);
  200. echo artxModules($document, $positions[1], $style);
  201. echo artxModules($document, $positions[2], $style);
  202. }
  203. } elseif (count($positions) == 2) {
  204. if (artxCountModules($document, $positions[0]) && artxCountModules($document, $positions[1])) {
  205. ?>
  206. <table class="position" cellpadding="0" cellspacing="0" border="0">
  207. <tr valign="top">
  208. <td width="50%"><?php echo artxModules($document, $positions[0], $style); ?></td>
  209. <td><?php echo artxModules($document, $positions[1], $style); ?></td>
  210. </tr>
  211. </table>
  212. <?php
  213. } else {
  214. echo artxModules($document, $positions[0], $style);
  215. echo artxModules($document, $positions[1], $style);
  216. }
  217. } // count($positions)
  218. return ob_get_clean();
  219. }
  220. function artxGetContentCellStyle(&$document)
  221. {
  222. $leftCnt = artxCountModules($document, 'left');
  223. $rightCnt = artxCountModules($document, 'right');
  224. if ($leftCnt > 0 && $rightCnt > 0)
  225. return 'content';
  226. if ($rightCnt > 0)
  227. return 'content-sidebar1';
  228. if ($leftCnt > 0)
  229. return 'content-sidebar2';
  230. return 'content-wide';
  231. }
  232. function artxHtmlFixMoveScriptToHead($re, $content)
  233. {
  234. if (preg_match($re, $content, $matches, PREG_OFFSET_CAPTURE)) {
  235. $content = substr($content, 0, $matches[0][1])
  236. . substr($content, $matches[0][1] + strlen($matches[0][0]));
  237. $document =& JFactory::getDocument();
  238. $document->addScriptDeclaration($matches[1][0]);
  239. }
  240. return $content;
  241. }
  242. function artxHtmlFixRemove($re, $content)
  243. {
  244. if (preg_match($re, $content, $matches, PREG_OFFSET_CAPTURE)) {
  245. $content = substr($content, 0, $matches[0][1])
  246. . substr($content, $matches[0][1] + strlen($matches[0][0]));
  247. }
  248. return $content;
  249. }
  250. function artxComponentWrapper(&$document)
  251. {
  252. if ($document->getType() != 'html')
  253. return;
  254. $option = JRequest::getCmd('option');
  255. $view = JRequest::getCmd('view');
  256. $layout = JRequest::getCmd('layout');
  257. $content = $document->getBuffer('component');
  258. // fixes for w3.org validation
  259. if ('com_contact' == $option) {
  260. if ('category' == $view) {
  261. $content = artxHtmlFixFormAction($content);
  262. } elseif ('contact' == $view) {
  263. $content = artxHtmlFixMoveScriptToHead('~<script [^>]+>\s*(<!--[^>]*-->)\s*</script>~', $content);
  264. }
  265. } elseif ('com_content' == $option) {
  266. if ('category' == $view) {
  267. if ('' == $layout) {
  268. $content = artxHtmlFixMoveScriptToHead('~<script [^>]+>([^<]*)</script>~', $content);
  269. $content = artxHtmlFixFormAction($content);
  270. }
  271. } elseif ('archive' == $view) {
  272. $content = artxHtmlFixRemove('~<ul id="archive-list" style="list-style: none;">\s*</ul>~', $content);
  273. }
  274. } elseif ('com_user' == $option) {
  275. if ('user' == $view) {
  276. if ('form' == $layout) {
  277. $content = artxHtmlFixRemove('~autocomplete="off"~', $content);
  278. }
  279. }
  280. }
  281. if (false === strpos($content, '<div class="art-post">')) {
  282. $title = null;
  283. if (preg_match('~<div\s+class="(componentheading[^"]*)"([^>]*)>([^<]+)</div>~', $content, $matches, PREG_OFFSET_CAPTURE)) {
  284. $content = substr($content, 0, $matches[0][1]) . substr($content, $matches[0][1] + strlen($matches[0][0]));
  285. $title = '<span class="' . $matches[1][0] . '"' . $matches[2][0] . '>' . $matches[3][0] . '</span>';
  286. }
  287. $document->setBuffer(artxPost($title, $content), 'component');
  288. }
  289. }
  290. function artxModules(&$document, $position, $style = null)
  291. {
  292. return '<jdoc:include type="modules" name="' . $position . '"' . (null != $style ? ' style="artstyle" artstyle="' . $style . '"' : '') . ' />';
  293. }
  294. function artxUrlToHref($url)
  295. {
  296. $result = '';
  297. $p = parse_url($url);
  298. if (isset($p['scheme']) && isset($p['host'])) {
  299. $result = $p['scheme'] . '://';
  300. if (isset($p['user'])) {
  301. $result .= $p['user'];
  302. if (isset($p['pass']))
  303. $result .= ':' . $p['pass'];
  304. $result .= '@';
  305. }
  306. $result .= $p['host'];
  307. if (isset($p['port']))
  308. $result .= ':' . $p['port'];
  309. if (!isset($p['path']))
  310. $result .= '/';
  311. }
  312. if (isset($p['path']))
  313. $result .= $p['path'];
  314. if (isset($p['query'])) {
  315. $result .= '?' . str_replace('&', '&amp;', $p['query']);
  316. }
  317. if (isset($p['fragment']))
  318. $result .= '#' . $p['fragment'];
  319. return $result;
  320. }
  321. function artxReplaceButtonsRegex() {
  322. return '' .
  323. '~<input\b[^>]*'
  324. . '(?:'
  325. . '[^>]*\bclass=(?:"(?:[^"]*\s)?button(?:\s[^"]*)?"|\'(?:[^\']*\s)?button(?:\s[^\']*)?\'|button\b)[^>]*'
  326. . '(?:\bvalue=(?:"[^"]*"|\'[^\']*\'|[^>\s]*))'
  327. . '|'
  328. . '(?:\bvalue=(?:"[^"]*"|\'[^\']*\'|[^>\s]*))'
  329. . '[^>]*\bclass=(?:"(?:[^"]*\s)?button(?:\s[^"]*)?"|\'(?:[^\']*\s)?button(?:\s[^\']*)?\'|button\b)[^>]*'
  330. . '|'
  331. . '[^>]*\bclass=(?:"(?:[^"]*\s)?button(?:\s[^"]*)?"|\'(?:[^\']*\s)?button(?:\s[^\']*)?\'|button\b)[^>]*'
  332. . ')'
  333. . '[^>]*/?\s*>~i';
  334. }
  335. function artxReplaceButtons($content)
  336. {
  337. $re = artxReplaceButtonsRegex();
  338. if (!preg_match_all($re, $content, $matches, PREG_OFFSET_CAPTURE))
  339. return $content;
  340. $result = '';
  341. $position = 0;
  342. foreach ($matches[0] as $match) {
  343. $result .= substr($content, $position, $match[1] - $position);
  344. $position = $match[1] + strlen($match[0]);
  345. $result .= '<span class="art-button-wrapper"><span class="l"> </span><span class="r"> </span>'
  346. . preg_replace('~\bclass=(?:"([^"]*\s)?button(\s[^"]*)?"|\'([^\']*\s)?button(\s[^\']*)?\'|button\b)~i',
  347. 'class="\1\3button art-button\2\4"', $match[0]) . '</span>';
  348. }
  349. $result .= substr($content, $position);
  350. return $result;
  351. }
  352. function artxHtmlFixFormAction($content)
  353. {
  354. if (preg_match('~ action="([^"]+)" ~', $content, $matches, PREG_OFFSET_CAPTURE)) {
  355. $content = substr($content, 0, $matches[0][1])
  356. . ' action="' . artxUrlToHref($matches[1][0]) . '" '
  357. . substr($content, $matches[0][1] + strlen($matches[0][0]));
  358. }
  359. return $content;
  360. }
  361. $artxFragments = array();
  362. function artxFragmentBegin($head = '')
  363. {
  364. global $artxFragments;
  365. $artxFragments[] = array('head' => $head, 'content' => '', 'tail' => '');
  366. }
  367. function artxFragmentContent($content = '')
  368. {
  369. global $artxFragments;
  370. $artxFragments[count($artxFragments) - 1]['content'] = $content;
  371. }
  372. function artxFragmentEnd($tail = '', $separator = '')
  373. {
  374. global $artxFragments;
  375. $fragment = array_pop($artxFragments);
  376. $fragment['tail'] = $tail;
  377. $content = trim($fragment['content']);
  378. if (count($artxFragments) == 0) {
  379. echo (trim($content) == '') ? '' : ($fragment['head'] . $content . $fragment['tail']);
  380. } else {
  381. $result = (trim($content) == '') ? '' : ($fragment['head'] . $content . $fragment['tail']);
  382. $fragment =& $artxFragments[count($artxFragments) - 1];
  383. $fragment['content'] .= (trim($fragment['content']) == '' ? '' : $separator) . $result;
  384. }
  385. }
  386. function artxFragment($head = '', $content = '', $tail = '', $separator = '')
  387. {
  388. global $artxFragments;
  389. if ($head != '' && $content == '' && $tail == '' && $separator == '') {
  390. $content = $head;
  391. $head = '';
  392. } elseif ($head != '' && $content != '' && $tail == '' && $separator == '') {
  393. $separator = $content;
  394. $content = $head;
  395. $head = '';
  396. }
  397. artxFragmentBegin($head);
  398. artxFragmentContent($content);
  399. artxFragmentEnd($tail, $separator);
  400. }
  401. }