示例#1
0
 private static function _parse($file)
 {
     if ($data = sys_cache_get("rss_" . sha1($file))) {
         return $data;
     }
     if ($message = sys_allowedpath(dirname($file))) {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, $message));
         return array();
     }
     if (!($data = @file_get_contents($file))) {
         sys_warning("{t}The url doesn't exist.{/t} (" . $file . ")");
         return array();
     }
     if (strpos(strtolower(substr($data, 0, 100)), "<?xml") === false) {
         // find RSS in website
         if (preg_match("/rss[^>]+?href=\"(.*?)\"/i", $data, $match)) {
             $file = $match[1];
             if (!($data = @file_get_contents($file))) {
                 sys_warning("{t}The url doesn't exist.{/t} (" . $file . ")");
                 return array();
             }
         }
     }
     try {
         $xml = @new SimpleXMLElement($data);
     } catch (Exception $e) {
         sys_warning("{t}Error{/t}: " . $file . " " . $e->getMessage());
         return array();
     }
     if (!is_object($xml)) {
         return array();
     }
     if (isset($xml->channel)) {
         $item0 = $xml->channel;
         $item0->subtitle = (string) $xml->channel->description;
         if (isset($xml->channel->item)) {
             $items = $xml->channel->item;
         } else {
             $items = $xml->item;
         }
     } else {
         $item0 = $xml;
         $items = $xml->entry;
     }
     $rows = array(array("title" => (string) $item0->title, "content" => (string) $item0->subtitle, "link" => self::_get_link($item0->link), "order" => 0));
     $i = 0;
     foreach ($items as $item) {
         if (isset($item->description)) {
             $item->summary = (string) $item->description;
         }
         $rows[] = array("title" => (string) $item->title, "content" => (string) $item->summary, "link" => self::_get_link($item->link), "order" => ++$i);
     }
     sys_cache_set("rss_" . sha1($file), $rows, RSS_CACHE);
     return $rows;
 }
示例#2
0
 private static function _get_data($file)
 {
     if ($data = sys_cache_get("bookmarks_" . sha1($file))) {
         return $data;
     }
     if ($message = sys_allowedpath(dirname($file))) {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, $message));
         return array();
     }
     if (!($data = @file_get_contents($file))) {
         sys_warning("{t}The url doesn't exist.{/t} (" . $file . ")");
         return array();
     }
     preg_match_all("!(?:<h3.*?>(.*?)</h3>|<dd>(.*?)\n|<a href=\"(.*?)\".*?(?:add_date=\"(.*?)\".*?>|>)(.*?)</a>)!msi", $data, $matches);
     $category = "";
     $rows = array();
     if (is_array($matches) and count($matches) == 6) {
         for ($i = 0; $i < count($matches[0]); $i++) {
             $url = "";
             $name = "";
             $created = 0;
             $desc = "";
             if (!empty($matches[1][$i])) {
                 $category = modify::unquote($matches[1][$i]);
             }
             if (!empty($matches[2][$i + 1])) {
                 $desc = modify::unquote($matches[2][$i + 1]);
             }
             if (!empty($matches[3][$i])) {
                 $url = $matches[3][$i];
             }
             if (!empty($matches[4][$i])) {
                 $created = $matches[4][$i];
             }
             if (!empty($matches[5][$i])) {
                 $name = modify::unquote($matches[5][$i]);
             }
             if ($name != "" or $url != "") {
                 $rows[] = array("category" => $category, "bookmarkname" => $name, "description" => $desc, "url" => $url, "created" => $created);
             }
         }
     }
     sys_cache_set("bookmarks_" . sha1($file), $rows, BOOKMARKS_CACHE);
     return $rows;
 }
