/**
  * Save label for id field
  *
  * @param string $idLabelName
  * @param DynamicField $df
  */
 protected function saveIdLabel($idLabelName, $df)
 {
     if ($df instanceof DynamicField) {
         $module = $df->module;
     } elseif ($df instanceof MBModule) {
         $module = $df->name;
     } else {
         Log::fatal('Unsupported DynamicField type');
     }
     $viewPackage = isset($df->package) ? $df->package : null;
     $idLabelValue = string_format($GLOBALS['mod_strings']['LBL_RELATED_FIELD_ID_NAME_LABEL'], array($this->label_value, $GLOBALS['app_list_strings']['moduleListSingular'][$this->ext2]));
     $idFieldLabelArr = array("label_{$idLabelName}" => $idLabelValue);
     foreach (ModuleBuilder::getModuleAliases($module) as $moduleName) {
         if ($df instanceof DynamicField) {
             $parser = new ParserLabel($moduleName, $viewPackage);
             $parser->handleSave($idFieldLabelArr, $GLOBALS['current_language']);
         } elseif ($df instanceof MBModule) {
             $df->setLabel($GLOBALS['current_language'], $idLabelName, $idLabelValue);
             $df->save();
         }
     }
 }
예제 #2
0
 /**
  * Implements a generic insert and update logic for any SugarBean
  * This method only works for subclasses that implement the same variable names.
  * This method uses the presence of an id field that is not null to signify and update.
  * The id field should not be set otherwise.
  *
  * TODO: Add support for field type validation and encoding of parameters.
  *
  * @param boolean $check_notify Optional, default false, if set to true assignee of the record is notified via email.
  *
  * @return string
  */
 function save($check_notify = false)
 {
     $this->in_save = true;
     // cn: SECURITY - strip XSS potential vectors
     $this->cleanBean();
     // This is used so custom/3rd-party code can be upgraded with fewer issues, this will be removed in a future release
     $this->fixUpFormatting();
     global $timedate, $current_user, $action;
     $isUpdate = true;
     if (empty($this->id)) {
         $isUpdate = false;
     }
     if ($this->new_with_id == true) {
         $isUpdate = false;
     }
     if (empty($this->date_modified) || $this->update_date_modified) {
         $this->date_modified = $GLOBALS['timedate']->nowDb();
     }
     $this->_checkOptimisticLocking($action, $isUpdate);
     if (!empty($this->modified_by_name)) {
         $this->old_modified_by_name = $this->modified_by_name;
     }
     if ($this->update_modified_by) {
         $this->modified_user_id = 1;
         if (!empty($current_user)) {
             $this->modified_user_id = $current_user->id;
             $this->modified_by_name = $current_user->user_name;
         }
     }
     if ($this->deleted != 1) {
         $this->deleted = 0;
     }
     if (!$isUpdate) {
         if (empty($this->date_entered)) {
             $this->date_entered = $this->date_modified;
         }
         if ($this->set_created_by == true) {
             // created by should always be this user
             $this->created_by = isset($current_user) ? $current_user->id : "";
         }
         if ($this->new_with_id == false) {
             $this->id = create_guid();
         }
     }
     require_once "data/BeanFactory.php";
     BeanFactory::registerBean($this->module_name, $this);
     if (empty($GLOBALS['updating_relationships']) && empty($GLOBALS['saving_relationships']) && empty($GLOBALS['resavingRelatedBeans'])) {
         $GLOBALS['saving_relationships'] = true;
         // let subclasses save related field changes
         $this->save_relationship_changes($isUpdate);
         $GLOBALS['saving_relationships'] = false;
     }
     if ($isUpdate && !$this->update_date_entered) {
         unset($this->date_entered);
     }
     // call the custom business logic
     $custom_logic_arguments['check_notify'] = $check_notify;
     $this->call_custom_logic("before_save", $custom_logic_arguments);
     unset($custom_logic_arguments);
     // If we're importing back semi-colon separated non-primary emails
     if ($this->hasEmails() && !empty($this->email_addresses_non_primary) && is_array($this->email_addresses_non_primary)) {
         // Add each mail to the account
         foreach ($this->email_addresses_non_primary as $mail) {
             $this->emailAddress->addAddress($mail);
         }
         $this->emailAddress->save($this->id, $this->module_dir);
     }
     if (isset($this->custom_fields)) {
         $this->custom_fields->bean = $this;
         $this->custom_fields->save($isUpdate);
     }
     //construct the SQL to create the audit record if auditing is enabled.
     $auditDataChanges = [];
     if ($this->is_AuditEnabled()) {
         if ($isUpdate && !isset($this->fetched_row)) {
             Log::debug('Auditing: Retrieve was not called, audit record will not be created.');
         } else {
             $auditDataChanges = $this->db->getAuditDataChanges($this);
         }
     }
     $this->_sendNotifications($check_notify);
     if ($isUpdate) {
         $this->db->update($this);
     } else {
         $this->db->insert($this);
     }
     if (!empty($auditDataChanges) && is_array($auditDataChanges)) {
         foreach ($auditDataChanges as $change) {
             $this->db->save_audit_records($this, $change);
         }
     }
     if (empty($GLOBALS['resavingRelatedBeans'])) {
         SugarRelationship::resaveRelatedBeans();
     }
     // populate fetched row with current bean values
     foreach ($auditDataChanges as $change) {
         $this->fetched_row[$change['field_name']] = $change['after'];
     }
     //If we aren't in setup mode and we have a current user and module, then we track
     if (isset($GLOBALS['current_user']) && isset($this->module_dir)) {
         $this->track_view($current_user->id, $this->module_dir, 'save');
     }
     $this->call_custom_logic('after_save', '');
     //Now that the record has been saved, we don't want to insert again on further saves
     $this->new_with_id = false;
     $this->in_save = false;
     return $this->id;
 }