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; }
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; }
private static function _get_datas($mfolder, $cid) { if ($datas = sys_cache_get($cid)) { return $datas; } if (!($pop3 = self::_connect($mfolder)) or !$pop3) { return 0; } $datas = array(); $datas[0] = array(); $datas[1] = $pop3->getListing(); foreach ($datas[1] as $mail) { $datas[0][] = $pop3->getParsedHeaders($mail["msg_id"], ""); } sys_cache_set($cid, $datas, POP3_LIST_CACHE); return $datas; }
private static function _get_auth($mfolder, $match = true) { $cid = "gdocs_" . $mfolder; static $conn = array(); if ($auth = sys_cache_get($cid)) { return $auth; } $creds = sys_credentials($mfolder); $url_auth = "https://www.google.com/accounts/ClientLogin?Email=" . urlencode($creds["username"]) . "&Passwd=" . urlencode($creds["password"]) . "&accountType=HOSTED_OR_GOOGLE&source=SimpleGroupware&service=writely"; $http_response_header = array(); $response = @file_get_contents($url_auth); preg_match("/^Auth=(.+)/m", $response, $match); $auth = ""; if (!empty($match[1])) { $auth = "GData-Version: 3.0\r\nAuthorization: GoogleLogin auth=" . trim($match[1]) . "\r\n"; sys_cache_set($cid, $auth, GDOCS_CACHE); } else { if (!isset($conn[$cid])) { sys_warning(sprintf("{t}Connection error: %s [%s]{/t}", $http_response_header[0], "Google Docs")); } } $conn[$cid] = true; return $auth; }
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; }
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("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; }
private static function _base_dn($mfolder) { $cid = "ldap_" . md5("basedn_" . $mfolder); if ($basedn = sys_cache_get($cid)) { return $basedn; } $creds = sys_credentials($mfolder); $basedn = $creds["options"]; if ($basedn == "") { if (!($ds = self::_connect($mfolder))) { return ""; } $result_id = ldap_read($ds, "", "(objectclass=*)", array("namingContexts")); $attrs = ldap_get_attributes($ds, ldap_first_entry($ds, $result_id)); if (isset($attrs["namingContexts"]) and is_array($attrs["namingContexts"])) { $basedn = $attrs["namingContexts"][0]; } } sys_cache_set($cid, $basedn, LDAP_LIST_CACHE); return $basedn; }
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; }
static function displayfile($table, $filename, $index = false, $limit = true) { $size = @filesize($filename); $ext = self::getfileext($filename); if ($ext == basename($filename)) { $ext = self::basename($filename); } $txt_files = array("ldif", "log", "css", "csv", "eml", "rfc822", "ini", "reg", "tsv", "txt", "ics", "vcf", "lang"); $code_files = array("bas", "bat", "c", "cmd", "cpp", "csh", "inf", "sh", "vb", "vbe", "xml", "java", "js", "pas", "php", "pl", "vbs", "vcs", "wsh", "tpl", "sql"); $bin_files = array("doc", "docx", "xls", "xlsx", "ppt", "pptx", "tar", "zip", "gz", "tgz", "pdf", "mp3", "odt", "sxw", "ods", "sxc", "odp", "sxi", "jpg", "jpeg", "tif", "url"); $html_files = array("htm", "html"); $return = ""; $return_html = ""; $cid = str_replace("simple_", "", $table) . "_" . sha1($filename . $size . @filemtime($filename)); if ($return = sys_cache_get($cid)) { if (!$index and $limit and strlen($return) > FILE_TEXT_LIMIT) { $return = substr($return, 0, FILE_TEXT_LIMIT) . " ..."; } return trim($return); } $type = ""; if (in_array($ext, $txt_files)) { $type = "text"; } else { if (in_array($ext, $code_files)) { $type = "code"; } else { if (in_array($ext, $html_files)) { $type = "html"; } else { if (in_array($ext, $bin_files)) { $type = "bin"; } } } } if ($type != "" and file_exists($filename)) { if ($type == "bin") { if (filesize($filename) != 0) { if (!sys_strbegins($filename, SIMPLE_STORE . "/") and $result = validate::checkvirus($filename)) { $return = "ERROR Virus scanner: " . $result; } else { $return = trim(self::preview_bin($filename, $ext)); } } } else { $return = trim(file_get_contents($filename, false, null, -1, $limit ? FILE_TEXT_LIMIT : 131072)); } if ($return != "") { if ($index) { $rlimit = INDEX_LIMIT; } else { $rlimit = FILE_TEXT_LIMIT; } if ($limit and strlen($return) > $rlimit) { $return = substr($return, 0, $rlimit) . " ..."; } if (!self::detect_utf($return)) { $return = utf8_encode($return); } if ($type == "html") { $return_html = substr($return, 0, strrpos($return, ">")); } else { if ($type != "code") { $return_html = nl2br(strip_tags($return, "<a><b><i>")); } else { $return_html = self::highlight_string($return); } } } } if ($return_html == "") { $return_html = " "; } if (!sys_strbegins($return, "ERROR ")) { sys_cache_set($cid, $return_html, FILE_TEXT_CACHE); if ($index) { return $return; } else { return trim($return_html); } } else { sys_log_message_log("php-fail", "displayfile: " . $return); } if ($index) { return ""; } return sprintf("{t}Cannot create preview for %s{/t}.", $ext); }
static function showlist() { setup::out("\n\t<div style='color:#ff0000;'>\n\t<b>{t}Warning{/t}</b>:<br>\n\t- Please make a complete backup of your database (e.g. using phpMyAdmin)<br>\n\t- Please make a complete backup of your sgs folder (e.g. /var/www/htdocs/sgs/)<br>\n\t- Make sure both backups are complete!\n </div>\n "); setup::out("{t}Downloading extension list{/t} ...<br>"); $url = "http://sourceforge.net/projects/simplgroup/files/simplegroupware_modules/modules.xml"; if (!($data = sys_cache_get("modules.xml"))) { $data = @file_get_contents($url); sys_cache_set("modules.xml", $data, 3600); } if ($xml = @simplexml_load_string($data)) { foreach ($xml as $package) { $php_version = (string) $package->php_version; $sgs_version = (string) $package->require_version; $target = SIMPLE_EXT . substr(basename($package->filename), 0, -3); if (file_exists($target)) { continue; } $id = md5($package->filename); if (version_compare(PHP_VERSION, $php_version, "<")) { setup::out(sprintf("{t}Setup needs php with at least version %s !{/t} ", $php_version), false); } else { if (version_compare(CORE_VERSION_STRING, $sgs_version, "<")) { setup::out(sprintf("{t}Setup needs Simple Groupware with at least version %s !{/t} ", $sgs_version), false); } else { setup::out("<a href='extensions.php?token=" . modify::get_form_token() . "&extension=" . $package->name . "&filename=" . $package->filename . "'>{t}I n s t a l l{/t}</a> ", false); } } setup::out($package->title . " <a href='#' onclick='return showhide(\"" . $id . "\")'>{t}Info{/t}</a>", false); setup::out("<br><div class='description' style='display:none;' id='" . $id . "'>" . nl2br(trim($package->description)) . "</div>"); } } else { setup::out(sprintf("{t}Connection error: %s [%s]{/t}", $url, "HTTP") . "<br>" . strip_tags($data, "<br><p><h1><center>")); } setup::out("{t}Package from local file system (.tar.gz){/t}:<br/>{t}current path{/t}: " . str_replace("\\", "/", getcwd()) . "/<br/>"); $dir = opendir("./"); while ($file = readdir($dir)) { if ($file != "." and $file != ".." and preg_match("|^SimpleGroupware\\_.*?.tar\\.gz\$|i", $file)) { setup::out("<a href='extensions.php?token=" . modify::get_form_token() . "&cfile=" . $file . "'>{t}I n s t a l l{/t}</a> " . $file . "<br/>"); } } closedir($dir); setup::out("<form method='POST'><input type='hidden' name='token' value='" . modify::get_form_token() . "'><input type='text' name='cfile' value='/tmp/SimpleGroupware_SomeExtension_0.x.tar.gz' style='width:300px;'> <input type='submit' class='submit' value='{t}I n s t a l l{/t}'><br>"); $can_uninstall = false; foreach (scandir(SIMPLE_EXT) as $file) { if ($file[0] == "." or !is_dir(SIMPLE_EXT . $file) or !file_exists(SIMPLE_EXT . $file . "/package.xml")) { continue; } $package = simplexml_load_file(SIMPLE_EXT . $file . "/package.xml"); $id = md5($package->filename); setup::out("<a onclick='if (!confirm(\"{t}Really uninstall the module ?{/t}\")) return false;' href='extensions.php?token=" . modify::get_form_token() . "&uninstall=" . $package->filename . "'>{t}U n i n s t a l l{/t}</a> " . $package->title, false); setup::out(" <a href='#' onclick='return showhide(\"" . $id . "\")'>{t}Info{/t}</a>", false); setup::out(" ({t}installed{/t} " . sys_date("{t}m/d/Y{/t}", filemtime(SIMPLE_EXT . $file)) . ")"); setup::out("<div class='description' style='display:none;' id='" . $id . "'>" . nl2br(trim($package->description)) . "</div>"); $can_uninstall = true; } if ($can_uninstall) { setup::out("<b>{t}Note{/t}:</b> {t}Uninstall does not delete any data in the database.{/t}<br>"); } setup::out_exit('<div style="border-top: 1px solid black;">Powered by Simple Groupware, Copyright (C) 2002-2012 by Thomas Bley.</div></div></body></html>'); }