public function testConvertToBytes() { $this->assertEquals(1024, Tinebase_Helper::convertToBytes('1024')); $this->assertEquals(1024, Tinebase_Helper::convertToBytes('1K')); $this->assertEquals(1024 * 1024, Tinebase_Helper::convertToBytes('1M')); $this->assertEquals(1024 * 1024 * 1024, Tinebase_Helper::convertToBytes('1G')); }
/** * get anonymous registry * * @return array */ protected function _getAnonymousRegistryData() { $locale = Tinebase_Core::get('locale'); $tbFrontendHttp = new Tinebase_Frontend_Http(); // default credentials if (isset(Tinebase_Core::getConfig()->login)) { $loginConfig = Tinebase_Core::getConfig()->login; $defaultUsername = isset($loginConfig->username) ? $loginConfig->username : ''; $defaultPassword = isset($loginConfig->password) ? $loginConfig->password : ''; } else { $defaultUsername = ''; $defaultPassword = ''; } $symbols = Zend_Locale::getTranslationList('symbols', $locale); $registryData = array('modSsl' => Tinebase_Auth::getConfiguredBackend() == Tinebase_Auth::MODSSL, 'serviceMap' => $tbFrontendHttp->getServiceMap(), 'locale' => array('locale' => $locale->toString(), 'language' => Zend_Locale::getTranslation($locale->getLanguage(), 'language', $locale), 'region' => Zend_Locale::getTranslation($locale->getRegion(), 'country', $locale)), 'version' => array('buildType' => TINE20_BUILDTYPE, 'codeName' => TINE20_CODENAME, 'packageString' => TINE20_PACKAGESTRING, 'releaseTime' => TINE20_RELEASETIME, 'filesHash' => TINE20_BUILDTYPE != 'DEVELOPMENT' ? $tbFrontendHttp->getJsCssHash() : null), 'defaultUsername' => $defaultUsername, 'defaultPassword' => $defaultPassword, 'denySurveys' => Tinebase_Core::getConfig()->denySurveys, 'titlePostfix' => Tinebase_Config::getInstance()->get(Tinebase_Config::PAGETITLEPOSTFIX), 'redirectUrl' => Tinebase_Config::getInstance()->get(Tinebase_Config::REDIRECTURL), 'helpUrl' => Tinebase_Core::getConfig()->helpUrl, 'maxFileUploadSize' => Tinebase_Helper::convertToBytes(ini_get('upload_max_filesize')), 'maxPostSize' => Tinebase_Helper::convertToBytes(ini_get('post_max_size')), 'thousandSeparator' => $symbols['group'], 'decimalSeparator' => $symbols['decimal'], 'filesystemAvailable' => Tinebase_Core::isFilesystemAvailable()); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Anonymous registry: ' . print_r($registryData, TRUE)); } return $registryData; }
/** * convert object with user data to ldap data array * * @param Tinebase_Model_FullUser $_user * @param array $_ldapData the data to be written to ldap * @param array $_ldapEntry the data currently stored in ldap */ protected function _user2Ldap(Tinebase_Model_FullUser $_user, array &$_ldapData, array &$_ldapEntry = array()) { if ($this instanceof Tinebase_EmailUser_Smtp_Interface) { if (empty($_user->smtpUser)) { return; } $mailSettings = $_user->smtpUser; } else { if (empty($_user->imapUser)) { return; } $mailSettings = $_user->imapUser; } foreach ($this->_propertyMapping as $objectProperty => $ldapAttribute) { $value = empty($mailSettings->{$objectProperty}) ? array() : $mailSettings->{$objectProperty}; switch ($objectProperty) { case 'emailMailQuota': // convert to bytes $_ldapData[$ldapAttribute] = !empty($mailSettings->{$objectProperty}) ? Tinebase_Helper::convertToBytes($mailSettings->{$objectProperty} . 'M') : array(); break; case 'emailUID': $_ldapData[$ldapAttribute] = $this->_appendDomain($_user->accountLoginName); break; case 'emailGID': $_ldapData[$ldapAttribute] = $this->_config['emailGID']; break; case 'emailForwardOnly': $_ldapData[$ldapAttribute] = $mailSettings->{$objectProperty} == true ? 'forwardonly' : array(); break; case 'emailAddress': $_ldapData[$ldapAttribute] = $_user->accountEmailAddress; break; default: $_ldapData[$ldapAttribute] = $mailSettings->{$objectProperty}; break; } } if ((isset($this->_propertyMapping['emailForwards']) || array_key_exists('emailForwards', $this->_propertyMapping)) && empty($_ldapData[$this->_propertyMapping['emailForwards']])) { $_ldapData[$this->_propertyMapping['emailForwardOnly']] = array(); } // check if user has all required object classes. This is needed // when updating users which where created using different requirements foreach ($this->_requiredObjectClass as $className) { if (!in_array($className, $_ldapData['objectclass'])) { // merge all required classes at once $_ldapData['objectclass'] = array_unique(array_merge($_ldapData['objectclass'], $this->_requiredObjectClass)); break; } } }
/** * get max attachment size for outgoing mails * * - currently it is set to memory_limit / 10 * - returns size in Bytes * * @return integer */ protected function _getMaxAttachmentSize() { $configuredMemoryLimit = ini_get('memory_limit'); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' memory_limit = ' . $configuredMemoryLimit); } if ($configuredMemoryLimit === FALSE or $configuredMemoryLimit == -1) { // set to a big default value $configuredMemoryLimit = '512M'; } return Tinebase_Helper::convertToBytes($configuredMemoryLimit) / 10; }
/** * returns array of raw Dbmail data * * @param Tinebase_Model_EmailUser $_user * @param Tinebase_Model_EmailUser $_newUserProperties * @return array */ protected function _recordToRawData(Tinebase_Model_FullUser $_user, Tinebase_Model_FullUser $_newUserProperties) { $rawData = array(); foreach ($_newUserProperties->imapUser as $key => $value) { $property = isset($this->_propertyMapping[$key]) || array_key_exists($key, $this->_propertyMapping) ? $this->_propertyMapping[$key] : false; if ($property && !in_array($key, $this->_readOnlyFields)) { switch ($key) { case 'emailPassword': $rawData[$property] = Hash_Password::generate($this->_config['emailScheme'], $value, false); $rawData[$this->_propertyMapping['emailScheme']] = $this->_config['emailScheme']; break; case 'emailUserId': case 'emailGID': case 'emailUsername': // do nothing break; case 'emailMailQuota': case 'emailMailSize': case 'emailSieveQuota': case 'emailSieveSize': // convert to bytes $rawData[$property] = Tinebase_Helper::convertToBytes($value . 'M'); break; default: $rawData[$property] = $value; } } } $rawData[$this->_propertyMapping['emailUserId']] = $this->_hasTine20Userid === true ? $_user->getId() : $this->_convertToInt($_user->getId()); if ($this->_hasTine20Userid === true) { $rawData[$this->_propertyMapping['emailGID']] = $this->_config['emailGID']; $rawData['client_idnr'] = $this->_convertToInt($this->_config['emailGID']); } else { $rawData[$this->_propertyMapping['emailGID']] = $this->_convertToInt($this->_config['emailGID']); } $rawData[$this->_propertyMapping['emailUsername']] = $this->_appendDomain($_user->accountLoginName); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($rawData, TRUE)); } return $rawData; }
/** * do php.ini environment check * * @return array */ public function environmentCheck() { $result = array(); $message = array(); $success = TRUE; // check php environment $requiredIniSettings = array('magic_quotes_sybase' => 0, 'magic_quotes_gpc' => 0, 'magic_quotes_runtime' => 0, 'mbstring.func_overload' => 0, 'eaccelerator.enable' => 0, 'memory_limit' => '48M'); foreach ($requiredIniSettings as $variable => $newValue) { $oldValue = ini_get($variable); if ($variable == 'memory_limit') { $required = Tinebase_Helper::convertToBytes($newValue); $set = Tinebase_Helper::convertToBytes($oldValue); if ($set < $required) { $result[] = array('key' => $variable, 'value' => FALSE, 'message' => "You need to set {$variable} equal or greater than {$required} (now: {$set})." . $this->_helperLink); $success = FALSE; } } elseif ($oldValue != $newValue) { if (ini_set($variable, $newValue) === false) { $result[] = array('key' => $variable, 'value' => FALSE, 'message' => "You need to set {$variable} from {$oldValue} to {$newValue}." . $this->_helperLink); $success = FALSE; } } else { $result[] = array('key' => $variable, 'value' => TRUE, 'message' => ''); } } return array('result' => $result, 'success' => $success); }
/** * return true there is memory $needed left * * @param int $needed * @return boolean */ protected function _isMemoryLeft($needed) { if (ini_get('memory_limit') == -1) { return true; } // calculate with an overhead of 1.2 if (Tinebase_Helper::convertToBytes(ini_get('memory_limit')) > memory_get_usage(TRUE) + $needed * 1.2) { return true; } return false; }
/** * set quota directly on IMAP server * * @param Tinebase_Model_FullUser $_user * @param Zend_Mail_Protocol_Imap $_imap * @param string $_mailboxString */ protected function _setImapQuota(Tinebase_Model_FullUser $_user, Zend_Mail_Protocol_Imap $_imap = NULL, $_mailboxString = NULL) { $imap = $_imap !== NULL ? $_imap : $this->_getImapConnection(); $mailboxString = $_mailboxString !== NULL ? $_mailboxString : $this->_getUserMailbox($_user->accountLoginName); if (isset($_user->imapUser)) { $limit = $_user->imapUser->emailMailQuota > 0 ? Tinebase_Helper::convertToBytes($_user->imapUser->emailMailQuota . 'M') / 1024 : null; if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . " Setting quota of user " . $_user->getId() . " to " . $limit); } $imap->setQuota($mailboxString, 'STORAGE', $limit); } }
/** * Returns registry data of all applications current user has access to * @see Tinebase_Application_Json_Abstract * * @return mixed array 'variable name' => 'data' * * TODO DRY: most of this already is part of Tinebase_Frontend_Json::_getAnonymousRegistryData */ public function getAllRegistryData() { $registryData['Setup'] = $this->getRegistryData(); // setup also need some core tinebase regdata $locale = Tinebase_Core::get('locale'); $registryData['Tinebase'] = array('serviceMap' => Setup_Frontend_Http::getServiceMap(), 'timeZone' => Setup_Core::getUserTimezone(), 'jsonKey' => Setup_Core::get('jsonKey'), 'locale' => array('locale' => $locale->toString(), 'language' => Zend_Locale::getTranslation($locale->getLanguage(), 'language', $locale), 'region' => Zend_Locale::getTranslation($locale->getRegion(), 'country', $locale)), 'version' => array('buildType' => TINE20_BUILDTYPE, 'codeName' => TINE20SETUP_CODENAME, 'packageString' => TINE20SETUP_PACKAGESTRING, 'releaseTime' => TINE20SETUP_RELEASETIME), 'maxFileUploadSize' => Tinebase_Helper::convertToBytes(ini_get('upload_max_filesize')), 'maxPostSize' => Tinebase_Helper::convertToBytes(ini_get('post_max_size'))); return $registryData; }