+
+/* This update the filter rules when
+ renaming or deleting folders */
+function update_for_folder ($args) {
+ $old_folder = $args[0];
+ $new_folder = $args[2];
+ $action = $args[1];
+ global $plugins, $data_dir, $username;
+ $filters = array();
+ $filters = load_filters();
+ $filter_count = count($filters);
+ $p = 0;
+ for ($i=0;$i<$filter_count;$i++) {
+ if (!empty($filters)) {
+ if ($old_folder == $filters[$i]['folder']) {
+ if ($action == 'rename') {
+ $filters[$i]['folder'] = $new_folder;
+ setPref($data_dir, $username, 'filter'.$i,
+ $filters[$i]['where'].','.$filters[$i]['what'].','.$new_folder);
+ }
+ elseif ($action == 'delete') {
+ remove_filter($p);
+ $p = $p-1;
+ }
+ }
+ $p++;
+ }
+ }
+}
+/*
+ * Function extracted from sqimap_get_small_header_list.
+ * The unused FETCH arguments and HEADERS are disabled.
+ */
+function filter_get_headers ($imap_stream, $query) {
+ global $uid_support;
+ /* Get the small headers for each message in $msg_list */
+
+ $read_list = sqimap_run_command_list ($imap_stream, $query, false, $response, $message, $uid_support);
+
+ if (isset($response) && $response != 'OK') {
+ return false;
+ }
+
+
+ foreach ($read_list as $r) {
+ $read = implode('',$r);
+ /*
+ * #id<space>FETCH<space>(
+ */
+ /* extract the message id */
+ $i_space = strpos($read,' ',2);
+ $id = substr($read,2,$i_space-2);
+ $fetch = substr($read,$i_space+1,5);
+ if (!is_numeric($id) && $fetch !== 'FETCH') {
+ set_up_language($squirrelmail_language);
+ echo '<br><b><font color=$color[2]>' .
+ _("ERROR : Could not complete request.") .
+ '</b><br>' .
+ _("Unknown response from IMAP server: ") . ' 1.' .
+ htmlspecialchars($read) . "</font><br>\n";
+ break;
+ }
+ $i = strpos($read,'(',$i_space+5);
+ $read = substr($read,$i+1);
+ $i_len = strlen($read);
+ $i = 0;
+ while ($i < $i_len && $i !== false) {
+ /* get argument */
+ $read = trim(substr($read,$i));
+ $i_len = strlen($read);
+ $i = strpos($read,' ');
+ $arg = substr($read,0,$i);
+ ++$i;
+ switch ($arg)
+ {
+ case 'UID':
+ $i_pos = strpos($read,' ',$i);
+ if (!$i_pos) {
+ $i_pos = strpos($read,')',$i);
+ }
+ if ($i_pos) {
+ $unique_id = substr($read,$i,$i_pos-$i);
+ $i = $i_pos+1;
+ } else {
+ break 3;
+ }
+ $msgs[$id]['UID'] = $unique_id;
+ break;
+ // case 'FLAGS':
+ // $flags = parseArray($read,$i);
+ // if (!$flags) break 3;
+ // $msgs[$id]['FLAGS'] = $flags;
+ // break;
+ // case 'RFC822.SIZE':
+ // $i_pos = strpos($read,' ',$i);
+ // if (!$i_pos) {
+ // $i_pos = strpos($read,')',$i);
+ // }
+ // if ($i_pos) {
+ // $size = substr($read,$i,$i_pos-$i);
+ // $i = $i_pos+1;
+ // } else {
+ // break 3;
+ // }
+ // $msgs[$id]['SIZE'] = $size;
+ //
+ // break;
+ // case 'INTERNALDATE':
+ // $msgs[$id]['INTERNALDATE'] = parseString($read,$i);
+ // break;
+ case 'BODY.PEEK[HEADER.FIELDS':
+ case 'BODY[HEADER.FIELDS':
+ $i = strpos($read,'{',$i);
+ $header = parseString($read,$i);
+ if ($header === false) break 3;
+ /* First we unfold the header */
+ $hdr = trim(str_replace(array("\r\n\t", "\r\n "),array('', ''), $header));
+ /* Now we can make a new header array with */
+ /* each element representing a headerline */
+ $hdr = explode("\r\n" , $hdr);
+ foreach ($hdr as $line) {
+ $pos = strpos($line, ':');
+ if ($pos > 0) {
+ $field = strtolower(substr($line, 0, $pos));
+ if (!strstr($field,' ')) { /* valid field */
+ $value = trim(substr($line, $pos+1));
+ switch($field) {
+ case 'received': $msgs[$id]['HEADER']['Received'][] = $value; break;
+ // case 'to': $msgs[$id]['HEADER']['To']= $value; break;
+ // case 'cc': $msgs[$id]['HEADER']['Cc'] = $value; break;
+ // case 'from': $msgs[$id]['HEADER']['From'] = $value; break;
+ // case 'date': $msgs[$id]['HEADER']['Date'] = $value; break;
+ // case 'x-priority': $msgs[$id]['HEADER']['Prio'] = $value; break;
+ // case 'subject': $msgs[$id]['HEADER']['Subject'] = $value; break;
+ // case 'content-type':$msgs[$id]['HEADER']['Content-Type'] = $value; break;
+ default: break;
+ }
+ }
+ }
+ }
+ break;
+ default:
+ ++$i;
+ break;
+ }
+ }
+ }
+ return $msgs;
+}
+
+?>
\ No newline at end of file