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"; + $x = 0; + foreach ($contact_addresses as $row) { + $map_query = $row['address_street']." ".$row['address_extended'].", ".$row['address_locality'].", ".$row['address_region'].", ".$row['address_region'].", ".$row['address_postal_code']; + echo "
".escape($row['address_label'])."
\n"; +// ($row['address_primary'] ? " " : null)."\n"; + echo "\n"; + echo "
\n"; + $x++; + } + 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 d1e06b716b..0608bf5de4 100644 Binary files a/app/contacts/resources/images/icon_gmaps.png and b/app/contacts/resources/images/icon_gmaps.png differ 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;