From 7a5c48e7f70b8bc938fcae3ffd2be0fdbeaab145 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Wed, 13 Dec 2006 02:17:24 -0500
Subject: [PATCH] Changed 'junk' label in French localization

---
 program/include/main.inc |  156 ++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 133 insertions(+), 23 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index b2e83b7..10436ca 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -413,6 +413,34 @@
   }
 
 
+// auto-select IMAP host based on the posted login information
+function rcmail_autoselect_host()
+  {
+  global $CONFIG;
+  
+  $host = isset($_POST['_host']) ? get_input_value('_host', RCUBE_INPUT_POST) : $CONFIG['default_host'];
+  if (is_array($host))
+    {
+    list($user, $domain) = explode('@', get_input_value('_user', RCUBE_INPUT_POST));
+    if (!empty($domain))
+      {
+      foreach ($host as $imap_host => $mail_domains)
+        if (is_array($mail_domains) && in_array($domain, $mail_domains))
+          {
+          $host = $imap_host;
+          break;
+          }
+      }
+
+    // take the first entry if $host is still an array
+    if (is_array($host))
+      $host = array_shift($host);
+    }
+  
+  return $host;
+  }
+
+
 // perfom login to the IMAP server and to the webmail service
 function rcmail_login($user, $pass, $host=NULL)
   {
@@ -550,21 +578,28 @@
     $user_name = $user!=$user_email ? $user : '';
 
     // try to resolve the e-mail address from the virtuser table
-	if (!empty($CONFIG['virtuser_query']))
-	  {
-      $sql_result = $DB->query(preg_replace('/%u/', $user, $CONFIG['virtuser_query']));
-      if ($sql_arr = $DB->fetch_array($sql_result))
-        $user_email = $sql_arr[0];
+	if (!empty($CONFIG['virtuser_query']) &&
+        ($sql_result = $DB->query(preg_replace('/%u/', $user, $CONFIG['virtuser_query']))) &&
+        ($DB->num_rows()>0))
+      while ($sql_arr = $DB->fetch_array($sql_result))
+        {
+        $DB->query("INSERT INTO ".get_table_name('identities')."
+                   (user_id, del, standard, name, email)
+                   VALUES (?, 0, 1, ?, ?)",
+                   $user_id,
+                   $user_name,
+                   preg_replace('/^@/', $user . '@', $sql_arr[0]));
+        }
+    else
+      {
+      // also create new identity records
+      $DB->query("INSERT INTO ".get_table_name('identities')."
+                  (user_id, del, standard, name, email)
+                  VALUES (?, 0, 1, ?, ?)",
+                  $user_id,
+                  $user_name,
+                  $user_email);
       }
-
-    // also create new identity records
-    $DB->query("INSERT INTO ".get_table_name('identities')."
-                (user_id, del, standard, name, email)
-                VALUES (?, 0, 1, ?, ?)",
-                $user_id,
-                $user_name,
-                $user_email);
-
                        
     // get existing mailboxes
     $a_mailboxes = $IMAP->list_mailboxes();
@@ -958,8 +993,9 @@
       }
     else if ($mode=='remove')
       $str = strip_tags($str);
-      
-    $out = strtr($str, $encode_arr);
+    
+    // avoid douple quotation of &
+    $out = preg_replace('/&amp;([a-z]{2,5});/', '&\\1;', strtr($str, $encode_arr));
       
     return $newlines ? nl2br($out) : $out;
     }
@@ -1055,7 +1091,13 @@
     return $value;
   }
 
-
+/**
+ * Remove single and double quotes from given string
+ */
+function strip_quotes($str)
+{
+  return preg_replace('/[\'"]/', '', $str);
+}
 
 
 // ************** template parsing and gui functions **************
@@ -1100,8 +1142,12 @@
 
 
   // parse for specialtags
-  $output = parse_rcube_xml($templ);
+  $output = parse_rcube_xml(parse_rcube_conditions($templ));
   
+  // add debug console
+  if ($CONFIG['debug_level'] & 8)
+    $OUTPUT->footer = '<div style="position:absolute;top:5px;left:5px;width:400px;opacity:0.8;z-index:9000;"><form name="debugform"><textarea name="console" rows="15" cols="40" style="width:400px;border:none;font-size:x-small"></textarea></form>';
+
   $OUTPUT->write(trim(parse_with_globals($output)), $skin_path);
 
   if ($exit)