示例#3
0
 private static function _parse($file)
 {
     if ($data = sys_cache_get("vcard_" . sha1($file))) {
         return $data;
     }
     if ($message = sys_allowedpath(dirname($file))) {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, $message));
         return array();
     }
     if (!($data = @file_get_contents($file))) {
         sys_warning("{t}The url doesn't exist.{/t} (" . $file . ")");
         return array();
     }
     if (!class_exists("Contact_Vcard_Parse", false)) {
         require "lib/vcard/Contact_Vcard_Parse.php";
     }
     $parse = new Contact_Vcard_Parse();
     $rows = array();
     if ($data = $parse->fromText($data)) {
         foreach ($data as $item) {
             $row = array();
             foreach ($item as $key => $values) {
                 $key = strtolower($key);
                 $row[$key] = array();
                 foreach ($values as $value) {
                     foreach ($value["value"] as $value2) {
                         if ($value2[0]) {
                             $row[$key][] = trim($value2[0]);
                         }
                     }
                 }
             }
             $rows[] = $row;
         }
     } else {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, ""));
         return array();
     }
     sys_cache_set("vcard_" . sha1($file), $rows, VCARD_CACHE);
     return $rows;
 }
示例#4
0
function sys_parse_csv($file)
{
    if ($data = sys_cache_get("csv_" . sha1($file))) {
        return $data;
    }
    if (sys_allowedpath(dirname($file)) != "") {
        return array();
    }
    $rows = array();
    if ($handle = fopen($file, "r")) {
        if (strpos($file, "iso")) {
            $iso = true;
        } else {
            $iso = false;
        }
        while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
            if ($iso) {
                foreach (array_keys($data) as $key) {
                    $data[$key] = utf8_encode($data[$key]);
                }
            }
            $rows[] = $data;
        }
        fclose($handle);
    } else {
        sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, ""));
        return array();
    }
    sys_cache_set("csv_" . sha1($file), $rows, CSV_CACHE);
    return $rows;
}
 private static function _parse($file)
 {
     if ($data = sys_cache_get("ldif_" . sha1($file))) {
         return $data;
     }
     if ($message = sys_allowedpath(dirname($file))) {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, $message));
         return array();
     }
     $rows = array();
     $i = 0;
     if ($handle = fopen($file, "r")) {
         while (!feof($handle)) {
             $data = utf8_encode(trim(fgets($handle, 8192)));
             if ($data != "" and $pos = strpos($data, ":")) {
                 $data_key = strtolower(substr($data, 0, $pos));
                 $data_val = substr($data, $pos + 1);
                 if ($data_val != "" and $data_val[0] == ":") {
                     $data_val = base64_decode(trim(substr($data_val, 1)));
                 }
                 if ($data_key == "" or $data_val == "") {
                     continue;
                 }
                 $rows[$i][$data_key] = trim($data_val);
             } else {
                 if ($data == "") {
                     $i++;
                 }
             }
         }
         fclose($handle);
     } else {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, ""));
         return array();
     }
     sys_cache_set("ldif_" . sha1($file), $rows, LDIF_CACHE);
     return $rows;
 }
