1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
16:
17: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
18:
19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
29: class cModuleHandler {
30:
31: 32: 33: 34: 35:
36: private $_modulePath;
37:
38: 39: 40: 41: 42:
43: private $_path;
44:
45: 46: 47: 48: 49:
50: protected $_idmod = NULL;
51:
52: 53: 54: 55: 56:
57: private $_moduleName = NULL;
58:
59: 60: 61: 62: 63:
64: protected $_description;
65:
66: 67: 68: 69: 70:
71: protected $_type;
72:
73: 74: 75: 76: 77:
78: protected $_moduleAlias;
79:
80: 81: 82: 83: 84:
85: protected $_directories = array(
86: 'css' => 'css/',
87: 'js' => 'js/',
88: 'template' => 'template/',
89: 'image' => 'image/',
90: 'lang' => 'lang/',
91: 'php' => 'php/'
92: );
93:
94: 95: 96: 97: 98:
99: protected $_cfg = NULL;
100:
101: 102: 103: 104: 105:
106: protected $_cfgClient = NULL;
107:
108: 109: 110: 111: 112:
113: protected $_client = '0';
114:
115: 116: 117: 118: 119:
120: protected $_input = '';
121:
122: 123: 124: 125: 126:
127: protected $_output = '';
128:
129: 130: 131: 132: 133:
134: protected $_encoding = '';
135:
136: 137: 138: 139: 140: 141:
142: protected $_fileEncoding = '';
143:
144: 145: 146: 147: 148:
149: protected $_idlang = -1;
150:
151: 152: 153: 154:
155: private $_db = NULL;
156:
157: 158: 159: 160:
161: protected static $_encodingStore = array();
162:
163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174:
175: public function __construct($idmod = NULL) {
176: global $cfg, $cfgClient, $lang, $client;
177: $this->_cfg = $cfg;
178: $this->_client = $client;
179: $this->_cfgClient = $cfgClient;
180: $this->_idlang = $lang;
181: $this->_encoding = self::getEncoding();
182: $this->_fileEncoding = getEffectiveSetting('encoding', 'file_encoding', 'UTF-8');
183:
184: $this->_db = cRegistry::getDb();
185:
186: $this->_idmod = $idmod;
187:
188: $this->_initByModule($idmod);
189:
190: if ($this->_makeModuleDirectory() == false) {
191: throw new cException('Can not create main module directory.');
192: }
193: }
194:
195: public static function getEncoding($overrideLanguageId = 0) {
196: $lang = cRegistry::getLanguageId();
197:
198: if ((int) $overrideLanguageId != 0) {
199: $lang = $overrideLanguageId;
200: }
201:
202: if ((int) $lang == 0) {
203: $clientId = cRegistry::getClientId();
204:
205: $clientsLangColl = new cApiClientLanguageCollection();
206: $clientLanguages = $clientsLangColl->getLanguagesByClient($clientId);
207: sort($clientLanguages);
208:
209: if (isset($clientLanguages[0]) && (int) $clientLanguages[0] != 0) {
210: $lang = $clientLanguages[0];
211: }
212: }
213:
214: if (!isset(self::$_encodingStore[$lang])) {
215: $cApiLanguage = new cApiLanguage($lang);
216: self::$_encodingStore[$lang] = $cApiLanguage->get('encoding');
217: }
218:
219: return self::$_encodingStore[$lang];
220: }
221:
222: 223: 224: 225: 226: 227:
228: public function modulePathExistsInDirectory($name) {
229: return is_dir($this->_cfgClient[$this->_client]['module']['path'] . $name . '/');
230: }
231:
232: 233: 234: 235: 236: 237: 238: 239: 240:
241: public function saveContentToFile($templateName, $fileType, $fileContent, $saveDirectory = 'cache') {
242: $sSaveDirectory = $this->_cfgClient[$this->_client]['path']['frontend'] . $saveDirectory . '/';
243: if (!is_dir($sSaveDirectory)) {
244: return false;
245: }
246:
247: $templateName = str_replace(' ', '_', $templateName);
248: $templateName = strtolower($templateName);
249: $fileOperation = cFileHandler::write($sSaveDirectory . $templateName . '.' . $fileType, $fileContent);
250: if ($fileOperation === false) {
251: return false;
252: }
253: $url = $this->_cfgClient[$this->_client]['path']['htmlpath'] . $saveDirectory . '/' . $templateName . '.' . $fileType;
254:
255:
256: $url = str_replace('http://', '//', $url);
257:
258: return $url;
259: }
260:
261: 262: 263: 264: 265: 266:
267: public static function getCleanName($name, $defaultChar = '_') {
268:
269: $name = cApiStrCleanURLCharacters($name);
270:
271: $firstChar = substr($name, 0, 1);
272: if (!preg_match('/^[a-zA-Z0-9]|_|-$/', $firstChar)) {
273:
274: $name = $defaultChar . substr($name, 1);
275: }
276:
277: return $name;
278: }
279:
280: 281: 282: 283: 284: 285:
286: public function initWithDatabaseRow($db) {
287: if (is_object($db)) {
288: $this->_initByModule($db->f('idmod'));
289: }
290: }
291:
292: 293: 294: 295: 296:
297: protected function _initByModule($idmod = NULL) {
298: if ((int) $idmod == 0) {
299: return;
300: }
301:
302: $cApiModule = new cApiModule($idmod);
303:
304: if ($cApiModule->virgin == false) {
305: $this->_idmod = $idmod;
306: $this->_client = $cApiModule->get('idclient');
307: $this->_description = $cApiModule->get('description');
308: $this->_type = $cApiModule->get('type');
309: $this->_input = '';
310: $this->_output = '';
311:
312: $this->_moduleAlias = $cApiModule->get('alias');
313: $this->_moduleName = $cApiModule->get('name');
314: $this->_path = $this->_cfgClient[$this->_client]['module']['path'];
315: $this->_modulePath = $this->_path . $this->_moduleAlias . '/';
316: }
317: }
318:
319: 320: 321: 322: 323:
324: public function getModulePath() {
325: return $this->_modulePath;
326: }
327:
328: 329: 330: 331: 332: 333: 334: 335:
336: public function getTemplatePath($file = '') {
337: return $this->_modulePath . $this->_directories['template'] . $file;
338: }
339:
340: 341: 342: 343: 344:
345: public function getCssPath() {
346: return $this->_modulePath . $this->_directories['css'];
347: }
348:
349: 350: 351: 352: 353:
354: public function getPhpPath() {
355: return $this->_modulePath . $this->_directories['php'];
356: }
357:
358: 359: 360: 361: 362:
363: public function getJsPath() {
364: return $this->_modulePath . $this->_directories['js'];
365: }
366:
367: 368: 369: 370: 371:
372: public function getCssFileName() {
373: return $this->_moduleAlias . '.css';
374: }
375:
376: 377: 378: 379: 380: 381:
382: protected function getRandomCharacters($count) {
383: $micro1 = microtime();
384: $rand1 = rand(0, time());
385: $rand2 = rand(0, time());
386: return substr(md5($micro1 . $rand1 . $rand2), 0, $count);
387: }
388:
389: 390: 391: 392: 393: 394:
395: public function existFile($type, $fileName) {
396: return cFileHandler::exists($this->_modulePath . $this->_directories[$type] . $fileName);
397: }
398:
399: 400: 401: 402: 403: 404:
405: public function deleteFile($type, $fileName) {
406: if ($this->existFile($type, $fileName)) {
407: return unlink($this->_modulePath . $this->_directories[$type] . $fileName);
408: } else {
409: return false;
410: }
411: }
412:
413: 414: 415: 416: 417: 418: 419: 420:
421: public function createModuleFile($type, $fileName = NULL, $content = '') {
422:
423: if (!$this->createModuleDirectory($type)) {
424: return false;
425: }
426:
427:
428: if ($fileName == NULL || $fileName == '') {
429: $fileName = $this->_moduleAlias;
430:
431: if ($type == 'template') {
432: $fileName = $fileName . '.html';
433: } else {
434: $fileName = $fileName . '.' . $type;
435: }
436: }
437:
438:
439: if ($type == 'css' || $type == 'js' || $type == 'template') {
440: if (!$this->existFile($type, $fileName)) {
441: $content = iconv($this->_encoding, $this->_fileEncoding, $content);
442: if (!$this->isWritable($this->_modulePath . $this->_directories[$type] . $fileName, $this->_modulePath . $this->_directories[$type])) {
443: return false;
444: }
445:
446: if (cFileHandler::write($this->_modulePath . $this->_directories[$type] . $fileName, $content) === false) {
447: $notification = new cGuiNotification();
448: $notification->displayNotification('error', i18n("Can't make file: ") . $fileName);
449: return false;
450: }
451: } else {
452: $content = iconv($this->_encoding, $this->_fileEncoding, $content);
453: if (!$this->isWritable($this->_modulePath . $this->_directories[$type] . $fileName, $this->_modulePath . $this->_directories[$type])) {error_log("no write");
454: return false;
455: }
456: if (cFileHandler::write($this->_modulePath . $this->_directories[$type] . $fileName, $content) === false) {
457: $notification = new cGuiNotification();
458: $notification->displayNotification('error', i18n("Can't make file: ") . $fileName);
459: return false;
460: }
461: }
462: } else {
463: return false;
464: }
465:
466: return true;
467: }
468:
469: 470: 471: 472: 473: 474: 475: 476:
477: public function renameModuleFile($type, $oldFileName, $newFileName) {
478: if ($this->existFile($type, $newFileName)) {
479: return false;
480: }
481:
482: if (!$this->existFile($type, $oldFileName)) {
483: return false;
484: }
485:
486: return rename($this->_modulePath . $this->_directories[$type] . $oldFileName, $this->_modulePath . $this->_directories[$type] . $newFileName);
487: }
488:
489: 490: 491: 492: 493:
494: public function getJsFileName() {
495: return $this->_moduleAlias . '.js';
496: }
497:
498: 499: 500: 501: 502: 503:
504: public function getFilesContent($directory, $fileTyp, $fileName = NULL) {
505: if ($fileName == NULL) {
506: $fileName = $this->_moduleAlias . '.' . $fileTyp;
507: }
508:
509: if ($this->existFile($directory, $fileName)) {
510: $content = cFileHandler::read($this->_modulePath . $this->_directories[$directory] . $fileName);
511: $content = iconv($this->_fileEncoding, $this->_encoding . '//IGNORE', $content);
512: return $content;
513: }
514:
515: return false;
516: }
517:
518: 519: 520: 521: 522:
523: protected function _makeModuleDirectory() {
524:
525: if ((int) $this->_client == 0) {
526: return true;
527: }
528:
529: $sMainModuleDirectory = $this->_cfgClient[$this->_client]['module']['path'];
530:
531:
532: if (!is_dir($sMainModuleDirectory) && $sMainModuleDirectory != NULL) {
533: if (mkdir($sMainModuleDirectory, 0777, true) == false) {
534: return false;
535: } else {
536: cDirHandler::setDefaultDirPerms($sMainModuleDirectory);
537: }
538: }
539:
540: return true;
541: }
542:
543: 544: 545: 546: 547: 548:
549: public function getAllFilesFromDirectory($moduleDirectory) {
550: $dir = $this->_modulePath . $this->_directories[$moduleDirectory];
551: return cDirHandler::read($dir);
552: }
553:
554: 555: 556: 557: 558:
559: public function changeModuleName($name) {
560: $this->_moduleAlias = $name;
561: $this->_modulePath = $this->_path . $this->_moduleAlias . '/';
562: }
563:
564: 565: 566: 567: 568: 569:
570: public function eraseModule() {
571:
572: if (cFileHandler::exists($this->_modulePath . 'info.xml')) {
573: return cDirHandler::recursiveRmdir($this->_modulePath);
574: } else {
575: return false;
576: }
577: }
578:
579: 580: 581: 582: 583:
584: public function readInput($issource = false) {
585: if (cFileHandler::exists($this->_modulePath . $this->_directories['php'] . $this->_moduleAlias . '_input.php') == false) {
586: return false;
587: }
588:
589: $content = cFileHandler::read($this->_modulePath . $this->_directories['php'] . $this->_moduleAlias . '_input.php');
590:
591: if ($issource == true) {
592: $content = conHtmlentities($content);
593: }
594:
595: return iconv($this->_fileEncoding, $this->_encoding . '//IGNORE', $content);
596: }
597:
598: 599: 600: 601: 602:
603: public function readOutput($issource = false) {
604: if (cFileHandler::exists($this->_modulePath . $this->_directories['php'] . $this->_moduleAlias . '_output.php') == false) {
605: return false;
606: }
607:
608: $content = cFileHandler::read($this->_modulePath . $this->_directories['php'] . $this->_moduleAlias . '_output.php');
609:
610: if ($issource == true) {
611: $content = conHtmlentities($content);
612: }
613:
614: return iconv($this->_fileEncoding, $this->_encoding . '//IGNORE', $content);
615: }
616:
617: 618: 619: 620: 621:
622: protected function createModuleDirectory($type) {
623: if (array_key_exists($type, $this->_directories)) {
624: if (!is_dir($this->_modulePath . $this->_directories[$type])) {
625: if (cDirHandler::create($this->_modulePath . $this->_directories[$type]) == false) {
626: return false;
627: } else
628: cDirHandler::setDefaultDirPerms($this->_modulePath . $this->_directories[$type]);
629: } else {
630: return true;
631: }
632: }
633:
634: return true;
635: }
636:
637: 638: 639: 640: 641: 642: 643:
644: public function isWritable($fileName, $directory) {
645: if (cFileHandler::exists($fileName)) {
646: if (!is_writable($fileName)) {
647: return false;
648: }
649: } else {
650: if (!is_writable($directory)) {
651: return false;
652: }
653: }
654: return true;
655: }
656:
657: 658: 659: 660: 661: 662:
663: public function moduleWriteable($type) {
664:
665: if (true === cFileHandler::exists($this->_modulePath . $this->_directories[$type])) {
666: return cFileHandler::writeable($this->_modulePath . $this->_directories[$type]);
667: }
668:
669:
670: if (true === cFileHandler::exists($this->_modulePath)) {
671: return cFileHandler::writeable($this->_modulePath);
672: }
673:
674: return false;
675: }
676:
677: 678: 679: 680: 681: 682: 683:
684: public function saveOutput($output = NULL) {
685: $fileName = $this->_modulePath . $this->_directories['php'] . $this->_moduleAlias . '_output.php';
686:
687: if (!$this->createModuleDirectory('php') || !$this->isWritable($fileName, $this->_modulePath . $this->_directories['php'])) {
688: return false;
689: }
690:
691: if ($output == NULL) {
692: $output = $this->_output;
693: }
694:
695: $output = iconv($this->_encoding, $this->_fileEncoding, $output);
696:
697: $fileOperation = cFileHandler::write($fileName, $output);
698:
699: if ($fileOperation === false) {
700: return false;
701: } else {
702: cFileHandler::setDefaultFilePerms($fileName);
703: return true;
704: }
705: }
706:
707: 708: 709: 710: 711: 712: 713:
714: public function saveInput($input = NULL) {
715: $fileName = $this->_modulePath . $this->_directories['php'] . $this->_moduleAlias . '_input.php';
716:
717: if (!$this->createModuleDirectory('php') || !$this->isWritable($fileName, $this->_modulePath . $this->_directories['php'])) {
718: return false;
719: }
720:
721: if ($input == NULL) {
722: $input = $this->_input;
723: }
724:
725: $input = iconv($this->_encoding, $this->_fileEncoding, $input);
726:
727: $fileOperation = cFileHandler::write($fileName, $input);
728:
729: if ($fileOperation === false) {
730: return false;
731: } else {
732: cFileHandler::setDefaultFilePerms($fileName);
733: return true;
734: }
735: }
736:
737: 738: 739: 740: 741: 742: 743: 744: 745:
746: public function saveInfoXML($moduleName = NULL, $description = NULL, $type = NULL, $alias = NULL) {
747: if ($moduleName == NULL) {
748: $moduleName = $this->_moduleName;
749: }
750:
751: if ($description == NULL) {
752: $description = $this->_description;
753: }
754:
755: if ($type == NULL) {
756: $type = $this->_type;
757: }
758:
759: if ($alias == NULL) {
760: $alias = $this->_moduleAlias;
761: }
762:
763: $oWriter = new cXmlWriter();
764: $oRootElement = $oWriter->addElement('module', '', NULL);
765:
766: $oWriter->addElement('name', conHtmlSpecialChars($moduleName), $oRootElement);
767: $oWriter->addElement('description', conHtmlSpecialChars($description), $oRootElement);
768: $oWriter->addElement('type', conHtmlSpecialChars($type), $oRootElement);
769: $oWriter->addElement('alias', conHtmlSpecialChars($alias), $oRootElement);
770:
771: return $oWriter->saveToFile($this->_modulePath, 'info.xml');
772: }
773:
774: 775: 776: 777: 778: 779: 780: 781: 782: 783:
784: public function createModule($input = '', $output = '') {
785: if ($input != '') {
786: $this->_input = $input;
787: }
788:
789: if ($output != '') {
790: $this->_output = $output;
791: }
792:
793: if ($this->modulePathExists()) {
794: return true;
795: }
796:
797: if (mkdir($this->_modulePath) == false) {
798: return false;
799: } else {
800: cDirHandler::setDefaultDirPerms($this->_modulePath);
801: }
802:
803:
804: foreach ($this->_directories as $directory) {
805: if (!is_dir($this->_modulePath . $directory)) {
806: if (mkdir($this->_modulePath . $directory) == false) {
807: return false;
808: } else {
809: cDirHandler::setDefaultDirPerms($this->_modulePath . $directory);
810: }
811: }
812: }
813:
814:
815: if ($this->saveInfoXML() == false) {
816: return false;
817: }
818:
819:
820:
821: $retInput = $this->saveInput();
822: $retOutput = $this->saveOutput();
823:
824: if ($retInput == false || $retOutput == false) {
825: return false;
826: }
827:
828: return true;
829: }
830:
831: 832: 833: 834: 835: 836: 837: 838:
839: public function renameModul($old, $new) {
840:
841: if (rename($this->_path . $old, $this->_path . $new) == false) {
842: return false;
843: } else {
844: $retInput = true;
845: $retOutput = true;
846:
847:
848: if (cFileHandler::exists($this->_path . $new . '/' . $this->_directories['php'] . $old . '_input.php'))
849: $retInput = rename($this->_path . $new . '/' . $this->_directories['php'] . $old . '_input.php', $this->_path . $new . '/' . $this->_directories['php'] . $new . '_input.php');
850:
851:
852: if (cFileHandler::exists($this->_path . $new . '/' . $this->_directories['php'] . $old . '_output.php'))
853: $retOutput = rename($this->_path . $new . '/' . $this->_directories['php'] . $old . '_output.php', $this->_path . $new . '/' . $this->_directories['php'] . $new . '_output.php');
854:
855:
856: if (cFileHandler::exists($this->_path . $new . '/' . $this->_directories['css'] . $old . '.css'))
857: rename($this->_path . $new . '/' . $this->_directories['css'] . $old . '.css', $this->_path . $new . '/' . $this->_directories['css'] . $new . '.css');
858:
859:
860: if (cFileHandler::exists($this->_path . $new . '/' . $this->_directories['js'] . $old . '.js'))
861: rename($this->_path . $new . '/' . $this->_directories['js'] . $old . '.js', $this->_path . $new . '/' . $this->_directories['js'] . $new . '.js');
862:
863:
864: if (cFileHandler::exists($this->_path . $new . '/' . $this->_directories['template'] . $old . '.html'))
865: rename($this->_path . $new . '/' . $this->_directories['template'] . $old . '.html', $this->_path . $new . '/' . $this->_directories['template'] . $new . '.html');
866:
867: if ($retInput == true && $retOutput == true) {
868: return true;
869: } else {
870: return false;
871: }
872: }
873: }
874:
875: 876: 877: 878: 879:
880: public function modulePathExists() {
881: return is_dir($this->_modulePath);
882: }
883:
884: 885: 886: 887: 888:
889: public function testInput() {
890:
891: return $this->_testCode('input');
892:
893: }
894:
895: 896: 897: 898: 899:
900: public function testOutput() {
901:
902: return $this->_testCode('output');
903:
904: }
905:
906: 907: 908: 909: 910: 911: 912:
913: protected function _testCode($inputType) {
914:
915: $result = array(
916: 'state' => false,
917: 'errorMessage' => 'Module path not exist'
918: );
919:
920: if (!$this->modulePathExists()) return $result;
921:
922: $module = new cApiModule($this->_idmod);
923: $isError = 'none';
924:
925:
926: switch ($module->get("error")) {
927: case 'none';
928: $toCheck = $inputType;
929: break;
930: case 'input';
931: if ($inputType == 'output') $toCheck = 'both';
932: break;
933: case 'output';
934: if ($inputType == 'input') $toCheck = 'both';
935: break;
936: case 'both';
937:
938: break;
939: }
940: if ($toCheck !== $module->get("error")) {
941: $module->set("error", $toCheck);
942:
943:
944:
945: $module->store(true);
946: }
947:
948:
949: switch($inputType) {
950: case 'input':
951:
952: $code = $this->readInput();
953: $result = $this->_verifyCode($code, $this->_idmod . "i");
954: if ($result['state'] !== true) $isError = 'input';
955:
956: break;
957: case 'output':
958:
959: $code = $this->readOutput();
960: $result = $this->_verifyCode($code, $this->_idmod . "o", true);
961: if ($result['state'] !== true) $isError = 'output';
962:
963: break;
964: }
965:
966:
967: switch ($module->get("error")) {
968: case 'none';
969:
970: break;
971: case 'input';
972: if ($isError == 'none' && $inputType == 'output') $isError = 'input';
973: if ($isError == 'output') $isError = 'both';
974: break;
975: case 'output';
976: if ($isError == 'none' && $inputType == 'input') $isError = 'output';
977: if ($isError == 'input') $isError = 'both';
978: break;
979: case 'both';
980: if ($isError == 'none' && $inputType == 'input') $isError = 'output';
981: if ($isError == 'none' && $inputType == 'output') $isError = 'input';
982: break;
983: }
984:
985:
986:
987: if ($isError !== $module->get("error")) {
988: $module->set("error", $isError);
989:
990:
991:
992: $module->store(true);
993: }
994:
995: return $result;
996:
997: }
998:
999: 1000: 1001: 1002: 1003: 1004: 1005: 1006: 1007:
1008: protected function _verifyCode($code, $id, $output = false) {
1009: $isError = false;
1010: $result = array(
1011: 'state' => false,
1012: 'errorMessage' => NULL
1013: );
1014:
1015:
1016: $sql = 'SELECT type FROM ' . $this->_cfg['tab']['type'];
1017: $this->_db->query($sql);
1018: while ($this->_db->nextRecord()) {
1019: $code = str_replace($this->_db->f('type') . '[', '$' . $this->_db->f('type') . '[', $code);
1020: }
1021:
1022: $code = preg_replace(',\[(\d+)?CMS_VALUE\[(\d+)\](\d+)?\],i', '[\1\2\3]', $code);
1023: $code = str_replace('CMS_VALUE', '$CMS_VALUE', $code);
1024: $code = str_replace('CMS_VAR', '$CMS_VAR', $code);
1025:
1026:
1027:
1028: if ($output == true) {
1029: $code = "?>\n" . $code . "\n<?php";
1030: }
1031:
1032:
1033: $code = 'function foo' . $id . ' () {' . $code;
1034: $code .= "\n}\n";
1035:
1036:
1037:
1038: $sErs = ini_get('error_prepend_string');
1039: $sEas = ini_get('error_append_string');
1040: @ini_set('error_prepend_string', '<phperror>');
1041: @ini_set('error_append_string', '</phperror>');
1042:
1043:
1044: ob_start();
1045: $display_errors = ini_get('display_errors');
1046: @ini_set('display_errors', true);
1047: $output = eval($code);
1048: @ini_set('display_errors', $display_errors);
1049:
1050:
1051: $output = ob_get_contents();
1052: ob_end_clean();
1053:
1054:
1055: 1056: 1057: 1058: 1059:
1060:
1061:
1062: @ini_set('error_prepend_string', $sErs);
1063: @ini_set('error_append_string', $sEas);
1064:
1065:
1066: if ($isError === false) {
1067: $isError = strpos($output, '<phperror>');
1068: }
1069:
1070:
1071:
1072: if ($isError !== false) {
1073: if (isset($modErrorMessage) === false) {
1074: $pattern = '/(<phperror>|<\/phperror>|<b>|<\/b>|<br>|<br \/>)/im';
1075: $modErrorMessage = trim(preg_replace($pattern, '', $output));
1076: $errorPart1 = substr($modErrorMessage, 0, strpos($modErrorMessage, ' in '));
1077: $errorPart2 = substr($modErrorMessage, strpos($modErrorMessage, ' on line '));
1078: $modErrorMessage = $errorPart1 . $errorPart2;
1079: }
1080: $result['errorMessage'] = sprintf(i18n("Error in module. Error location: %s"), $modErrorMessage);
1081:
1082: }
1083:
1084:
1085: $bHasShortTags = false;
1086: if (preg_match('/<\?\s+/', $code)) {
1087: $bHasShortTags = true;
1088: $result['errorMessage'] = i18n('Please do not use short open tags. (Use <?php instead of <?).');
1089: }
1090:
1091:
1092: if ($bHasShortTags || $isError !== false) {
1093: $result['state'] = false;
1094: } else {
1095: $result['state'] = true;
1096: }
1097:
1098: return $result;
1099:
1100: }
1101:
1102: 1103: 1104: 1105: 1106: 1107:
1108: protected static function _getModulePath() {
1109: return $this->_modulePath;
1110: }
1111:
1112: }