$year,'S'=>$y_start,'L'=>strlen($year)); return cal_get_files_from_dir($dirname,__CALENDAR_TYPE_MONTH, $start, $length, $filter, $flags); } function cal_get_days_from_dir($dirname, $start=0, $length=0, $month='', $m_start=0, $year='', $y_start=0, $flags=0, $day='',$d_start=0) { s_log("Dir: $dirname\tstart: $start length: $length",0,0,3); if($month) $filter[]=array('N'=>$month,'S'=>$m_start,'L'=>strlen($month)); if($year) $filter[]=array('N'=>$year,'S'=>$y_start,'L'=>strlen($year)); if($day) $filter[]=array('N'=>$day,'S'=>$d_start,'L'=>strlen($day)); return cal_get_files_from_dir($dirname,__CALENDAR_TYPE_DAY, $start, $length, $filter, $flags); } #--------------------------------------------------------------------- # Medium level functions (should be documented) # This should sometimes be faster than cal_get_days_from_dir(); function cal_get_filtered_files_from_dir($dirname, $year='', $y_start=0, $month='', $m_start=0, $day='',$d_start=0) { s_log("Dir: $dirname\tyear: $year\tmonth: $month\tday: $day",0,0,3); if($year) $filter[]=array('N'=>$year,'S'=>$y_start,'L'=>strlen($year)); if($month) $filter[]=array('N'=>$month,'S'=>$m_start,'L'=>strlen($month)); if($day) $filter[]=array('N'=>$day,'S'=>$d_start,'L'=>strlen($day)); return cal_get_files_from_dir($dirname,0, 0, 0, $filter, __CALENDAR_FLAGS_RETURN_FILE); } #--------------------------------------------------------------------- # Low (full power) level functions (want documentation? here's the code) function cal_get_files_from_dir($dirname,$type=__CALENDAR_TYPE_YEAR, $start=0, $length=0, $filter=0, $flags=0) { if(empty($flags)) $flags=__CALENDAR_FLAGS_RETURN_DEFAULT; if(($flags & __CALENDAR_FLAGS_RETURN_BOTH) == __CALENDAR_FLAGS_RETURN_BOTH) $flags_both=1; else if (($flags & __CALENDAR_FLAGS_RETURN_FILE) == __CALENDAR_FLAGS_RETURN_FILE) $flags_file = 1; else if (($flags & __CALENDAR_FLAGS_RETURN_NAME) == __CALENDAR_FLAGS_RETURN_NAME) $flags_name = 1; s_log("Looking for files in $dirname",0,0,3); switch($type) { case __CALENDAR_TYPE_YEAR: $format=cal_get_format_from_param(__CALENDAR_YEAR_FORMAT); break; case __CALENDAR_TYPE_MONTH: $format=cal_get_format_from_param(__CALENDAR_MONTH_FORMAT); break; case __CALENDAR_TYPE_DAY: $format=cal_get_format_from_param(__CALENDAR_DAY_FORMAT); break; case 0: $format=0; break; default: $format=cal_get_format_from_param(__CALENDAR_MONTH_FORMAT); } s_log("dirname: $dirname",0,0,3); $dir=opendir ($dirname); if($dir) { while($file=readdir($dir)) { if($start) { if($length) $name=substr($file,$start,$length); else $name=substr($file,$start); } else $name=$file; #s_log("Dir file: $file\tstart: $start length: $length"); s_log("File: $file\tformat: $format",0,0,3); if(cal_is_valid_dir_line($dirname,$file, $name, $format, $filter)) { s_log("Valid file: $file",0,0,3); $array_file[]=$file; $array_name[]=$name; } } closedir($dir); } if(is_array($array_file)) asort($array_file); else return 0; if(is_array($array_name)) asort($array_name,SORT_NUMERIC); else return 0; if($flags_both) return array( 'FILES'=>$array_file, 'NAMES'=>$array_name, 'FILES_U'=>array_unique($array_file), 'NAMES_U'=>array_unique($array_name) ); else if($flags_file) return array_unique($array_file); else if($flags_name) return array_unique($array_name); return 0; } function cal_get_format_from_param($param) { s_log("param: $param",0,0,3); switch($param) { case 'D': s_log('return __CALENDAR_FORMAT_DIR',0,0,3); return __CALENDAR_FORMAT_DIR; case 'F': s_log('return __CALENDAR_FORMAT_FILE',0,0,3); return __CALENDAR_FORMAT_FILE; case 'd': case 'DIR': case 'dir': s_log('return __CALENDAR_FORMAT_DIR',0,0,3); return __CALENDAR_FORMAT_DIR; case 'f': case 'FILE': case 'file': s_log('return __CALENDAR_FORMAT_FILE',0,0,3); return __CALENDAR_FORMAT_FILE; default: s_log_error("Using default format for $param",0,0,3); return __CALENDAR_FORMAT_DIR; } } function cal_is_valid_dir_line($dir,$file, $name, $format=__CALENDAR_FORMAT_DIR, $filter=0) { s_log("dir: $dir\tfile: $file\tformat: $format",0,0,3); if(is_array($filter)) { foreach($filter as $ifi) { if(!cal_is_valid_dir_filtered_name($file, $ifi)) return 0; } } if($format) { if(!cal_is_valid_dir_line_name($name)) return 0; switch($format) { case __CALENDAR_FORMAT_DIR: return cal_is_valid_dir_line_dir($dir,$file); case __CALENDAR_FORMAT_FILE: return cal_is_valid_dir_line_file($dir,$file); } s_log_error("Not a known format $format for $dir/$file",0,0,3); } return 1; } function cal_is_valid_dir_line_dir($dir,$file) { s_log("dir: $dir\tfile: $file",0,0,3); if(!is_dir("$dir/$file")) return 0; return 1; } function cal_is_valid_dir_line_file($dir,$file) { s_log("dir: $dir\tfile: $file",0,0,3); if(!is_file("$dir/$file")) return 0; return 1; } function cal_is_valid_dir_filtered_name($file, $filter=0) { if(is_array($filter)) { if($filter['N']) { s_log('Using filter: '.$filter['N'],0,0,3); $name=substr($file,$filter['S'], $filter['L']); s_log("Filter name: $name",0,0,3); if($name != $filter['N']) return 0; } } return 1; } function cal_is_valid_dir_line_name($name) { if(__CALENDAR_VALIDATE_NAME_STRICT) { $fslen=strlen($name); s_log("fslen: $fslen",0,0,3); if(($fslen<1)||($fslen>4)) return 0; s_log("fslen: OK",0,0,3); } if(!is_numeric($name)) return 0; s_log("Is Numeric $name: OK",0,0,3); if(__CALENDAR_VALIDATE_NAME_STRICT) { if(!s_is_int($name)) return 0; s_log("Is Int $name: OK",0,0,3); } return 1; } #--------------------------------------------------------------------- } // __CALENDAR_DIR ?>