From 5b195bbd87499b43cf58e677334742595a2406bd Mon Sep 17 00:00:00 2001 From: Nate Date: Tue, 31 Mar 2020 17:32:12 -0600 Subject: [PATCH] Contacts: Add view before edit. --- app/contacts/contact_addresses_view.php | 99 ++++ app/contacts/contact_attachments_view.php | 103 ++++ app/contacts/contact_edit.php | 7 +- app/contacts/contact_emails_view.php | 69 +++ app/contacts/contact_extensions_view.php | 91 ++++ app/contacts/contact_notes_view.php | 69 +++ app/contacts/contact_phones_view.php | 96 ++++ app/contacts/contact_relations_view.php | 83 +++ app/contacts/contact_times_view.php | 81 +++ app/contacts/contact_urls_view.php | 69 +++ app/contacts/contact_view.php | 533 +++++++++++++++++++ app/contacts/contacts.php | 12 +- app/contacts/resources/images/icon_gmaps.png | Bin 4378 -> 6019 bytes themes/default/css.php | 29 + 14 files changed, 1330 insertions(+), 11 deletions(-) create mode 100644 app/contacts/contact_addresses_view.php create mode 100644 app/contacts/contact_attachments_view.php create mode 100644 app/contacts/contact_emails_view.php create mode 100644 app/contacts/contact_extensions_view.php create mode 100644 app/contacts/contact_notes_view.php create mode 100644 app/contacts/contact_phones_view.php create mode 100644 app/contacts/contact_relations_view.php create mode 100644 app/contacts/contact_times_view.php create mode 100644 app/contacts/contact_urls_view.php create mode 100644 app/contacts/contact_view.php diff --git a/app/contacts/contact_addresses_view.php b/app/contacts/contact_addresses_view.php new file mode 100644 index 0000000000..0ff619f9ee --- /dev/null +++ b/app/contacts/contact_addresses_view.php @@ -0,0 +1,99 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_address_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the address list + $sql = "select * from v_contact_addresses "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and contact_uuid = :contact_uuid "; + $sql .= "order by address_primary desc, address_label asc "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_addresses = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_addresses) && @sizeof($contact_addresses) != 0) { + + //show the content + echo "\n"; + unset($contact_addresses); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_attachments_view.php b/app/contacts/contact_attachments_view.php new file mode 100644 index 0000000000..7d9f556ec5 --- /dev/null +++ b/app/contacts/contact_attachments_view.php @@ -0,0 +1,103 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_attachment_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the contact attachment list + $sql = "select *, length(decode(attachment_content,'base64')) as attachment_size from v_contact_attachments "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and contact_uuid = :contact_uuid "; + $sql .= "order by attachment_primary desc, attachment_filename asc "; + $parameters['domain_uuid'] = $domain_uuid; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_attachments = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_attachments) && @sizeof($contact_attachments) != 0) { + + //styles and attachment layer + echo "\n"; + echo "\n"; + + //display script + echo "\n"; + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_attachments as $row) { + $attachment_type = strtolower(pathinfo($row['attachment_filename'], PATHINFO_EXTENSION)); + $attachment_type_label = $attachment_type == 'jpg' || $attachment_type == 'jpeg' || $attachment_type == 'gif' || $attachment_type == 'png' ? $text['label-image'] : $text['label-file']; + echo "
".$attachment_type_label."
\n"; +// ($row['attachment_primary'] ? " " : null)."\n"; + echo "
"; + if ($attachment_type == 'jpg' || $attachment_type == 'jpeg' || $attachment_type == 'gif' || $attachment_type == 'png') { + echo button::create(['type'=>'button','class'=>'link','label'=>escape($row['attachment_filename']),'onclick'=>"display_attachment('".escape($row['contact_attachment_uuid'])."');"]); + } + else { + echo button::create(['type'=>'button','class'=>'link','label'=>escape($row['attachment_filename']),'onclick'=>"window.location='contact_attachment.php?id=".urlencode($row['contact_attachment_uuid'])."&action=download';"]); + } + echo "
\n"; + echo "
".strtoupper(byte_convert($row['attachment_size']))."
\n"; + $x++; + } + echo "
\n"; + unset($contact_attachments); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_edit.php b/app/contacts/contact_edit.php index 1a72a23e20..1fb2746838 100644 --- a/app/contacts/contact_edit.php +++ b/app/contacts/contact_edit.php @@ -30,7 +30,7 @@ require_once "resources/check_auth.php"; //check permissions - if (permission_exists('contact_view')) { + if (permission_exists('contact_edit')) { //access granted } else { @@ -42,7 +42,6 @@ $language = new text; $text = $language->get(); - //action add or update if (is_uuid($_REQUEST["id"])) { $action = "update"; @@ -146,7 +145,7 @@ } //update the contact - if ($action == "update" && permission_exists('contact_edit')) { + if ($action == "update") { $array['contacts'][0]['contact_uuid'] = $contact_uuid; message::add($text['message-update']); @@ -522,7 +521,7 @@ )) { echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'name'=>'btn_delete','collapse'=>'hide-sm-dn','onclick'=>"modal_open('modal-delete','btn_delete');"]); } - if (permission_exists('contact_edit') || permission_exists('contact_add')) { + if (permission_exists('contact_add')) { echo button::create(['type'=>'button','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','style'=>($action != 'update' ?: 'margin-left: 15px;'),'collapse'=>'hide-sm-dn','onclick'=>"document.getElementById('frm').submit();"]); } echo " \n"; diff --git a/app/contacts/contact_emails_view.php b/app/contacts/contact_emails_view.php new file mode 100644 index 0000000000..e3e03a0bec --- /dev/null +++ b/app/contacts/contact_emails_view.php @@ -0,0 +1,69 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_email_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the contact list + $sql = "select * from v_contact_emails "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and contact_uuid = :contact_uuid "; + $sql .= "order by email_primary desc, email_label asc "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_emails = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_emails) && @sizeof($contact_emails) != 0) { + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_emails as $row) { + echo "
".($row['email_label'] == strtolower($row['email_label']) ? ucwords($row['email_label']) : $row['email_label'])."
\n"; +// ($row['email_primary'] ? " " : null)."\n"; + echo "\n"; + $x++; + } + echo "
\n"; + unset($contact_emails); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_extensions_view.php b/app/contacts/contact_extensions_view.php new file mode 100644 index 0000000000..9eef8e8c77 --- /dev/null +++ b/app/contacts/contact_extensions_view.php @@ -0,0 +1,91 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_extension_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the extension list + $sql = "select e.extension_uuid, e.extension, e.enabled, e.description "; + $sql .= "from v_extensions e, v_extension_users eu, v_users u "; + $sql .= "where e.extension_uuid = eu.extension_uuid "; + $sql .= "and u.user_uuid = eu.user_uuid "; + $sql .= "and e.domain_uuid = :domain_uuid "; + $sql .= "and u.contact_uuid = :contact_uuid "; + $sql .= "order by e.extension asc "; + $parameters['domain_uuid'] = $domain_uuid; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_extensions = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_extensions) && @sizeof($contact_extensions) != 0) { + + //javascript function: send_cmd + echo "\n"; + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_extensions as $row) { + if ($row['enabled'] != 'true') { continue; } //skip disabled extensions + echo "
".$text['label-extension']."
\n"; +// ($row['url_primary'] ? "style='font-weight: bold;'" : null).">\n"; + echo "
"; + echo button::create(['type'=>'button','class'=>'link','label'=>escape($row['extension']),'title'=>$text['label-click_to_call'],'onclick'=>"send_cmd('".PROJECT_PATH."/app/click_to_call/click_to_call.php?src_cid_name=".urlencode($row['extension'])."&src_cid_number=".urlencode($row['extension'])."&dest_cid_name=".urlencode($_SESSION['user']['extension'][0]['outbound_caller_id_name'])."&dest_cid_number=".urlencode($_SESSION['user']['extension'][0]['outbound_caller_id_number'])."&src=".urlencode($_SESSION['user']['extension'][0]['user'])."&dest=".urlencode($row['extension'])."&rec=false&ringback=us-ring&auto_answer=true');"]); + echo "
\n"; + echo "
".$row['description']."
\n"; + $x++; + } + echo "
\n"; + unset($contact_extensions); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_notes_view.php b/app/contacts/contact_notes_view.php new file mode 100644 index 0000000000..e06eda4059 --- /dev/null +++ b/app/contacts/contact_notes_view.php @@ -0,0 +1,69 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_note_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the contact list + $sql = "select * from v_contact_notes "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and contact_uuid = :contact_uuid "; + $sql .= "order by last_mod_date desc "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_notes = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_notes) && @sizeof($contact_notes) != 0) { + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_notes as $row) { + $contact_note = str_replace("\n","
",escape($row['contact_note'])); + echo "
".$contact_note."
\n"; + echo "
".escape($row['last_mod_user']).": ".date("j M Y @ H:i:s", strtotime($row['last_mod_date']))."
\n"; + $x++; + } + echo "
\n"; + unset($contact_notes); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_phones_view.php b/app/contacts/contact_phones_view.php new file mode 100644 index 0000000000..4eac592e82 --- /dev/null +++ b/app/contacts/contact_phones_view.php @@ -0,0 +1,96 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_phone_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the contact list + $sql = "select * from v_contact_phones "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and contact_uuid = :contact_uuid "; + $sql .= "order by phone_primary desc, phone_label asc "; + $parameters['domain_uuid'] = $domain_uuid; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_phones = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_phones) && @sizeof($contact_phones) != 0) { + + //javascript function: send_cmd + echo "\n"; + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_phones as $row) { + echo "
".($row['phone_label'] == strtolower($row['phone_label']) ? ucwords($row['phone_label']) : $row['phone_label'])."
\n"; +// ($row['phone_primary'] ? " " : null)."\n"; + echo "
"; + echo button::create(['type'=>'button','class'=>'link','label'=>escape(format_phone($row['phone_number'])),'title'=>$text['label-click_to_call'],'onclick'=>"send_cmd('".PROJECT_PATH."/app/click_to_call/click_to_call.php?src_cid_name=".urlencode($row['phone_number'])."&src_cid_number=".urlencode($row['phone_number'])."&dest_cid_name=".urlencode($_SESSION['user']['extension'][0]['outbound_caller_id_name'])."&dest_cid_number=".urlencode($_SESSION['user']['extension'][0]['outbound_caller_id_number'])."&src=".urlencode($_SESSION['user']['extension'][0]['user'])."&dest=".urlencode($row['phone_number'])."&rec=false&ringback=us-ring&auto_answer=true');"]); + echo "
\n"; + echo "
"; + if ($row['phone_type_voice']) { $phone_types[] = ""; } + if ($row['phone_type_fax']) { $phone_types[] = ""; } + if ($row['phone_type_video']) { $phone_types[] = ""; } + if ($row['phone_type_text']) { $phone_types[] = ""; } + if (is_array($phone_types)) { + echo " ".implode(" ", $phone_types)."\n"; + } + unset($phone_types); + echo "
\n"; + $x++; + } + echo "
\n"; + unset($contact_phones); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_relations_view.php b/app/contacts/contact_relations_view.php new file mode 100644 index 0000000000..d17556cb33 --- /dev/null +++ b/app/contacts/contact_relations_view.php @@ -0,0 +1,83 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_relation_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the related contacts + $sql = "select "; + $sql .= "cr.contact_relation_uuid, "; + $sql .= "cr.relation_label, "; + $sql .= "c.contact_uuid, "; + $sql .= "c.contact_organization, "; + $sql .= "c.contact_name_given, "; + $sql .= "c.contact_name_family "; + $sql .= "from "; + $sql .= "v_contact_relations as cr, "; + $sql .= "v_contacts as c "; + $sql .= "where "; + $sql .= "cr.relation_contact_uuid = c.contact_uuid "; + $sql .= "and cr.domain_uuid = :domain_uuid "; + $sql .= "and cr.contact_uuid = :contact_uuid "; + $sql .= "order by "; + $sql .= "c.contact_organization desc, "; + $sql .= "c.contact_name_given asc, "; + $sql .= "c.contact_name_family asc "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_relations = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_relations) && @sizeof($contact_relations) != 0) { + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_relations as $row) { + echo "
".escape($row['relation_label'])."
\n"; + echo "\n"; + echo "\n"; + $x++; + } + echo "
\n"; + unset($contact_relations); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_times_view.php b/app/contacts/contact_times_view.php new file mode 100644 index 0000000000..532e39ea5a --- /dev/null +++ b/app/contacts/contact_times_view.php @@ -0,0 +1,81 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_time_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the contact list + $sql = "select ct.*, u.username, u.domain_uuid as user_domain_uuid "; + $sql .= "from v_contact_times as ct, v_users as u "; + $sql .= "where ct.user_uuid = u.user_uuid "; + $sql .= "and ct.domain_uuid = :domain_uuid "; + $sql .= "and ct.contact_uuid = :contact_uuid "; + $sql .= "order by ct.time_start desc "; + $parameters['domain_uuid'] = $domain_uuid; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_times = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_times) && @sizeof($contact_times) != 0) { + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_times as $row) { + if ($row["time_start"] != '' && $row['time_stop'] != '') { + $time_start = strtotime($row["time_start"]); + $time_stop = strtotime($row['time_stop']); + $time = gmdate("H:i:s", ($time_stop - $time_start)); + } + else { + unset($time); + } + $tmp = explode(' ', $row['time_start']); + $time_start = $tmp[0]; + echo "
".escape($row["username"])."
\n"; + echo "
".$time_start."
\n"; + echo "
".$time."
\n"; + $x++; + } + echo "
\n"; + unset($contact_times); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_urls_view.php b/app/contacts/contact_urls_view.php new file mode 100644 index 0000000000..7fd941c0eb --- /dev/null +++ b/app/contacts/contact_urls_view.php @@ -0,0 +1,69 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('contact_url_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//get the contact list + $sql = "select * from v_contact_urls "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and contact_uuid = :contact_uuid "; + $sql .= "order by url_primary desc, url_label asc "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['contact_uuid'] = $contact_uuid; + $database = new database; + $contact_urls = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + +//show if exists + if (is_array($contact_urls) && @sizeof($contact_urls) != 0) { + + //show the content + echo "
\n"; + $x = 0; + foreach ($contact_urls as $row) { + echo "
".escape($row['url_label'])."
\n"; +// ($row['url_primary'] ? " " : null)."\n"; + echo "\n"; + $x++; + } + echo "
\n"; + unset($contact_urls); + + } + +?> \ No newline at end of file diff --git a/app/contacts/contact_view.php b/app/contacts/contact_view.php new file mode 100644 index 0000000000..aca5b6a432 --- /dev/null +++ b/app/contacts/contact_view.php @@ -0,0 +1,533 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//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 ""; + $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 ""; + $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 ""; + echo ""; + echo ""; + echo ""; + +//show the content + echo "
\n"; + echo "
".($contact_name ? $contact_name : $text['header-contact-edit'])."
\n"; + echo "
\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 ""; + } + 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 "
\n"; + echo "
\n"; + echo "
\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 ? ''.$contact_title.'' : null).($contact_title && $contact_organization ? ', ' : null).($contact_organization ? ''.$contact_organization.'' : null)."\n"; + } + else { + echo $contact_note."\n"; + } + echo "

