1. PHP / Говнокод #441

    +11.6

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    function SetFileAccessPermission($path, $arPermissions, $bOverWrite=true)
    	{
    		CMain::InitPathVars($site, $path);
    		$DOC_ROOT = CSite::GetSiteDocRoot($site);
    
    		if(strlen($path) <= 0)
    			$path="/";
    		if(($p = bxstrrpos($path, "/"))!==false)
    		{
    			$path_file = substr($path, $p+1);
    			$path_dir = substr($path, 0, $p);
    		}
    		else
    			return false;
    
    		if($path_file=="" && $path_dir=="")
    			$path_file = "/";
    
    		$PERM = Array();
    		if(file_exists($DOC_ROOT.$path_dir."/.access.php"))
    			@include($DOC_ROOT.$path_dir."/.access.php");
    		
    		$FILE_PERM = $PERM[$path_file];
    		if(!is_array($FILE_PERM))
    			$FILE_PERM=Array();
    
    		if(!$bOverWrite && count($FILE_PERM)>0)
    			return true;
    
    		$bDiff = false;
    
    		$str="<?\n";
    		foreach($arPermissions as $group=>$perm)
    		{
    			if(strlen($perm) > 0)
    				$str.="\$PERM[\"".$path_file."\"][\"".$group."\"]=\"".str_replace("\"", "\\\"", $perm)."\";\n";
    			if(!$bDiff && $FILE_PERM[$group]!=$perm)
    				$bDiff=true;
    		}
    
    		foreach($PERM as $file=>$arPerm)
    		{
    			if(strval($file) !==$path_file)
    				foreach($arPerm as $group=>$perm)
    					$str.="\$PERM[\"".$file."\"][\"".$group."\"]=\"".str_replace("\"", "\\\"", $perm)."\";\n";
    		}
    
    		if(!$bDiff)
    		{
    			foreach($FILE_PERM as $group=>$perm)
    				if($arPermissions[$group]!=$perm)
    				{
    					$bDiff==true;
    					break;
    				}
    		}
    
    		$str.="?".">";
    		
    		$this->SaveFileContent($DOC_ROOT.$path_dir."/.access.php", $str);
    		$GLOBALS["CACHE_MANAGER"]->CleanDir("menu");
    		unset($this->FILE_PERMISSION_CACHE[$site."|".$path_dir."/.access.php"]);
    		
    		if($bDiff)
    		{
    			$db_events = GetModuleEvents("main", "OnChangePermissions");
    			while($arEvent = $db_events->Fetch())
    				ExecuteModuleEvent($arEvent, Array($site, $path), $arPermissions);
    		}
    		return true;
    	}

    MegaLolnii bitrix
    самое смешное с 32 строчки

    Запостил: guest, 23 Января 2009

    Комментарии (4) RSS

    • Keeper:
      Попытка мета-программирования на PHP?
      Ответить
    • Vitaminych:
      чего смешного-то? права в битриксе на файлы и папки задаются с помощью инструкций в отдельном файле .access.php, формирование которого здесь и представлено.
      Ответить
    • Такую реализацию мог придумать/допустить только дебил.
      Ответить
    • php при помощи php - выглядит дико.
      На практике работает и удобно в редактировании.
      Ответить

    Добавить комментарий