Happy New Year
[squirrelmail.git] / functions / folder_manip.php
index b1032dc9f9b511ccd3cbbc52c2a886af6a839c20..76b702313eb9e914b5665d1d16b424a13653b31f 100644 (file)
@@ -7,7 +7,7 @@
  * (un)subscribe, create, rename, delete.
  *
  * @author Thijs Kinkhorst <kink at squirrelmail.org>
- * @copyright &copy; 1999-2006 The SquirrelMail Project Team
+ * @copyright 1999-2020 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
@@ -41,6 +41,12 @@ function folders_checkname($imapConnection, $folder_name, $delimiter)
 
 /**
  * Called from folders.php to create a new folder.
+ * @param stream $imapConnection imap connection resource
+ * @param string $delimiter delimiter
+ * @param string $folder_name new folder name
+ * @param string $subfolder folder that stores new folder
+ * @param string $contain_subs if not empty, creates folder that can store subfolders
+ * @since 1.5.1
  */
 function folders_create ($imapConnection, $delimiter, $folder_name, $subfolder, $contain_subs)
 {
@@ -51,7 +57,9 @@ function folders_create ($imapConnection, $delimiter, $folder_name, $subfolder,
     $folder_name = imap_utf7_encode_local($folder_name);
 
     if ( ! empty($contain_subs) ) {
-        $folder_name = $folder_name . $delimiter;
+        $folder_type = 'noselect';
+    } else {
+        $folder_type = '';
     }
 
     if ($folder_prefix && (substr($folder_prefix, -1) != $delimiter)) {
@@ -65,9 +73,9 @@ function folders_create ($imapConnection, $delimiter, $folder_name, $subfolder,
     }
 
     if (trim($subfolder_orig) == '') {
-        sqimap_mailbox_create ($imapConnection, $folder_prefix.$folder_name, '');
+        sqimap_mailbox_create ($imapConnection, $folder_prefix.$folder_name, $folder_type);
     } else {
-        sqimap_mailbox_create ($imapConnection, $subfolder.$delimiter.$folder_name, '');
+        sqimap_mailbox_create ($imapConnection, $subfolder.$delimiter.$folder_name, $folder_type);
     }
 
     return;
@@ -78,12 +86,13 @@ function folders_create ($imapConnection, $delimiter, $folder_name, $subfolder,
  * folder should be renamed to.
  */
 function folders_rename_getname ($imapConnection, $delimiter, $old) {
-    global $color,$default_folder_prefix;
+    global $color, $default_folder_prefix, $oTemplate;
 
     if ( $old == '' ) {
         plain_error_message(_("You have not selected a folder to rename. Please do so.").
             '<br /><a href="../src/folders.php">'._("Click here to go back").'</a>.', $color);
         sqimap_logout($imapConnection);
+        $oTemplate->display('footer.tpl');
         exit;
     }
 
@@ -97,7 +106,7 @@ function folders_rename_getname ($imapConnection, $delimiter, $old) {
     $old = imap_utf7_decode_local($old);
 
     if (strpos($old, $delimiter)) {
-        $old_name = substr($old, strrpos($old, $delimiter)+1, strlen($old));
+        $old_name = substr($old, strrpos($old, $delimiter)+1);
         // hide default prefix (INBOX., mail/ or other)
         $quoted_prefix=preg_quote($default_folder_prefix,'/');
         $prefix_length=(preg_match("/^$quoted_prefix/",$old) ? strlen($default_folder_prefix) : 0);
@@ -111,30 +120,18 @@ function folders_rename_getname ($imapConnection, $delimiter, $old) {
         $old_name = $old;
         $old_parent = '';
     }
+    
+    sqimap_logout($imapConnection);
 
-    echo '<br />' .
-    html_tag( 'table', '', 'center', '', 'width="95%" border="0"' ) .
-        html_tag( 'tr',
-            html_tag( 'td', '<b>' . _("Rename a folder") . '</b>', 'center', $color[0] )
-        ) .
-        html_tag( 'tr' ) .
-            html_tag( 'td', '', 'center', $color[4] ) .
-            addForm('folders.php').
-            addHidden('smaction', 'rename').
-             '<label for="new_name">' . _("New name:") . '</label>' .
-             '<br /><b>' . htmlspecialchars($old_parent) . '</b>' .
-             addInput('new_name', $old_name, 25) . '<br /><br />' . "\n";
-             if ( $isfolder ) {
-                 echo addHidden('isfolder', 'true');
-             }
-             echo addHidden('orig', $old).
-             addHidden('old_name', $old_name).
-             '<input type="submit" value="'._("Rename")."\" />\n".
-             '<input type="submit" name="cancelbutton" value="'._("Cancel")."\" />\n".
-             '</form><br /></td></tr></table>';
-    echo "\n</td></tr></table>\n</td></tr></table>\n\n</body></html>";
+    $oTemplate->assign('dialog_type', 'rename');
+    $oTemplate->assign('parent_folder', sm_encode_html_special_chars($old_parent));
+    $oTemplate->assign('current_full_name', sm_encode_html_special_chars($old));
+    $oTemplate->assign('current_folder_name', sm_encode_html_special_chars($old_name));
+    $oTemplate->assign('is_folder', $isfolder);
+    
+    $oTemplate->display('folder_manip_dialog.tpl');
+    $oTemplate->display('footer.tpl');
 
-    sqimap_logout($imapConnection);
     exit;
 }
 
@@ -182,11 +179,13 @@ function folders_rename_do($imapConnection, $delimiter, $orig, $old_name, $new_n
  */
 function folders_delete_ask ($imapConnection, $folder_name)
 {
-    global $color,$default_folder_prefix;
+    global $color, $default_folder_prefix, $oTemplate;
 
     if ($folder_name == '') {
         plain_error_message(_("You have not selected a folder to delete. Please do so.").
             '<br /><a href="../src/folders.php">'._("Click here to go back").'</a>.', $color);
+        sqimap_logout($imapConnection);
+        $oTemplate->display('footer.tpl');
         exit;
     }
 
@@ -196,25 +195,15 @@ function folders_delete_ask ($imapConnection, $folder_name)
     $prefix_length = (preg_match("/^$quoted_prefix/",$visible_folder_name) ? strlen($default_folder_prefix) : 0);
     $visible_folder_name = substr($visible_folder_name,$prefix_length);
 
-    echo '<br />' .
-        html_tag( 'table', '', 'center', '', 'width="95%" border="0"' ) .
-        html_tag( 'tr',
-            html_tag( 'td', '<b>' . _("Delete Folder") . '</b>', 'center', $color[0] )
-        ) .
-        html_tag( 'tr' ) .
-        html_tag( 'td', '', 'center', $color[4] ) .
-        sprintf(_("Are you sure you want to delete %s?"),
-            str_replace(array(' ','<','>'),array('&nbsp;','&lt;','&gt;'),$visible_folder_name)).
-        addForm('folders.php', 'post')."<p>\n".
-        addHidden('smaction', 'delete').
-        addHidden('folder_name', $folder_name).
-        addSubmit(_("Yes"), 'confirmed').
-        addSubmit(_("No"), 'cancelbutton').
-        '</p></form><br /></td></tr></table>';
-
-    echo "\n</td></tr></table>\n</td></tr></table>\n\n</body></html>";
-
     sqimap_logout($imapConnection);
+
+    $oTemplate->assign('dialog_type', 'delete');
+    $oTemplate->assign('folder_name', sm_encode_html_special_chars($folder_name));
+    $oTemplate->assign('visible_folder_name', sm_encode_html_special_chars($visible_folder_name));
+    
+    $oTemplate->display('folder_manip_dialog.tpl');
+    $oTemplate->display('footer.tpl');
+
     exit;
 }
 
@@ -237,18 +226,10 @@ function folders_delete_do ($imapConnection, $delimiter, $folder_name)
 
     /** lets see if we CAN move folders to the trash.. otherwise,
         ** just delete them **/
-
-    /* Courier IMAP doesn't like subfolders of Trash
-     * If global options say we can't move it into Trash
-     * If it's already a subfolder of trash, we'll have to delete it */
-    if (strtolower($imap_server_type) == 'courier' ||
-       (isset($delete_folder) && $delete_folder) ||
-        eregi('^'.$trash_folder.'.+', $folder_name) )
-    {
+    if ($delete_folder || preg_match('/^' . preg_quote($trash_folder, '/') . '.+/i', $folder_name) ) {
         $can_move_to_trash = FALSE;
-    }
+    } else {
     /* Otherwise, check if trash folder exits and support sub-folders */
-    else {
         foreach($boxes as $box) {
             if ($box['unformatted'] == $trash_folder) {
                 $can_move_to_trash = !in_array('noinferiors', $box['flags']);
@@ -290,12 +271,13 @@ function folders_delete_do ($imapConnection, $delimiter, $folder_name)
  */
 function folders_subscribe($imapConnection, $folder_names)
 {
-    global $color;
+    global $color, $oTemplate;
 
     if (count($folder_names) == 0 || $folder_names[0] == '') {
         plain_error_message(_("You have not selected a folder to subscribe. Please do so.").
             '<br /><a href="../src/folders.php">'._("Click here to go back").'</a>.', $color);
         sqimap_logout($imapConnection);
+        $oTemplate->display('footer.tpl');
         exit;
     }
 
@@ -325,12 +307,13 @@ function folders_subscribe($imapConnection, $folder_names)
  */
 function folders_unsubscribe($imapConnection, $folder_names)
 {
-    global $color;
+    global $color, $oTemplate;
 
     if (count($folder_names) == 0 || $folder_names[0] == '') {
         plain_error_message(_("You have not selected a folder to unsubscribe. Please do so.").
             '<br /><a href="../src/folders.php">'._("Click here to go back").'</a>.', $color);
         sqimap_logout($imapConnection);
+        $oTemplate->display('footer.tpl');
         exit;
     }