\n"; + + echo "
\n"; + +//general info + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + //nickname + if ($contact_nickname) { + echo "
".$text['label-contact_nickname']."
\n"; + echo "
\"".escape($contact_nickname)."\"
\n"; + } + //contact type + if ($contact_type) { + echo "
".$text['label-contact_type']."
\n"; + echo "
"; + 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 "
\n"; + } + //category + if ($contact_category) { + echo "
".$text['label-contact_category']."
\n"; + echo "
"; + 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 "
\n"; + } + //role + if ($contact_role) { + echo "
".$text['label-contact_role']."
\n"; + echo "
"; + 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 "
\n"; + } + //time_zone + if ($contact_time_zone) { + echo "
".$text['label-contact_time_zone']."
\n"; + echo "
"; + echo $contact_time_zone."
\n"; + echo "
\n"; + } + //users (viewing contact) + if (permission_exists('contact_user_view') && is_array($contact_users_assigned) && @sizeof($contact_users_assigned) != 0) { + echo "
".$text['label-users']."
\n"; + echo "
"; + foreach ($contact_users_assigned as $field) { + echo escape($field['username'])."
\n"; + } + echo "
\n"; + } + //groups (viewing contact) + if (permission_exists('contact_group_view') && is_array($contact_groups_assigned) && @sizeof($contact_groups_assigned) != 0) { + echo "
".$text['label-groups']."
\n"; + echo "
"; + foreach ($contact_groups_assigned as $field) { + echo escape($field['group_name'])."
\n"; + } + echo "
\n"; + } + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + +//numbers + if (permission_exists('contact_phone_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require 'contact_phones_view.php'; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + +//emails + if (permission_exists('contact_email_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require 'contact_emails_view.php'; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + +//addresses + if (permission_exists('contact_address_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require 'contact_addresses_view.php'; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + +//urls + if (permission_exists('contact_url_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require "contact_urls_view.php"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + +//relations + if (permission_exists('contact_relation_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require "contact_relations_view.php"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + +//attachments + if (permission_exists('contact_attachment_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require "contact_attachments_view.php"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + +//times + if (permission_exists('contact_time_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require "contact_times_view.php"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + +//extensions + if (permission_exists('contact_extension_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require "contact_extensions_view.php"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + + echo "
\n"; + echo "
\n"; + +//notes + if (permission_exists('contact_note_view')) { + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + require "contact_notes_view.php"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + + echo "
\n"; + echo "

