/**
  * Returns itself when evaluating.
  */
 function evaluate()
 {
     $emailStr = $this->getParameters()->evaluate();
     if ($emailStr == "") {
         return AbstractExpression::$TRUE;
     }
     $lastChar = $emailStr[strlen($emailStr) - 1];
     if (!preg_match('/[^\\.]/i', $lastChar)) {
         return AbstractExpression::$FALSE;
     }
     // validate it
     $emailArr = preg_split('/[,;]/', $emailStr);
     for ($i = 0; $i < sizeof($emailArr); $i++) {
         $emailAddress = trim($emailArr[$i]);
         if ($emailAddress != '' && !SugarEmailAddress::isValidEmail($emailAddress)) {
             return AbstractExpression::$FALSE;
         }
     }
     return AbstractExpression::$TRUE;
 }
示例#2
0
 /**
  * This should be called when the bean is saved from the API. 
  * Most fields can just use default, which calls the field's 
  * individual ->save() function instead.
  * 
  * @param SugarBean $bean the bean performing the save
  * @param array $params an array of parameters relevant to the save, which will be an array passed up to the API
  * @param string $field The name of the field to save (the vardef name, not the form element name)
  * @param array $properties Any properties for this field
  */
 public function apiSave(SugarBean $bean, array $params, $field, $properties)
 {
     if (!is_array($params[$field])) {
         // Not an array, don't do anything.
         return;
     }
     if (!isset($bean->emailAddress)) {
         $bean->emailAddress = BeanFactory::getBean('EmailAddresses');
     }
     if (empty($bean->emailAddress->addresses) && !isset($bean->emailAddress->hasFetched)) {
         $oldAddresses = $bean->emailAddress->getAddressesByGUID($bean->id, $bean->module_name);
     } else {
         $oldAddresses = $bean->emailAddress->addresses;
     }
     array_walk($params[$field], array($this, 'formatEmails'));
     $bean->emailAddress->addresses = array();
     foreach ($params[$field] as $email) {
         if (empty($email['email_address'])) {
             // Can't save an empty email address
             continue;
         }
         // Search each one for a matching set, otherwise use the defaults
         $mergeAddr = array('primary_address' => false, 'invalid_email' => false, 'opt_out' => false);
         foreach ($oldAddresses as $address) {
             if (strtolower($address['email_address']) == strtolower($email['email_address'])) {
                 $mergeAddr = $address;
                 break;
             }
         }
         $email = array_merge($mergeAddr, $email);
         if (!SugarEmailAddress::isValidEmail($email['email_address'])) {
             require_once 'include/api/SugarApiException.php';
             throw new SugarApiExceptionInvalidParameter("{$email['email_address']} is an invalid email address");
         }
         $bean->emailAddress->addAddress($email['email_address'], $email['primary_address'], false, $email['invalid_email'], $email['opt_out']);
     }
     $bean->emailAddress->save($bean->id, $bean->module_dir, $params[$field]);
     // Here is a hack for SugarEmailAddress.php so it doesn't attempt a legacy save
     $bean->emailAddress->dontLegacySave = true;
     $bean->emailAddress->populateLegacyFields($bean);
 }
