1911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski<?php 2911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# Copyright (C) 2010 The Android Open Source Project 3911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# 4911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# Licensed under the Apache License, Version 2.0 (the "License"); 5911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# you may not use this file except in compliance with the License. 6911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# You may obtain a copy of the License at 7911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# 8911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# http://www.apache.org/licenses/LICENSE-2.0 9911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# 10911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# Unless required by applicable law or agreed to in writing, software 11911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# distributed under the License is distributed on an "AS IS" BASIS, 12911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# See the License for the specific language governing permissions and 14911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# limitations under the License. 15911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 16911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski############################################################################### 17911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 18911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# Lists the content of the LayoutTests directory 19911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# 20911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# Usage: 21fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski# get_layout_tests_dir_contents.php?path=PATH&recurse=RECURSE&separator=SEPARATOR&mode=MODE 22911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# where 23911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# PATH - relative path in the LayoutTests dir 24fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski# RECURSE = [true|false] (defaults to true) 25911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski# SEPARATOR = a string separating paths in result (defaults to \n) 26fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski# MODE = [folders|files] (defaults to files) - if 'folders' then lists only folders, 27fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski# if 'files' then only files 28911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 295a45899b92b919e9315351e9e19a8507a9f871b7Steve Block # The server document root is LayoutTests/http/tests. See run_apache2.py. 305a45899b92b919e9315351e9e19a8507a9f871b7Steve Block $rootDir = realpath($_SERVER['DOCUMENT_ROOT'] . '..' . DIRECTORY_SEPARATOR . '..'); 31911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 32911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski function getAbsolutePath($relPath) { 33911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski global $rootDir; 34911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski return $rootDir . DIRECTORY_SEPARATOR . $relPath; 35911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 36911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 37911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski function getFilesAsArray($relPath) { 38911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski return array_slice(scandir(getAbsolutePath($relPath)), 2); 39911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 40911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 41911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski function isIgnored($basename) { 42911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski return substr($basename, 0, 1) == '.'; 43911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 44911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 45fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski function getAllFilesUnderAsArray($relPath, $recurse, $mode) { 46911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski $files = getFilesAsArray($relPath); 47911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski $result = array(); 48911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 49911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski foreach($files as $i => $value) { 50911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski if (isIgnored($value)) { 51911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski continue; 52911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 53911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski if ($relPath == '') { 54911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski $filePath = $value; 55911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } else { 56911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski $filePath = $relPath . DIRECTORY_SEPARATOR . $value; 57911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 58911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 59fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski if (is_dir(getAbsolutePath($filePath))) { 60fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski if ($mode == 'folders') { 61fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski $result = array_merge($result, (array)$filePath); 62fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } 63fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski if ($recurse) { 64fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski $result = array_merge($result, getAllFilesUnderAsArray($filePath, $recurse, $mode)); 65fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } 66fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } else if ($mode == 'files') { 67911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski $result = array_merge($result, (array)$filePath); 68911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 69911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 70911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 71911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski return $result; 72911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 73911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 74fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski function main() { 75fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski global $rootDir; 76911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 77fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski if (!isset($_GET['separator'])) { 78fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski $separator = "\n"; 79fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } else { 80fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski $separator = $_GET['separator']; 81fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } 82911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 83fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski $recurse = (strtolower($_GET['recurse']) != 'false'); 84911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 85fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski if (strtolower($_GET['mode']) == 'folders') { 86fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski $mode = 'folders'; 87fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } else { 88fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski $mode = 'files'; 89fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } 90911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski 915a45899b92b919e9315351e9e19a8507a9f871b7Steve Block # Very primitive check if path tries to go above DOCUMENT_ROOT or is absolute 927a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block $path = $_GET['path']; 937a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block if (strpos($path, "..") !== False || 947a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block substr($path, 0, 1) == DIRECTORY_SEPARATOR) { 95fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski return; 96fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } 97fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski 985a45899b92b919e9315351e9e19a8507a9f871b7Steve Block # If we don't want realpath to append any prefixes we need to pass it an absolute path 997a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block $relPath = substr(realpath(getAbsolutePath($path)), strlen($rootDir) + 1); 1007a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block 1017a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block # If the path is not found, return nothing. 1027a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block if ($path !== "" && $relPath == "") 1037a4fb00a8a53cbb836c3b7730ec1836a38f3c9beSteve Block return; 104fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski 1055a45899b92b919e9315351e9e19a8507a9f871b7Steve Block # If there is an error of some sort it will be output as a part of the answer! 106fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski foreach (getAllFilesUnderAsArray($relPath, $recurse, $mode) as $i => $value) { 107fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski echo "$value$separator"; 108fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski } 109911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski } 110fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski 111fae1cffa2447a0af2d3142ad0d351ef8935ef600Maksymilian Osowski main(); 112911cbadd2256cdae7cab6eba74ff97cd115f260dMaksymilian Osowski?> 113