\n"; + +//include the footer + require_once "resources/footer.php"; + +?> \ No newline at end of file diff --git a/app/contacts/contacts.php b/app/contacts/contacts.php index c94dcad1e0..c601bbae82 100644 --- a/app/contacts/contacts.php +++ b/app/contacts/contacts.php @@ -300,7 +300,7 @@ echo th_order_by('contact_title', $text['label-contact_title'], $order_by, $order, null, "class='hide-sm-dn'"); echo th_order_by('contact_role', $text['label-contact_role'], $order_by, $order, null, "class='hide-sm-dn'"); echo " \n"; - if (permission_exists('contact_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + if ($_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { echo "  \n"; } echo "\n"; @@ -308,9 +308,7 @@ if (is_array($contacts) && @sizeof($contacts) != 0) { $x = 0; foreach($contacts as $row) { - if (permission_exists('contact_edit') || permission_exists('contact_view')) { - $list_row_url = "contact_edit.php?id=".urlencode($row['contact_uuid'])."&query_string=".urlencode($_SERVER["QUERY_STRING"]); - } + $list_row_url = "contact_view.php?id=".urlencode($row['contact_uuid'])."&query_string=".urlencode($_SERVER["QUERY_STRING"]); echo "\n"; if (permission_exists('contact_delete')) { echo " \n"; @@ -342,9 +340,9 @@ echo " "; } echo " \n"; - if (permission_exists('contact_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + if ($_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { echo " "; - echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]); + echo button::create(['type'=>'button','title'=>$text['button-view'],'icon'=>$_SESSION['theme']['button_icon_view'],'link'=>$list_row_url]); echo " \n"; } echo "\n"; @@ -373,4 +371,4 @@ //include the footer require_once "resources/footer.php"; -?> +?> \ No newline at end of file diff --git a/app/contacts/resources/images/icon_gmaps.png b/app/contacts/resources/images/icon_gmaps.png index d1e06b716bf85c0be0bad41573038555a952623b..0608bf5de498a708dac54a4906bc7ff1187b6775 100644 GIT binary patch literal 6019 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 literal 4378 zcmV+#5#{cQP))p`Hj<=wYG={-Gd zmSio~;zig7;}zSrVFFIrLTF441qy_af|JlG#F*eN2}5beX#&GgGnq-!NvDgULxU%U z7!p@tVx*xLUy7_k zk$6*}C~B(&=_@W{>zM0wGM6P8V_`t@^P!R?(M^I3?=CLt^Zs4-EJhT6qaUV7U@A2U z4j>z{B;`~|zNA4pLwmntG3(7{f5X7C;8ir!MCnp7>mmRl2KH1om-$XX*W_%DLUD8YpLrl=1FE?5CIgO7LSV{4V#q=DB!lWmFoF`M8kOdmKES-|Hcwy;(S6lyL* z+d%_epE5*sRjkeTU^Lv8EQ}`%99y12^_3m*9yzfcZhkFfbu-|OmVwfu;X)z*^5o>y zTE=G*4BIimpSdYW)Z`*y0ZA%86-}VxSqM*oPYu9fT)Wg^F6NyL&S{-S!FuG0(CSQge*hFA+s>573mi6Ss#HF>CZNhRbM12YLR4qeC z)e_W)TMEKsc1g(2U#Y8 zxU{E31}ni&!bt7@5W$)dB0Y@+c6_ZAs(TWW`a{)motDYeZV%| z(W+qC7A;~Rq($)my(V)P@#^X4a9%$Ne>jTRg#x-ivf-#QT+4z?;Q0AI9vs0$u7J+^ z1X^mUVG&@5tHX3Kw&w`s#u%7GcFe}M%82b!^G5Eb@#zb(#fgo$z2{NXgc>n8bsD?g z`##Q1AAwC0s0qx$N&(H`If865g2HhfA;~|jE{lJy<4<}X7wRaOIlOfEFTrTV+DNP zRfq(W7|EW+vv1#t9UK1>_0hSWP0BuOB1yXh;;rFdA>fa4B7n_o`Va7DEw}{670%|O zpqpgJ3TcK@0fZ^o1kNxF_zAe+497xhC4u5Y+E^?|RB*g90&<)Iu zh0szRCEJIfJ~B-#nNy1(=ULMf;~WCYawH^!i31aD*2ol%%0_o&v`^3qrzM*PJH!Co zMs0^0J@fwRa3emQ+K>I`ep3O|PxF@4ZbaV5&_?9NG{;h043pp;T?ey>Q3yzYDC>?z ztytDni@EVAzS`4*jcs)>=@2eCFCS;~AX8UOf;ENtSeC`l0e@+;(cCZ;q7wm*B*L4J zsF08?`ng(z!5H?Q{WbMhMy>9|GV)Z3XwwpNnQ7sRUKLY*9g@yLSTIS&F|vuTwNb+o;_2CxirY@p|Xk7hH zQSHoAy(NC9cd(E)FIK4Dp)mz3C&uuWp|zIB>u^uk0(5?NDVzv-IGKQBJDwf$J0(8+ zZs&Cr8k3MnnofZnlBDk1{GBD9D}XLYu7qiM_Q@Br?IK|D?1;M~Y}XdgoDF7Q7tt5%WT#`&d8!M z)JZ(pU7q*iyMK+7>0`K|r5z8q&x2Z&Byo-hlsC(OHm3t}JvobR3Sn4uH#;a(3TX6N zC(3isP#s1MshbHtwgf%OKmGmRQ~<3G*5I)rl5|AQ$tleX=9Fnt2{LgqhUrs2qD=>CB#5b_ zpOf8^ZMG!gcDKMsAloP!@oY*2l41f6;jm0s+HVbSd*j%i;LzB4T+wtjqQR&D+g#m& zYddbE(@-*-pAr&H`sZNt!mW5@^^Zkh*!Eu!;GaJD8UAc>7k2a(LGrAgZ$eFyJdoqZ zsxWm*qx{zq5>mqfWQHz69~y(Pv=bUdqIPPbfGV`dDnatKbZN~C$w|XB;uj|~sL>j5 zOYdFS)O#zs8x|5R)RY~?q+}!FuY#s}5%=$2--e$Y`UgC6br+uMCGRExjFlpcaGyM@`ULWmSt(#F~;;K9`&%$Z>AO zxqKGW88TctNHSDUEI?`@?|$H#KgZo`9xR(ix{$`&=ezK=PCuSrGM}nRhGI$Q#Sr>o zvWC%5l1PzFDjF+ANDly|d45T;}! z=yyftWLOgzDqIAQWIc@wD;%ysg#3-R1b(z6En@b^43HZ@gGp_<@Z8U)& zEWa1ZLi=P~swI(Y!PVvk*XfBtnUB2*$K3e2h|CYDDJqn}|ovvNj}X zM&)ivqMrUqYc?whp*Wn0!Lq2`Wul@i#?qsxi#3#i@^^u`-$Ooo8bRX#sWx7esykEn zyPT=XOcfi+_8bze8nP21qz1#tUi4E0qCH5$o|G{o(Gp;RL@K{iYBvP7QJoU>9F?JT z=M>?RYo~IQWatiVxZ;)ysY+CWDDi7ipbSbWdqQP=lQ8WeTSRhzrZ}ZZXHhQS^Gw9^~~(a=o^V-UWGrK`B3F=y`FMm;z0r0*nfP zqn{te;<_%hUuLVa;)j~tM2U!u|2e}D4;IMIQ#6-o$&t!5g%Sua*@dc_2q$xh&&?xH zV~JN*mNF{?GjrGsU|#MCXUbDiN9K<1`d+MRUyo&NYcQ{_2Tk!70u!M+$VHeJWB^lr{6=nat4e1c{&W4 zf*L^}-izv%4N$f4mq71%e;nWadEv3y~-oG0^fAb~0bLIfPI@iE6 zi&R9&@W_lP&Qs}XG5D$%qyC!bQPsHaOJH}tdI~S@9f#(R3YB*x&f|vme%#o02%S|! zp52j@-Puwu(~uV^cr@eGP{;%@H5fvAI50$Z%1+aWuA%WEJpAIf@%qs>;81Dv&{ZM) z<5G%5d|h~-VYuliFff<_9@+OGR6sX$EdE)l40_=?(;sRNwc`Pc;__6^E}51oaR8^9UL24edFI=j}v1j z5sE9gzc-4Vi^CMV8E2T{=Rpbya6^nQu_NQO>ol_~7?)DBQoJ48}GjJD{A#}xF=72>=sc<{W&uO3u(?AWpK zo}HT)A3WEONYaM~7DfnUkWw{Ad>rsRmVc4fF~O?vP~SEj7`l=qWFZ_1;{8+O7`QNw zTh?}X-&2KDb^Nw}3>w9Ht_HVAH9jg!WlB`W(sA^Cu^4;KuEfdd7KAhdO|c0QM2^^^ zOsHjgf}*^wTz|*)^*jFUsT%_%$p;pOv9p(Av+0NrSl(drS=qq26UVpqJ%NKmOAt}B zVm|*^8x98X!O0P z`-ZPT-U*^UN}AvlM+V0!&Wri-F6DUm#KpnP`3D}pGUDHPh2I0|vKdJ#I!5gT?*GGf z^q=n~56;c-8}rN}PXVE&M#Ud3Z4y97F6FShZwLwjE%71TS-i-+wWX4j>3%*{gSXBu z#cO9);7n=`qJaXMq7&rtg)~L4M^!s>aA@1|$O}&|(whmVx)lNt*rPpMF#d5;GMk&s{B(B9Y_Hs?1B~Dit4D#WEV{TqDPs%7pPRA8f=c zpRB=>IcM>wi{5#myJloaJ$z>^c^{r(X=^=USnC-wsYf+1Y*0=9`|UV7I-fvhDH|$( zm9I=hDBOmrKr3Bm&!?dqHo^pyeTl%NS$PF24=h3ht))<+LJ9lfb6xxU2fCl}DHP2d zo{&3?A}+p3!*|nf>o~{(qaJs^`2;>4>+(Q4n8kOqgd{Pcy5$RM%l*GS@CDhmB8s!w zKrV;JfC|v8;snk+0hMi*6gkKHqkVEX8uMcQbtxOQQ~n){KbnAg-Dm^eunz?)0@5IpaYj1%>N2706C({ U{R7<11^@s607*qoM6N<$f}Z(59{>OV diff --git a/themes/default/css.php b/themes/default/css.php index 92127f767c..d08c7bf19d 100644 --- a/themes/default/css.php +++ b/themes/default/css.php @@ -2230,6 +2230,35 @@ header('Expires: '.gmdate('D, d M Y H:i:s',time()+3600).' GMT'); /* CSS GRID ********************************************************************/ + div.grid { + width: 100%; + display: grid; + grid-gap: 0; + } + + div.grid > div.box.contact-details { + padding: 15px; + border: 1px solid ; + border-radius: 5px; + background: ; + } + + div.grid.contact-details { + grid-template-columns: 50px auto; + } + + div.grid > div.box { + padding: 0; + padding-bottom: 5px; + } + + div.grid > div.box.contact-details-label { + font-size: 87%; + letter-spacing: -0.03em; + vertical-align: middle; + white-space: nowrap; + } + div.form_grid { width: 100%; display: grid;