⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.72
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
psa-horde
/
imp
/
lib
/
Mailbox
/
View File Name :
SessionCache.php
* @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/gpl GPL * @package IMP * * @property-read boolean $changed Has the internal object storage changed? */ class IMP_Mailbox_SessionCache implements Serializable { /** Changed constants. */ const CHANGED_NO = 0; const CHANGED_YES = 1; /** Cache identifiers. */ const CACHE_ACL = 'a'; // (array) ACL rights const CACHE_DISPLAY = 'd'; // (string) Display string const CACHE_ICONS = 'i'; // (array) Icons array const CACHE_LABEL = 'l'; // (string) Label string const CACHE_UIDVALIDITY = 'v'; // (integer) UIDVALIDITY /** Cache identifiers - temporary data. */ const CACHE_EXISTS = 'e'; const CACHE_ICONHOOK = 'ic'; const CACHE_PREFTO = 'pt'; const CACHE_SPECIALMBOXES = 's'; /** * Cached data. * * @var array */ protected $_cache = array(); /** * Has this object changed? * * @var integer */ protected $_changed = self::CHANGED_NO; /** * Temporary (access-only) cached data. * * @var array */ protected $_temp = array(); /** */ public function __get($name) { switch ($name) { case 'changed': return $this->_changed; } } /** * Get ACL data. * * @param string $mbox Mailbox. * * @return mixed A Horde_Imap_Client_Data_Acl object, null if no ACL * data, or false if not set. */ public function getAcl($mbox) { if (!isset($this->_cache[$mbox]) || !array_key_exists(self::CACHE_ACL, $this->_cache[$mbox])) { return false; } return is_null($this->_cache[$mbox][self::CACHE_ACL]) ? null : new Horde_Imap_Client_Data_Acl($this->_cache[$mbox][self::CACHE_ACL]); } /** * Set ACL data. * * @param string $mbox Mailbox. * @param mixed $acl Horde_Imap_Client_Data_Acl object, or null. */ public function setAcl($mbox, $acl) { /* Store string representation of ACL for a more compact * serialized format. */ $this->_cache[$mbox][self::CACHE_ACL] = is_null($acl) ? $acl : strval($acl); $this->_changed = self::CHANGED_YES; } /** * Get the mailbox label. * * @param string $mbox Mailbox. * * @return mixed Mailbox label, or false if not set. */ public function getLabel($mbox) { if (!isset($this->_cache[$mbox][self::CACHE_LABEL])) { return false; } return ($this->_cache[$mbox][self::CACHE_LABEL] === true) ? $this->_cache[$mbox][self::CACHE_DISPLAY] : $this->_cache[$mbox][self::CACHE_LABEL]; } /** * Set the mailbox label. * * @param string $mbox Mailbox. * @param string $label Label. */ public function setLabel($mbox, $label) { $this->_cache[$mbox][self::CACHE_LABEL] = (isset($this->_cache[$mbox][self::CACHE_DISPLAY]) && ($this->_cache[$mbox][self::CACHE_DISPLAY] == $label)) ? true : $label; $this->_changed = self::CHANGED_YES; } /** * Preference storage name. * * @param string $mbox Mailbox. * * @return mixed Preference string, or false if not set. */ public function getPrefTo($mbox) { return isset($this->_temp[$mbox][self::CACHE_PREFTO]) ? $this->_temp[$mbox][self::CACHE_PREFTO] : false; } /** * Set the preference storage name. * * @param string $mbox Mailbox. * @param string $pref_to Preference storage name. */ public function setPrefTo($mbox, $pref_to) { $this->_temp[$mbox][self::CACHE_PREFTO] = $pref_to; $this->_changed = self::CHANGED_YES; } /** * Get the UIDVALIDITY of the mailbox. * * @param string $mbox Mailbox. * * @return mixed UIDVALIDITY, or false if not set. */ public function getUidvalidity($mbox) { return isset($this->_cache[$mbox][self::CACHE_UIDVALIDITY]) ? $this->_cache[$mbox][self::CACHE_UIDVALIDITY] : false; } /** * Set the UIDVALIDITY of the mailbox. * * @param string $mbox Mailbox. * @param integer $uidvalid UIDVALIDITY. */ public function setUidvalidity($mbox, $uidvalid) { $this->_cache[$mbox][self::CACHE_UIDVALIDITY] = $uidvalid; $this->_changed = self::CHANGED_YES; } /** * Get mailbox display label. * * @param string $mbox Mailbox. * * @return mixed Mailbox display label, or false if not set. */ public function getDisplay($mbox) { return isset($this->_cache[$mbox][self::CACHE_DISPLAY]) ? $this->_cache[$mbox][self::CACHE_DISPLAY] : false; } /** * Set mailbox display label. * * @param string $mbox Mailbox. * @param string $display Display label. */ public function setDisplay($mbox, $display) { $this->_cache[$mbox][self::CACHE_DISPLAY] = $display; $this->_changed = self::CHANGED_YES; } /** * Get icon information. * * @param string $mbox Mailbox. * * @return mixed Icon information (array), or false if not set. */ public function getIcons($mbox) { global $injector; if (isset($this->_cache[$mbox][self::CACHE_ICONS])) { return $this->_cache[$mbox][self::CACHE_ICONS]; } if (!isset($this->_temp[self::CACHE_ICONHOOK])) { try { $this->_temp[self::CACHE_ICONHOOK] = $injector->getInstance('Horde_Core_Hooks')->callHook('mbox_icons', 'imp'); } catch (Horde_Exception_HookNotSet $e) { $this->_temp[self::CACHE_ICONHOOK] = array(); } } $icons = isset($this->_temp[self::CACHE_ICONHOOK][$mbox]) ? $this->_temp[self::CACHE_ICONHOOK][$mbox] : false; $this->_cache[$mbox][self::CACHE_ICONS] = $icons; $this->_changed = self::CHANGED_YES; return $icons; } /** * Return the list of special mailboxes. * * @return array A list of mailboxes, with the SPECIAL_* constants * as keys and values containing the IMP_Mailbox objects or * null if the mailbox doesn't exist (SPECIAL_SENT * contains an array of objects). */ public function getSpecialMailboxes() { global $injector, $prefs; if (!isset($this->_temp[self::CACHE_SPECIALMBOXES])) { $sm = array( IMP_Mailbox::SPECIAL_COMPOSETEMPLATES => IMP_Mailbox::getPref(IMP_Mailbox::MBOX_TEMPLATES), IMP_Mailbox::SPECIAL_DRAFTS => IMP_Mailbox::getPref(IMP_Mailbox::MBOX_DRAFTS), IMP_Mailbox::SPECIAL_SENT => $injector->getInstance('IMP_Identity')->getAllSentmail(), IMP_Mailbox::SPECIAL_SPAM => IMP_Mailbox::getPref(IMP_Mailbox::MBOX_SPAM), IMP_Mailbox::SPECIAL_TRASH => $prefs->getValue('use_trash') ? IMP_Mailbox::getPref(IMP_Mailbox::MBOX_TRASH) : null, IMP_Mailbox::SPECIAL_USER => array() ); foreach ($injector->getInstance('IMP_Factory_Imap')->create()->config->user_special_mboxes as $key => $val) { $ob = IMP_Mailbox::get($key); $ob->display = $val; $sm[IMP_Mailbox::SPECIAL_USER][strval($key)] = $ob; } $this->_temp[self::CACHE_SPECIALMBOXES] = $sm; } return $this->_temp[self::CACHE_SPECIALMBOXES]; } /** * Return whether the mailbox exists. * * @param string $mbox Mailbox. * * @return boolean True if mailbox exists. */ public function exists($mbox) { $s_mbox = strval($mbox); if (!isset($this->_temp[$s_mbox][self::CACHE_EXISTS])) { $mbox = IMP_Mailbox::get($mbox); if ($mbox->search) { $exists = (($ob = $mbox->getSearchOb()) && $ob->enabled); } elseif ($elt = $mbox->tree_elt) { $exists = !$elt->container; } else { try { $mbox_list = $mbox->imp_imap->listMailboxes( $mbox->imap_mbox_ob, null, array('attributes' => true) ); $exists = (isset($mbox_list[strval($mbox)]) && !in_array('\\noselect', $mbox_list[strval($mbox)]['attributes'])); } catch (IMP_Imap_Exception $e) { $exists = false; } } $this->_temp[$s_mbox][self::CACHE_EXISTS] = $exists; } return $this->_temp[$s_mbox][self::CACHE_EXISTS]; } /** * Expire cache entries. * * @param mixed $entries A CACHE_* constant (or array of constants). * If null, expires all mailbox-level cache * entries. * @param IMP_Mailbox $mbox If set, only clear this mailbox's cache. */ public function expire($entries, $mbox = null) { if (is_null($entries)) { $entries = array( self::CACHE_ACL, self::CACHE_DISPLAY, self::CACHE_EXISTS, self::CACHE_ICONS, self::CACHE_LABEL, self::CACHE_PREFTO, self::CACHE_UIDVALIDITY ); } elseif (!is_array($entries)) { $entries = array($entries); } if (in_array(self::CACHE_DISPLAY, $entries)) { $entries[] = self::CACHE_LABEL; } foreach ($entries as $val) { switch ($val) { case self::CACHE_ACL: case self::CACHE_DISPLAY: case self::CACHE_EXISTS: case self::CACHE_ICONS: case self::CACHE_LABEL: case self::CACHE_PREFTO: case self::CACHE_UIDVALIDITY: if (!isset($mbox_list)) { $mbox_list = $mbox ? array(strval($mbox)) : array_merge(array_keys($this->_cache), array_keys($this->_temp)); } foreach ($mbox_list as $val2) { if (isset($this->_cache[$val2][$val])) { $this->_changed = self::CHANGED_YES; } unset( $this->_cache[$val2][$val], $this->_temp[$val2][$val] ); } break; case self::CACHE_ICONHOOK: case self::CACHE_SPECIALMBOXES: if (($c = isset($this->_cache[$val])) || isset($this->_temp[$val])) { if ($c) { $this->_changed = self::CHANGED_YES; } unset($this->_cache[$val], $this->_temp[$val]); } break; } } } /* Serializable methods. */ /** */ public function serialize() { return $GLOBALS['injector']->getInstance('Horde_Pack')->pack( $this->_cache, array( 'compression' => false, 'phpob' => false ) ); } /** */ public function unserialize($data) { $this->_cache = $GLOBALS['injector']->getInstance('Horde_Pack')->unpack($data); } }