示例#6
0
 private static function _parse($file)
 {
     if ($data = sys_cache_get("icalendar_" . sha1($file))) {
         return $data;
     }
     if ($message = sys_allowedpath(dirname($file))) {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, $message));
         return array();
     }
     $rows = array();
     if (!($handle = fopen($file, "rb"))) {
         sys_warning(sprintf("{t}Cannot read the file %s. %s{/t}", $file, ""));
         return array();
     }
     $i = 0;
     $evopen = false;
     $lines = array();
     while (!feof($handle)) {
         $line = fgets($handle, 10000);
         $line = str_replace(array("\r", "\n", "\\n"), array("", "", "\n"), $line);
         if ($line == "") {
             continue;
         }
         if ($line[0] == " ") {
             $lines[count($lines) - 1] .= substr($line, 1);
         } else {
             $lines[] = $line;
         }
     }
     fclose($handle);
     foreach ($lines as $line) {
         $line = trim($line);
         switch ($line) {
             case "BEGIN:VEVENT":
                 $i++;
                 $evopen = true;
                 $rows[$i] = array("subject" => "", "begin" => 0, "ending" => 0, "created" => 0, "duration" => 0, "lastmodified" => 0, "allday" => "0", "location" => "", "description" => "", "organizer" => array(), "participants_ext" => array(), "category" => "", "priority" => "3", "recurrence" => "", "repeatinterval" => 1, "repeatcount" => "0", "repeatuntil" => 0, "repeatexcludes" => array());
                 break;
             case "BEGIN:VALARM":
                 $evopen = false;
                 break;
             case "END:VEVENT":
                 $evopen = false;
                 $begin = sys_getdate($rows[$i]["begin"]);
                 $end = sys_getdate($rows[$i]["ending"]);
                 if ($rows[$i]["lastmodified"] == 0) {
                     $rows[$i]["lastmodified"] = $rows[$i]["created"];
                 }
                 if ($begin["hours"] == 0 and $end["hours"] == 0 and $begin["minutes"] == 0 and $end["minutes"] == 0) {
                     if ($rows[$i]["begin"] == $rows[$i]["ending"]) {
                         $rows[$i]["ending"] += 86399;
                     } else {
                         $rows[$i]["ending"]--;
                     }
                     $rows[$i]["allday"] = "1";
                 }
                 foreach ($rows[$i] as $key => $item) {
                     if (is_array($item)) {
                         $rows[$i][$key] = self::_array_flat($item);
                     }
                 }
                 if ($rows[$i]["ending"] != "" and $rows[$i]["begin"] != "") {
                     $rows[$i]["duration"] = $rows[$i]["ending"] - $rows[$i]["begin"];
                 }
                 $rows[$i] = array_merge($rows[$i], trigger::calcappointment("", $rows[$i], null, ""));
                 // $rows[$i]["begin_str"] = date("D d-m-y H:i:s",$rows[$i]["begin"]);
                 // $rows[$i]["end_str"] = date("D d-m-y H:i:s",$rows[$i]["ending"]);
                 break;
             default:
                 if (!$evopen) {
                     break;
                 }
                 $pos = strpos($line, ":");
                 $first = substr($line, 0, $pos);
                 $value_str = str_replace(array("\\,", "\\n", "\\N"), array(",", "\n", "\n"), substr($line, $pos + 1));
                 if ($pos2 = strpos($first, ";")) {
                     $kval = substr($first, 0, $pos2);
                 } else {
                     $kval = $first;
                 }
                 switch ($kval) {
                     case "SUMMARY":
                         $rows[$i]["subject"] = $value_str;
                         break;
                     case "DESCRIPTION":
                         $rows[$i]["description"] = $value_str;
                         break;
                     case "LOCATION":
                         $rows[$i]["location"] = $value_str;
                         break;
                     case "CLASS":
                         if ($rows[$i]["category"] != "" and $value_str != "") {
                             $rows[$i]["category"] .= ",";
                         }
                         $rows[$i]["category"] .= ucfirst(strtolower($value_str));
                         break;
                     case "CATEGORIES":
                         if ($rows[$i]["category"] != "") {
                             $rows[$i]["category"] .= ",";
                         }
                         $rows[$i]["category"] .= $value_str;
                         break;
                     case "UID":
                         $rows[$i]["id"] = $value_str;
                         break;
                     case "SEQUENCE":
                         $rows[$i]["sequence"] = $value_str;
                         break;
                     case "DTSTART":
                         $rows[$i]["begin"] = modify::ical_datetime_to_int($value_str);
                         break;
                     case "DTEND":
                         $rows[$i]["ending"] = modify::ical_datetime_to_int($value_str);
                         break;
                     case "LAST-MODIFIED":
                         $rows[$i]["lastmodified"] = modify::ical_datetime_to_int($value_str);
                         break;
                     case "DTSTAMP":
                         $rows[$i]["created"] = modify::ical_datetime_to_int($value_str);
                         break;
                     case "DURATION":
                         if (!preg_match("/PT?([0-9]{1,2}W)?([0-9]{1,2}D)?([0-9]{1,2}H)?([0-9]{1,2}M)?/", $value_str, $match)) {
                             break;
                         }
                         $match = array_merge($match, array(0, 0, 0, 0));
                         $rows[$i]["ending"] = $rows[$i]["begin"] + str_replace("W", "", $match[1]) * 604800 + str_replace("D", "", $match[2]) * 86400 + str_replace("H", "", $match[3]) * 3600 + str_replace("M", "", $match[4]) * 60;
                         break;
                     case "RRULE":
                         $value = explode(";", $value_str);
                         foreach ($value as $val) {
                             $val = explode("=", $val);
                             switch ($val[0]) {
                                 case "FREQ":
                                     switch ($val[1]) {
                                         case "YEARLY":
                                             $rows[$i]["recurrence"] = "years";
                                             break;
                                         case "MONTHLY":
                                             $rows[$i]["recurrence"] = "months";
                                             break;
                                         case "WEEKLY":
                                             $rows[$i]["recurrence"] = "weeks";
                                             break;
                                         case "DAILY":
                                             $rows[$i]["recurrence"] = "days";
                                             break;
                                     }
                                     break;
                                 case "INTERVAL":
                                     $rows[$i]["repeatinterval"] = $val[1];
                                     break;
                                 case "COUNT":
                                     $rows[$i]["repeatcount"] = $val[1];
                                     break;
                                 case "UNTIL":
                                     $rows[$i]["repeatuntil"] = modify::ical_datetime_to_int($val[1]);
                                     break;
                             }
                         }
                         break;
                     case "EXDATE":
                         $rows[$i]["repeatexcludes"][] = modify::ical_datetime_to_int($value_str);
                         break;
                     case "ORGANIZER":
                         $value = explode(";", $value_str);
                         $key = explode(";", $first);
                         if (isset($value[1])) {
                             $value[0] = $value[1];
                         }
                         if (isset($key[1])) {
                             $value[0] = str_replace(array("CN=", "\""), "", $key[1]) . " (" . str_replace(array("MAILTO:", "mailto:"), "", $value[0]) . ")";
                         }
                         $rows[$i]["organizer"][] = $value[0];
                         break;
                     case "ATTENDEE":
                         $value = explode(";", $value_str);
                         $key = explode(";", $first);
                         if (isset($value[1])) {
                             $value[0] = $value[1];
                         }
                         $value[0] = str_replace(array("MAILTO:", "mailto:"), "", $value[0]);
                         if (isset($key[1]) and strpos($key[1], "CN=") !== false) {
                             $value[0] = str_replace(array("CN=", "\""), "", $key[1]) . " (" . $value[0] . ")";
                         }
                         $rows[$i]["participants_ext"][] = $value[0];
                         break;
                     default:
                         // echo $line."<br>\n";
                         break;
                 }
                 break;
         }
     }
     sys_cache_set("icalendar_" . sha1($file), $rows, ICALENDAR_CACHE);
     return $rows;
 }