@@ -1119,6 +1165,55 @@
   }
 
 
+// parse conditional code
+function parse_rcube_conditions($input)
+  {
+  if (($matches = preg_split('/<roundcube:(if|elseif|else|endif)\s+([^>]+)>/is', $input, 2, PREG_SPLIT_DELIM_CAPTURE)) && count($matches)==4)
+    {
+    if (preg_match('/^(else|endif)$/i', $matches[1]))
+      return $matches[0] . parse_rcube_conditions($matches[3]);
+    else
+      {
+      $attrib = parse_attrib_string($matches[2]);
+      if (isset($attrib['condition']))
+        {
+        $condmet = rcube_xml_condition($attrib['condition']);
+        $submatches = preg_split('/<roundcube:(elseif|else|endif)\s+([^>]+)>/is', $matches[3], 2, PREG_SPLIT_DELIM_CAPTURE);
+
+		    if ($condmet)
+			    $result = $submatches[0] . preg_replace('/.*<roundcube:endif\s+[^>]+>/is', '', $submatches[3]);
+        else
+          $result = "<roundcube:$submatches[1] $submatches[2]>" . $submatches[3];
+          
+        return $matches[0] . parse_rcube_conditions($result);
+        }
+      else
+        {
+        raise_error(array('code' => 500, 'type' => 'php', 'line' => __LINE__, 'file' => __FILE__,
+                          'message' => "Unable to parse conditional tag " . $matches[2]), TRUE, FALSE);
+        }
+      }
+    }
+
+  return $input;
+  }
+
+ 
+/**
+ * Determines if a given condition is met
+ *
+ * @return True if condition is valid, False is not
+ */
+function rcube_xml_condition($condition)
+  {
+  $condition = preg_replace(
+      array('/session:([a-z0-9_]+)/i', '/config:([a-z0-9_]+)/i', '/request:([a-z0-9_]+)/ie'),
+      array("\$_SESSION['\\1']", "\$GLOBALS['CONFIG']['\\1']", "get_input_value('\\1', RCUBE_INPUT_GPC)"),
+      $condition);
+
+  return @eval("return (".$condition.");");
+  }
+
 
 function parse_rcube_xml($input)
   {
@@ -1127,12 +1222,19 @@
   }
 
 
+/**
+ * Convert a xml command tag into real content
+ */
 function rcube_xml_command($command, $str_attrib, $add_attrib=array())
   {
   global $IMAP, $CONFIG, $OUTPUT;
   
   $command = strtolower($command);
   $attrib = parse_attrib_string($str_attrib) + $add_attrib;
+  
+  // empty output if required condition is not met
+  if (!empty($attrib['condition']) && !rcube_xml_condition($attrib['condition']))
+    return '';
 
   // execute command
   switch ($command)
@@ -1578,7 +1680,7 @@
   $now = time();  // local time
   $now -= (int)date('Z'); // make GMT time
   $now += ($tz * 3600); // user's time
-  $now_date = getdate();
+  $now_date = getdate($now);
 
   $today_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday'], $now_date['year']);
   $week_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday']-6, $now_date['year']);
@@ -1718,14 +1820,22 @@
     $select_host = new select(array('name' => '_host', 'id' => 'rcmloginhost'));
     
     foreach ($CONFIG['default_host'] as $key => $value)
-      $select_host->add($value, (is_numeric($key) ? $value : $key));
+    {
+      if (!is_array($value))
+        $select_host->add($value, (is_numeric($key) ? $value : $key));
+      else
+        {
+        unset($select_host);
+        break;
+        }
+    }
       
-    $fields['host'] = $select_host->show($_POST['_host']);
+    $fields['host'] = isset($select_host) ? $select_host->show($_POST['_host']) : null;
     }
   else if (!strlen($CONFIG['default_host']))
     {
-	$input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30));
-	$fields['host'] = $input_host->show($_POST['_host']);
+    $input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30));
+    $fields['host'] = $input_host->show($_POST['_host']);
     }
 
   $form_name = strlen($attrib['form']) ? $attrib['form'] : 'form';

--
Gitblit v1.9.1