/** * Render select company box * * Parameters: * * - value - Value of selected company * - optional - Is value of this field optional or not * - exclude - Array of company ID-s that will be excluded * - can_create_new - Should this select box offer option to create a new * company from within the list * * @param array $params * @param Smarty $smarty * @return string */ function smarty_function_select_company($params, &$smarty) { static $ids = array(); $companies = Companies::getIdNameMap(array_var($params, 'companies')); $value = array_var($params, 'value', null, true); $id = array_var($params, 'id', null, true); if (empty($id)) { $counter = 1; do { $id = "select_company_dropdown_{$counter}"; $counter++; } while (in_array($id, $ids)); } // if $ids[] = $id; $params['id'] = $id; $optional = array_var($params, 'optional', false, true); $exclude = array_var($params, 'exclude', array(), true); if (!is_array($exclude)) { $exclude = array(); } // if $can_create_new = array_var($params, 'can_create_new', true, true); if ($optional) { $options = array(option_tag(lang('-- None --'), ''), option_tag('', '')); } else { $options = array(); } // if foreach ($companies as $company_id => $company_name) { if (in_array($company_id, $exclude)) { continue; } // if $option_attributes = array('class' => 'object_option'); if ($value == $company_id) { $option_attributes['selected'] = true; } // if $options[] = option_tag($company_name, $company_id, $option_attributes); } // if if ($can_create_new) { $logged_user = get_logged_user(); if (instance_of($logged_user, 'User') && Company::canAdd($logged_user)) { $params['add_object_url'] = assemble_url('people_companies_quick_add'); $params['object_name'] = 'company'; $params['add_object_message'] = lang('Please insert new company name'); $options[] = option_tag('', ''); $options[] = option_tag(lang('New Company...'), '', array('class' => 'new_object_option')); } // if } // if return select_box($options, $params) . '<script type="text/javascript">$("#' . $id . '").new_object_from_select();</script>'; }
/** * Constructor * * @param Request $request * @return PeopleController */ function __construct($request) { parent::__construct($request); $this->wireframe->addBreadCrumb(lang('People'), assemble_url('people')); $this->wireframe->current_menu_item = 'people'; if (Company::canAdd($this->logged_user)) { $this->wireframe->addPageAction(lang('New Company'), assemble_url('people_companies_add')); } // if }
/** * Quick add company * * @param void * @return null */ function quick_add() { if ($this->request->isSubmitted() && $this->request->isAsyncCall()) { if (!Company::canAdd($this->logged_user)) { $this->httpError(HTTP_ERR_FORBIDDEN, null, true, $this->request->isApiCall()); } // if $company = new Company(); $company->setAttributes($this->request->post('company')); $save = $company->save(); if ($save && !is_error($save)) { print $company->getId(); die; } else { $this->serveData($save); } // if } else { $this->httpError(HTTP_ERR_BAD_REQUEST); } // if }
/** * Add client * * @param void * @return null */ function add_client() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_company'); if (!Company::canAdd(logged_user(), active_or_personal_project())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $company = new Company(); $company_data = array_var($_POST, 'company'); if (!is_array($company_data)) { $company_data = array('timezone' => logged_user()->getTimezone()); // array } // if tpl_assign('company', $company); tpl_assign('company_data', $company_data); if (is_array(array_var($_POST, 'company'))) { $company->setFromAttributes($company_data); $company->setClientOfId(owner_company()->getId()); try { DB::beginWork(); $company->save(); $company->setTagsFromCSV(array_var($company_data, 'tags')); $object_controller = new ObjectController(); $object_controller->add_to_workspaces($company, !can_manage_contacts(logged_user())); $object_controller->link_to_new_object($company); $object_controller->add_subscribers($company); $object_controller->add_custom_properties($company); ApplicationLogs::createLog($company, $company->getWorkspaces(), ApplicationLogs::ACTION_ADD); // ApplicationLogs::createLog($company, null, ApplicationLogs::ACTION_ADD); DB::commit(); flash_success(lang('success add client', $company->getName())); evt_add("company added", array("id" => $company->getId(), "name" => $company->getName())); ajx_current("back"); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }
function import_from_csv_file() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } @set_time_limit(0); ini_set('auto_detect_line_endings', '1'); if (isset($_GET['from_menu']) && $_GET['from_menu'] == 1) { unset($_SESSION['history_back']); } if (isset($_SESSION['history_back'])) { unset($_SESSION['history_back']); ajx_current("start"); } else { if (!Contact::canAdd(logged_user(), active_or_personal_project())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $this->setTemplate('csv_import'); $type = array_var($_GET, 'type', array_var($_SESSION, 'import_type', 'contact')); //type of import (contact - company) if (!isset($_SESSION['import_type']) || $type != $_SESSION['import_type'] && $type != '') { $_SESSION['import_type'] = $type; } tpl_assign('import_type', $type); $filedata = array_var($_FILES, 'csv_file'); if (is_array($filedata) && !is_array(array_var($_POST, 'select_contact'))) { $filename = $filedata['tmp_name'] . '.csv'; copy($filedata['tmp_name'], $filename); $first_record_has_names = array_var($_POST, 'first_record_has_names', false); $delimiter = array_var($_POST, 'delimiter', ''); if ($delimiter == '') { $delimiter = $this->searchForDelimiter($filename); } $_SESSION['delimiter'] = $delimiter; $_SESSION['csv_import_filename'] = $filename; $_SESSION['first_record_has_names'] = $first_record_has_names; $titles = $this->read_csv_file($filename, $delimiter, true); tpl_assign('titles', $titles); } if (array_var($_GET, 'calling_back', false)) { $filename = $_SESSION['csv_import_filename']; $delimiter = $_SESSION['delimiter']; $first_record_has_names = $_SESSION['first_record_has_names']; $titles = $this->read_csv_file($filename, $delimiter, true); unset($_GET['calling_back']); tpl_assign('titles', $titles); } if (is_array(array_var($_POST, 'select_contact')) || is_array(array_var($_POST, 'select_company'))) { $type = $_SESSION['import_type']; $filename = $_SESSION['csv_import_filename']; $delimiter = $_SESSION['delimiter']; $first_record_has_names = $_SESSION['first_record_has_names']; $registers = $this->read_csv_file($filename, $delimiter); $import_result = array('import_ok' => array(), 'import_fail' => array()); $i = $first_record_has_names ? 1 : 0; while ($i < count($registers)) { try { DB::beginWork(); if ($type == 'contact') { $contact_data = $this->buildContactData(array_var($_POST, 'select_contact'), array_var($_POST, 'check_contact'), $registers[$i]); $contact_data['import_status'] = '(' . lang('updated') . ')'; $fname = mysql_real_escape_string(array_var($contact_data, "firstname")); $lname = mysql_real_escape_string(array_var($contact_data, "lastname")); $email_cond = array_var($contact_data, "email") != '' ? " OR email = '" . array_var($contact_data, "email") . "'" : ""; $contact = Contacts::findOne(array("conditions" => "firstname = '" . $fname . "' AND lastname = '" . $lname . "' {$email_cond}")); $log_action = ApplicationLogs::ACTION_EDIT; if (!$contact) { $contact = new Contact(); $contact_data['import_status'] = '(' . lang('new') . ')'; $log_action = ApplicationLogs::ACTION_ADD; $can_import = active_project() != null ? $contact->canAdd(logged_user(), active_project()) : can_manage_contacts(logged_user()); } else { $can_import = $contact->canEdit(logged_user()); } if ($can_import) { $comp_name = mysql_real_escape_string(array_var($contact_data, "company_id")); if ($comp_name != '') { $company = Companies::findOne(array("conditions" => "name = '{$comp_name}'")); if ($company) { $contact_data['company_id'] = $company->getId(); } else { $company_data = self::getCompanyDataFromContactData($contact_data); $company = new Company(); $company->setFromAttributes($company_data); if ($company->isOwner()) { $company->setClientOfId(0); } else { $company->setClientOfId(owner_company()->getId()); } $company->save(); ApplicationLogs::createLog($company, null, ApplicationLogs::ACTION_ADD); $company->setTagsFromCSV(array_var($_POST, 'tags')); if (active_project() instanceof Project) { $company->addToWorkspace(active_project()); } $contact_data['company_id'] = $company->getId(); } $contact_data['import_status'] .= " " . lang("company") . " {$comp_name}"; } else { $contact_data['company_id'] = 0; } $contact->setFromAttributes($contact_data); $contact->save(); ApplicationLogs::createLog($contact, null, $log_action); $contact->setTagsFromCSV(array_var($_POST, 'tags')); if (active_project() instanceof Project) { $pc = ProjectContacts::findOne(array("conditions" => "contact_id = " . $contact->getId() . " AND project_id = " . active_project()->getId())); if (!$pc) { $pc = new ProjectContact(); $pc->setContactId($contact->getId()); $pc->setProjectId(active_project()->getId()); $pc->setRole(array_var($contact_data, 'role')); $pc->save(); } $contact->addToWorkspace(active_project()); } $import_result['import_ok'][] = $contact_data; } else { throw new Exception(lang('no access permissions')); } } else { if ($type == 'company') { $contact_data = $this->buildCompanyData(array_var($_POST, 'select_company'), array_var($_POST, 'check_company'), $registers[$i]); $contact_data['import_status'] = '(' . lang('updated') . ')'; $comp_name = mysql_real_escape_string(array_var($contact_data, "name")); $company = Companies::findOne(array("conditions" => "name = '{$comp_name}'")); $log_action = ApplicationLogs::ACTION_EDIT; if (!$company) { $company = new Company(); $contact_data['import_status'] = '(' . lang('new') . ')'; $log_action = ApplicationLogs::ACTION_ADD; $can_import = active_project() != null ? $company->canAdd(logged_user(), active_project()) : can_manage_contacts(logged_user()) || logged_user()->isAccountOwner() || logged_user()->isAdministrator(); } else { $can_import = $company->canEdit(logged_user()); } if ($can_import) { $company->setFromAttributes($contact_data); if ($company->isOwner()) { $company->setClientOfId(0); } else { $company->setClientOfId(owner_company()->getId()); } $company->save(); ApplicationLogs::createLog($company, null, $log_action); $company->setTagsFromCSV(array_var($_POST, 'tags')); if (active_project() instanceof Project) { $company->addToWorkspace(active_project()); } $import_result['import_ok'][] = $contact_data; } else { throw new Exception(lang('no access permissions')); } } } DB::commit(); } catch (Exception $e) { DB::rollback(); $contact_data['fail_message'] = substr_utf($e->getMessage(), strpos_utf($e->getMessage(), "\r\n")); $import_result['import_fail'][] = $contact_data; } $i++; } unlink($_SESSION['csv_import_filename']); unset($_SESSION['csv_import_filename']); unset($_SESSION['delimiter']); unset($_SESSION['first_record_has_names']); unset($_SESSION['import_type']); $_SESSION['history_back'] = true; tpl_assign('import_result', $import_result); } } }