1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
24:
25: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
26:
27: 28: 29: 30: 31: 32: 33: 34:
35: function mr_strNewTree(array $data) {
36: global $lang;
37:
38: ModRewriteDebugger::log($data, 'mr_strNewTree $data');
39:
40: if ((int) $data['newcategoryid'] > 0) {
41: $mrCatAlias = (trim($data['categoryalias']) !== '') ? trim($data['categoryalias']) : trim($data['categoryname']);
42:
43: ModRewrite::setCatWebsafeName($mrCatAlias, $data['newcategoryid'], $lang);
44: ModRewrite::setCatUrlPath($data['newcategoryid'], $lang);
45: }
46:
47: return $data;
48: }
49:
50: 51: 52: 53: 54: 55: 56: 57:
58: function mr_strNewCategory(array $data) {
59: global $lang;
60:
61: ModRewriteDebugger::log($data, 'mr_strNewCategory $data');
62:
63: if ((int) $data['newcategoryid'] > 0) {
64: $mrCatAlias = (trim($data['categoryalias']) !== '') ? trim($data['categoryalias']) : trim($data['categoryname']);
65:
66: ModRewrite::setCatWebsafeName($mrCatAlias, $data['newcategoryid'], $lang);
67: ModRewrite::setCatUrlPath($data['newcategoryid'], $lang);
68: }
69:
70: return $data;
71: }
72:
73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
83: function mr_strRenameCategory(array $data) {
84: ModRewriteDebugger::log($data, 'mr_strRenameCategory $data');
85:
86:
87:
88: $recursion = (is_int($data['recursion'])) ? $data['recursion'] : 1;
89: if ($recursion > 50) {
90: exit("#20100201-1503: sorry - maximum function nesting level of " . $recursion . " reached");
91: }
92:
93: $mrCatAlias = (trim($data['newcategoryalias']) !== '') ? trim($data['newcategoryalias']) : trim($data['newcategoryname']);
94: if ($mrCatAlias != '') {
95:
96: ModRewrite::setCatWebsafeName($mrCatAlias, $data['idcat'], $data['lang']);
97: ModRewrite::setCatUrlPath($data['idcat'], $data['lang']);
98: }
99:
100:
101:
102: $str = 'parentid=' . $data['idcat'];
103: $oCatColl = new cApiCategoryCollection($str);
104:
105: while ($oCat = $oCatColl->next()) {
106:
107: $str = 'idcat=' . $oCat->get('idcat') . ' AND idlang=' . (int) $data['lang'];
108: $oCatLanColl = new cApiCategoryLanguageCollection($str);
109: if ($oCatLan = $oCatLanColl->next()) {
110:
111: $childData = array(
112: 'idcat' => $oCat->get('idcat'),
113: 'lang' => (int) $data['lang'],
114: 'newcategoryname' => $oCatLan->get('name'),
115: 'newcategoryalias' => $oCatLan->get('urlname'),
116: 'recursion' => $recursion + 1
117: );
118:
119: $resData = mr_strRenameCategory($childData);
120: }
121: }
122:
123: return $data;
124: }
125:
126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136:
137: function mr_strMoveUpCategory($idcat) {
138: ModRewriteDebugger::log($idcat, 'mr_strMoveUpCategory $idcat');
139:
140:
141: $cat = new cApiCategory((int) $idcat);
142: if (!$cat->get('preid')) {
143: return;
144: }
145:
146:
147: $aIdLang = ModRewrite::getCatLanguages($idcat);
148:
149:
150: foreach ($aIdLang as $iIdLang) {
151:
152: $sCatname = ModRewrite::getCatName($idcat, $iIdLang);
153:
154: ModRewrite::setCatWebsafeName($sCatname, $idcat, $iIdLang);
155: }
156:
157: return $idcat;
158: }
159:
160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170:
171: function mr_strMovedownCategory($idcat) {
172: ModRewriteDebugger::log($idcat, 'mr_strMovedownCategory $idcat');
173:
174:
175: $cat = new cApiCategory((int) $idcat);
176: if (!$cat->get('id')) {
177: return;
178: }
179:
180:
181: $aIdLang = ModRewrite::getCatLanguages($idcat);
182:
183: foreach ($aIdLang as $iIdLang) {
184:
185: $sCatname = ModRewrite::getCatName($idcat, $iIdLang);
186:
187: ModRewrite::setCatWebsafeName($sCatname, $idcat, $iIdLang);
188: }
189:
190: return $idcat;
191: }
192:
193: 194: 195: 196: 197: 198: 199: 200:
201: function mr_strMoveSubtree(array $data) {
202: ModRewriteDebugger::log($data, 'mr_strMoveSubtree $data');
203:
204:
205: if ((int) $data['idcat'] <= 0) {
206: return;
207: }
208:
209:
210: $cat = new cApiCategory($data['idcat']);
211: if (!$cat->get('idcat')) {
212: return;
213: }
214:
215:
216: $aIdLang = ModRewrite::getCatLanguages($data['idcat']);
217:
218: foreach ($aIdLang as $iIdLang) {
219:
220: $sCatname = ModRewrite::getCatName($data['idcat'], $iIdLang);
221:
222: ModRewrite::setCatWebsafeName($sCatname, $data['idcat'], $iIdLang);
223: ModRewrite::setCatUrlPath($data['idcat'], $iIdLang);
224: }
225:
226:
227: $oCatColl = new cApiCategoryCollection('parentid=' . $data['idcat']);
228: while ($oCat = $oCatColl->next()) {
229: mr_strMoveSubtree(array('idcat' => $oCat->get('idcat')));
230: }
231:
232: return $data;
233: }
234:
235: 236: 237: 238: 239: 240: 241: 242:
243: function mr_strCopyCategory(array $data) {
244: ModRewriteDebugger::log($data, 'mr_strCopyCategory $data');
245:
246: $idcat = (int) $data['newcat']->get('idcat');
247: if ($idcat <= 0) {
248: return $data;
249: }
250:
251:
252: $aIdLang = ModRewrite::getCatLanguages($idcat);
253:
254: foreach ($aIdLang as $iIdLang) {
255:
256: $sCatname = ModRewrite::getCatName($idcat, $iIdLang);
257:
258: ModRewrite::setCatWebsafeName($sCatname, $idcat, $iIdLang);
259: ModRewrite::setCatUrlPath($idcat, $iIdLang);
260: }
261: }
262:
263: 264: 265: 266: 267: 268: 269: 270: 271:
272: function mr_strSyncCategory(array $data) {
273: ModRewriteDebugger::log($data, 'mr_strSyncCategory $data');
274: ModRewrite::setCatUrlPath($data['idcat'], $data['idlang']);
275: return $data;
276: }
277:
278: 279: 280: 281: 282: 283: 284: 285:
286: function mr_conSaveArticle(array $data) {
287: global $tmp_firstedit, $client;
288:
289: ModRewriteDebugger::log($data, 'mr_conSaveArticle $data');
290:
291: if ((int) $data['idart'] == 0) {
292: return $data;
293: }
294:
295: if (cString::getStringLength(trim($data['urlname'])) == 0) {
296: $data['urlname'] = $data['title'];
297: }
298:
299: if (1 == $tmp_firstedit) {
300:
301: $aLanguages = getLanguagesByClient($client);
302:
303: foreach ($aLanguages as $iLang) {
304: ModRewrite::setArtWebsafeName($data['urlname'], $data['idart'], $iLang, $data['idcat']);
305: }
306: } else {
307:
308: $aArticle = ModRewrite::getArtIdByArtlangId($data['idartlang']);
309:
310: if (isset($aArticle['idart']) && isset($aArticle['idlang'])) {
311: ModRewrite::setArtWebsafeName($data['urlname'], $aArticle['idart'], $aArticle['idlang'], $data['idcat']);
312: }
313: }
314:
315: return $data;
316: }
317:
318: 319: 320: 321: 322: 323: 324: 325:
326: function mr_conMoveArticles($data) {
327: ModRewriteDebugger::log($data, 'mr_conMoveArticles $data');
328:
329:
330: if (!is_array($data)) {
331: return $data;
332: } elseif (!isset($data['idartlang'])) {
333: return $data;
334: } elseif (!isset($data['idart'])) {
335: return $data;
336: }
337:
338: $arr_art = ModRewrite::getArtIds($data['idartlang']);
339: if (count($arr_art) == 2) {
340: ModRewrite::setArtWebsafeName($arr_art["urlname"], $data['idart'], $arr_art["idlang"]);
341: }
342:
343: return $data;
344: }
345:
346: 347: 348: 349: 350: 351: 352: 353:
354: function mr_conCopyArtLang($data) {
355: ModRewriteDebugger::log($data, 'mr_conCopyArtLang $data');
356:
357:
358: if (!is_array($data)) {
359: return $data;
360: } elseif (!isset($data['title'])) {
361: return $data;
362: } elseif (!isset($data['idart'])) {
363: return $data;
364: } elseif (!isset($data['idlang'])) {
365: return $data;
366: }
367:
368: ModRewrite::setArtWebsafeName($data['title'], $data['idart'], $data['idlang']);
369:
370: return $data;
371: }
372:
373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387:
388: function mr_conSyncArticle($data) {
389: ModRewriteDebugger::log($data, 'mr_conSyncArticle $data');
390:
391:
392: if (!is_array($data)) {
393: return $data;
394: } elseif (!isset($data['src_art_lang']) || !is_array($data['src_art_lang'])) {
395: return $data;
396: } elseif (!isset($data['dest_art_lang']) || !is_array($data['dest_art_lang'])) {
397: return $data;
398: } elseif (!isset($data['dest_art_lang']['idart'])) {
399: return $data;
400: } elseif (!isset($data['dest_art_lang']['idlang'])) {
401: return $data;
402: }
403:
404: if (!isset($data['src_art_lang']['urlname'])) {
405: $artLang = new cApiArticleLanguage($data['src_art_lang']['idartlang']);
406: $urlname = $artLang->get('urlname');
407: } else {
408: $urlname = $data['src_art_lang']['urlname'];
409: }
410:
411: if ($urlname) {
412: ModRewrite::setArtWebsafeName($urlname, $data['dest_art_lang']['idart'], $data['dest_art_lang']['idlang']);
413: }
414:
415: return $data;
416: }
417:
418: 419: 420: 421: 422: 423: 424: 425: 426: 427:
428: function mr_buildNewUrl($url) {
429: global $lang;
430:
431: ModRewriteDebugger::add($url, 'mr_buildNewUrl() in -> $url');
432:
433: $oUrl = cUri::getInstance();
434: $aUrl = $oUrl->parse($url);
435:
436:
437: if (!isset($aUrl['params']['lang'])) {
438: $aUrl['params']['lang'] = $lang;
439: }
440:
441:
442: $newUrl = $oUrl->build($aUrl['params']);
443:
444:
445: if (isset($aUrl['fragment'])) {
446: $newUrl .= '#' . $aUrl['fragment'];
447: }
448:
449: $arr = array(
450: 'in' => $url,
451: 'out' => $newUrl,
452: );
453: ModRewriteDebugger::add($arr, 'mr_buildNewUrl() in -> out');
454:
455: return $newUrl;
456: }
457:
458: 459: 460: 461: 462: 463: 464: 465: 466:
467: function mr_buildGeneratedCode($code) {
468: global $client, $cfgClient;
469:
470: ModRewriteDebugger::add($code, 'mr_buildGeneratedCode() in');
471:
472: $sseStartTime = getmicrotime();
473:
474:
475: if (ModRewrite::isEnabled()) {
476:
477:
478: $code = preg_replace_callback("/<a([^>]*)href\s*=\s*[\"|\'][\/]#(.?|.+?)[\"|\']([^>]*)>/i", function($match) {
479: return ModRewrite::rewriteHtmlAnchor($match);
480: }, $code);
481:
482:
483: $code = str_replace("'", "'", $code);
484:
485:
486:
487:
488:
489:
490:
491: $baseUri = cRegistry::getFrontendUrl();
492: $baseUri = cApiCecHook::executeAndReturn("Contenido.Frontend.BaseHrefGeneration", $baseUri);
493:
494:
495: $code = preg_replace_callback("/([\"|\'|=])upload\/(.?|.+?)([\"|\'|>])/i", function($match) use ($baseUri) {
496: return stripslashes($match[1] . $baseUri . 'upload/' . $match[2] . $match[3]);
497: }, $code);
498:
499:
500:
501: $aPattern = array(
502: '/([\"|\'|=])\/front_content\.php(.?|.+?)([\"|\'|>])/i',
503: '/([\"|\'|=])\.\/front_content\.php(.?|.+?)([\"|\'|>])/i'
504: );
505:
506: $aReplace = array(
507: '\1front_content.php\2\3',
508: '\1front_content.php\2\3'
509: );
510:
511:
512: $code = preg_replace($aPattern, $aReplace, $code);
513:
514:
515: $oMRUrlStack = ModRewriteUrlStack::getInstance();
516: $oMRUrlStack->add('front_content.php');
517:
518: $matches = NULL;
519: preg_match_all("/([\"|\'|=])front_content\.php(.?|.+?)([\"|\'|>])/i", $code, $matches, PREG_SET_ORDER);
520: foreach ($matches as $val) {
521: $oMRUrlStack->add('front_content.php' . $val[2]);
522: }
523:
524:
525: $code = str_replace('"front_content.php"', '"' . mr_buildNewUrl('front_content.php') . '"', $code);
526: $code = str_replace("'front_content.php'", "'" . mr_buildNewUrl('front_content.php') . "'", $code);
527: $code = preg_replace_callback("/([\"|\'|=])front_content\.php(.?|.+?)([\"|\'|>])/i", function($match) {
528: return $match[1] . mr_buildNewUrl('front_content.php' . $match[2]) . $match[3];
529: }, $code);
530:
531: ModRewriteDebugger::add($code, 'mr_buildGeneratedCode() out');
532:
533: } else {
534:
535: $code = preg_replace_callback("/<a([^>]*)href\s*=\s*[\"|\'][\/]#(.?|.+?)[\"|\']([^>]*)>/i", function($match) {
536: return ModRewrite::contenidoHtmlAnchor($match, $GLOBALS['is_XHTML']);
537: }, $code);
538: }
539:
540: $sseEndTime = getmicrotime();
541:
542: ModRewriteDebugger::add(($sseEndTime - $sseStartTime), 'mr_buildGeneratedCode() total spend time');
543:
544: if ($debug = mr_debugOutput(false)) {
545: $code = cString::iReplaceOnce("</body>", $debug . "\n</body>", $code);
546: }
547:
548: return $code;
549:
550: }
551:
552: 553: 554: 555: 556:
557: function mr_setClientLanguageId($client) {
558: global $lang, $load_lang, $cfg;
559:
560: if ((int) $lang > 0) {
561:
562: return;
563: } elseif ($load_lang) {
564:
565: $lang = $load_lang;
566: return;
567: }
568:
569:
570: $sql = "SELECT B.idlang FROM "
571: . $cfg['tab']['clients_lang'] . " AS A, "
572: . $cfg['tab']['lang'] . " AS B "
573: . "WHERE "
574: . "A.idclient='" . ((int) $client) . "' AND A.idlang=B.idlang"
575: . "LIMIT 0,1";
576:
577: if ($aData = mr_queryAndNextRecord($sql)) {
578: $lang = $aData['idlang'];
579: }
580: }
581:
582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592:
593: function mr_loadConfiguration($clientId, $forceReload = false) {
594: global $cfg;
595: static $aLoaded;
596:
597: $clientId = (int) $clientId;
598: if (!isset($aLoaded)) {
599: $aLoaded = array();
600: } elseif (isset($aLoaded[$clientId]) && $forceReload == false) {
601: return;
602: }
603:
604: $mrConfig = mr_getConfiguration($clientId);
605:
606: if (is_array($mrConfig)) {
607:
608: $cfg = array_merge($cfg, $mrConfig);
609: } else {
610:
611: $backendPath = cRegistry::getBackendPath();
612: include_once($backendPath . $cfg['path']['plugins'] . 'mod_rewrite/includes/config.mod_rewrite_default.php');
613: }
614:
615: $aLoaded[$clientId] = true;
616: }
617:
618: 619: 620: 621: 622: 623: 624: 625: 626:
627: function mr_getConfigurationFilePath($clientId) {
628: $clientConfig = cRegistry::getClientConfig((int) $clientId);
629: $fePath = $clientConfig['path']['frontend'];
630: return $fePath . 'data/config/' . CON_ENVIRONMENT . '/config.mod_rewrite.php';
631: }
632:
633: 634: 635: 636: 637: 638: 639: 640: 641:
642: function mr_getConfiguration($clientId) {
643: global $cfg;
644:
645: $clientId = (int) $clientId;
646:
647: $file = mr_getConfigurationFilePath($clientId);
648:
649: if (!is_file($file) || !is_readable($file)) {
650: $backendPath = cRegistry::getBackendPath();
651: $file = $backendPath . $cfg['path']['plugins'] . 'mod_rewrite/includes/config.mod_rewrite_' . $clientId . '.php';
652: }
653:
654: if (!is_file($file) || !is_readable($file)) {
655: return NULL;
656: }
657: if ($content = cFileHandler::read($file)) {
658: return unserialize($content);
659: } else {
660: return NULL;
661: }
662: }
663:
664: 665: 666: 667: 668: 669: 670: 671: 672: 673:
674: function mr_setConfiguration($clientId, array $config) {
675: global $cfg;
676:
677: $clientId = (int) $clientId;
678:
679: $file = mr_getConfigurationFilePath($clientId);
680: $result = cFileHandler::write($file, serialize($config));
681:
682: $backendPath = cRegistry::getBackendPath();
683: $file = $backendPath . $cfg['path']['plugins'] . 'mod_rewrite/includes/config.mod_rewrite_' . $clientId . '.php';
684: if (is_file($file) && is_writeable($file)) {
685: cFileHandler::remove($file, serialize($config));
686: }
687:
688: return ($result) ? true : false;
689: }
690:
691: 692: 693: 694: 695: 696: 697: 698:
699: function mr_runFrontendController() {
700: $iStartTime = getmicrotime();
701:
702: plugin_include('mod_rewrite', 'includes/config.plugin.php');
703:
704: if (ModRewrite::isEnabled() == true) {
705: plugin_include('mod_rewrite', 'includes/front_content_controller.php');
706:
707: $totalTime = sprintf('%.4f', (getmicrotime() - $iStartTime));
708: ModRewriteDebugger::add($totalTime, 'mr_runFrontendController() total time');
709: }
710:
711: return true;
712: }
713:
714: 715: 716: 717: 718: 719: 720:
721: function mr_removeMultipleChars($char, $string) {
722: while (cString::findFirstPos($string, $char . $char) !== false) {
723: $string = str_replace($char . $char, $char, $string);
724: }
725: return $string;
726: }
727:
728: 729: 730: 731: 732: 733:
734: function mr_i18n($key) {
735: global $lngAMR;
736: return (is_array($lngAMR) && isset($lngAMR[$key])) ? $lngAMR[$key] : 'n. a.';
737: }
738:
739:
740:
741:
742: 743: 744: 745: 746: 747: 748: 749: 750: 751: 752: 753: 754: 755: 756: 757: 758: 759: 760: 761: 762:
763: function mr_queryAndNextRecord($query) {
764: static $db;
765: if (!isset($db)) {
766: $db = cRegistry::getDb();
767: }
768: if (!$db->query($query)) {
769: return NULL;
770: }
771: return ($db->nextRecord()) ? $db->getRecord() : NULL;
772: }
773:
774: 775: 776: 777: 778: 779: 780: 781: 782: 783: 784: 785: 786: 787: 788: 789: 790: 791: 792: 793: 794: 795: 796: 797: 798: 799: 800: 801: 802: 803: 804:
805: function mr_arrayValue($array, $key, $default = NULL) {
806: if (!is_array($array)) {
807: return $default;
808: } elseif (!isset($array[$key])) {
809: return $default;
810: } else {
811: return $array[$key];
812: }
813: }
814:
815: 816: 817: 818: 819: 820: 821: 822: 823: 824: 825: 826: 827: 828: 829: 830: 831: 832: 833: 834: 835: 836: 837: 838:
839: function mr_requestCleanup(&$data, $options = NULL) {
840: if (!mr_arrayValue($options, 'filter')) {
841: $options['filter'] = array('trim', 'strip_tags', 'stripslashes');
842: }
843:
844: if (is_array($data)) {
845: foreach ($data as $p => $v) {
846: $data[$p] = mr_requestCleanup($v, $options);
847: }
848: } else {
849: foreach ($options['filter'] as $filter) {
850: if ($filter == 'trim') {
851: $data = trim($data);
852: } elseif ($filter == 'strip_tags') {
853: $data = strip_tags($data);
854: } elseif ($filter == 'stripslashes') {
855: $data = stripslashes($data);
856: } elseif (function_exists($filter)) {
857: $data = call_user_func($filter, $data);
858: }
859: }
860: }
861: return $data;
862: }
863:
864: 865: 866: 867: 868: 869: 870: 871: 872:
873: function mr_getRequest($key, $default = NULL) {
874: static $cache;
875: if (!isset($cache)) {
876: $cache = array();
877: }
878: if (isset($cache[$key])) {
879: return $cache[$key];
880: }
881: if (isset($_GET[$key])) {
882: $val = $_GET[$key];
883: } elseif (isset($_POST[$key])) {
884: $val = $_POST[$key];
885: } else {
886: $val = $default;
887: }
888: $cache[$key] = strip_tags(trim($val));
889: return $cache[$key];
890: }
891:
892: 893: 894: 895: 896: 897:
898: function ($header) {
899: header($header);
900: return;
901:
902: $header = str_replace('Location: ', '', $header);
903: echo '<html>
904: <head></head>
905: <body>
906: <p><a href="' . $header . '">' . $header . '</a></p>';
907: mr_debugOutput();
908: echo '</body></html>';
909: exit();
910: }
911:
912: 913: 914: 915: 916: 917:
918: function mr_debugOutput($print = true) {
919: global $DB_Contenido_QueryCache;
920: if (isset($DB_Contenido_QueryCache) && is_array($DB_Contenido_QueryCache) &&
921: count($DB_Contenido_QueryCache) > 0) {
922: ModRewriteDebugger::add($DB_Contenido_QueryCache, 'sql statements');
923:
924:
925: $timeTotal = 0;
926: foreach ($DB_Contenido_QueryCache as $pos => $item) {
927: $timeTotal += $item['time'];
928: }
929: ModRewriteDebugger::add($timeTotal, 'sql total time');
930: }
931:
932: $sOutput = ModRewriteDebugger::getAll();
933: if ($print == true) {
934: echo $sOutput;
935: } else {
936: return $sOutput;
937: }
938: }
939: