Exemple #1
0
 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);
     }
 }
Exemple #2
0
 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;
 }