| | |
| | | |
| | | const JS_OBJECT_NAME = 'rcmail'; |
| | | |
| | | const ERROR_STORAGE = -2; |
| | | const ERROR_INVALID_REQUEST = 1; |
| | | const ERROR_INVALID_HOST = 2; |
| | | const ERROR_COOKIES_DISABLED = 3; |
| | | |
| | | |
| | | /** |
| | | * This implements the 'singleton' design pattern |
| | | * |
| | |
| | | /** |
| | | * Return instance of the internal address book class |
| | | * |
| | | * @param string Address book identifier |
| | | * @param string Address book identifier (-1 for default addressbook) |
| | | * @param boolean True if the address book needs to be writeable |
| | | * |
| | | * @return rcube_contacts Address book object |
| | |
| | | { |
| | | $contacts = null; |
| | | $ldap_config = (array)$this->config->get('ldap_public'); |
| | | $abook_type = strtolower($this->config->get('address_book_type')); |
| | | |
| | | // 'sql' is the alias for '0' used by autocomplete |
| | | if ($id == 'sql') |
| | | $id = '0'; |
| | | $id = '0'; |
| | | else if ($id == -1) { |
| | | $id = $this->config->get('default_addressbook'); |
| | | $default = true; |
| | | } |
| | | |
| | | // use existing instance |
| | | if (isset($this->address_books[$id]) && is_object($this->address_books[$id]) |
| | | && is_a($this->address_books[$id], 'rcube_addressbook') |
| | | && (!$writeable || !$this->address_books[$id]->readonly) |
| | | ) { |
| | | if (isset($this->address_books[$id]) && ($this->address_books[$id] instanceof rcube_addressbook)) { |
| | | $contacts = $this->address_books[$id]; |
| | | } |
| | | else if ($id && $ldap_config[$id]) { |
| | |
| | | if ($plugin['instance'] instanceof rcube_addressbook) { |
| | | $contacts = $plugin['instance']; |
| | | } |
| | | // get first source from the list |
| | | else if (!$id) { |
| | | $source = reset($this->get_address_sources($writeable)); |
| | | if (!empty($source)) { |
| | | $contacts = $this->get_address_book($source['id']); |
| | | if ($contacts) |
| | | $id = $source['id']; |
| | | } |
| | | } |
| | | |
| | | // Get first addressbook from the list if configured default doesn't exist |
| | | // This can happen when user deleted the addressbook (e.g. Kolab folder) |
| | | if (!$contacts && (!$id || $default)) { |
| | | $source = reset($this->get_address_sources($writeable)); |
| | | if (!empty($source)) { |
| | | $contacts = $this->get_address_book($source['id']); |
| | | if ($contacts) |
| | | $id = $source['id']; |
| | | } |
| | | } |
| | | |
| | |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Addressbook source ($id) not found!"), |
| | | true, true); |
| | | } |
| | | |
| | | if ($writeable && $contacts->readonly) { |
| | | return null; |
| | | } |
| | | |
| | | // set configured sort order |
| | |
| | | * @param string Mail storage (IMAP) user name |
| | | * @param string Mail storage (IMAP) password |
| | | * @param string Mail storage (IMAP) host |
| | | * @param bool Enables cookie check |
| | | * |
| | | * @return boolean True on success, False on failure |
| | | */ |
| | | function login($username, $pass, $host=NULL) |
| | | function login($username, $pass, $host = null, $cookiecheck = false) |
| | | { |
| | | $this->login_error = null; |
| | | |
| | | if (empty($username)) { |
| | | return false; |
| | | } |
| | | |
| | | if ($cookiecheck && empty($_COOKIE)) { |
| | | $this->login_error = self::ERROR_COOKIES_DISABLED; |
| | | return false; |
| | | } |
| | | |
| | |
| | | break; |
| | | } |
| | | } |
| | | if (!$allowed) |
| | | return false; |
| | | if (!$allowed) { |
| | | $host = null; |
| | | } |
| | | else if (!empty($config['default_host']) && $host != rcube_utils::parse_host($config['default_host'])) |
| | | } |
| | | else if (!empty($config['default_host']) && $host != rcube_utils::parse_host($config['default_host'])) { |
| | | $host = null; |
| | | } |
| | | |
| | | if (!$host) { |
| | | $this->login_error = self::ERROR_INVALID_HOST; |
| | | return false; |
| | | } |
| | | |
| | | // parse $host URL |
| | | $a_host = parse_url($host); |
| | |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Returns error code of last login operation |
| | | * |
| | | * @return int Error code |
| | | */ |
| | | public function login_error() |
| | | { |
| | | if ($this->login_error) { |
| | | return $this->login_error; |
| | | } |
| | | |
| | | if ($this->storage && $this->storage->get_error_code() < -1) { |
| | | return self::ERROR_STORAGE; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | */ |
| | | public function url($p) |
| | | { |
| | | if (!is_array($p)) |
| | | if (!is_array($p)) { |
| | | if (strpos($p, 'http') === 0) |
| | | return $p; |
| | | |
| | | $p = array('_action' => @func_get_arg(0)); |
| | | } |
| | | |
| | | $task = $p['_task'] ? $p['_task'] : ($p['task'] ? $p['task'] : $this->task); |
| | | $p['_task'] = $task; |