public static function add_ls_file_information($filepath, &$item, $field_options) { //sanity check if (empty($filepath) || !file_exists($filepath)) { $item->{'read'} = false; $item->{'write'} = false; $item->{XAPP_NODE_FIELD_IS_DIRECTORY} = false; return; } // show permissions if (($field_options & XAPP_XFILE_SHOW_PERMISSIONS) == XAPP_XFILE_SHOW_PERMISSIONS) { $item->{XAPP_NODE_FIELD_PERMISSIONS} = XApp_File_Utils::get_file_permissions($filepath); $item->{'read'} = is_readable($filepath); $item->{'write'} = is_writeable($filepath); } // show owner if (($field_options & XAPP_XFILE_SHOW_OWNER) == XAPP_XFILE_SHOW_OWNER) { $item->{XAPP_NODE_FIELD_OWNER} = XApp_File_Utils::get_file_ownership($filepath); } // force read only if (($field_options & XAPP_XFILE_SHOW_ISREADONLY) == XAPP_XFILE_SHOW_ISREADONLY) { $item->{XAPP_NODE_FIELD_READ_ONLY} = !is_writable($filepath); } // show is directory if (($field_options & XAPP_XFILE_SHOW_ISDIR) == XAPP_XFILE_SHOW_ISDIR) { $item->{XAPP_NODE_FIELD_IS_DIRECTORY} = is_dir($filepath); } // show size if (($field_options & XAPP_XFILE_SHOW_SIZE) == XAPP_XFILE_SHOW_SIZE) { if (!is_dir($filepath)) { $file_size = filesize($filepath); $item->{XAPP_NODE_FIELD_SIZE} = $file_size ? XApp_File_Utils::formatSizeUnits($file_size) : ""; $item->{XAPP_NODE_FIELD_SIZE_BYTES} = $file_size; } } // show folder size if (($field_options & XAPP_XFILE_SHOW_FOLDER_SIZE) == XAPP_XFILE_SHOW_FOLDER_SIZE) { if (is_dir($filepath)) { $size = XApp_Directory_Utils::getDirectorySize($filepath); $item->{XAPP_NODE_FIELD_SIZE} = XApp_File_Utils::formatSizeUnits($size); $item->{XAPP_NODE_FIELD_SIZE_BYTES} = $size; } } // show mime if (($field_options & XAPP_XFILE_SHOW_MIME) == XAPP_XFILE_SHOW_MIME) { $item->{XAPP_NODE_FIELD_MIME} = XApp_File_Utils::getMime($filepath); } // show time if (($field_options & XAPP_XFILE_SHOW_TIME) == XAPP_XFILE_SHOW_TIME) { $item->{XAPP_NODE_FIELD_TIME} = XApp_File_Utils::getFileTime($filepath); } }
public function ls($path = '/', $recursive = false, $options = array()) { xapp_import('xapp.Xapp.Hook'); //1.extract mount name from path $parsed = parse_url($path); $path = $parsed['path']; $path_parts = explode('/', $path); $basePath = $path_parts[1]; //2. get the FS Adapter from the mount manager $fs = $this->getFilesystem($basePath); //3. build the internal path, it should look now like 'ftp://httpdocs' $fsPath = $path_parts[1] . '://'; $fsPath .= $this->getPathPrefix() . '/'; for ($i = 2; $i < count($path_parts); $i++) { $fsPath .= '/' . $path_parts[$i]; } //error_log($fsPath); $fsPath = str_replace(':////', '://', $fsPath); $fsPath = str_replace(':///', '://', $fsPath); $fsPath = str_replace('///', '/', $fsPath); // Default options if (!isset($options[XApp_File_Utils::OPTION_DIR_LIST_FIELDS])) { $options[XApp_File_Utils::OPTION_DIR_LIST_FIELDS] = 0; } // Default option : emit new node if (!isset($options[XApp_File_Utils::OPTION_EMIT])) { $options[XApp_File_Utils::OPTION_EMIT] = true; } //default scan options $get_list_options = array(XApp_Directory_Utils::OPTION_CLEAR_PATH => true, XApp_Directory_Utils::OPTION_RECURSIVE => $recursive); //overwrite from options if (isset($options[XApp_File_Utils::OPTION_DIR_LIST])) { $get_list_options = $options[XApp_File_Utils::OPTION_DIR_LIST]; } //default include & exclude list $inclusionMask = XApp_File_Utils::defaultInclusionPatterns(); $exclusionMask = XApp_File_Utils::defaultExclusionPatterns(); //overwrite include from options if (isset($options[XApp_Directory_Utils::OPTION_INCLUDE_LIST])) { $inclusionMask = $options[XApp_Directory_Utils::OPTION_INCLUDE_LIST]; } //overwrite excludes from options if (isset($options[XApp_Directory_Utils::OPTION_EXCLUDE_LIST])) { $exclusionMask = $options[XApp_Directory_Utils::OPTION_EXCLUDE_LIST]; } $list = $this->_lsRemote($this->getMountManager(), $fsPath); //$list=$this->getFilteredDirList($path,$inclusionMask,$exclusionMask,$get_list_options); $ret_list = array(); //xapp_dump($list); /*** * Use 'readOnly' from the paths's resource information */ $isReadOnly = null; /* if (($options[XApp_File_Utils::OPTION_DIR_LIST_FIELDS] & XAPP_XFILE_SHOW_ISREADONLY)==XAPP_XFILE_SHOW_ISREADONLY){ error_log('is read only'); $instance = self::instance(); $resource = $instance->toResource($path); if($resource!==null && xapp_property_exists($resource,'readOnly')){ $isReadOnly=$resource->{XAPP_NODE_FIELD_READ_ONLY}; } } */ foreach ($list as $itemIn) { $item = new stdClass(); $item->{XAPP_NODE_FIELD_NAME} = $itemIn[XAPP_NODE_FIELD_NAME]; $item->{XAPP_NODE_FIELD_IS_DIRECTORY} = $itemIn['type'] === 'dir'; if ($path != "/") { if (array_key_exists('size', $itemIn)) { $item->{XAPP_NODE_FIELD_SIZE} = XApp_File_Utils::formatSizeUnits($itemIn[XAPP_NODE_FIELD_SIZE]); } if (array_key_exists(XAPP_NODE_FIELD_TIME, $itemIn)) { $item->{XAPP_NODE_FIELD_TIME} = $itemIn[XAPP_NODE_FIELD_TIME]; } if ($itemIn['type'] === 'file') { $item->{XAPP_NODE_FIELD_MIME} = XApp_File_Utils::guessMime($itemIn[XAPP_NODE_FIELD_NAME]); } $item->{XAPP_NODE_FIELD_PERMISSIONS} = 'Unknown'; $item->{XAPP_NODE_FIELD_OWNER} = array('user' => array('name' => 'Unknown'), 'group' => array('name' => 'Unknown')); //tell plugins, if anyone doesnt want the item, skip it $addItem = Xapp_Hook::trigger(self::EVENT_ON_NODE_ADD, array('item' => $item)); if ($addItem === false) { continue; } //tell plugins, if anyone doesnt want the item, skip it if ($options[XApp_File_Utils::OPTION_EMIT] === true) { $item = Xapp_Hook::trigger(self::EVENT_ON_NODE_META_CREATED, array('item' => $item)); if ($item === null) { continue; } } //now overwrite readOnly flag if ($isReadOnly != null && ($options[XApp_File_Utils::OPTION_DIR_LIST_FIELDS] & XAPP_XFILE_SHOW_ISREADONLY) == XAPP_XFILE_SHOW_ISREADONLY) { $item->{XAPP_NODE_FIELD_READ_ONLY} = $isReadOnly; } //tell plugins Xapp_Hook::trigger(self::EVENT_ON_NODE_ADDED, array('item' => $item)); } $ret_list[] = $item; } return $ret_list; }