PageRenderTime 56ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/bitrix/modules/seo/classes/general/seo_utils.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 151 lines | 128 code | 23 blank | 0 comment | 30 complexity | 027a81cd7420c212caaaa2856c3cb563 MD5 | raw file
  1. <?
  2. class CSeoUtils
  3. {
  4. public static function CleanURL($URL)
  5. {
  6. if (false !== ($pos = strpos($URL, '?')))
  7. {
  8. $query = substr($URL, $pos+1);
  9. $URL = substr($URL, 0, $pos);
  10. $arQuery = explode('&', $query);
  11. $arExcludedParams = array('clear_cache', 'clear_cache_session', 'back_url_admin', 'back_url', 'backurl', 'login', 'logout', 'compress');
  12. foreach ($arQuery as $key => $param)
  13. {
  14. if (false !== ($pos = strpos($param, '=')))
  15. {
  16. $param_name = ToLower(substr($param, 0, $pos));
  17. if (
  18. substr($param_name, 0, 7) == 'bitrix_'
  19. || substr($param_name, 0, 5) == 'show_'
  20. || in_array($param_name, $arExcludedParams)
  21. )
  22. {
  23. unset($arQuery[$key]);
  24. }
  25. }
  26. }
  27. if (count($arQuery) > 0)
  28. {
  29. $URL .= '?'.implode('&', $arQuery);
  30. }
  31. }
  32. return $URL;
  33. }
  34. public static function getDomainsList()
  35. {
  36. static $arDomains = null;
  37. if($arDomains === null)
  38. {
  39. $arDomains = array();
  40. $dbSites = Bitrix\Main\SiteDomainTable::getList(
  41. array(
  42. 'select'=>array(
  43. 'DOMAIN', 'LID',
  44. 'SITE_NAME'=>'SITE.NAME', 'SITE_ACTIVE' => 'SITE.ACTIVE',
  45. 'SITE_DIR' => 'SITE.DIR', 'SITE_DOC_ROOT' => 'SITE.DOC_ROOT'
  46. )
  47. )
  48. );
  49. $defaultDomain = CBXPunycode::ToASCII(Bitrix\Main\Config\Option::getRealValue('main', 'server_name'), $e = null);
  50. $bCurrentHostFound = false;
  51. while($arSite = $dbSites->fetch())
  52. {
  53. $arDomains[] = $arSite;
  54. if($arSite['DOMAIN'] == $defaultDomain)
  55. $bCurrentHostFound = true;
  56. }
  57. if(!$bCurrentHostFound)
  58. {
  59. $dbDefSite = Bitrix\Main\SiteTable::getList(array(
  60. 'filter' => array('DEF' => 'Y'),
  61. 'select' => array('LID', 'NAME', 'ACTIVE'),
  62. ));
  63. $arDefSite = $dbDefSite->fetch();
  64. if($arDefSite)
  65. {
  66. array_unshift($arDomains, array(
  67. 'DOMAIN' => $defaultDomain,
  68. 'LID' => $arDefSite['LID'],
  69. 'SITE_NAME' => $arDefSite['NAME'],
  70. 'SITE_ACTIVE' => $arDefSite['ACTIVE'],
  71. 'SITE_DIR' => $arDefSite['DIR'],
  72. 'SITE_DOC_ROOT' => $arDefSite['DOC_ROOT'],
  73. ));
  74. }
  75. }
  76. }
  77. return $arDomains;
  78. }
  79. public static function getDirStructure($bLogical, $site, $path)
  80. {
  81. global $USER;
  82. $arDirContent = array();
  83. if($USER->CanDoFileOperation('fm_view_listing', array($site, $path)))
  84. {
  85. \Bitrix\Main\Loader::includeModule('fileman');
  86. $arDirs = array();
  87. $arFiles = array();
  88. \CFileMan::GetDirList(array($site, $path), $arDirs, $arFiles, array(), array("NAME" => "asc"), "DF", $bLogical, true);
  89. $arDirContent_t = array_merge($arDirs, $arFiles);
  90. for($i=0,$l = count($arDirContent_t);$i<$l;$i++)
  91. {
  92. $file = $arDirContent_t[$i];
  93. $arPath = array($site, $file['ABS_PATH']);
  94. if(
  95. ($file["TYPE"]=="F" && !$USER->CanDoFileOperation('fm_view_file',$arPath))
  96. || ($file["TYPE"]=="D" && !$USER->CanDoFileOperation('fm_view_listing',$arPath))
  97. || ($file["TYPE"]=="F" && $file["NAME"]==".section.php")
  98. )
  99. {
  100. continue;
  101. }
  102. $f = $file['TYPE'] == 'F'
  103. ? new \Bitrix\Main\IO\File($file['PATH'], $site)
  104. : new \Bitrix\Main\IO\Directory($file['PATH'], $site);
  105. $p = $f->getName();
  106. if($f->isSystem()
  107. || $file['TYPE'] == 'F' && in_array($p, array("urlrewrite.php"))
  108. || $file['TYPE'] == 'D' && preg_match("/\/(bitrix|".\COption::getOptionString("main", "upload_dir", "upload").")\//", "/".$p."/")
  109. )
  110. {
  111. continue;
  112. }
  113. $arFileData = array(
  114. 'NAME' => $bLogical ? $file['LOGIC_NAME'] : $p,
  115. 'FILE' => $p,
  116. 'TYPE' => $file['TYPE'],
  117. 'DATA' => $file,
  118. );
  119. if(strlen($arFileData['NAME']) <= 0)
  120. $arFileData['NAME'] = GetMessage('SEO_DIR_LOGICAL_NO_NAME');
  121. $arDirContent[] = $arFileData;
  122. }
  123. unset($arDirContent_t);
  124. }
  125. return $arDirContent;
  126. }
  127. }
  128. ?>