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