filename, "."); $file_ext = ""; //get file extension if($file_ext_beg !== false) { $file_ext = substr($this->filename, $file_ext_beg + 1); } //check to see if this is a file with extension located in "badext" foreach($sugar_config['upload_badext'] as $badExt) { if(strtolower($file_ext) == strtolower($badExt)) { //if found, then append with .txt and break out of lookup $this->name = $this->name . ".txt"; $this->file_mime_type = 'text/'; $this->filename = $this->filename . ".txt"; break; // no need to look for more } } } /** * overrides SugarBean's method. * If a system setting is set, it will mark all related notes as deleted, and attempt to delete files that are * related to those notes * @param string id ID */ function mark_deleted($id) { global $sugar_config; if($this->parent_type == 'Emails') { if(isset($sugar_config['email_default_delete_attachments']) && $sugar_config['email_default_delete_attachments'] == true) { $removeFile = getcwd()."/{$sugar_config['upload_dir']}{$id}"; if(file_exists($removeFile)) { if(!unlink($removeFile)) { $GLOBALS['log']->error("*** Could not unlink() file: [ {$removeFile} ]"); } } } } // delete note parent::mark_deleted($id); } function deleteAttachment($isduplicate="false"){ if($this->ACLAccess('edit')){ if($isduplicate=="true"){ return true; } $removeFile = clean_path(getAbsolutePath("{$GLOBALS['sugar_config']['upload_dir']}{$this->id}")); } if(!empty($this->doc_type) && !empty($this->doc_id)){ $document = ExternalAPIFactory::loadAPI($this->doc_type); $response = $document->deleteDoc($this); $this->doc_type = ''; $this->doc_id = ''; $this->doc_url = ''; $this->filename = ''; $this->file_mime_type = ''; } if(file_exists($removeFile)) { if(!unlink($removeFile)) { $GLOBALS['log']->error("*** Could not unlink() file: [ {$removeFile} ]"); }else{ $this->filename = ''; $this->file_mime_type = ''; $this->file = ''; $this->save(); return true; } } else { $this->filename = ''; $this->file_mime_type = ''; $this->file = ''; $this->doc_id = ''; $this->save(); return true; } return false; } function get_summary_text() { return "$this->name"; } function create_export_query(&$order_by, &$where, $relate_link_join='') { $custom_join = $this->custom_fields->getJOIN(true, true,$where); if($custom_join) $custom_join['join'] .= $relate_link_join; $query = "SELECT notes.*, contacts.first_name, contacts.last_name, users.user_name as assigned_user_name "; if($custom_join) { $query .= $custom_join['select']; } $query .= " FROM notes "; $query .= " LEFT JOIN contacts ON notes.contact_id=contacts.id "; $query .= " LEFT JOIN users ON notes.assigned_user_id=users.id "; if($custom_join) { $query .= $custom_join['join']; } $where_auto = " notes.deleted=0 AND (contacts.deleted IS NULL OR contacts.deleted=0)"; if($where != "") $query .= "where $where AND ".$where_auto; else $query .= "where ".$where_auto; if($order_by != "") $query .= " ORDER BY ". $this->process_order_by($order_by, null); else $query .= " ORDER BY notes.name"; return $query; } function fill_in_additional_list_fields() { $this->fill_in_additional_detail_fields(); } function fill_in_additional_detail_fields() { parent::fill_in_additional_detail_fields(); //TODO: Seems odd we need to clear out these values so that list views don't show the previous rows value if current value is blank $this->getRelatedFields('Contacts', $this->contact_id, array('name'=>'contact_name', 'phone_work'=>'contact_phone') ); if(!empty($this->contact_name)){ $emailAddress = new SugarEmailAddress(); $this->contact_email = $emailAddress->getPrimaryAddress(false, $this->contact_id, 'Contacts'); } if(isset($this->contact_id) && $this->contact_id != '') { $contact = new Contact(); $contact->retrieve($this->contact_id); if(isset($contact->id)) { $this->contact_name = $contact->full_name; } } } function get_list_view_data() { $note_fields = $this->get_list_view_array(); global $app_list_strings, $focus, $action, $currentModule,$mod_strings, $sugar_config; if(isset($this->parent_type)) { $note_fields['PARENT_MODULE'] = $this->parent_type; } if(!isset($this->filename) || $this->filename != ''){ $file_path = UploadFile::get_file_path($this->filename,$this->id); if(file_exists($file_path)){ $save_file = urlencode(basename(UploadFile::get_url($this->filename,$this->id))); $note_fields['FILENAME'] = $this->filename; $note_fields['FILE_URL'] = "index.php?entryPoint=download&id=".$save_file."&type=Notes"; } } if(isset($this->contact_id) && $this->contact_id != '') { $contact = new Contact(); $contact->retrieve($this->contact_id); if(isset($contact->id)) { $this->contact_name = $contact->full_name; } } if(isset($this->contact_name)){ $note_fields['CONTACT_NAME'] = $this->contact_name; } global $current_language; $mod_strings = return_module_language($current_language, 'Notes'); $note_fields['STATUS']=$mod_strings['LBL_NOTE_STATUS']; return $note_fields; } function listviewACLHelper() { $array_assign = parent::listviewACLHelper(); $is_owner = false; if(!empty($this->parent_name)) { if(!empty($this->parent_name_owner)) { global $current_user; $is_owner = $current_user->id == $this->parent_name_owner; } } if(!ACLController::moduleSupportsACL($this->parent_type) || ACLController::checkAccess($this->parent_type, 'view', $is_owner)) { $array_assign['PARENT'] = 'a'; } else { $array_assign['PARENT'] = 'span'; } $is_owner = false; if(!empty($this->contact_name)) { if(!empty($this->contact_name_owner)) { global $current_user; $is_owner = $current_user->id == $this->contact_name_owner; } } if( ACLController::checkAccess('Contacts', 'view', $is_owner)) { $array_assign['CONTACT'] = 'a'; } else { $array_assign['CONTACT'] = 'span'; } return $array_assign; } function bean_implements($interface) { switch($interface) { case 'ACL':return true; } return false; } } ?>