123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533 |
- <?php
- /*
- FusionPBX
- Version: MPL 1.1
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
- The Original Code is FusionPBX
- The Initial Developer of the Original Code is
- Mark J Crane <[email protected]>
- Portions created by the Initial Developer are Copyright (C) 2008-2020
- the Initial Developer. All Rights Reserved.
- Contributor(s):
- Mark J Crane <[email protected]>
- */
- //includes
- require_once "root.php";
- require_once "resources/require.php";
- require_once "resources/check_auth.php";
- //check permissions
- if (permission_exists('contact_view')) {
- //access granted
- }
- else {
- echo "access denied";
- exit;
- }
- //add multi-lingual support
- $language = new text;
- $text = $language->get();
- //action add or update
- if (is_uuid($_REQUEST["id"])) {
- $contact_uuid = $_REQUEST["id"];
- }
- else {
- header("Location: contacts.php");
- }
- //main contact details
- $sql = "select * from v_contacts ";
- $sql .= "where domain_uuid = :domain_uuid ";
- $sql .= "and contact_uuid = :contact_uuid ";
- $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
- $parameters['contact_uuid'] = $contact_uuid;
- $database = new database;
- $row = $database->select($sql, $parameters, 'row');
- if (is_array($row) && @sizeof($row) != 0) {
- $contact_type = $row["contact_type"];
- $contact_organization = $row["contact_organization"];
- $contact_name_prefix = $row["contact_name_prefix"];
- $contact_name_given = $row["contact_name_given"];
- $contact_name_middle = $row["contact_name_middle"];
- $contact_name_family = $row["contact_name_family"];
- $contact_name_suffix = $row["contact_name_suffix"];
- $contact_nickname = $row["contact_nickname"];
- $contact_title = $row["contact_title"];
- $contact_category = $row["contact_category"];
- $contact_role = $row["contact_role"];
- $contact_time_zone = $row["contact_time_zone"];
- $contact_note = $row["contact_note"];
- }
- unset($sql, $parameters, $row);
- //get the available users for this contact
- $sql = "select * from v_users ";
- $sql .= "where domain_uuid = :domain_uuid ";
- $sql .= "order by username asc ";
- $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
- $database = new database;
- $users = $database->select($sql, $parameters, 'all');
- unset($sql, $parameters);
- //determine if contact assigned to a user
- if (is_array($users) && sizeof($users) != 0) {
- foreach ($users as $user) {
- if ($user['contact_uuid'] == $contact_uuid) {
- $contact_user_uuid = $user['user_uuid'];
- break;
- }
- }
- }
- //get the assigned users that can view this contact
- $sql = "select u.username, u.user_uuid, a.contact_user_uuid from v_contacts as c, v_users as u, v_contact_users as a ";
- $sql .= "where c.contact_uuid = :contact_uuid ";
- $sql .= "and c.domain_uuid = :domain_uuid ";
- $sql .= "and u.user_uuid = a.user_uuid ";
- $sql .= "and c.contact_uuid = a.contact_uuid ";
- $sql .= "order by u.username asc ";
- $parameters['contact_uuid'] = $contact_uuid;
- $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
- $database = new database;
- $contact_users_assigned = $database->select($sql, $parameters, 'all');
- unset($sql, $parameters);
- //get the assigned groups that can view this contact
- $sql = "select g.*, cg.contact_group_uuid ";
- $sql .= "from v_groups as g, v_contact_groups as cg ";
- $sql .= "where cg.group_uuid = g.group_uuid ";
- $sql .= "and cg.domain_uuid = :domain_uuid ";
- $sql .= "and cg.contact_uuid = :contact_uuid ";
- $sql .= "and cg.group_uuid <> :group_uuid ";
- $sql .= "order by g.group_name asc ";
- $parameters['domain_uuid'] = $domain_uuid;
- $parameters['contact_uuid'] = $contact_uuid;
- $parameters['group_uuid'] = $_SESSION["user_uuid"];
- $database = new database;
- $contact_groups_assigned = $database->select($sql, $parameters, 'all');
- if (is_array($contact_groups_assigned) && @sizeof($contact_groups_assigned) != 0) {
- foreach ($contact_groups_assigned as $field) {
- $contact_groups[] = "'".$field['group_uuid']."'";
- }
- }
- unset($sql, $parameters);
- //get the available groups for this contact
- $sql = "select group_uuid, group_name from v_groups ";
- $sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) ";
- if (is_array($contact_groups) && @sizeof($contact_groups) != 0) {
- $sql .= "and group_uuid not in (".implode(',', $contact_groups).") ";
- }
- $sql .= "order by group_name asc ";
- $parameters['domain_uuid'] = $domain_uuid;
- $database = new database;
- $contact_groups_available = $database->select($sql, $parameters, 'all');
- unset($sql, $parameters, $contact_groups);
- //determine title name
- if ($contact_name_given || $contact_name_family) {
- $contact_name = $contact_name_prefix ? escape($contact_name_prefix).' ' : null;
- $contact_name .= $contact_name_given ? escape($contact_name_given).' ' : null;
- $contact_name .= $contact_name_middle ? escape($contact_name_middle).' ' : null;
- $contact_name .= $contact_name_family ? escape($contact_name_family).' ' : null;
- $contact_name .= $contact_name_suffix ? escape($contact_name_suffix).' ' : null;
- }
- else {
- $contact_name = $contact_organization;
- }
- //show the header
- $document['title'] = $text['title-contact-edit'].($contact_name ? ': '.$contact_name : null);
- require_once "resources/header.php";
- //determine qr branding
- if ($_SESSION['theme']['qr_brand_type']['text'] == 'image' && $_SESSION['theme']['qr_brand_image']['text'] != '') {
- echo "<img id='img-buffer' style='display: none;' src='".$_SESSION["theme"]["qr_brand_image"]["text"]."'>";
- $qr_option = "image: $('#img-buffer')[0],";
- $qr_mode = '4';
- $qr_size = '0.2';
- }
- else if ($_SESSION['theme']['qr_brand_type']['text'] == 'text' && $_SESSION['theme']['qr_brand_text']['text'] != '') {
- $qr_option = 'label: "'.$_SESSION['theme']['qr_brand_text']['text'].'"';
- $qr_mode = '2';
- $qr_size = '0.05';
- }
- else {
- echo "<img id='img-buffer' style='display: none;' src='".PROJECT_PATH."/themes/".$_SESSION["domain"]["template"]["name"]."/images/qr_code.png'>";
- $qr_option = "image: $('#img-buffer')[0],";
- $qr_mode = '4';
- $qr_size = '0.2';
- }
- //qr code generation
- $_GET['type'] = "text";
- $qr_vcard = true;
- include "contacts_vcard.php";
- echo "<input type='hidden' id='qr_vcard' value=\"".$qr_vcard."\">";
- echo "<style>";
- echo " #qr_code_container {";
- echo " z-index: 999999; ";
- echo " position: absolute; ";
- echo " left: 0; ";
- echo " top: 0; ";
- echo " right: 0; ";
- echo " bottom: 0; ";
- echo " text-align: center; ";
- echo " vertical-align: middle;";
- echo " }";
- echo " #qr_code {";
- echo " display: block; ";
- echo " width: 650px; ";
- echo " height: 650px; ";
- echo " -webkit-box-shadow: 0px 1px 20px #888; ";
- echo " -moz-box-shadow: 0px 1px 20px #888; ";
- echo " box-shadow: 0px 1px 20px #888;";
- echo " }";
- echo "</style>";
- echo "<script src='".PROJECT_PATH."/resources/jquery/jquery-qrcode.min.js'></script>";
- echo "<script language='JavaScript' type='text/javascript'>";
- echo " $(document).ready(function() {";
- echo " $('#qr_code').qrcode({ ";
- echo " render: 'canvas', ";
- echo " minVersion: 6, ";
- echo " maxVersion: 40, ";
- echo " ecLevel: 'H', ";
- echo " size: 650, ";
- echo " radius: 0.2, ";
- echo " quiet: 6, ";
- echo " background: '#fff', ";
- echo " mode: ".$qr_mode.", ";
- echo " mSize: ".$qr_size.", ";
- echo " mPosX: 0.5, ";
- echo " mPosY: 0.5, ";
- echo " text: document.getElementById('qr_vcard').value, ";
- echo " ".$qr_option;
- echo " });";
- echo " });";
- echo "</script>";
- //show the content
- echo "<div class='action_bar' id='action_bar'>\n";
- echo " <div class='heading'><b>".($contact_name ? $contact_name : $text['header-contact-edit'])."</b></div>\n";
- echo " <div class='actions'>\n";
- echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','collapse'=>'hide-sm-dn','style'=>'margin-right: 15px;','link'=>'contacts.php']);
- if (permission_exists('contact_time_add')) {
- //detect timer state (and start time)
- $sql = "select ";
- $sql .= "time_start ";
- $sql .= "from v_contact_times ";
- $sql .= "where domain_uuid = :domain_uuid ";
- $sql .= "and user_uuid = :user_uuid ";
- $sql .= "and contact_uuid = :contact_uuid ";
- $sql .= "and time_start is not null ";
- $sql .= "and time_stop is null ";
- $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
- $parameters['user_uuid'] = $_SESSION['user']['user_uuid'];
- $parameters['contact_uuid'] = $contact_uuid;
- $database = new database;
- $time_start = $database->select($sql, $parameters, 'column');
- $btn_style = $time_start ? 'color: #fff; background-color: #3693df; background-image: none;' : null;
- unset($sql, $parameters);
- echo button::create(['type'=>'button','label'=>$text['button-timer'],'icon'=>'clock','style'=>$btn_style,'title'=>$time_start,'collapse'=>'hide-sm-dn','onclick'=>"window.open('contact_timer.php?domain_uuid=".urlencode($domain_uuid)."&contact_uuid=".urlencode($contact_uuid)."','contact_time_".escape($contact_uuid)."','width=300, height=375, top=30, left='+(screen.width - 350)+', menubar=no, scrollbars=no, status=no, toolbar=no, resizable=no');"]);
- }
- echo button::create(['type'=>'button','label'=>$text['button-qr_code'],'icon'=>'qrcode','collapse'=>'hide-sm-dn','onclick'=>"$('#qr_code_container').fadeIn(400);"]);
- echo button::create(['type'=>'button','label'=>$text['button-vcard'],'icon'=>'address-card','collapse'=>'hide-sm-dn','link'=>'contacts_vcard.php?id='.urlencode($contact_uuid).'&type=download']);
- if (is_dir($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/app/invoices')) {
- echo button::create(['type'=>'button','label'=>$text['button-invoices'],'icon'=>'file-invoice-dollar','collapse'=>'hide-sm-dn','link'=>'../invoices/invoices.php?id='.urlencode($contact_uuid)]);
- }
- if (is_dir($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/app/certificates')) {
- echo button::create(['type'=>'button','label'=>$text['button-certificate'],'icon'=>'certificate','collapse'=>'hide-sm-dn','link'=>'../certificates/index.php?name='.urlencode($contact_name_given." ".$contact_name_family)]);
- }
- if (permission_exists('user_edit') && is_uuid($contact_user_uuid)) {
- echo button::create(['type'=>'button','label'=>$text['button-user'],'icon'=>'user','collapse'=>'hide-sm-dn','link'=>'../../core/users/user_edit.php?id='.urlencode($contact_user_uuid)]);
- }
- if (
- permission_exists('contact_phone_add') ||
- permission_exists('contact_address_add') ||
- permission_exists('contact_email_add') ||
- permission_exists('contact_url_add') ||
- permission_exists('contact_relation_add') ||
- permission_exists('contact_note_add') ||
- permission_exists('contact_time_add') ||
- permission_exists('contact_setting_add') ||
- permission_exists('contact_attachment_add')
- ) {
- echo "<select class='formfld' style='width: auto; margin-left: 15px;' id='select_add' onchange=\"document.location.href='contact_' + (this.options[this.selectedIndex].value) + '_edit.php?contact_uuid=".urlencode($contact_uuid)."';\">\n";
- echo " <option value=''>".$text['button-add']."...</option>\n";
- if (permission_exists('contact_phone_add')) { echo "<option value='phone'>".$text['label-phone_number']."</option>\n"; }
- if (permission_exists('contact_address_add')) { echo "<option value='address'>".$text['label-address_address']."</option>\n"; }
- if (permission_exists('contact_email_add')) { echo "<option value='email'>".$text['label-email']."</option>\n"; }
- if (permission_exists('contact_url_add')) { echo "<option value='url'>".$text['label-url']."</option>\n"; }
- if (permission_exists('contact_relation_add')) { echo "<option value='relation'>".$text['label-contact_relation_label']."</option>\n"; }
- if (permission_exists('contact_note_add')) { echo "<option value='note'>".$text['label-contact_note']."</option>\n"; }
- if (permission_exists('contact_time_add')) { echo "<option value='time'>".$text['label-time_time']."</option>\n"; }
- if (permission_exists('contact_setting_add')) { echo "<option value='setting'>".$text['label-setting']."</option>\n"; }
- if (permission_exists('contact_attachment_add')) { echo "<option value='attachment'>".$text['label-attachment']."</option>\n"; }
- echo " </select>";
- }
- if (permission_exists('contact_edit')) {
- echo button::create(['type'=>'button','label'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'id'=>'btn_edit','style'=>'margin-left: 15px;','collapse'=>'hide-sm-dn','link'=>'contact_edit.php?id='.urlencode($contact_uuid)]);
- }
- echo " </div>\n";
- echo " <div style='clear: both;'></div>\n";
- echo "</div>\n";
- if (
- $action == "update" && (
- permission_exists('contact_delete') ||
- permission_exists('contact_user_delete') ||
- permission_exists('contact_group_delete') ||
- permission_exists('contact_phone_delete') ||
- permission_exists('contact_address_delete') ||
- permission_exists('contact_email_delete') ||
- permission_exists('contact_url_delete') ||
- permission_exists('contact_relation_delete') ||
- permission_exists('contact_note_delete') ||
- permission_exists('contact_time_delete') ||
- permission_exists('contact_setting_delete') ||
- permission_exists('contact_attachment_delete')
- )) {
- echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]);
- }
- if ($contact_title || $contact_organization) {
- echo ($contact_title ? '<i>'.$contact_title.'</i>' : null).($contact_title && $contact_organization ? ', ' : null).($contact_organization ? '<strong>'.$contact_organization.'</strong>' : null)."\n";
- }
- else {
- echo $contact_note."\n";
- }
- echo "<br /><br />\n";
- echo "<div class='grid' style='grid-gap: 15px; grid-template-columns: repeat(auto-fill, minmax(375px, 1fr));'>\n";
- //general info
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box'><b class='fas fa-user fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- echo " <div class='grid' style='grid-template-columns: 70px auto;'>\n";
- //nickname
- if ($contact_nickname) {
- echo "<div class='box contact-details-label'>".$text['label-contact_nickname']."</div>\n";
- echo "<div class='box'>\"".escape($contact_nickname)."\"</div>\n";
- }
- //contact type
- if ($contact_type) {
- echo "<div class='box contact-details-label'>".$text['label-contact_type']."</div>\n";
- echo "<div class='box'>";
- if (is_array($_SESSION["contact"]["type"])) {
- sort($_SESSION["contact"]["type"]);
- foreach ($_SESSION["contact"]["type"] as $type) {
- if ($contact_type == $type) {
- echo escape($type);
- }
- }
- }
- else if ($text['option-contact_type_'.$contact_type]) {
- echo $text['option-contact_type_'.$contact_type];
- }
- else {
- echo escape($contact_type);
- }
- echo "</div>\n";
- }
- //category
- if ($contact_category) {
- echo "<div class='box contact-details-label'>".$text['label-contact_category']."</div>\n";
- echo "<div class='box'>";
- if (is_array($_SESSION["contact"]["category"])) {
- sort($_SESSION["contact"]["category"]);
- foreach ($_SESSION["contact"]["category"] as $category) {
- if ($contact_category == $category) {
- echo escape($category);
- break;
- }
- }
- }
- else {
- echo escape($contact_category);
- }
- echo "</div>\n";
- }
- //role
- if ($contact_role) {
- echo "<div class='box contact-details-label'>".$text['label-contact_role']."</div>\n";
- echo "<div class='box'>";
- if (is_array($_SESSION["contact"]["role"])) {
- sort($_SESSION["contact"]["role"]);
- foreach ($_SESSION["contact"]["role"] as $role) {
- if ($contact_role == $role) {
- echo escape($role);
- break;
- }
- }
- }
- else {
- echo escape($contact_role);
- }
- echo "</div>\n";
- }
- //time_zone
- if ($contact_time_zone) {
- echo "<div class='box contact-details-label'>".$text['label-contact_time_zone']."</div>\n";
- echo "<div class='box'>";
- echo $contact_time_zone."<br>\n";
- echo "</div>\n";
- }
- //users (viewing contact)
- if (permission_exists('contact_user_view') && is_array($contact_users_assigned) && @sizeof($contact_users_assigned) != 0) {
- echo "<div class='box contact-details-label'>".$text['label-users']."</div>\n";
- echo "<div class='box'>";
- foreach ($contact_users_assigned as $field) {
- echo escape($field['username'])."<br>\n";
- }
- echo "</div>\n";
- }
- //groups (viewing contact)
- if (permission_exists('contact_group_view') && is_array($contact_groups_assigned) && @sizeof($contact_groups_assigned) != 0) {
- echo "<div class='box contact-details-label'>".$text['label-groups']."</div>\n";
- echo "<div class='box'>";
- foreach ($contact_groups_assigned as $field) {
- echo escape($field['group_name'])."<br>\n";
- }
- echo "</div>\n";
- }
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- //numbers
- if (permission_exists('contact_phone_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['label-phone_numbers']."\"><b class='fas fa-hashtag fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require 'contact_phones_view.php';
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- //emails
- if (permission_exists('contact_email_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['label-emails']."\"><b class='fas fa-envelope fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require 'contact_emails_view.php';
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- //addresses
- if (permission_exists('contact_address_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['label-addresses']."\"><b class='fas fa-map-marker-alt fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require 'contact_addresses_view.php';
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- //urls
- if (permission_exists('contact_url_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['label-urls']."\"><b class='fas fa-link fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require "contact_urls_view.php";
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- //relations
- if (permission_exists('contact_relation_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['header-contact_relations']."\"><b class='fas fa-project-diagram fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require "contact_relations_view.php";
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- //attachments
- if (permission_exists('contact_attachment_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['label-attachments']."\"><b class='fas fa-paperclip fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require "contact_attachments_view.php";
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- //times
- if (permission_exists('contact_time_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['header_contact_times']."\"><b class='fas fa-clock fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require "contact_times_view.php";
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- //extensions
- if (permission_exists('contact_extension_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['label-contact_extensions']."\"><b class='fas fa-fax fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require "contact_extensions_view.php";
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- echo "</div>\n";
- echo "<div class='grid' style='margin-top: 15px; grid-template-columns: auto;'>\n";
- //notes
- if (permission_exists('contact_note_view')) {
- echo " <div class='box contact-details'>\n";
- echo " <div class='grid contact-details'>\n";
- echo " <div class='box' title=\"".$text['label-contact_notes']."\"><b class='fas fa-sticky-note fa-fw fa-lg'></b></div>\n";
- echo " <div class='box'>\n";
- require "contact_notes_view.php";
- echo " </div>\n";
- echo " </div>\n";
- echo " </div>\n";
- }
- echo "</div>\n";
- echo "<br><br>\n";
- //include the footer
- require_once "resources/footer.php";
- ?>
|