示例#3
0
 /**
  * Resets password and sends email to user
  * @param $api
  * @param array $args
  * @return bool
  * @throws SugarApiExceptionRequestMethodFailure
  * @throws SugarApiExceptionMissingParameter
  */
 public function requestPassword($api, $args)
 {
     require_once 'modules/Users/language/en_us.lang.php';
     $res = $GLOBALS['sugar_config']['passwordsetting'];
     $requiredParams = array('email', 'username');
     if (!$GLOBALS['sugar_config']['passwordsetting']['forgotpasswordON']) {
         throw new SugarApiExceptionRequestMethodFailure(translate('LBL_FORGOTPASSORD_NOT_ENABLED', 'Users'), $args);
     }
     foreach ($requiredParams as $key => $param) {
         if (!isset($args[$param])) {
             throw new SugarApiExceptionMissingParameter('Error: Missing argument.', $args);
         }
     }
     $usr = empty($this->usr) ? new User() : $this->usr;
     $useremail = $args['email'];
     $username = $args['username'];
     if (!empty($username) && !empty($useremail)) {
         $usr_id = $usr->retrieve_user_id($username);
         $usr->retrieve($usr_id);
         if (!$usr->isPrimaryEmail($useremail)) {
             throw new SugarApiExceptionRequestMethodFailure(translate('LBL_PROVIDE_USERNAME_AND_EMAIL', 'Users'), $args);
         }
         if ($usr->portal_only || $usr->is_group) {
             throw new SugarApiExceptionRequestMethodFailure(translate('LBL_PROVIDE_USERNAME_AND_EMAIL', 'Users'), $args);
         }
         // email invalid can not reset password
         if (!SugarEmailAddress::isValidEmail($usr->emailAddress->getPrimaryAddress($usr))) {
             throw new SugarApiExceptionRequestMethodFailure(translate('ERR_EMAIL_INCORRECT', 'Users'), $args);
         }
         $isLink = !$GLOBALS['sugar_config']['passwordsetting']['SystemGeneratedPasswordON'];
         // if i need to generate a password (not a link)
         $password = $isLink ? '' : User::generatePassword();
         // Create URL
         // if i need to generate a link
         if ($isLink) {
             $guid = create_guid();
             $url = $GLOBALS['sugar_config']['site_url'] . "/index.php?entryPoint=Changenewpassword&guid={$guid}";
             $time_now = TimeDate::getInstance()->nowDb();
             $q = "INSERT INTO users_password_link (id, username, date_generated) VALUES('" . $guid . "','" . $username . "','" . $time_now . "') ";
             $usr->db->query($q);
         }
         if ($isLink && isset($res['lostpasswordtmpl'])) {
             $emailTemp_id = $res['lostpasswordtmpl'];
         } else {
             $emailTemp_id = $res['generatepasswordtmpl'];
         }
         $additionalData = array('link' => $isLink, 'password' => $password);
         if (isset($url)) {
             $additionalData['url'] = $url;
         }
         $result = $usr->sendEmailForPassword($emailTemp_id, $additionalData);
         if ($result['status']) {
             return true;
         } elseif ($result['message'] != '') {
             throw new SugarApiExceptionRequestMethodFailure($result['message'], $args);
         } else {
             throw new SugarApiExceptionRequestMethodFailure('LBL_EMAIL_NOT_SENT', $args);
         }
     } else {
         throw new SugarApiExceptionMissingParameter('Error: Empty argument', $args);
     }
 }
 public function splitEmailAddress($addr)
 {
     $email = $this->_cleanAddress($addr);
     if (!SugarEmailAddress::isValidEmail($email)) {
         $email = '';
         // remove bad email addr
     }
     $name = trim(str_replace(array($email, '<', '>', '"', "'"), '', $addr));
     return array("name" => $name, "email" => strtolower($email));
 }
示例#5
0
 /**
  * Validates email addresses. The return value is an array of key-value pairs where the keys are the email
  * addresses and the values are booleans indicating whether or not the email address is valid.
  *
  * @param $api
  * @param $args
  * @return array
  * @throws SugarApiException
  */
 public function validateEmailAddresses($api, $args)
 {
     $validatedEmailAddresses = array();
     unset($args["__sugar_url"]);
     if (!is_array($args)) {
         throw new SugarApiExceptionInvalidParameter('Invalid argument: cannot validate');
     }
     if (empty($args)) {
         throw new SugarApiExceptionMissingParameter('Missing email address(es) to validate');
     }
     $emailAddresses = $args;
     foreach ($emailAddresses as $emailAddress) {
         $validatedEmailAddresses[$emailAddress] = SugarEmailAddress::isValidEmail($emailAddress);
     }
     return $validatedEmailAddresses;
 }
 /**
  * Validate email fields
  *
  * @param  $value  string
  * @param  $vardef array
  * @param  $focus  object bean of the module we're importing into
  * @return string sanitized and validated value on success, bool false on failure
  */
 public function email($value, $vardef)
 {
     if (!empty($value) && !SugarEmailAddress::isValidEmail($value)) {
         return false;
     }
     return $value;
 }