示例#7
0
 private static function _get_dirs($path, $left, $level, $parent, $recursive, &$tree)
 {
     if (sys_allowedpath($path) != "") {
         return $left;
     }
     $right = $left + 1;
     if ($recursive and sys_is_folderstate_open($path, "fs", $parent)) {
         $subfolders = 0;
         $folders = array();
         if ($handle = @opendir($path)) {
             while (false !== ($file = readdir($handle))) {
                 if ($file != '.' and $file != '..' and is_dir($path . $file)) {
                     $folders[] = $path . $file . "/";
                     $subfolders = 1;
                 }
             }
         }
         natcasesort($folders);
         foreach ($folders as $folder) {
             $right = self::_get_dirs($folder, $right, $level + 1, $parent, true, $tree);
         }
     } else {
         $right = $right + 2;
         $subfolders = (int) self::_has_subfolder($path);
     }
     $icon = "";
     if ($level == 0) {
         $icon = "sys_nodb_fs.png";
     }
     $tree[$left] = array("id" => $path, "lft" => $left, "rgt" => $right, "flevel" => $level, "ftitle" => basename($path), "ftype" => "sys_nodb_fs", "icon" => $icon, "ffcount" => $subfolders);
     return $right + 1;
 }
示例#8
0
 static function insert($path, $data, $mfolder)
 {
     $path = SIMPLE_STORE . "/backup/";
     if (sys_allowedpath($path) != "") {
         return;
     }
     $source = $data["filedata"];
     $target = $path . $data["filename"];
     if (!is_dir($source) and file_exists($source)) {
         if (file_exists($target)) {
             unlink($target);
         }
         rename($source, $target);
     }
 }
示例#9
0
 private static function _get_data($file)
 {
     static $cache = array();
     if (isset($cache[$file])) {
         return $cache[$file];
     }
     if (sys_allowedpath(dirname($file)) != "") {
         return array();
     }
     if (is_dir($file) or !file_exists($file)) {
         return array();
     }
     $data = get_object_vars(sys_get_xml($file));
     foreach ($data as $key => $val) {
         if (is_array($val)) {
             $data[$key] = $val;
         } else {
             $data[$key] = array($val);
         }
     }
     $cache[$file] = $data;
     return $cache[$file];
 }