function imapSetQuota($_username, $_quotaLimit) { if (is_numeric($_quotaLimit) && $_quotaLimit >= 0) { // enable quota $quota_value = @imap_set_quota($this->mbox, "user." . $_username, $_quotaLimit * 1024); } else { // disable quota $quota_value = @imap_set_quota($this->mbox, "user." . $_username, -1); } }
function move_messages($params) { $folder = $params['folder']; $newmailbox = mb_convert_encoding($params['new_folder'], "UTF7-IMAP", (isset($params['decoded']) ? "" : "ISO-8859-1, ") . "UTF-8, UTF7-IMAP"); $new_folder_name = isset($params['decoded']) ? mb_convert_encoding($params['new_folder_name'], "ISO-8859-1", "UTF-8") : $params['new_folder_name']; $msgs_number = $params['msgs_number']; // Precisamos gravar o nome das mensagens movidas. $moveds = split(',', $msgs_number); $log_msgs = ''; foreach ($moveds as $msg_number) { if (!$this->mbox || !is_resource($this->mbox)) { $this->mbox = $this->open_mbox($folder); } $header = $this->get_header($msg_number); $message_id = $header->message_id; $subj = isset($header->fetchsubject) ? $this->decode_string($header->fetchsubject) : ''; $log_msgs .= '#[' . $subj . '|' . $message_id . ']'; } $log_msgs .= " FROM " . $folder . " TO " . $newmailbox; $return = array('msgs_number' => $msgs_number, 'folder' => $folder, 'new_folder_name' => $new_folder_name, 'border_ID' => $params['border_ID'], 'status' => true); //Status foi adicionado para validar as permissoes ACL //Este bloco tem a finalidade de averiguar as permissoes para pastas compartilhadas if (substr($folder, 0, 4) == 'user') { $acl = $this->getacltouser($folder, isset($params['decoded'])); /* * l - lookup (mailbox is visible to LIST/LSUB commands, SUBSCRIBE mailbox) * r - read (SELECT the mailbox, perform STATUS) * s - keep seen/unseen information across sessions (set or clear \SEEN flag via STORE, also set \SEEN during APPEND/COPY/ FETCH BODY[...]) * w - write (set or clear flags other than \SEEN and \DELETED via STORE, also set them during APPEND/COPY) * i - insert (perform APPEND, COPY into mailbox) * p - post (send mail to submission address for mailbox, not enforced by IMAP4 itself) * k - create mailboxes (CREATE new sub-mailboxes in any implementation-defined hierarchy, parent mailbox for the new mailbox name in RENAME) * x - delete mailbox (DELETE mailbox, old mailbox name in RENAME) * t - delete messages (set or clear \DELETED flag via STORE, set \DELETED flag during APPEND/COPY) * e - perform EXPUNGE and expunge as a part of CLOSE * a - administer (perform SETACL/DELETEACL/GETACL/LISTRIGHTS) * Os Atributos da ACL para pastas compartilhadas são definidos no arquivo sharemailbox.js, na função setaclfromuser * Os Atributos da ACL para contas compartilhadas são definidos no arquivo shared_accounts.js, na função setaclfromuser */ $acl_share_delete = stripos($acl, 't') !== false && stripos($acl, 'e') !== false; if (!$acl_share_delete) { $return['status'] = false; return $return; } } //Este bloco tem a finalidade de transformar o CPF das pastas compartilhadas em common name if (array_key_exists('uid2cn', $_SESSION['phpgw_info']['user']['preferences']['expressoMail'])) { if ($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['uid2cn']) { if (substr($new_folder_name, 0, 4) == 'user') { $this->ldap = new ldap_functions(); $tmp_folder_name = explode($this->imap_delimiter, $new_folder_name); $return['new_folder_name'] = array_pop($tmp_folder_name); if ($cn = $this->ldap->uid2cn($return['new_folder_name'])) { $return['new_folder_name'] = $cn; } } } } // Caso estejamos no box principal, nao eh necessario pegar a informacao da mensagem anterior. if ($params['get_previous_msg'] && $params['border_ID'] != 'null' && $params['border_ID'] != '') { $return['previous_msg'] = $this->get_info_previous_msg($params); // Fix problem in unserialize function JS. if (array_key_exists('body', $return['previous_msg'])) { $return['previous_msg']['body'] = str_replace(array('{', '}'), array('{', '}'), $return['previous_msg']['body']); } } $mbox_stream = $this->open_mbox($folder); if (imap_mail_move($mbox_stream, $msgs_number, $newmailbox, CP_UID)) { imap_expunge($mbox_stream); if ($mbox_stream) { imap_close($mbox_stream); } Logger::info('expressomail', 'movemsg', $log_msgs); return $return; } else { if (strstr(imap_last_error(), 'Over quota')) { $accountID = $_SESSION['phpgw_info']['expressomail']['email_server']['imapAdminUsername']; $pass = $_SESSION['phpgw_info']['expressomail']['email_server']['imapAdminPW']; $userID = $_SESSION['phpgw_info']['expressomail']['user']['userid']; $server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; $mbox = @imap_open("{" . $this->imap_server . ":" . $this->imap_port . $this->imap_options . "}INBOX", $accountID, $pass) or die(serialize(array('imap_error' => $this->parse_error(imap_last_error())))); if (!$mbox) { return imap_last_error(); } $quota = imap_get_quotaroot($mbox_stream, "INBOX"); if (!imap_set_quota($mbox, "user" . $this->imap_delimiter . $userID, 2.1 * $quota['usage'])) { if ($mbox_stream) { imap_close($mbox_stream); } if ($mbox) { imap_close($mbox); } return "move_messages(): Error setting quota for MOVE or DELETE!! " . "user" . $this->imap_delimiter . $userID . " line " . __LINE__ . "\n"; } if (imap_mail_move($mbox_stream, $msgs_number, $newmailbox, CP_UID)) { imap_expunge($mbox_stream); if ($mbox_stream) { imap_close($mbox_stream); } // return to original quota limit. if (!imap_set_quota($mbox, "user" . $this->imap_delimiter . $userID, $quota['limit'])) { if ($mbox) { imap_close($mbox); } return "move_messages(): Error setting quota for MOVE or DELETE!! line " . __LINE__ . "\n"; } Logger::info('expressomail', 'movemsg', $log_msgs); return $return; } else { if ($mbox_stream) { imap_close($mbox_stream); } if (!imap_set_quota($mbox, "user" . $this->imap_delimiter . $userID, $quota['limit'])) { if ($mbox) { imap_close($mbox); } return "move_messages(): Error setting quota for MOVE or DELETE!! line " . __LINE__ . "\n"; } return imap_last_error(); } } else { if ($mbox_stream) { imap_close($mbox_stream); } $msg_error = "move_messages() line " . __LINE__ . ": " . imap_last_error() . " folder:" . $newmailbox; trigger_error($msg_error); return $msg_error; } } }