diff --git a/.env b/.env
index 1034f2d82..832d947ee 100644
--- a/.env
+++ b/.env
@@ -4,7 +4,7 @@ APP_KEY=SomeRandomString
DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=
-DB_DATABASE=faveo
+DB_DATABASE=faveo-dev
DB_USERNAME=root
DB_PASSWORD=
MAIL_DRIVER=smtp
diff --git a/DB/demodatabase.sql b/DB/demodatabase.sql
index a7c106303..d2a9dfe4b 100644
--- a/DB/demodatabase.sql
+++ b/DB/demodatabase.sql
@@ -3,7 +3,7 @@
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
--- Generation Time: Feb 18, 2016 at 08:11 PM
+-- Generation Time: Apr 20, 2016 at 06:48 AM
-- Server version: 5.6.17
-- PHP Version: 5.5.12
@@ -173,9 +173,9 @@ CREATE TABLE IF NOT EXISTS `department` (
--
INSERT INTO `department` (`id`, `name`, `type`, `sla`, `manager`, `ticket_assignment`, `outgoing_email`, `template_set`, `auto_ticket_response`, `auto_message_response`, `auto_response_email`, `recipient`, `group_access`, `department_sign`, `created_at`, `updated_at`) VALUES
-(1, 'Support', '', 1, NULL, '', '', '', '', '', '', '', '', '', '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(2, 'Sales', '', 1, NULL, '', '', '', '', '', '', '', '', '', '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(3, 'Operation', '', 1, NULL, '', '', '', '', '', '', '', '', '', '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, 'Support', '', 1, NULL, '', '', '', '', '', '', '', '', '', '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(2, 'Sales', '', 1, NULL, '', '', '', '', '', '', '', '', '', '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(3, 'Operation', '', 1, NULL, '', '', '', '', '', '', '', '', '', '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -194,11 +194,14 @@ CREATE TABLE IF NOT EXISTS `emails` (
`password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`fetching_host` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`fetching_port` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `fetching_protocol` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `fetching_encryption` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`mailbox_protocol` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`imap_config` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`folder` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`sending_host` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`sending_port` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sending_protocol` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`sending_encryption` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`internal_notes` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`auto_response` tinyint(1) NOT NULL,
@@ -216,7 +219,7 @@ CREATE TABLE IF NOT EXISTS `emails` (
KEY `department_2` (`department`,`priority`,`help_topic`),
KEY `priority` (`priority`),
KEY `help_topic` (`help_topic`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -251,9 +254,9 @@ CREATE TABLE IF NOT EXISTS `groups` (
--
INSERT INTO `groups` (`id`, `name`, `group_status`, `can_create_ticket`, `can_edit_ticket`, `can_post_ticket`, `can_close_ticket`, `can_assign_ticket`, `can_transfer_ticket`, `can_delete_ticket`, `can_ban_email`, `can_manage_canned`, `can_manage_faq`, `can_view_agent_stats`, `department_access`, `admin_notes`, `created_at`, `updated_at`) VALUES
-(1, 'Group A', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, '', '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(2, 'Group B', 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, '', '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(3, 'Group C', 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '', '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, 'Group A', 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, '', '2016-04-19 22:39:54', '2016-04-19 22:39:54'),
+(2, 'Group B', 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, '', '2016-04-19 22:39:54', '2016-04-19 22:39:54'),
+(3, 'Group C', 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '', '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -310,9 +313,9 @@ CREATE TABLE IF NOT EXISTS `help_topic` (
--
INSERT INTO `help_topic` (`id`, `topic`, `parent_topic`, `custom_form`, `department`, `ticket_status`, `priority`, `sla_plan`, `thank_page`, `ticket_num_format`, `internal_notes`, `status`, `type`, `auto_assign`, `auto_response`, `created_at`, `updated_at`) VALUES
-(1, 'Support query', '', NULL, 1, 1, 2, 1, '', '1', '', 1, 1, NULL, 0, '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(2, 'Sales query', '', NULL, 2, 1, 2, 1, '', '1', '', 0, 1, NULL, 0, '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(3, 'Operational query', '', NULL, 3, 1, 2, 1, '', '1', '', 0, 1, NULL, 0, '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, 'Support query', '', NULL, 1, 1, 2, 1, '', '1', '', 1, 1, NULL, 0, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(2, 'Sales query', '', NULL, 2, 1, 2, 1, '', '1', '', 0, 1, NULL, 0, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(3, 'Operational query', '', NULL, 3, 1, 2, 1, '', '1', '', 0, 1, NULL, 0, '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -425,7 +428,7 @@ CREATE TABLE IF NOT EXISTS `kb_settings` (
--
INSERT INTO `kb_settings` (`id`, `pagination`, `created_at`, `updated_at`) VALUES
-(1, 10, '2016-02-18 08:41:12', '2016-02-18 08:41:12');
+(1, 10, '2016-04-19 22:39:56', '2016-04-19 22:39:56');
-- --------------------------------------------------------
@@ -474,7 +477,7 @@ CREATE TABLE IF NOT EXISTS `log_notification` (
--
INSERT INTO `log_notification` (`id`, `log`, `created_at`, `updated_at`) VALUES
-(1, 'NOT-1', '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, 'NOT-1', '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -581,7 +584,45 @@ INSERT INTO `migrations` (`migration`, `batch`) VALUES
('2016_02_16_140454_add_foreign_keys_to_ticket_thread_table', 1),
('2016_02_16_140454_add_foreign_keys_to_tickets_table', 1),
('2016_02_16_140454_add_foreign_keys_to_user_assign_organization_table', 1),
-('2016_02_16_140454_add_foreign_keys_to_users_table', 1);
+('2016_02_16_140454_add_foreign_keys_to_users_table', 1),
+('2016_03_31_061239_create_notifications_table', 1),
+('2016_03_31_061534_create_notification_types_table', 1),
+('2016_03_31_061740_create_user_notification_table', 1),
+('2016_04_18_115852_create_workflow_name_table', 1),
+('2016_04_18_115900_create_workflow_rule_table', 1),
+('2016_04_18_115908_create_workflow_action_table', 1);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `notifications`
+--
+
+CREATE TABLE IF NOT EXISTS `notifications` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `model_id` int(11) NOT NULL,
+ `userid_created` int(11) NOT NULL,
+ `type_id` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `notification_types`
+--
+
+CREATE TABLE IF NOT EXISTS `notification_types` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `icon_class` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -705,7 +746,7 @@ CREATE TABLE IF NOT EXISTS `settings_alert_notice` (
--
INSERT INTO `settings_alert_notice` (`id`, `ticket_status`, `ticket_admin_email`, `ticket_department_manager`, `ticket_department_member`, `ticket_organization_accmanager`, `message_status`, `message_last_responder`, `message_assigned_agent`, `message_department_manager`, `message_organization_accmanager`, `internal_status`, `internal_last_responder`, `internal_assigned_agent`, `internal_department_manager`, `assignment_status`, `assignment_assigned_agent`, `assignment_team_leader`, `assignment_team_member`, `transfer_status`, `transfer_assigned_agent`, `transfer_department_manager`, `transfer_department_member`, `overdue_status`, `overdue_assigned_agent`, `overdue_department_manager`, `overdue_department_member`, `system_error`, `sql_error`, `excessive_failure`, `created_at`, `updated_at`) VALUES
-(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -730,7 +771,7 @@ CREATE TABLE IF NOT EXISTS `settings_auto_response` (
--
INSERT INTO `settings_auto_response` (`id`, `new_ticket`, `agent_new_ticket`, `submitter`, `participants`, `overlimit`, `created_at`, `updated_at`) VALUES
-(1, 1, 1, 0, 0, 0, '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, 1, 1, 0, 0, 0, '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -759,7 +800,7 @@ CREATE TABLE IF NOT EXISTS `settings_company` (
--
INSERT INTO `settings_company` (`id`, `company_name`, `website`, `phone`, `address`, `landing_page`, `offline_page`, `thank_page`, `logo`, `use_logo`, `created_at`, `updated_at`) VALUES
-(1, '', '', '', '', '', '', '', '', '', '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, '', '', '', '', '', '', '', '', '', '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -791,7 +832,7 @@ CREATE TABLE IF NOT EXISTS `settings_email` (
--
INSERT INTO `settings_email` (`id`, `template`, `sys_email`, `alert_email`, `admin_email`, `mta`, `email_fetching`, `notification_cron`, `strip`, `separator`, `all_emails`, `email_collaborator`, `attachment`, `created_at`, `updated_at`) VALUES
-(1, 'default', NULL, '', '', '', 1, 0, 0, 0, 1, 1, 1, '2016-02-18 08:41:11', '2016-02-18 08:47:51');
+(1, 'default', NULL, '', '', '', 1, 0, 0, 0, 1, 1, 1, '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -827,6 +868,7 @@ CREATE TABLE IF NOT EXISTS `settings_system` (
`log_level` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`purge_log` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`api_enable` int(11) NOT NULL,
+ `api_key_mandatory` int(11) NOT NULL,
`api_key` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name_format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`time_farmat` int(10) unsigned DEFAULT NULL,
@@ -848,8 +890,8 @@ CREATE TABLE IF NOT EXISTS `settings_system` (
-- Dumping data for table `settings_system`
--
-INSERT INTO `settings_system` (`id`, `status`, `url`, `name`, `department`, `page_size`, `log_level`, `purge_log`, `api_enable`, `api_key`, `name_format`, `time_farmat`, `date_format`, `date_time_format`, `day_date_time`, `time_zone`, `content`, `created_at`, `updated_at`) VALUES
-(1, 1, '', '', '1', '', '', '', 0, '', '', NULL, NULL, 1, '', 79, '', '2016-02-18 08:41:12', '2016-02-18 08:41:12');
+INSERT INTO `settings_system` (`id`, `status`, `url`, `name`, `department`, `page_size`, `log_level`, `purge_log`, `api_enable`, `api_key_mandatory`, `api_key`, `name_format`, `time_farmat`, `date_format`, `date_time_format`, `day_date_time`, `time_zone`, `content`, `created_at`, `updated_at`) VALUES
+(1, 1, '', '', '1', '', '', '', 0, 0, '', '', NULL, NULL, 1, '', 79, '', '2016-04-19 22:39:56', '2016-04-19 22:39:56');
-- --------------------------------------------------------
@@ -885,7 +927,7 @@ CREATE TABLE IF NOT EXISTS `settings_ticket` (
--
INSERT INTO `settings_ticket` (`id`, `num_format`, `num_sequence`, `priority`, `sla`, `help_topic`, `max_open_ticket`, `collision_avoid`, `captcha`, `status`, `claim_response`, `assigned_ticket`, `answered_ticket`, `agent_mask`, `html`, `client_update`, `max_file_size`, `created_at`, `updated_at`) VALUES
-(1, '#ABCD 1234 1234567', '0', '1', '2', '1', '', '2', '', 1, 0, 0, 0, 0, 0, 0, 0, '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, '#ABCD 1234 1234567', '0', '1', '2', '1', '', '2', '', 1, 0, 0, 0, 0, 0, 0, 0, '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -911,9 +953,9 @@ CREATE TABLE IF NOT EXISTS `sla_plan` (
--
INSERT INTO `sla_plan` (`id`, `name`, `grace_period`, `admin_note`, `status`, `transient`, `ticket_overdue`, `created_at`, `updated_at`) VALUES
-(1, 'Sla 1', '6 Hours', '', 1, 0, 0, '2016-02-18 08:41:10', '2016-02-18 08:41:10'),
-(2, 'Sla 2', '12 Hours', '', 1, 0, 0, '2016-02-18 08:41:10', '2016-02-18 08:41:10'),
-(3, 'Sla 3', '24 Hours', '', 1, 0, 0, '2016-02-18 08:41:10', '2016-02-18 08:41:10');
+(1, 'Sla 1', '6 Hours', '', 1, 0, 0, '2016-04-19 22:39:54', '2016-04-19 22:39:54'),
+(2, 'Sla 2', '12 Hours', '', 1, 0, 0, '2016-04-19 22:39:54', '2016-04-19 22:39:54'),
+(3, 'Sla 3', '24 Hours', '', 1, 0, 0, '2016-04-19 22:39:54', '2016-04-19 22:39:54');
-- --------------------------------------------------------
@@ -939,9 +981,9 @@ CREATE TABLE IF NOT EXISTS `teams` (
--
INSERT INTO `teams` (`id`, `name`, `status`, `team_lead`, `assign_alert`, `admin_notes`, `created_at`, `updated_at`) VALUES
-(1, 'Level 1 Support', 1, NULL, 0, '', '2016-02-18 08:41:10', '2016-02-18 08:41:10'),
-(2, 'Level 2 Support', 0, NULL, 0, '', '2016-02-18 08:41:10', '2016-02-18 08:41:10'),
-(3, 'Developer', 0, NULL, 0, '', '2016-02-18 08:41:10', '2016-02-18 08:41:10');
+(1, 'Level 1 Support', 1, NULL, 0, '', '2016-04-19 22:39:54', '2016-04-19 22:39:54'),
+(2, 'Level 2 Support', 0, NULL, 0, '', '2016-04-19 22:39:54', '2016-04-19 22:39:54'),
+(3, 'Developer', 0, NULL, 0, '', '2016-04-19 22:39:54', '2016-04-19 22:39:54');
-- --------------------------------------------------------
@@ -1027,7 +1069,7 @@ CREATE TABLE IF NOT EXISTS `tickets` (
KEY `status` (`status`),
KEY `assigned_to` (`assigned_to`),
KEY `source` (`source`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -1044,10 +1086,10 @@ CREATE TABLE IF NOT EXISTS `ticket_attachment` (
`poster` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `file` blob,
+ `file` mediumblob,
PRIMARY KEY (`id`),
KEY `thread_id` (`thread_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -1106,10 +1148,10 @@ CREATE TABLE IF NOT EXISTS `ticket_priority` (
--
INSERT INTO `ticket_priority` (`priority_id`, `priority`, `priority_desc`, `priority_color`, `priority_urgency`, `ispublic`) VALUES
-(1, 'low', 'Low', 'info', 4, 1),
-(2, 'normal', 'Normal', 'info', 3, 1),
-(3, 'high', 'High', 'warning', 2, 1),
-(4, 'emergency', 'Emergency', 'danger', 1, 1);
+(1, 'Low', 'Low', 'info', 4, 1),
+(2, 'Normal', 'Normal', 'info', 3, 1),
+(3, 'High', 'High', 'warning', 2, 1),
+(4, 'Emergency', 'Emergency', 'danger', 1, 1);
-- --------------------------------------------------------
@@ -1158,11 +1200,11 @@ CREATE TABLE IF NOT EXISTS `ticket_status` (
--
INSERT INTO `ticket_status` (`id`, `name`, `state`, `mode`, `message`, `flags`, `sort`, `properties`, `created_at`, `updated_at`) VALUES
-(1, 'Open', 'open', 3, 'Ticket have been Reopened by', 0, 1, 'Open tickets.', '2016-02-18 08:41:09', '2016-02-18 08:41:09'),
-(2, 'Resolved', 'closed', 1, 'Ticket have been Resolved by', 0, 2, 'Resolved tickets.', '2016-02-18 08:41:09', '2016-02-18 08:41:09'),
-(3, 'Closed', 'closed', 3, 'Ticket have been Closed by', 0, 3, 'Closed tickets. Tickets will still be accessible on client and staff panels.', '2016-02-18 08:41:09', '2016-02-18 08:41:09'),
-(4, 'Archived', 'archived', 3, 'Ticket have been Archived by', 0, 4, 'Tickets only adminstratively available but no longer accessible on ticket queues and client panel.', '2016-02-18 08:41:09', '2016-02-18 08:41:09'),
-(5, 'Deleted', 'deleted', 3, 'Ticket have been Deleted by', 0, 5, 'Tickets queued for deletion. Not accessible on ticket queues.', '2016-02-18 08:41:09', '2016-02-18 08:41:09');
+(1, 'Open', 'open', 3, 'Ticket have been Reopened by', 0, 1, 'Open tickets.', '2016-04-19 22:39:53', '2016-04-19 22:39:53'),
+(2, 'Resolved', 'closed', 1, 'Ticket have been Resolved by', 0, 2, 'Resolved tickets.', '2016-04-19 22:39:53', '2016-04-19 22:39:53'),
+(3, 'Closed', 'closed', 3, 'Ticket have been Closed by', 0, 3, 'Closed tickets. Tickets will still be accessible on client and staff panels.', '2016-04-19 22:39:53', '2016-04-19 22:39:53'),
+(4, 'Archived', 'archived', 3, 'Ticket have been Archived by', 0, 4, 'Tickets only adminstratively available but no longer accessible on ticket queues and client panel.', '2016-04-19 22:39:53', '2016-04-19 22:39:53'),
+(5, 'Deleted', 'deleted', 3, 'Ticket have been Deleted by', 0, 5, 'Tickets queued for deletion. Not accessible on ticket queues.', '2016-04-19 22:39:53', '2016-04-19 22:39:53');
-- --------------------------------------------------------
@@ -1176,6 +1218,8 @@ CREATE TABLE IF NOT EXISTS `ticket_thread` (
`user_id` int(10) unsigned DEFAULT NULL,
`poster` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`source` int(10) unsigned DEFAULT NULL,
+ `reply_rating` int(11) NOT NULL,
+ `rating_count` int(11) NOT NULL,
`is_internal` tinyint(1) NOT NULL,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`body` text COLLATE utf8_unicode_ci NOT NULL,
@@ -1187,7 +1231,7 @@ CREATE TABLE IF NOT EXISTS `ticket_thread` (
KEY `ticket_id_2` (`ticket_id`),
KEY `user_id` (`user_id`),
KEY `source` (`source`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -1381,14 +1425,14 @@ CREATE TABLE IF NOT EXISTS `users` (
UNIQUE KEY `users_email_unique` (`email`),
KEY `assign_group_3` (`assign_group`),
KEY `primary_dpt_2` (`primary_dpt`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
--
-- Dumping data for table `users`
--
INSERT INTO `users` (`id`, `user_name`, `first_name`, `last_name`, `gender`, `email`, `ban`, `password`, `active`, `ext`, `phone_number`, `mobile`, `agent_sign`, `account_type`, `account_status`, `assign_group`, `primary_dpt`, `agent_tzone`, `daylight_save`, `limit_access`, `directory_listing`, `vacation_mode`, `company`, `role`, `internal_note`, `profile_pic`, `remember_token`, `created_at`, `updated_at`) VALUES
-(1, 'demo.admin', 'demo', 'admin', 0, 'demo@admin.com', 0, '$2y$10$whmtHDap2LVeCcMy4gjYk.nOWKx45M7loy8TsVjWozLLfQbDRswUe', 1, '', '', '', '', '', '', 1, 1, '', '', '', '', '', '', 'admin', '', '', 'mzJmeXU43vOHGxFvFcnwQTAKa3HEqOjUu7quW9hPxR211S3uAJDZCGJ5PXXj', '2016-02-18 08:41:12', '2016-02-18 08:55:17');
+(1, 'demo@admin.com', 'admin', 'demo', 0, 'demo@admin.com', 0, '$2y$10$r1QfG5KRpX8h0nyf96xCTOCAYvKFYu4HQbZwQM5w000VX/Klyqiri', 1, '', '', '', '', '', '', 1, 1, '', '', '', '', '', '', 'admin', '', '', NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56');
-- --------------------------------------------------------
@@ -1409,6 +1453,22 @@ CREATE TABLE IF NOT EXISTS `user_assign_organization` (
-- --------------------------------------------------------
+--
+-- Table structure for table `user_notification`
+--
+
+CREATE TABLE IF NOT EXISTS `user_notification` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `notification_id` int(11) NOT NULL,
+ `user_id` int(11) NOT NULL,
+ `is_read` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
--
-- Table structure for table `version_check`
--
@@ -1427,7 +1487,7 @@ CREATE TABLE IF NOT EXISTS `version_check` (
--
INSERT INTO `version_check` (`id`, `current_version`, `new_version`, `created_at`, `updated_at`) VALUES
-(1, '', '', '2016-02-18 08:41:11', '2016-02-18 08:41:11');
+(1, '', '', '2016-04-19 22:39:55', '2016-04-19 22:39:55');
-- --------------------------------------------------------
@@ -1450,26 +1510,80 @@ CREATE TABLE IF NOT EXISTS `widgets` (
--
INSERT INTO `widgets` (`id`, `name`, `title`, `value`, `created_at`, `updated_at`) VALUES
-(1, 'footer1', NULL, NULL, '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(2, 'footer2', NULL, NULL, '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(3, 'footer3', NULL, NULL, '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(4, 'footer4', NULL, NULL, '2016-02-18 08:41:11', '2016-02-18 08:41:11'),
-(5, 'side1', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(6, 'side2', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(7, 'linkedin', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(8, 'stumble', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(9, 'google', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(10, 'deviantart', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(11, 'flickr', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(12, 'skype', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(13, 'rss', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(14, 'twitter', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(15, 'facebook', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(16, 'youtube', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(17, 'vimeo', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(18, 'pinterest', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(19, 'dribbble', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12'),
-(20, 'instagram', NULL, NULL, '2016-02-18 08:41:12', '2016-02-18 08:41:12');
+(1, 'footer1', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(2, 'footer2', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(3, 'footer3', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(4, 'footer4', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(5, 'side1', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(6, 'side2', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(7, 'linkedin', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(8, 'stumble', NULL, NULL, '2016-04-19 22:39:55', '2016-04-19 22:39:55'),
+(9, 'google', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(10, 'deviantart', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(11, 'flickr', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(12, 'skype', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(13, 'rss', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(14, 'twitter', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(15, 'facebook', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(16, 'youtube', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(17, 'vimeo', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(18, 'pinterest', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(19, 'dribbble', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56'),
+(20, 'instagram', NULL, NULL, '2016-04-19 22:39:56', '2016-04-19 22:39:56');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `workflow_action`
+--
+
+CREATE TABLE IF NOT EXISTS `workflow_action` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `workflow_id` int(10) unsigned NOT NULL,
+ `condition` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `action` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `workflow_action_1` (`workflow_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `workflow_name`
+--
+
+CREATE TABLE IF NOT EXISTS `workflow_name` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` int(11) NOT NULL,
+ `order` int(11) NOT NULL,
+ `target` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `internal_note` text COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `workflow_rules`
+--
+
+CREATE TABLE IF NOT EXISTS `workflow_rules` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `workflow_id` int(10) unsigned NOT NULL,
+ `matching_criteria` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `matching_scenario` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `matching_relation` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `matching_value` text COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `workflow_rules_1` (`workflow_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
--
-- Constraints for dumped tables
@@ -1610,6 +1724,18 @@ ALTER TABLE `user_assign_organization`
ADD CONSTRAINT `user_assign_organization_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON UPDATE NO ACTION,
ADD CONSTRAINT `user_assign_organization_ibfk_1` FOREIGN KEY (`org_id`) REFERENCES `organization` (`id`) ON UPDATE NO ACTION;
+--
+-- Constraints for table `workflow_action`
+--
+ALTER TABLE `workflow_action`
+ ADD CONSTRAINT `workflow_action_1` FOREIGN KEY (`workflow_id`) REFERENCES `workflow_name` (`id`) ON UPDATE NO ACTION;
+
+--
+-- Constraints for table `workflow_rules`
+--
+ALTER TABLE `workflow_rules`
+ ADD CONSTRAINT `workflow_rules_1` FOREIGN KEY (`workflow_id`) REFERENCES `workflow_name` (`id`) ON UPDATE NO ACTION;
+
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/DB/update from 1.0.6.10 to 1.0.7/Updatedatabase.sql b/DB/update from 1.0.6.10 to 1.0.7/Updatedatabase.sql
new file mode 100644
index 000000000..d8f3c4aac
--- /dev/null
+++ b/DB/update from 1.0.6.10 to 1.0.7/Updatedatabase.sql
@@ -0,0 +1,1173 @@
+-- phpMyAdmin SQL Dump
+-- version 4.1.14
+-- http://www.phpmyadmin.net
+--
+-- Host: 127.0.0.1
+-- Generation Time: Apr 20, 2016 at 06:30 AM
+-- Server version: 5.6.17
+-- PHP Version: 5.5.12
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+
+--
+-- Database: `demodatabase`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `banlist`
+--
+
+CREATE TABLE IF NOT EXISTS `banlist` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `ban_status` tinyint(1) NOT NULL,
+ `email_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `internal_notes` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `canned_response`
+--
+
+CREATE TABLE IF NOT EXISTS `canned_response` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) unsigned NOT NULL,
+ `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `message` text COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `custom_forms`
+--
+
+CREATE TABLE IF NOT EXISTS `custom_forms` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `formname` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `custom_form_fields`
+--
+
+CREATE TABLE IF NOT EXISTS `custom_form_fields` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `forms_id` int(11) NOT NULL,
+ `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `value` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `required` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `date_format`
+--
+
+CREATE TABLE IF NOT EXISTS `date_format` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `date_time_format`
+--
+
+CREATE TABLE IF NOT EXISTS `date_time_format` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `department`
+--
+
+CREATE TABLE IF NOT EXISTS `department` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sla` int(10) unsigned DEFAULT NULL,
+ `manager` int(10) unsigned DEFAULT NULL,
+ `ticket_assignment` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `outgoing_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `template_set` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `auto_ticket_response` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `auto_message_response` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `auto_response_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `recipient` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `group_access` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `department_sign` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `sla` (`sla`),
+ KEY `manager_2` (`manager`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `emails`
+--
+
+CREATE TABLE IF NOT EXISTS `emails` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `email_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `email_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `department` int(10) unsigned DEFAULT NULL,
+ `priority` int(10) unsigned DEFAULT NULL,
+ `help_topic` int(10) unsigned DEFAULT NULL,
+ `user_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `fetching_host` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `fetching_port` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `fetching_protocol` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `fetching_encryption` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `mailbox_protocol` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `imap_config` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `folder` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sending_host` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sending_port` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sending_protocol` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sending_encryption` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `internal_notes` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `auto_response` tinyint(1) NOT NULL,
+ `fetching_status` tinyint(1) NOT NULL,
+ `move_to_folder` tinyint(1) NOT NULL,
+ `delete_email` tinyint(1) NOT NULL,
+ `do_nothing` tinyint(1) NOT NULL,
+ `sending_status` tinyint(1) NOT NULL,
+ `authentication` tinyint(1) NOT NULL,
+ `header_spoofing` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `department` (`department`,`priority`,`help_topic`),
+ KEY `department_2` (`department`,`priority`,`help_topic`),
+ KEY `priority` (`priority`),
+ KEY `help_topic` (`help_topic`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `groups`
+--
+
+CREATE TABLE IF NOT EXISTS `groups` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `group_status` tinyint(1) NOT NULL,
+ `can_create_ticket` tinyint(1) NOT NULL,
+ `can_edit_ticket` tinyint(1) NOT NULL,
+ `can_post_ticket` tinyint(1) NOT NULL,
+ `can_close_ticket` tinyint(1) NOT NULL,
+ `can_assign_ticket` tinyint(1) NOT NULL,
+ `can_transfer_ticket` tinyint(1) NOT NULL,
+ `can_delete_ticket` tinyint(1) NOT NULL,
+ `can_ban_email` tinyint(1) NOT NULL,
+ `can_manage_canned` tinyint(1) NOT NULL,
+ `can_manage_faq` tinyint(1) NOT NULL,
+ `can_view_agent_stats` tinyint(1) NOT NULL,
+ `department_access` tinyint(1) NOT NULL,
+ `admin_notes` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `group_assign_department`
+--
+
+CREATE TABLE IF NOT EXISTS `group_assign_department` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `group_id` int(10) unsigned NOT NULL,
+ `department_id` int(10) unsigned NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `group_id` (`group_id`),
+ KEY `department_id` (`department_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `help_topic`
+--
+
+CREATE TABLE IF NOT EXISTS `help_topic` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `topic` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `parent_topic` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `custom_form` int(10) unsigned DEFAULT NULL,
+ `department` int(10) unsigned DEFAULT NULL,
+ `ticket_status` int(10) unsigned DEFAULT NULL,
+ `priority` int(10) unsigned DEFAULT NULL,
+ `sla_plan` int(10) unsigned DEFAULT NULL,
+ `thank_page` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `ticket_num_format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `internal_notes` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `type` tinyint(1) NOT NULL,
+ `auto_assign` int(10) unsigned DEFAULT NULL,
+ `auto_response` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `custom_form` (`custom_form`),
+ KEY `department` (`department`),
+ KEY `ticket_status` (`ticket_status`),
+ KEY `priority` (`priority`),
+ KEY `sla_plan` (`sla_plan`),
+ KEY `auto_assign_2` (`auto_assign`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `kb_article`
+--
+
+CREATE TABLE IF NOT EXISTS `kb_article` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `description` text COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `type` tinyint(1) NOT NULL,
+ `publish_time` datetime DEFAULT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `kb_article_relationship`
+--
+
+CREATE TABLE IF NOT EXISTS `kb_article_relationship` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `article_id` int(10) unsigned NOT NULL,
+ `category_id` int(10) unsigned NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `article_relationship_article_id_foreign` (`article_id`),
+ KEY `article_relationship_category_id_foreign` (`category_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `kb_category`
+--
+
+CREATE TABLE IF NOT EXISTS `kb_category` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `description` text COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `parent` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `kb_comment`
+--
+
+CREATE TABLE IF NOT EXISTS `kb_comment` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `article_id` int(10) unsigned NOT NULL,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `website` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `comment` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `comment_article_id_foreign` (`article_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `kb_pages`
+--
+
+CREATE TABLE IF NOT EXISTS `kb_pages` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `visibility` tinyint(1) NOT NULL,
+ `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `description` text COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `kb_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `kb_settings` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `pagination` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `languages`
+--
+
+CREATE TABLE IF NOT EXISTS `languages` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `locale` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `log_notification`
+--
+
+CREATE TABLE IF NOT EXISTS `log_notification` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `log` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `mailbox_protocol`
+--
+
+CREATE TABLE IF NOT EXISTS `mailbox_protocol` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `value` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `migrations`
+--
+
+CREATE TABLE IF NOT EXISTS `migrations` (
+ `migration` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `batch` int(11) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `notifications`
+--
+
+CREATE TABLE IF NOT EXISTS `notifications` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `model_id` int(11) NOT NULL,
+ `userid_created` int(11) NOT NULL,
+ `type_id` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `notification_types`
+--
+
+CREATE TABLE IF NOT EXISTS `notification_types` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `icon_class` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `organization`
+--
+
+CREATE TABLE IF NOT EXISTS `organization` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `phone` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `website` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `head` int(10) unsigned DEFAULT NULL,
+ `internal_notes` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `head` (`head`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `password_resets`
+--
+
+CREATE TABLE IF NOT EXISTS `password_resets` (
+ `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ KEY `password_resets_email_index` (`email`),
+ KEY `password_resets_token_index` (`token`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `plugins`
+--
+
+CREATE TABLE IF NOT EXISTS `plugins` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `send_mail`
+--
+
+CREATE TABLE IF NOT EXISTS `send_mail` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `driver` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `host` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `port` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `encryption` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `settings_alert_notice`
+--
+
+CREATE TABLE IF NOT EXISTS `settings_alert_notice` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `ticket_status` tinyint(1) NOT NULL,
+ `ticket_admin_email` tinyint(1) NOT NULL,
+ `ticket_department_manager` tinyint(1) NOT NULL,
+ `ticket_department_member` tinyint(1) NOT NULL,
+ `ticket_organization_accmanager` tinyint(1) NOT NULL,
+ `message_status` tinyint(1) NOT NULL,
+ `message_last_responder` tinyint(1) NOT NULL,
+ `message_assigned_agent` tinyint(1) NOT NULL,
+ `message_department_manager` tinyint(1) NOT NULL,
+ `message_organization_accmanager` tinyint(1) NOT NULL,
+ `internal_status` tinyint(1) NOT NULL,
+ `internal_last_responder` tinyint(1) NOT NULL,
+ `internal_assigned_agent` tinyint(1) NOT NULL,
+ `internal_department_manager` tinyint(1) NOT NULL,
+ `assignment_status` tinyint(1) NOT NULL,
+ `assignment_assigned_agent` tinyint(1) NOT NULL,
+ `assignment_team_leader` tinyint(1) NOT NULL,
+ `assignment_team_member` tinyint(1) NOT NULL,
+ `transfer_status` tinyint(1) NOT NULL,
+ `transfer_assigned_agent` tinyint(1) NOT NULL,
+ `transfer_department_manager` tinyint(1) NOT NULL,
+ `transfer_department_member` tinyint(1) NOT NULL,
+ `overdue_status` tinyint(1) NOT NULL,
+ `overdue_assigned_agent` tinyint(1) NOT NULL,
+ `overdue_department_manager` tinyint(1) NOT NULL,
+ `overdue_department_member` tinyint(1) NOT NULL,
+ `system_error` tinyint(1) NOT NULL,
+ `sql_error` tinyint(1) NOT NULL,
+ `excessive_failure` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `settings_auto_response`
+--
+
+CREATE TABLE IF NOT EXISTS `settings_auto_response` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `new_ticket` tinyint(1) NOT NULL,
+ `agent_new_ticket` tinyint(1) NOT NULL,
+ `submitter` tinyint(1) NOT NULL,
+ `participants` tinyint(1) NOT NULL,
+ `overlimit` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `settings_company`
+--
+
+CREATE TABLE IF NOT EXISTS `settings_company` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `company_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `website` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `phone` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `landing_page` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `offline_page` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `thank_page` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `logo` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `use_logo` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `settings_email`
+--
+
+CREATE TABLE IF NOT EXISTS `settings_email` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `template` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sys_email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `alert_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `admin_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `mta` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `email_fetching` tinyint(1) NOT NULL,
+ `notification_cron` tinyint(1) NOT NULL,
+ `strip` tinyint(1) NOT NULL,
+ `separator` tinyint(1) NOT NULL,
+ `all_emails` tinyint(1) NOT NULL,
+ `email_collaborator` tinyint(1) NOT NULL,
+ `attachment` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `settings_ratings`
+--
+
+CREATE TABLE IF NOT EXISTS `settings_ratings` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `rating_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `publish` int(11) NOT NULL,
+ `modify` int(11) NOT NULL,
+ `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `settings_ratings_slug_unique` (`slug`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `settings_system`
+--
+
+CREATE TABLE IF NOT EXISTS `settings_system` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `status` tinyint(1) NOT NULL,
+ `url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `department` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `page_size` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `log_level` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `purge_log` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `api_enable` int(11) NOT NULL,
+ `api_key_mandatory` int(11) NOT NULL,
+ `api_key` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `name_format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `time_farmat` int(10) unsigned DEFAULT NULL,
+ `date_format` int(10) unsigned DEFAULT NULL,
+ `date_time_format` int(10) unsigned DEFAULT NULL,
+ `day_date_time` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `time_zone` int(10) unsigned DEFAULT NULL,
+ `content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `time_farmat` (`time_farmat`),
+ KEY `date_format` (`date_format`),
+ KEY `date_time_format` (`date_time_format`),
+ KEY `time_zone` (`time_zone`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `settings_ticket`
+--
+
+CREATE TABLE IF NOT EXISTS `settings_ticket` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `num_format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `num_sequence` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `priority` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `sla` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `help_topic` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `max_open_ticket` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `collision_avoid` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `captcha` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `claim_response` tinyint(1) NOT NULL,
+ `assigned_ticket` tinyint(1) NOT NULL,
+ `answered_ticket` tinyint(1) NOT NULL,
+ `agent_mask` tinyint(1) NOT NULL,
+ `html` tinyint(1) NOT NULL,
+ `client_update` tinyint(1) NOT NULL,
+ `max_file_size` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sla_plan`
+--
+
+CREATE TABLE IF NOT EXISTS `sla_plan` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `grace_period` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `admin_note` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `transient` tinyint(1) NOT NULL,
+ `ticket_overdue` tinyint(1) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `teams`
+--
+
+CREATE TABLE IF NOT EXISTS `teams` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `team_lead` int(10) unsigned DEFAULT NULL,
+ `assign_alert` tinyint(1) NOT NULL,
+ `admin_notes` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `team_lead` (`team_lead`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `team_assign_agent`
+--
+
+CREATE TABLE IF NOT EXISTS `team_assign_agent` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `team_id` int(10) unsigned DEFAULT NULL,
+ `agent_id` int(10) unsigned DEFAULT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `team_id` (`team_id`),
+ KEY `agent_id` (`agent_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `template`
+--
+
+CREATE TABLE IF NOT EXISTS `template` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` tinyint(1) NOT NULL,
+ `template_set_to_clone` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `language` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `internal_note` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `tickets`
+--
+
+CREATE TABLE IF NOT EXISTS `tickets` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `ticket_number` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `user_id` int(10) unsigned DEFAULT NULL,
+ `dept_id` int(10) unsigned DEFAULT NULL,
+ `team_id` int(10) unsigned DEFAULT NULL,
+ `priority_id` int(10) unsigned DEFAULT NULL,
+ `sla` int(10) unsigned DEFAULT NULL,
+ `help_topic_id` int(10) unsigned DEFAULT NULL,
+ `status` int(10) unsigned DEFAULT NULL,
+ `rating` tinyint(1) NOT NULL,
+ `ratingreply` tinyint(1) NOT NULL,
+ `flags` int(11) NOT NULL,
+ `ip_address` int(11) NOT NULL,
+ `assigned_to` int(10) unsigned DEFAULT NULL,
+ `lock_by` int(11) NOT NULL,
+ `lock_at` datetime DEFAULT NULL,
+ `source` int(10) unsigned DEFAULT NULL,
+ `isoverdue` int(11) NOT NULL,
+ `reopened` int(11) NOT NULL,
+ `isanswered` int(11) NOT NULL,
+ `html` int(11) NOT NULL,
+ `is_deleted` int(11) NOT NULL,
+ `closed` int(11) NOT NULL,
+ `is_transferred` tinyint(1) NOT NULL,
+ `transferred_at` datetime NOT NULL,
+ `reopened_at` datetime DEFAULT NULL,
+ `duedate` datetime DEFAULT NULL,
+ `closed_at` datetime DEFAULT NULL,
+ `last_message_at` datetime DEFAULT NULL,
+ `last_response_at` datetime DEFAULT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `user_id` (`user_id`),
+ KEY `dept_id` (`dept_id`),
+ KEY `team_id` (`team_id`),
+ KEY `priority_id` (`priority_id`),
+ KEY `sla` (`sla`),
+ KEY `help_topic_id` (`help_topic_id`),
+ KEY `status` (`status`),
+ KEY `assigned_to` (`assigned_to`),
+ KEY `source` (`source`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ticket_attachment`
+--
+
+CREATE TABLE IF NOT EXISTS `ticket_attachment` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `thread_id` int(10) unsigned DEFAULT NULL,
+ `size` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `poster` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `file` mediumblob,
+ PRIMARY KEY (`id`),
+ KEY `thread_id` (`thread_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ticket_collaborator`
+--
+
+CREATE TABLE IF NOT EXISTS `ticket_collaborator` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `isactive` tinyint(1) NOT NULL,
+ `ticket_id` int(10) unsigned DEFAULT NULL,
+ `user_id` int(10) unsigned DEFAULT NULL,
+ `role` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `ticket_id` (`ticket_id`),
+ KEY `user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ticket_form_data`
+--
+
+CREATE TABLE IF NOT EXISTS `ticket_form_data` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `ticket_id` int(10) unsigned DEFAULT NULL,
+ `title` text COLLATE utf8_unicode_ci NOT NULL,
+ `content` text COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `ticket_id` (`ticket_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ticket_priority`
+--
+
+CREATE TABLE IF NOT EXISTS `ticket_priority` (
+ `priority_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `priority` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `priority_desc` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `priority_color` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `priority_urgency` tinyint(1) NOT NULL,
+ `ispublic` tinyint(1) NOT NULL,
+ PRIMARY KEY (`priority_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ticket_source`
+--
+
+CREATE TABLE IF NOT EXISTS `ticket_source` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `value` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ticket_status`
+--
+
+CREATE TABLE IF NOT EXISTS `ticket_status` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `state` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `mode` int(11) NOT NULL,
+ `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `flags` int(11) NOT NULL,
+ `sort` int(11) NOT NULL,
+ `properties` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `ticket_thread`
+--
+
+CREATE TABLE IF NOT EXISTS `ticket_thread` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `ticket_id` int(10) unsigned DEFAULT NULL,
+ `user_id` int(10) unsigned DEFAULT NULL,
+ `poster` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `source` int(10) unsigned DEFAULT NULL,
+ `reply_rating` int(11) NOT NULL,
+ `rating_count` int(11) NOT NULL,
+ `is_internal` tinyint(1) NOT NULL,
+ `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `body` text COLLATE utf8_unicode_ci NOT NULL,
+ `format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `ip_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `ticket_id_2` (`ticket_id`),
+ KEY `user_id` (`user_id`),
+ KEY `source` (`source`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `timezone`
+--
+
+CREATE TABLE IF NOT EXISTS `timezone` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `location` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=114 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `time_format`
+--
+
+CREATE TABLE IF NOT EXISTS `time_format` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `format` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `users`
+--
+
+CREATE TABLE IF NOT EXISTS `users` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `user_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `first_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `last_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `gender` tinyint(1) NOT NULL,
+ `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `ban` tinyint(1) NOT NULL,
+ `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
+ `active` int(11) NOT NULL,
+ `ext` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `phone_number` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `mobile` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `agent_sign` text COLLATE utf8_unicode_ci NOT NULL,
+ `account_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `account_status` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `assign_group` int(10) unsigned DEFAULT NULL,
+ `primary_dpt` int(10) unsigned DEFAULT NULL,
+ `agent_tzone` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `daylight_save` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `limit_access` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `directory_listing` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `vacation_mode` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `company` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `role` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `internal_note` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `profile_pic` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `users_email_unique` (`email`),
+ KEY `assign_group_3` (`assign_group`),
+ KEY `primary_dpt_2` (`primary_dpt`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `user_assign_organization`
+--
+
+CREATE TABLE IF NOT EXISTS `user_assign_organization` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `org_id` int(10) unsigned DEFAULT NULL,
+ `user_id` int(10) unsigned DEFAULT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `org_id` (`org_id`),
+ KEY `user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `user_notification`
+--
+
+CREATE TABLE IF NOT EXISTS `user_notification` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `notification_id` int(11) NOT NULL,
+ `user_id` int(11) NOT NULL,
+ `is_read` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `version_check`
+--
+
+CREATE TABLE IF NOT EXISTS `version_check` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `current_version` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `new_version` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `widgets`
+--
+
+CREATE TABLE IF NOT EXISTS `widgets` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `title` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `value` text COLLATE utf8_unicode_ci,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=21 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `workflow_action`
+--
+
+CREATE TABLE IF NOT EXISTS `workflow_action` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `workflow_id` int(10) unsigned NOT NULL,
+ `condition` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `action` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `workflow_action_1` (`workflow_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `workflow_name`
+--
+
+CREATE TABLE IF NOT EXISTS `workflow_name` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `status` int(11) NOT NULL,
+ `order` int(11) NOT NULL,
+ `target` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `internal_note` text COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `workflow_rules`
+--
+
+CREATE TABLE IF NOT EXISTS `workflow_rules` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `workflow_id` int(10) unsigned NOT NULL,
+ `matching_criteria` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `matching_scenario` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `matching_relation` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `matching_value` text COLLATE utf8_unicode_ci NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `workflow_rules_1` (`workflow_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+--
+-- Constraints for table `workflow_action`
+--
+ALTER TABLE `workflow_action`
+ ADD CONSTRAINT `workflow_action_1` FOREIGN KEY (`workflow_id`) REFERENCES `workflow_name` (`id`) ON UPDATE NO ACTION;
+
+--
+-- Constraints for table `workflow_rules`
+--
+ALTER TABLE `workflow_rules`
+ ADD CONSTRAINT `workflow_rules_1` FOREIGN KEY (`workflow_id`) REFERENCES `workflow_name` (`id`) ON UPDATE NO ACTION;
+
+--
+-- Constraints for table `ticket_thread`
+--
+ALTER TABLE `ticket_thread`
+ ADD `reply_rating` INT(11) NOT NULL AFTER `source`,
+ ADD `rating_count` INT(11) NOT NULL AFTER `reply_rating`;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/README.md b/README.md
index b6b65ba5c..c9bd5146d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-
About Faveo
+About Faveo
Headquartered in Bangalore, Faveo HELPDESK provides Businesses with an automated Helpdesk system to manage customer support.
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
index 202e877e9..de7122f6f 100644
--- a/app/Exceptions/Handler.php
+++ b/app/Exceptions/Handler.php
@@ -9,6 +9,8 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
+ public $phpmailer;
+
/**
* A list of the exception types that should not be reported.
*
@@ -18,18 +20,6 @@ class Handler extends ExceptionHandler
'Symfony\Component\HttpKernel\Exception\HttpException',
];
- /**
- * Create a new controller instance.
- * constructor to check
- * 1. php mailer.
- *
- * @return void
- */
- // public function __construct(PhpMailController $PhpMailController)
- // {
- // $this->PhpMailController = $PhpMailController;
- // }
-
/**
* Report or log an exception.
*
@@ -54,30 +44,35 @@ class Handler extends ExceptionHandler
*/
public function render($request, Exception $e)
{
- // $phpmail = new PhpMailController;
-// if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException) {
-// return response()->json(['message' => $e->getMessage(), 'code' => $e->getStatusCode()]);
-// } elseif ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException) {
-// return response()->json(['message' => $e->getMessage(), 'code' => $e->getStatusCode()]);
-// }
-// // This is to check if the debug is true or false
-// if (config('app.debug') == false) {
-// // checking if the error is actually an error page or if its an system error page
-// if ($this->isHttpException($e) && $e->getStatusCode() == 404) {
-// return response()->view('errors.404', []);
-// } else {
-// // checking if the application is installed
-// if (\Config::get('database.install') == 1) {
-// // checking if the error log send to Ladybirdweb is enabled or not
-// if (\Config::get('app.ErrorLog') == '1') {
-// $this->phpmail->sendmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => 'faveo logger', 'email' => 'faveoerrorlogger@gmail.com'], $message = ['subject' => 'Faveo downloaded from github has occured error', 'scenario' => 'error-report'], $template_variables = ['e' => $e]);
-// }
-// }
-//
-// return response()->view('errors.500', []);
-// }
-// }
-// // returns non oops error message
+ //dd($e);
+ $phpmail = new PhpMailController();
+ $this->PhpMailController = $phpmail;
+ if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException) {
+ return response()->json(['message' => $e->getMessage(), 'code' => $e->getStatusCode()]);
+ } elseif ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException) {
+ return response()->json(['message' => $e->getMessage(), 'code' => $e->getStatusCode()]);
+ }
+ // This is to check if the debug is true or false
+ if (config('app.debug') == false) {
+ // checking if the error is actually an error page or if its an system error page
+ if ($this->isHttpException($e) && $e->getStatusCode() == 404) {
+ return response()->view('errors.404', []);
+ } else {
+ // checking if the application is installed
+ if (\Config::get('database.install') == 1) {
+ // checking if the error log send to Ladybirdweb is enabled or not
+ if (\Config::get('app.ErrorLog') == '1') {
+ try {
+ $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => 'faveo logger', 'email' => 'faveoerrorlogger@gmail.com'], $message = ['subject' => 'Faveo downloaded from github has occured error', 'scenario' => 'error-report'], $template_variables = ['system_error' => "
Message:".$e->getMessage().'
Code:'.$e->getCode().'
File:'.$e->getFile().'
Line:'.$e->getLine().'
']);
+ } catch (Exception $exx) {
+ }
+ }
+ }
+
+ return response()->view('errors.500', []);
+ }
+ }
+ // returns non oops error message
return parent::render($request, $e);
// checking if the error is related to http error i.e. page not found
if ($this->isHttpException($e)) {
diff --git a/app/Http/Controllers/Admin/helpdesk/AgentController.php b/app/Http/Controllers/Admin/helpdesk/AgentController.php
index eb16521bf..202e83ecd 100644
--- a/app/Http/Controllers/Admin/helpdesk/AgentController.php
+++ b/app/Http/Controllers/Admin/helpdesk/AgentController.php
@@ -107,7 +107,8 @@ class AgentController extends Controller
// fixing the user role to agent
$user->fill($request->input())->save();
// generate password and has immediately to store
- $user->password = Hash::make($this->generateRandomString());
+ $password = $this->generateRandomString();
+ $user->password = Hash::make($password);
// fetching all the team details checked for this user
$requests = $request->input('team_id');
// get user id of the inserted user detail
@@ -127,7 +128,7 @@ class AgentController extends Controller
$this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => $name, 'email' => $email], $message = ['subject' => 'Password', 'scenario' => 'registration-notification'], $template_variables = ['user' => $name, 'email_address' => $email, 'user_password' => $password]);
} catch (Exception $e) {
// returns if try fails
- return redirect('agents')->with('fails', 'Some error occured while sending mail to the agent. Please check email settings and try again');
+ return redirect('agents')->with('fails', 'Some error occurred while sending mail to the agent. Please check email settings and try again');
}
// returns for the success case
return redirect('agents')->with('success', 'Agent Created sucessfully');
diff --git a/app/Http/Controllers/Admin/helpdesk/EmailsController.php b/app/Http/Controllers/Admin/helpdesk/EmailsController.php
index c639b5388..c68bd7356 100644
--- a/app/Http/Controllers/Admin/helpdesk/EmailsController.php
+++ b/app/Http/Controllers/Admin/helpdesk/EmailsController.php
@@ -19,8 +19,6 @@ use Crypt;
use Exception;
use Illuminate\Http\Request;
-//use PhpImap\Mailbox as ImapMailbox;
-
/**
* ======================================
* EmailsController.
@@ -120,9 +118,14 @@ class EmailsController extends Controller
return $return_data;
}
+ if ($request->validate == 'on') {
+ $validate = '/validate-cert';
+ } else {
+ $validate = '/novalidate-cert';
+ }
if ($request->fetching_status == 'on') {
- $imap_check = $this->getImapStream($request);
- if ($imap_check == 0) {
+ $imap_check = $this->getImapStream($request, $validate);
+ if ($imap_check[0] == 0) {
return 'Incoming email connection failed';
}
$need_to_check_imap = 1;
@@ -143,17 +146,17 @@ class EmailsController extends Controller
if ($need_to_check_imap == 1 && $need_to_check_smtp == 1) {
if ($imap_check != 0 && $smtp_check != 0) {
- $this->store($request);
+ $this->store($request, $imap_check[1]);
$return = 1;
}
} elseif ($need_to_check_imap == 1 && $need_to_check_smtp == 0) {
if ($imap_check != 0 && $smtp_check == 0) {
- $this->store($request);
+ $this->store($request, $imap_check[1]);
$return = 1;
}
} elseif ($need_to_check_imap == 0 && $need_to_check_smtp == 1) {
if ($imap_check == 0 && $smtp_check != 0) {
- $this->store($request);
+ $this->store($request, null);
$return = 1;
}
} elseif ($need_to_check_imap == 0 && $need_to_check_smtp == 0) {
@@ -174,14 +177,14 @@ class EmailsController extends Controller
*
* @return type Redirect
*/
- public function store($request)
+ public function store($request, $imap_check)
{
// dd($request);
$email = new Emails();
try {
// getConnection($request->input('email_name'), $request->input('email_address'), $request->input('email_address'))
// saving all the fields to the database
- if ($email->fill($request->except('password', 'department', 'priority', 'help_topic', 'fetching_status', 'sending_status', 'auto_response'))->save() == true) {
+ if ($email->fill($request->except('password', 'department', 'priority', 'help_topic', 'fetching_status', 'fetching_encryption', 'sending_status', 'auto_response'))->save() == true) {
if ($request->fetching_status == 'on') {
$email->fetching_status = 1;
} else {
@@ -197,7 +200,12 @@ class EmailsController extends Controller
} else {
$email->auto_response = 0;
}
- // fetching department value
+ if ($imap_check !== null) {
+ $email->fetching_encryption = $imap_check;
+ } else {
+ $email->fetching_encryption = $request->fetching_encryption;
+ }
+ // fetching department value
$email->department = $this->departmentValue($request->input('department'));
// fetching priority value
$email->priority = $this->priorityValue($request->input('priority'));
@@ -289,8 +297,13 @@ class EmailsController extends Controller
return $return_data;
}
// return $request;
+ if ($request->validate == 'on') {
+ $validate = '/validate-cert';
+ } else {
+ $validate = '/novalidate-cert';
+ }
if ($request->fetching_status == 'on') {
- $imap_check = $this->getImapStream($request);
+ $imap_check = $this->getImapStream($request, $validate);
if ($imap_check == 0) {
return 'Incoming email connection failed';
}
@@ -425,7 +438,7 @@ class EmailsController extends Controller
*
* @return type int
*/
- public function getImapStream($request)
+ public function getImapStream($request, $validate)
{
$fetching_status = $request->input('fetching_status');
$username = $request->input('email_address');
@@ -433,13 +446,20 @@ class EmailsController extends Controller
$protocol_id = $request->input('mailbox_protocol');
$fetching_protocol = '/'.$request->input('fetching_protocol');
$fetching_encryption = '/'.$request->input('fetching_encryption');
- if ($fetching_encryption == 'none') {
- $fetching_encryption = 'novalidate-cert';
+ if ($fetching_encryption == '/none') {
+ $fetching_encryption2 = '/novalidate-cert';
+ $mailbox_protocol = $fetching_encryption2;
+ $host = $request->input('fetching_host');
+ $port = $request->input('fetching_port');
+ $mailbox = '{'.$host.':'.$port.$mailbox_protocol.'}INBOX';
+ } else {
+ $mailbox_protocol = $fetching_protocol.$fetching_encryption;
+ $host = $request->input('fetching_host');
+ $port = $request->input('fetching_port');
+ $mailbox = '{'.$host.':'.$port.$mailbox_protocol.$validate.'}INBOX';
+ $mailbox_protocol = $fetching_encryption.$validate;
}
- $mailbox_protocol = $fetching_protocol.$fetching_encryption;
- $host = $request->input('fetching_host');
- $port = $request->input('fetching_port');
- $mailbox = '{'.$host.':'.$port.$mailbox_protocol.'}INBOX';
+
try {
$imap_stream = imap_open($mailbox, $username, $password);
} catch (\Exception $ex) {
@@ -447,9 +467,9 @@ class EmailsController extends Controller
}
$imap_stream = imap_open($mailbox, $username, $password);
if ($imap_stream) {
- $return = 1;
+ $return = [0 => 1, 1 => $mailbox_protocol];
} else {
- $return = 0;
+ $return = [0 => 0];
}
return $return;
diff --git a/app/Http/Controllers/Admin/helpdesk/GroupController.php b/app/Http/Controllers/Admin/helpdesk/GroupController.php
index 9e8392cc7..a89bc1cfb 100644
--- a/app/Http/Controllers/Admin/helpdesk/GroupController.php
+++ b/app/Http/Controllers/Admin/helpdesk/GroupController.php
@@ -139,9 +139,6 @@ class GroupController extends Controller
//Updating can_assign_ticket field
$assignTicket = $request->Input('can_assign_ticket');
$var->can_assign_ticket = $assignTicket;
- //Updating can_trasfer_ticket field
- $trasferTicket = $request->Input('can_trasfer_ticket');
- $var->can_trasfer_ticket = $trasferTicket;
//Updating can_delete_ticket field
$deleteTicket = $request->Input('can_delete_ticket');
$var->can_delete_ticket = $deleteTicket;
diff --git a/app/Http/Controllers/Admin/helpdesk/SettingsController.php b/app/Http/Controllers/Admin/helpdesk/SettingsController.php
index 33ccf9136..8402b6c4b 100644
--- a/app/Http/Controllers/Admin/helpdesk/SettingsController.php
+++ b/app/Http/Controllers/Admin/helpdesk/SettingsController.php
@@ -27,9 +27,11 @@ use App\Model\helpdesk\Utility\Date_time_format;
use App\Model\helpdesk\Utility\Time_format;
use App\Model\helpdesk\Utility\Timezones;
// classes
+use DB;
use Exception;
use Illuminate\Http\Request;
use Input;
+use Lang;
/**
* SettingsController.
@@ -76,7 +78,7 @@ class SettingsController extends Controller
/* Direct to Company Settings Page */
return view('themes.default1.admin.helpdesk.settings.company', compact('companys'));
} catch (Exception $e) {
- return redirect()->back()->with('fails', $e->errorInfo[2]);
+ return redirect()->back()->with('fails', $e->getMessage());
}
}
@@ -110,10 +112,31 @@ class SettingsController extends Controller
return redirect('getcompany')->with('success', 'Company Updated Successfully');
} catch (Exception $e) {
/* redirect to Index page with Fails Message */
- return redirect('getcompany')->with('fails', 'Company can not Updated'.''.$e->errorInfo[2].'');
+ return redirect('getcompany')->with('fails', 'Company can not Updated'.''.$e->getMessage().'');
}
}
+ /**
+ * function to delete system logo.
+ *
+ * @return type string
+ */
+ public function deleteLogo()
+ {
+ $path = $_GET['data1']; //get file path of logo image
+ if (!unlink($path)) {
+ return 'false';
+ } else {
+ $companys = Company::where('id', '=', 1)->first();
+ $companys->logo = null;
+ $companys->use_logo = '0';
+ $companys->save();
+
+ return 'true';
+ }
+ // return $res;
+ }
+
/**
* get the form for System setting page.
*
@@ -138,7 +161,7 @@ class SettingsController extends Controller
/* Direct to System Settings Page */
return view('themes.default1.admin.helpdesk.settings.system', compact('systems', 'departments', 'timezones', 'time', 'date', 'date_time'));
} catch (Exception $e) {
- return redirect()->back()->with('fails', $e->errorInfo[2]);
+ return redirect()->back()->with('fails', $e->getMessage());
}
}
@@ -164,7 +187,7 @@ class SettingsController extends Controller
return redirect('getsystem')->with('success', 'System Updated Successfully');
} catch (Exception $e) {
/* redirect to Index page with Fails Message */
- return redirect('getsystem')->with('fails', 'System can not Updated'.''.$e->errorInfo[2].'');
+ return redirect('getsystem')->with('fails', 'System can not Updated'.''.$e->getMessage().'');
}
}
@@ -190,7 +213,7 @@ class SettingsController extends Controller
/* Direct to Ticket Settings Page */
return view('themes.default1.admin.helpdesk.settings.ticket', compact('tickets', 'slas', 'topics', 'priority'));
} catch (Exception $e) {
- return redirect()->back()->with('fails', $e->errorInfo[2]);
+ return redirect()->back()->with('fails', $e->getMessage());
}
}
@@ -225,7 +248,7 @@ class SettingsController extends Controller
return redirect('getticket')->with('success', 'Ticket Updated Successfully');
} catch (Exception $e) {
/* redirect to Index page with Fails Message */
- return redirect('getticket')->with('fails', 'Ticket can not Updated'.''.$e->errorInfo[2].'');
+ return redirect('getticket')->with('fails', 'Ticket can not Updated'.''.$e->getMessage().'');
}
}
@@ -250,7 +273,7 @@ class SettingsController extends Controller
/* Direct to Email Settings Page */
return view('themes.default1.admin.helpdesk.settings.email', compact('emails', 'templates', 'emails1'));
} catch (Exception $e) {
- return redirect()->back()->with('fails', $e->errorInfo[2]);
+ return redirect()->back()->with('fails', $e->getMessage());
}
}
@@ -271,8 +294,8 @@ class SettingsController extends Controller
/* fill the values to email table */
$emails->fill($request->except('email_fetching', 'all_emails', 'email_collaborator', 'strip', 'attachment'))->save();
/* insert checkboxes to database */
- $emails->email_fetching = $request->input('email_fetching');
- $emails->notification_cron = $request->input('notification_cron');
+ // $emails->email_fetching = $request->input('email_fetching');
+ // $emails->notification_cron = $request->input('notification_cron');
$emails->all_emails = $request->input('all_emails');
$emails->email_collaborator = $request->input('email_collaborator');
$emails->strip = $request->input('strip');
@@ -283,7 +306,65 @@ class SettingsController extends Controller
return redirect('getemail')->with('success', 'Email Updated Successfully');
} catch (Exception $e) {
/* redirect to Index page with Fails Message */
- return redirect('getemail')->with('fails', 'Email can not Updated'.''.$e->errorInfo[2].'');
+ return redirect('getemail')->with('fails', 'Email can not Updated'.''.$e->getMessage().'');
+ }
+ }
+
+ /**
+ * get the form for cron job setting page.
+ *
+ * @param type Email $email
+ * @param type Template $template
+ * @param type Emails $email1
+ *
+ * @return type Response
+ */
+ public function getSchedular(Email $email, Template $template, Emails $email1)
+ {
+ // try {
+ /* fetch the values of email from Email table */
+ $emails = $email->whereId('1')->first();
+ /* Fetch the values from Template table */
+ $templates = $template->get();
+ /* Fetch the values from Emails table */
+ $emails1 = $email1->get();
+
+ return view('themes.default1.admin.helpdesk.settings.crone', compact('emails', 'templates', 'emails1'));
+ // } catch {
+
+ // }
+ }
+
+ /**
+ * Update the specified resource in storage for cron job.
+ *
+ * @param type Email $email
+ * @param type EmailRequest $request
+ *
+ * @return type Response
+ */
+ public function postSchedular(Email $email, Template $template, Emails $email1, Request $request)
+ {
+ // dd($request);
+ try {
+ /* fetch the values of email request */
+ $emails = $email->whereId('1')->first();
+ if ($request->email_fetching) {
+ $emails->email_fetching = $request->email_fetching;
+ } else {
+ $emails->email_fetching = 0;
+ }
+ if ($request->notification_cron) {
+ $emails->notification_cron = $request->notification_cron;
+ } else {
+ $emails->notification_cron = 0;
+ }
+ $emails->save();
+ /* redirect to Index page with Success Message */
+ return redirect('job-scheduler')->with('success', Lang::get('lang.job-scheduler-success'));
+ } catch (Exception $e) {
+ /* redirect to Index page with Fails Message */
+ return redirect('job-scheduler')->with('fails', Lang::get('lang.job-scheduler-error').''.$e->getMessage().'');
}
}
@@ -353,7 +434,7 @@ class SettingsController extends Controller
/* Direct to Responder Settings Page */
return view('themes.default1.admin.helpdesk.settings.responder', compact('responders'));
} catch (Exception $e) {
- return redirect()->back()->with('fails', $e->errorInfo[2]);
+ return redirect()->back()->with('fails', $e->getMessage());
}
}
@@ -383,7 +464,7 @@ class SettingsController extends Controller
return redirect('getresponder')->with('success', 'Responder Updated Successfully');
} catch (Exception $e) {
/* redirect to Index page with Fails Message */
- return redirect('getresponder')->with('fails', 'Responder can not Updated'.''.$e->errorInfo[2].'');
+ return redirect('getresponder')->with('fails', 'Responder can not Updated'.''.$e->getMessage().'');
}
}
@@ -402,7 +483,7 @@ class SettingsController extends Controller
/* Direct to Alert Settings Page */
return view('themes.default1.admin.helpdesk.settings.alert', compact('alerts'));
} catch (Exception $e) {
- return redirect()->back()->with('fails', $e->errorInfo[2]);
+ return redirect()->back()->with('fails', $e->getMessage());
}
}
@@ -471,7 +552,7 @@ class SettingsController extends Controller
return redirect('getalert')->with('success', 'Alert Updated Successfully');
} catch (Exception $e) {
/* redirect to Index page with Fails Message */
- return redirect('getalert')->with('fails', 'Alert can not Updated'.''.$e->errorInfo[2].'');
+ return redirect('getalert')->with('fails', 'Alert can not Updated'.''.$e->getMessage().'');
}
}
diff --git a/app/Http/Controllers/Admin/helpdesk/TemplateController.php b/app/Http/Controllers/Admin/helpdesk/TemplateController.php
index 050c1f76a..568dc84a0 100644
--- a/app/Http/Controllers/Admin/helpdesk/TemplateController.php
+++ b/app/Http/Controllers/Admin/helpdesk/TemplateController.php
@@ -324,7 +324,7 @@ class TemplateController extends Controller
return redirect('getdiagno')->with('fails', 'Please provide E-mail address !');
}
// sending mail via php mailer
- $mail = $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['email' => $email], $message = ['subject' => 'Checking the connection', 'scenario' => 'error-report', 'content' => 'Email Received Successfully'], $template_variables = ['system_error' => 'hello']);
+ $mail = $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['email' => $email], $message = ['subject' => 'Checking the connection', 'scenario' => 'error-report', 'content' => 'Email Received Successfully'], $template_variables = ['system_error' => 'Email Received Successfully']);
if ($mail == null) {
return redirect('getdiagno')->with('fails', 'Please check your E-mail settings. Unable to send mails');
diff --git a/app/Http/Controllers/Admin/helpdesk/WorkflowController.php b/app/Http/Controllers/Admin/helpdesk/WorkflowController.php
new file mode 100644
index 000000000..e83970caa
--- /dev/null
+++ b/app/Http/Controllers/Admin/helpdesk/WorkflowController.php
@@ -0,0 +1,456 @@
+
+ */
+class WorkflowController extends Controller
+{
+ /**
+ * Create a new controller instance.
+ * constructor to check
+ * 1. authentication
+ * 2. user roles
+ * 3. roles must be agent.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ // checking authentication
+ $this->middleware('auth');
+ // checking admin roles
+ $this->middleware('roles');
+ }
+
+ /**
+ * Display a listing of all the workflow.
+ *
+ * @return type
+ */
+ public function index()
+ {
+ try {
+ return view('themes.default1.admin.helpdesk.manage.workflow.index');
+ } catch (Exception $e) {
+ return view('404');
+ }
+ }
+
+ /**
+ * List of all the workflow in the system.
+ *
+ * @return type
+ */
+ public function workFlowList()
+ {
+ // returns chumper datatable
+ return Datatable::collection(WorkflowName::All())
+ /* searcable column name */
+ ->searchColumns('name')
+ /* order column name and description */
+ ->orderColumns('name')
+ /* add column name */
+ ->addColumn('name', function ($model) {
+ return $model->name;
+ })
+ /* add column status */
+ ->addColumn('status', function ($model) {
+ if ($model->status == 1) {
+ return 'Active';
+ } elseif ($model->status == 0) {
+ return 'Disabled';
+ }
+ })
+ /* add column order */
+ ->addColumn('order', function ($model) {
+ return $model->order;
+ })
+ /* add column rules */
+ ->addColumn('rules', function ($model) {
+ $rules = WorkflowRules::where('workflow_id', '=', $model->id)->count();
+
+ return $rules;
+ })
+ /* add column target */
+ ->addColumn('target', function ($model) {
+ $target = $model->target;
+ $target1 = explode('-', $target);
+ if ($target1[0] == 'A') {
+ if ($target1[1] == 0) {
+ return 'Any';
+ } elseif ($target1[1] == 1) {
+ return 'Web Forms';
+ } elseif ($target1[1] == 2) {
+ return 'Email';
+ } elseif ($target1[1] == 4) {
+ return 'API';
+ }
+ } elseif ($target1[0] == 'E') {
+ $emails = Emails::where('id', '=', $target1[1])->first();
+
+ return $emails->email_address;
+ }
+ })
+ /* add column created */
+ ->addColumn('Created', function ($model) {
+ return TicketController::usertimezone($model->created_at);
+ })
+ /* add column updated */
+ ->addColumn('Updated', function ($model) {
+ return TicketController::usertimezone($model->updated_at);
+ })
+ /* add column action */
+ ->addColumn('Actions', function ($model) {
+ $confirmation = 'Are you sure?';
+
+ return "id)."'> Edit id)."'> Delete";
+ })
+ ->make();
+ }
+
+ /**
+ * Show the form for creating a new workflow.
+ *
+ * @return type Response
+ */
+ public function create(Emails $emails)
+ {
+ // dd($emails);
+ foreach ($emails->lists('email_address', 'id') as $key => $email) {
+ $email_data["E-$key"] = $email;
+ }
+// dd($email_data);
+// dd($emails->lists('email_address' , 'id'));
+ $emails = $email_data;
+ try {
+ // $emails = $emails->get();
+ return view('themes.default1.admin.helpdesk.manage.workflow.create', compact('emails'));
+ } catch (Exception $e) {
+ return view('404');
+ }
+ }
+
+ /**
+ * Store a new workflow in to the system.
+ *
+ * @param \App\Http\Requests\helpdesk\WorkflowCreateRequest $request
+ *
+ * @return type view
+ */
+ public function store(WorkflowCreateRequest $request)
+ {
+ //dd($request);
+ try {
+ // store a new workflow credentials in to the system
+ $workflow_name = new WorkflowName();
+ $workflow_name->name = $request->name;
+ $workflow_name->status = $request->status;
+ $workflow_name->order = $request->execution_order;
+ $workflow_name->target = $request->target_channel;
+ $workflow_name->internal_note = $request->internal_note;
+ $workflow_name->save();
+
+ $rules = $request->rule;
+ $actions = $request->action;
+ // store workflow rules into the system
+ foreach ($rules as $rule) {
+ $workflow_rule = new WorkflowRules();
+ $workflow_rule->workflow_id = $workflow_name->id;
+ $workflow_rule->matching_scenario = $rule['a'];
+ $workflow_rule->matching_relation = $rule['b'];
+ $workflow_rule->matching_value = $rule['c'];
+ $workflow_rule->save();
+ }
+ // store a new workflow action into the system
+ foreach ($actions as $action) {
+ $workflow_action = new WorkflowAction();
+ $workflow_action->workflow_id = $workflow_name->id;
+ $workflow_action->condition = $action['a'];
+ $workflow_action->action = $action['b'];
+ $workflow_action->save();
+ }
+
+ return redirect('workflow')->with('success', 'Workflow Created Successfully');
+ } catch (Exception $e) {
+ return redirect()->back()->with('fails', $e->getMessage());
+ }
+ }
+
+ /**
+ * Editing the details of the banned users.
+ *
+ * @param type $id
+ * @param User $ban
+ *
+ * @return type Response
+ */
+ public function edit($id, WorkflowName $work_flow_name, Emails $emails, WorkflowRules $workflow_rule, WorkflowAction $workflow_action)
+ {
+ try {
+ $emails = $emails->get();
+ $workflow = $work_flow_name->whereId($id)->first();
+ $workflow_rules = $workflow_rule->whereWorkflow_id($id)->get();
+ $workflow_actions = $workflow_action->whereWorkflow_id($id)->get();
+
+ return view('themes.default1.admin.helpdesk.manage.workflow.edit', compact('id', 'workflow', 'emails', 'workflow_rules', 'workflow_actions'));
+ } catch (Exception $e) {
+ return view('404');
+ }
+ }
+
+ /**
+ * Update ticket workflow.
+ *
+ * @param type $id
+ * @param \App\Http\Requests\helpdesk\WorkflowUpdateRequest $request
+ *
+ * @return type view
+ */
+ public function update($id, WorkflowUpdateRequest $request)
+ {
+ try {
+ // store a new workflow credentials in to the system
+ $workflow_name = WorkflowName::whereId($id)->first();
+ $workflow_name->name = $request->name;
+ $workflow_name->status = $request->status;
+ $workflow_name->order = $request->execution_order;
+ $workflow_name->target = $request->target_channel;
+ $workflow_name->internal_note = $request->internal_note;
+ $workflow_name->save();
+
+ $rules = $request->rule;
+ $actions = $request->action;
+ // removing old foreign values to insert an updated one
+ WorkflowAction::where('workflow_id', '=', $id)->delete();
+ WorkflowRules::where('workflow_id', '=', $id)->delete();
+ // update workflow rules into the system
+ foreach ($rules as $rule) {
+ $workflow_rule = new WorkflowRules();
+ $workflow_rule->workflow_id = $workflow_name->id;
+ $workflow_rule->matching_scenario = $rule['a'];
+ $workflow_rule->matching_relation = $rule['b'];
+ $workflow_rule->matching_value = $rule['c'];
+ $workflow_rule->save();
+ }
+ // update workflow action into the system
+ foreach ($actions as $action) {
+ $workflow_action = new WorkflowAction();
+ $workflow_action->workflow_id = $workflow_name->id;
+ $workflow_action->condition = $action['a'];
+ $workflow_action->action = $action['b'];
+ $workflow_action->save();
+ }
+
+ return redirect('workflow')->with('success', 'Workflow Updated Successfully');
+ } catch (Exception $e) {
+ return redirect()->back()->with('fails', $e->getMessage());
+ }
+ }
+
+ /**
+ * function to delete workflow.
+ *
+ * @param type $id
+ */
+ public function destroy($id)
+ {
+ try {
+ // remove all the contents of workflow
+ $workflow_action = WorkflowAction::where('workflow_id', '=', $id)->delete();
+ $workflow_rules = WorkflowRules::where('workflow_id', '=', $id)->delete();
+ $workflow = WorkflowName::whereId($id)->delete();
+
+ return redirect('workflow')->with('success', 'Workflow Deleted Successfully');
+ } catch (Exception $e) {
+ return redirect()->back()->with('fails', $e->getMessage());
+ }
+ }
+
+ /**
+ * function to select action.
+ *
+ * @param type $id
+ * @param \Illuminate\Http\Request $request
+ *
+ * @return type void
+ */
+ public function selectAction($id, Request $request)
+ {
+ if ($request->option == 'reject') {
+ return $this->rejectTicket($id);
+ } elseif ($request->option == 'department') {
+ return $this->department($id);
+ } elseif ($request->option == 'priority') {
+ return $this->priority($id);
+ } elseif ($request->option == 'sla') {
+ return $this->slaPlan($id);
+ } elseif ($request->option == 'team') {
+ return $this->assignTeam($id);
+ } elseif ($request->option == 'agent') {
+ return $this->assignAgent($id);
+ } elseif ($request->option == 'helptopic') {
+ return $this->helptopic($id);
+ } elseif ($request->option == 'status') {
+ return $this->ticketStatus($id);
+ }
+ }
+
+ /**
+ * function to reject ticket.
+ *
+ * @return string
+ */
+ public function rejectTicket($id)
+ {
+ $var = 'Reject ';
+
+ return $var;
+ }
+
+ /**
+ * function to return deprtment select option.
+ *
+ * @return type string
+ */
+ public function department($id)
+ {
+ $departments = Department::all();
+ $var = "';
+
+ return $var;
+ }
+
+ /**
+ * function to return the priority select option.
+ *
+ * @return type string
+ */
+ public function priority($id)
+ {
+ $priorities = Ticket_Priority::all();
+ $var = "';
+
+ return $var;
+ }
+
+ /**
+ * function to return the slaplan select option.
+ *
+ * @return type string
+ */
+ public function slaPlan($id)
+ {
+ $sla_plans = Sla_plan::where('status', '=', 1)->get();
+ $var = "';
+
+ return $var;
+ }
+
+ /**
+ * function to get system team select option.
+ *
+ * @return type string
+ */
+ public function assignTeam($id)
+ {
+ $teams = Teams::where('status', '=', 1)->get();
+ $var = "';
+
+ return $var;
+ }
+
+ /**
+ * function to get system agents select option.
+ *
+ * @return type string
+ */
+ public function assignAgent($id)
+ {
+ $users = User::where('role', '!=', 'user')->where('active', '=', 1)->get();
+ $var = "';
+
+ return $var;
+ }
+
+ /**
+ * function to get the helptopic select option.
+ *
+ * @return type string
+ */
+ public function helptopic($id)
+ {
+ $help_topics = Help_topic::where('status', '=', 1)->get();
+ $var = "';
+
+ return $var;
+ }
+
+ /**
+ * function to get the select option to choose the ticket status.
+ *
+ * @return type string
+ */
+ public function ticketStatus($id)
+ {
+ $ticket_status = Ticket_Status::all();
+ $var = "';
+
+ return $var;
+ }
+}
diff --git a/app/Http/Controllers/Agent/helpdesk/MailController.php b/app/Http/Controllers/Agent/helpdesk/MailController.php
index 56901b690..76c6f1ced 100644
--- a/app/Http/Controllers/Agent/helpdesk/MailController.php
+++ b/app/Http/Controllers/Agent/helpdesk/MailController.php
@@ -35,9 +35,9 @@ class MailController extends Controller
*
* @param type TicketController $TicketController
*/
- public function __construct(TicketController $TicketController)
+ public function __construct(TicketWorkflowController $TicketWorkflowController)
{
- $this->TicketController = $TicketController;
+ $this->TicketWorkflowController = $TicketWorkflowController;
}
/**
@@ -76,6 +76,9 @@ class MailController extends Controller
$protocol_value = $e_mail->mailbox_protocol;
$get_mailboxprotocol = MailboxProtocol::where('id', '=', $protocol_value)->first();
$protocol = $get_mailboxprotocol->value;
+ } elseif ($e_mail->fetching_encryption == '/none') {
+ $fetching_encryption2 = '/novalidate-cert';
+ $protocol = $fetching_encryption2;
} else {
if ($e_mail->fetching_protocol) {
$fetching_protocol = '/'.$e_mail->fetching_protocol;
@@ -83,7 +86,7 @@ class MailController extends Controller
$fetching_protocol = '';
}
if ($e_mail->fetching_encryption) {
- $fetching_encryption = '/'.$e_mail->fetching_encryption;
+ $fetching_encryption = $e_mail->fetching_encryption;
} else {
$fetching_encryption = '';
}
@@ -130,7 +133,9 @@ class MailController extends Controller
$assign = $get_helptopic->auto_assign;
$form_data = null;
- $result = $this->TicketController->create_user($fromaddress, $fromname, $subject, $body, $phone, $helptopic, $sla, $priority, $source, $collaborator, $dept, $assign, $form_data, $auto_response);
+ $team_assign = null;
+ $ticket_status = null;
+ $result = $this->TicketWorkflowController->workflow($fromaddress, $fromname, $subject, $body, $phone, $helptopic, $sla, $priority, $source, $collaborator, $dept, $assign, $team_assign, $ticket_status, $form_data, $auto_response);
// dd($result);
if ($result[1] == true) {
$ticket_table = Tickets::where('ticket_number', '=', $result[0])->first();
diff --git a/app/Http/Controllers/Agent/helpdesk/NotificationController.php b/app/Http/Controllers/Agent/helpdesk/NotificationController.php
index 41c6c6b6b..3b6a4969b 100644
--- a/app/Http/Controllers/Agent/helpdesk/NotificationController.php
+++ b/app/Http/Controllers/Agent/helpdesk/NotificationController.php
@@ -76,6 +76,10 @@ class NotificationController extends Controller
$view = View::make('emails.notifications.admin', ['company' => $company, 'name' => $user_name]);
$contents = $view->render();
$this->PhpMailController->sendEmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => $user_name, 'email' => $email], $message = ['subject' => 'Daily Report', 'scenario' => null, 'body' => $contents]);
+
+// \Mail::send('emails.notifications.admin', ['company' => $company, 'name' => $user_name], function ($message) use ($email, $user_name, $company) {
+// $message->to($email, $user_name)->subject($company.' Daily Report ');
+// });
}
}
@@ -99,6 +103,10 @@ class NotificationController extends Controller
$view = View::make('emails.notifications.manager', ['company' => $company, 'name' => $user_name]);
$contents = $view->render();
$this->PhpMailController->sendEmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => $user_name, 'email' => $email], $message = ['subject' => 'Daily Report', 'scenario' => null, 'body' => $contents]);
+
+// \Mail::send('emails.notifications.manager', ['company' => $company, 'name' => $user_name, 'dept_id' => $dept->id, 'dept_name' => $dept->name], function ($message) use ($email, $user_name, $company, $dept_name) {
+// $message->to($email, $user_name)->subject($company.' Daily Report for department manager of '.$dept_name.' department.');
+// });
}
}
}
@@ -124,6 +132,10 @@ class NotificationController extends Controller
$view = View::make('emails.notifications.lead', ['company' => $company, 'name' => $user_name]);
$contents = $view->render();
$this->PhpMailController->sendEmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => $user_name, 'email' => $email], $message = ['subject' => 'Daily Report', 'scenario' => null, 'body' => $contents]);
+
+// \Mail::send('emails.notifications.lead', ['company' => $company, 'name' => $user_name, 'team_id' => $team->id], function ($message) use ($email, $user_name, $company, $team_name) {
+// $message->to($email, $user_name)->subject($company.' Daily Report for Team Lead of team '.$team_name);
+// });
}
}
}
@@ -145,6 +157,10 @@ class NotificationController extends Controller
$view = View::make('emails.notifications.agent', ['company' => $company, 'name' => $user_name, 'user_id' => $user->id]);
$contents = $view->render();
$this->PhpMailController->sendEmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => $user_name, 'email' => $email], $message = ['subject' => 'Daily Report', 'scenario' => null, 'body' => $contents]);
+
+// \Mail::send('emails.notifications.agent', ['company' => $company, 'name' => $user_name, 'user_id' => 1], function ($message) use ($email, $user_name, $company) {
+// $message->to($email, $user_name)->subject($company.' Daily Report for Agents');
+// });
}
}
@@ -166,4 +182,13 @@ class NotificationController extends Controller
return $company;
}
+
+ // // testing
+ // public function test(){
+ // $email = "sujit.prasad@ladybirdweb.com";
+ // $user_name = "sujit prasad";
+ // \Mail::send('emails.notifications.test', ['user_id' => 1], function ($message) use($email, $user_name) {
+ // $message->to($email, $user_name)->subject('testing reporting');
+ // });
+ // }
}
diff --git a/app/Http/Controllers/Agent/helpdesk/Ticket2Controller.php b/app/Http/Controllers/Agent/helpdesk/Ticket2Controller.php
index d2db4a300..dccd27ac5 100644
--- a/app/Http/Controllers/Agent/helpdesk/Ticket2Controller.php
+++ b/app/Http/Controllers/Agent/helpdesk/Ticket2Controller.php
@@ -8,18 +8,11 @@ use App\Http\Controllers\Controller;
// requests
// models
use App\Model\helpdesk\Agent\Department;
-use App\Model\helpdesk\Ticket\Ticket_attachments;
-use App\Model\helpdesk\Ticket\Ticket_Collaborator;
-use App\Model\helpdesk\Ticket\Ticket_Priority;
-use App\Model\helpdesk\Ticket\Ticket_Thread;
use App\Model\helpdesk\Ticket\Tickets;
use App\User;
use Auth;
-use DB;
// classes
-use Illuminate\support\Collection;
-use Input;
-use UTC;
+use Ttable;
/**
* TicketController2.
@@ -67,89 +60,7 @@ class Ticket2Controller extends Controller
$tickets = Tickets::where('status', '=', 1)->where('isanswered', '=', 0)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first(); //
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count(); //
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '=', 0)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Unassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return Ttable::getTable($tickets);
}
/**
@@ -180,89 +91,7 @@ class Ticket2Controller extends Controller
$tickets = Tickets::where('status', '=', '2')->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Usernassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return Ttable::getTable($tickets);
}
/**
@@ -298,88 +127,6 @@ class Ticket2Controller extends Controller
$tickets = Tickets::where('status', '=', '1')->where('assigned_to', '>', 0)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Usernassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return Ttable::getTable($tickets);
}
}
diff --git a/app/Http/Controllers/Agent/helpdesk/TicketController.php b/app/Http/Controllers/Agent/helpdesk/TicketController.php
index 41a13100b..dbf955604 100644
--- a/app/Http/Controllers/Agent/helpdesk/TicketController.php
+++ b/app/Http/Controllers/Agent/helpdesk/TicketController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Agent\helpdesk;
// controllers
+use App\Http\Controllers\Common\NotificationController;
use App\Http\Controllers\Common\PhpMailController;
use App\Http\Controllers\Controller;
// requests
@@ -54,9 +55,10 @@ class TicketController extends Controller
*
* @return type response
*/
- public function __construct(PhpMailController $PhpMailController)
+ public function __construct(PhpMailController $PhpMailController, NotificationController $NotificationController)
{
$this->PhpMailController = $PhpMailController;
+ $this->NotificationController = $NotificationController;
$this->middleware('auth');
}
@@ -79,91 +81,7 @@ class TicketController extends Controller
$tickets = Tickets::where('status', 1)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
-
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first(); //
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count(); //Ticket_Thread::where('ticket_id', '=', $ticket->id)->get();
-
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Unassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -185,89 +103,7 @@ class TicketController extends Controller
$tickets = Tickets::where('status', '=', 1)->where('isanswered', '=', 0)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first(); //
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count(); //
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '=', 0)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Unassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -289,89 +125,7 @@ class TicketController extends Controller
$tickets = Tickets::where('status', '=', 1)->where('isanswered', '=', 1)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Usernassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -393,89 +147,7 @@ class TicketController extends Controller
$tickets = Tickets::where('status', '=', 1)->where('assigned_to', '=', Auth::user()->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Usernassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -488,6 +160,39 @@ class TicketController extends Controller
return view('themes.default1.agent.helpdesk.ticket.overdue');
}
+ public function getOverdueTickets()
+ {
+ if (Auth::user()->role == 'agent') {
+ $dept = Department::where('id', '=', Auth::user()->primary_dpt)->first();
+ $overdues = Tickets::where('status', '=', 1)->where('isanswered', '=', 0)->where('dept_id', '=', $dept->id)->orderBy('id', 'DESC')->get();
+ } else {
+ $overdues = Tickets::where('status', '=', 1)->where('isanswered', '=', 0)->orderBy('id', 'DESC')->get();
+ }
+ if (count($overdues) == 0) {
+ $tickets = null;
+ } else {
+ $i = 0;
+ foreach ($overdues as $overdue) {
+ $sla_plan = Sla_plan::where('id', '=', $overdue->sla)->first();
+
+ $ovadate = $overdue->created_at;
+ $new_date = date_add($ovadate, date_interval_create_from_date_string($sla_plan->grace_period)).'
';
+ if (date('Y-m-d H:i:s') > $new_date) {
+ $i++;
+ $value[] = $overdue;
+ }
+ }
+ // dd(count($value));
+ if ($i > 0) {
+ $tickets = new collection($value);
+ } else {
+ $tickets = null;
+ }
+ }
+
+ return $this->getTable($tickets);
+ }
+
/**
* Show the Closed ticket list page.
*
@@ -507,89 +212,7 @@ class TicketController extends Controller
$tickets = Tickets::where('status', '>', 1)->where('dept_id', '=', $dept->id)->where('status', '<', 4)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Usernassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -611,89 +234,7 @@ class TicketController extends Controller
$tickets = Tickets::where('status', '=', 1)->where('assigned_to', '>', 0)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Usernassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -767,9 +308,12 @@ class TicketController extends Controller
return redirect()->route('check_ticket', compact('ticket_id'));
}
+ $avg = DB::table('ticket_thread')->where('ticket_id', '=', $id)->where('reply_rating', '!=', 0)->avg('reply_rating');
+ $avg_rate = explode('.', $avg);
+ $avg_rating = $avg_rate[0];
$thread = Ticket_Thread::where('ticket_id', '=', $id)->first();
- return view('themes.default1.agent.helpdesk.ticket.timeline', compact('tickets'), compact('thread'));
+ return view('themes.default1.agent.helpdesk.ticket.timeline', compact('tickets'), compact('thread', 'avg_rating'));
}
/**
@@ -874,6 +418,7 @@ class TicketController extends Controller
$emails = Emails::where('department', '=', $tickets->dept_id)->first();
try {
+ $this->NotificationController->create($ticket_id, Auth::user()->id, '2');
$this->PhpMailController->sendmail(
$from = $this->PhpMailController->mailfrom('0', $tickets->dept_id), $to = ['name' => $user_name, 'email' => $email, 'cc' => $collaborators], $message = ['subject' => $ticket_subject.'[#'.$ticket_number.']', 'body' => $request->input('reply_content'), 'scenario' => 'ticket-reply', 'attachments' => $attachment_files], $template_variables = ['ticket_number' => $ticket_number, 'user' => $username, 'agent_sign' => $agentsign]
);
@@ -1003,7 +548,7 @@ class TicketController extends Controller
*
* @return type bool
*/
- public function create_user($emailadd, $username, $subject, $body, $phone, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $from_data, $auto_response)
+ public function create_user($emailadd, $username, $subject, $body, $phone, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $from_data, $auto_response, $status)
{
// define global variables
$email;
@@ -1044,7 +589,7 @@ class TicketController extends Controller
$username = $checkemail->user_name;
$user_id = $checkemail->id;
}
- $ticket_number = $this->check_ticket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $from_data);
+ $ticket_number = $this->check_ticket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $from_data, $status);
$ticket_number2 = $ticket_number[0];
$ticketdata = Tickets::where('ticket_number', '=', $ticket_number2)->first();
$threaddata = Ticket_Thread::where('ticket_id', '=', $ticketdata->id)->first();
@@ -1175,7 +720,7 @@ class TicketController extends Controller
*
* @return type string
*/
- public function check_ticket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data)
+ public function check_ticket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data, $status)
{
$read_ticket_number = explode('[#', $subject);
if (isset($read_ticket_number[1])) {
@@ -1218,12 +763,12 @@ class TicketController extends Controller
}
}
} else {
- $ticket_number = $this->createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data);
+ $ticket_number = $this->createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data, $status);
return [$ticket_number, 0];
}
} else {
- $ticket_number = $this->createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data);
+ $ticket_number = $this->createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data, $status);
return [$ticket_number, 0];
}
@@ -1241,7 +786,7 @@ class TicketController extends Controller
*
* @return type string
*/
- public function createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data)
+ public function createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data, $status)
{
$max_number = Tickets::whereRaw('id = (select max(`id`) from tickets)')->first();
if ($max_number == null) {
@@ -1259,9 +804,14 @@ class TicketController extends Controller
$ticket->help_topic_id = $helptopic;
$ticket->sla = $sla;
$ticket->assigned_to = $assignto;
- $ticket->status = '1';
+
$ticket->priority_id = $priority;
$ticket->source = $source;
+ if ($status == null) {
+ $ticket->status = 1;
+ } else {
+ $ticket->status = $status;
+ }
$ticket->save();
$sla_plan = Sla_plan::where('id', '=', $sla)->first();
@@ -1272,7 +822,7 @@ class TicketController extends Controller
$ticket_number = $ticket->ticket_number;
$id = $ticket->id;
-
+ $this->NotificationController->create($id, $user_id, '3');
// store Form Data
// Form Data comes from raising a ticket from client panel
if ($form_data != null) {
@@ -1407,7 +957,11 @@ class TicketController extends Controller
$thread->ticket_id = $ticket_status->id;
$thread->user_id = Auth::user()->id;
$thread->is_internal = 1;
- $thread->body = $ticket_status_message->message.' '.Auth::user()->first_name.' '.Auth::user()->last_name;
+ if (Auth::user()->first_name != null) {
+ $thread->body = $ticket_status_message->message.' '.Auth::user()->first_name.' '.Auth::user()->last_name;
+ } else {
+ $thread->body = $ticket_status_message->message.' '.Auth::user()->user_name;
+ }
$thread->save();
return 'your ticket'.$ticket_status->ticket_number.' has been resolved';
@@ -1750,89 +1304,7 @@ class TicketController extends Controller
$tickets = Tickets::where('status', '=', 5)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Unassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -1854,89 +1326,7 @@ class TicketController extends Controller
$tickets = Tickets::where('assigned_to', '=', null)->where('dept_id', '=', $dept->id)->get();
}
- return \Datatable::collection(new Collection($tickets))
- ->addColumn('id', function ($ticket) {
- return "";
- })
- ->addColumn('subject', function ($ticket) {
- $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
- if (isset($subject->title)) {
- $string = $subject->title;
- if (strlen($string) > 20) {
- $stringCut = substr($string, 0, 30);
- $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
- }
- } else {
- $string = '(no subject)';
- }
- //collabrations
- $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
- $collab = count($collaborators);
- if ($collab > 0) {
- $collabString = ' ';
- } else {
- $collabString = null;
- }
- $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first();
- $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count();
- $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
- $attachCount = count($attachment);
- if ($attachCount > 0) {
- $attachString = ' ';
- } else {
- $attachString = '';
- }
-
- return "id])."' title='".$subject->title."'>".$string." (".$count.")".$collabString.$attachString;
- })
- ->addColumn('ticket_number', function ($ticket) {
- return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
- })
- ->addColumn('priority', function ($ticket) {
- $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
-
- return ''.$priority->priority_desc.'';
- })
- ->addColumn('from', function ($ticket) {
- $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
-
- return "".$from->user_name.'';
- })
- ->addColumn('Last Replier', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '!=', 1)->max('id');
- $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
- $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
- if ($LastResponse->role == 'user') {
- $rep = '#F39C12';
- $username = $LastResponse->user_name;
- } else {
- $rep = '#000';
- $username = $LastResponse->first_name.' '.$LastResponse->last_name;
- if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
- $username = $LastResponse->user_name;
- }
- }
-
- return "".$username.'';
- })
- ->addColumn('assigned_to', function ($ticket) {
- if ($ticket->assigned_to == null) {
- return "Unassigned";
- } else {
- $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
-
- return "".$assign->first_name.' '.$assign->last_name.'';
- }
- })
- ->addColumn('Last', function ($ticket) {
- $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
- $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
-
- return UTC::usertimezone($TicketDatarow->updated_at);
- })
- ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
- ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
- ->make();
+ return $this->getTable($tickets);
}
/**
@@ -2015,9 +1405,9 @@ class TicketController extends Controller
$ticket_collaborator->role = 'ccc';
$ticket_collaborator->save();
- return 'Success!
'.$data->user_name.'
'.$data->email.'
';
+ return 'Success!
'.$data->user_name.'
'.$data->email.'
';
} else {
- return ''.$data->user_name.'
'.$data->email.'
This user already Collaborated
';
+ return ''.$data->user_name.'
'.$data->email.'
This user already Collaborated
';
}
}
@@ -2035,7 +1425,7 @@ class TicketController extends Controller
$ticket_id = Input::get('ticket_id');
$user_search = User::where('email', '=', $email)->first();
if (isset($user_serach)) {
- return 'Alert!
This user already Exists
';
+ return 'Alert!
This user already Exists
';
} else {
$company = $this->company();
$user = new User();
@@ -2057,7 +1447,7 @@ class TicketController extends Controller
$ticket_collaborator->role = 'ccc';
$ticket_collaborator->save();
- return ''.$user->user_name.'
'.$user->email.'
';
+ return ''.$user->user_name.'
'.$user->email.'
';
}
}
@@ -2100,8 +1490,34 @@ class TicketController extends Controller
$ticket->reopened_at = date('Y-m-d H:i:s');
$ticket->closed = 0;
$ticket->closed_at = null;
-
$ticket->save();
+ } elseif ($value == 'Clean up') {
+ $thread = Ticket_Thread::where('ticket_id', '=', $ticket->id)->get();
+ foreach ($thread as $th_id) {
+ // echo $th_id->id." ";
+ $attachment = Ticket_attachments::where('thread_id', '=', $th_id->id)->get();
+ if (count($attachment)) {
+ foreach ($attachment as $a_id) {
+ echo $a_id->id.' ';
+ $attachment = Ticket_attachments::find($a_id->id);
+ $attachment->delete();
+ }
+ // echo "
";
+ }
+ $thread = Ticket_Thread::find($th_id->id);
+// dd($thread);
+ $thread->delete();
+ }
+ $collaborators = Ticket_Collaborator::where('ticket_id', '=', $ticket->id)->get();
+ if (count($collaborators)) {
+ foreach ($collaborators as $collab_id) {
+ echo $collab_id->id;
+ $collab = Ticket_Collaborator::find($collab_id->id);
+ $collab->delete();
+ }
+ }
+ $tickets = Tickets::find($ticket->id);
+ $tickets->delete();
}
}
if ($value == 'Delete') {
@@ -2110,6 +1526,8 @@ class TicketController extends Controller
return redirect()->back()->with('success', 'Tickets has been Closed');
} elseif ($value == 'Open') {
return redirect()->back()->with('success', 'Ticket has been Opened');
+ } else {
+ return redirect()->back()->with('success', Lang::get('lang.hard-delete-success-message'));
}
}
@@ -2137,6 +1555,34 @@ class TicketController extends Controller
return $date;
}
+ /**
+ *adding offset to updated_at time.
+ *
+ *@return date
+ */
+ public static function timeOffset($utc)
+ {
+ $set = System::whereId('1')->first();
+ $timezone = Timezones::whereId($set->time_zone)->first();
+ $tz = $timezone->name;
+ date_default_timezone_set($tz);
+ $offset = date('Z', strtotime($utc));
+
+ return $offset;
+ }
+
+ /**
+ * to get user date time format.
+ *
+ *@return string
+ */
+ public static function getDateTimeFormat()
+ {
+ $set = System::select('date_time_format')->whereId('1')->first();
+
+ return $set->date_time_format;
+ }
+
/**
* lock.
*
@@ -2228,8 +1674,15 @@ class TicketController extends Controller
*/
public function ratingReply($id, $rating)
{
- Tickets::where('id', $id)->update(['ratingreply' => $rating]);
-
+ $thread = Ticket_Thread::whereId($id)->first();
+// $last_average = $thread->reply_rating;
+//$total_numbers = $thread->rating_count;
+//$new_number = $rating;
+//$new_average = (($last_average * $total_numbers) + $new_number) / ($total_numbers + 1);
+//$thread->rating_count += 1;
+$thread->reply_rating = $rating;
+ $thread->save();
+// $thread->set('rating_count', 'rating_count+1', FALSE)->update(['ratingreply' => $new_average]);
return redirect()->back()->with('Success', 'Thank you for your rating!');
}
@@ -2489,7 +1942,7 @@ class TicketController extends Controller
if (!empty(Input::get('reason'))) {
$reason = Input::get('reason');
} else {
- $reason = '';
+ $reason = Lang::get('lang.no-reason');
}
if (!empty(Input::get('title'))) {
Ticket_thread::where('ticket_id', '=', $p_id)->first()
@@ -2505,7 +1958,7 @@ class TicketController extends Controller
$new_thread->title = $thread->title;
$new_thread->body = Lang::get('lang.get_merge_message').
" #".$parent_ticket->ticket_number.'
'.$reason;
+ "'>#".$parent_ticket->ticket_number.'
'.Lang::get('lang.merge-reason').''.$reason;
$new_thread->format = $thread->format;
$new_thread->ip_address = $thread->ip_address;
@@ -2516,7 +1969,7 @@ class TicketController extends Controller
$new_parent_thread->source = $parent_thread->source;
$new_parent_thread->is_internal = 1;
$new_parent_thread->title = $thread->title;
- $new_parent_thread->body = Lang::get('lang.ticket')." #".$ticket->ticket_number.' '.Lang::get('lang.ticket_merged').'
'.$reason;
+ $new_parent_thread->body = Lang::get('lang.ticket')." #".$ticket->ticket_number.' '.Lang::get('lang.ticket_merged').'
'.Lang::get('lang.merge-reason').''.$reason;
$new_parent_thread->format = $parent_thread->format;
$new_parent_thread->ip_address = $parent_thread->ip_address;
if ($new_thread->save() && $new_parent_thread->save()) {
@@ -2539,4 +1992,111 @@ class TicketController extends Controller
echo "';
}
}
+
+ /*
+ *chumper's function to return data to chumper datatable.
+ *@param Array-object $tickets
+ *
+ *@return Array-object
+ */
+ public static function getTable($tickets)
+ {
+ return \Datatable::collection(new Collection($tickets))
+ ->addColumn('id', function ($ticket) {
+ return "";
+ })
+ ->addColumn('subject', function ($ticket) {
+ $subject = DB::table('ticket_thread')->select('title')->where('ticket_id', '=', $ticket->id)->first();
+ if (isset($subject->title)) {
+ $string = $subject->title;
+ if (strlen($string) > 20) {
+ $stringCut = substr($string, 0, 30);
+ $string = substr($stringCut, 0, strrpos($stringCut, ' ')).' ...';
+ }
+ } else {
+ $string = '(no subject)';
+ }
+ //collabrations
+ $collaborators = DB::table('ticket_collaborator')->where('ticket_id', '=', $ticket->id)->get();
+ $collab = count($collaborators);
+ if ($collab > 0) {
+ $collabString = ' ';
+ } else {
+ $collabString = null;
+ }
+ $threads = Ticket_Thread::where('ticket_id', '=', $ticket->id)->first(); //
+ $count = Ticket_Thread::where('ticket_id', '=', $ticket->id)->count(); //
+ $attachment = Ticket_attachments::where('thread_id', '=', $threads->id)->get();
+ $attachCount = count($attachment);
+ if ($attachCount > 0) {
+ $attachString = ' ';
+ } else {
+ $attachString = '';
+ }
+
+ return "id])."' title='".$subject->title."'>".ucfirst($string)." (".$count.")".$collabString.$attachString;
+ })
+ ->addColumn('ticket_number', function ($ticket) {
+ return "id])."' title='".$ticket->ticket_number."'>#".$ticket->ticket_number.'';
+ })
+ ->addColumn('priority', function ($ticket) {
+ $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '=', 0)->max('id');
+ $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
+ $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
+ if ($LastResponse->role == 'user') {
+ $rep = '#F39C12';
+ $username = $LastResponse->user_name;
+ } else {
+ $rep = '#000';
+ $username = $LastResponse->first_name.' '.$LastResponse->last_name;
+ if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
+ $username = $LastResponse->user_name;
+ }
+ }
+ $priority = DB::table('ticket_priority')->select('priority_desc', 'priority_color')->where('priority_id', '=', $ticket->priority_id)->first();
+
+ return ''.ucfirst($priority->priority_desc).'';
+ })
+ ->addColumn('from', function ($ticket) {
+ $from = DB::table('users')->select('user_name')->where('id', '=', $ticket->user_id)->first();
+
+ return "user_name).'''.Lang::get('lang.see-profile2')."'>".ucfirst($from->user_name).'';
+ })
+ // ->addColumn('Last Replier', function ($ticket) {
+ // $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->where('is_internal', '=', 0)->max('id');
+ // $TicketDatarow = Ticket_Thread::where('id', '=', $TicketData)->first();
+ // $LastResponse = User::where('id', '=', $TicketDatarow->user_id)->first();
+ // if ($LastResponse->role == 'user') {
+ // $rep = '#F39C12';
+ // $username = $LastResponse->user_name;
+ // } else {
+ // $rep = '#000';
+ // $username = $LastResponse->first_name.' '.$LastResponse->last_name;
+ // if ($LastResponse->first_name == null || $LastResponse->last_name == null) {
+ // $username = $LastResponse->user_name;
+ // }
+ // }
+
+ // return "".ucfirst($username).'';
+ // })
+ ->addColumn('assigned_to', function ($ticket) {
+ if ($ticket->assigned_to == null) {
+ return "Unassigned";
+ } else {
+ $assign = DB::table('users')->where('id', '=', $ticket->assigned_to)->first();
+
+ return "first_name).'''.Lang::get('lang.see-profile2')."'>".ucfirst($assign->first_name).' '.ucfirst($assign->last_name).'';
+ }
+ })
+ ->addColumn('Last', function ($ticket) {
+ $TicketData = Ticket_Thread::where('ticket_id', '=', $ticket->id)->max('id');
+ $TicketDatarow = Ticket_Thread::select('updated_at')->where('id', '=', $TicketData)->first();
+
+ // return UTC::usertimezone($TicketDatarow->updated_at);
+ return date('Y-m-d H:i:s', strtotime($TicketDatarow->updated_at) + UTC::timeOffset($TicketDatarow->updated_at));
+ })
+ ->searchColumns('subject', 'from', 'assigned_to', 'ticket_number', 'priority')
+ ->orderColumns('subject', 'from', 'assigned_to', 'Last Replier', 'ticket_number', 'priority', 'Last')
+ ->make();
+ }
}
diff --git a/app/Http/Controllers/Agent/helpdesk/TicketWorkflowController.php b/app/Http/Controllers/Agent/helpdesk/TicketWorkflowController.php
new file mode 100644
index 000000000..93ed3f1f1
--- /dev/null
+++ b/app/Http/Controllers/Agent/helpdesk/TicketWorkflowController.php
@@ -0,0 +1,510 @@
+
+ */
+class TicketWorkflowController extends Controller
+{
+ /**
+ * constructor
+ * Create a new controller instance.
+ *
+ * @param type TicketController $TicketController
+ */
+ public function __construct(TicketController $TicketController)
+ {
+ $this->TicketController = $TicketController;
+ }
+
+ /**
+ * This is the core function from where the workflow is applied.
+ *
+ * @return type response
+ */
+ public function workflow($fromaddress, $fromname, $subject, $body, $phone, $helptopic, $sla, $priority, $source, $collaborator, $dept, $assign, $team_assign, $ticket_status, $form_data, $auto_response)
+ {
+ $contact_details = ['email' => $fromaddress, 'email_name' => $fromname, 'subject' => $subject, 'message' => $body];
+ $ticket_settings_details = ['help_topic' => $helptopic, 'sla' => $sla, 'priority' => $priority, 'source' => $source, 'dept' => $dept, 'assign' => $assign, 'team' => $team_assign, 'status' => $ticket_status, 'reject' => false];
+ // get all the workflow common to the entire system which includes any type of ticket creation where the execution order of the workflow should be starting with ascending order
+ $workflows = WorkflowName::where('target', '=', 'A-0')->where('status', '=', '1')->orderBy('order', 'asc')->get();
+ foreach ($workflows as $workflow) {
+ // checking if any workflow defined in the system
+ if ($workflow) {
+ // get all the rules of workflow which has a foreign key of those workflow which are applied to creating any ticket from any source
+ $worklfow_rules = WorkflowRules::where('workflow_id', '=', $workflow->id)->get();
+ foreach ($worklfow_rules as $worklfow_rule) {
+ // checking for the workflow rules to which workflow rule type it is
+ if ($worklfow_rule->matching_scenario == 'email') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['email'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflow->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'email_name') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['email_name'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflow->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'subject') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['subject'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflow->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'message') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['message'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflow->id, $ticket_settings_details);
+ }
+ }
+ }
+ }
+ }
+ if ($source == 1) {
+ // get all the workflow which are applied to ticket generated via webforms and in ascending order
+ $workflows_webs = WorkflowName::where('target', '=', 'A-1')->where('status', '=', '1')->orderBy('order', 'asc')->get();
+ foreach ($workflows_webs as $workflows_web) {
+ if ($workflows_web) {
+ $worklfow_rules = WorkflowRules::where('workflow_id', '=', $workflows_web->id)->get();
+ foreach ($worklfow_rules as $worklfow_rule) {
+ if ($worklfow_rule) {
+ // checking for the workflow rules to which workflow rule type it is
+ if ($worklfow_rule->matching_scenario == 'email') {
+ if ($this->checkRuleCondition($contact_details['email'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_web->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'email_name') {
+ if ($this->checkRuleCondition($contact_details['email_name'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_web->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'subject') {
+ if ($this->checkRuleCondition($contact_details['subject'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_web->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'message') {
+ if ($this->checkRuleCondition($contact_details['message'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_web->id, $ticket_settings_details);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if ($source == 2) {
+ // get all the workflow which are applied to ticket generated via emails and in ascending order
+ $workflows_emails = WorkflowName::where('target', '=', 'A-2')->where('status', '=', '1')->orderBy('order', 'asc')->get();
+ foreach ($workflows_emails as $workflows_email) {
+ if ($workflows_email) {
+ $worklfow_rules = WorkflowRules::where('workflow_id', '=', $workflows_email->id)->get();
+ foreach ($worklfow_rules as $worklfow_rule) {
+ if ($worklfow_rule) {
+ // checking for the workflow rules to which workflow rule type it is
+ if ($worklfow_rule->matching_scenario == 'email') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['email'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_email->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'email_name') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['email_name'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_email->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'subject') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['subject'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_email->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'message') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['message'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_email->id, $ticket_settings_details);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if ($source == 4) {
+ // get all the workflow which are applied to ticket generated via API and in ascending order
+ $workflows_apis = WorkflowName::where('target', '=', 'A-4')->where('status', '=', '1')->orderBy('order', 'asc')->get();
+ foreach ($workflows_apis as $workflows_api) {
+ if ($workflows_api) {
+ $worklfow_rules = WorkflowRules::where('workflow_id', '=', $workflows_api->id)->get();
+ foreach ($worklfow_rules as $worklfow_rule) {
+ if ($worklfow_rule) {
+ // checking for the workflow rules to which workflow rule type it is
+ if ($worklfow_rule->matching_scenario == 'email') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['email'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_api->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'email_name') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['email_name'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_api->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'subject') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['subject'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_api->id, $ticket_settings_details);
+ }
+ } elseif ($worklfow_rule->matching_scenario == 'message') {
+ if ($rule_condition = $this->checkRuleCondition($contact_details['message'], $worklfow_rule->matching_relation, $worklfow_rule->matching_value) == true) {
+ $ticket_settings_details = $this->applyActionCondition($workflows_api->id, $ticket_settings_details);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if ($ticket_settings_details['reject'] == true) {
+ return ['0' => false, '1' => false];
+ } else {
+ $create_ticket = $this->TicketController->create_user($contact_details['email'], $contact_details['email_name'], $contact_details['subject'], $contact_details['message'], $phone, $ticket_settings_details['help_topic'], $ticket_settings_details['sla'], $ticket_settings_details['priority'], $source, $collaborator, $ticket_settings_details['dept'], $ticket_settings_details['assign'], $form_data, $auto_response, $ticket_settings_details['status']);
+
+ return $create_ticket;
+ }
+ }
+
+ /**
+ * function to check the rules applied to the ticket workflow.
+ *
+ * @param type $to_check
+ * @param type $condition
+ * @param type $statement
+ *
+ * @return type boolean
+ */
+ public function checkRuleCondition($to_check, $condition, $statement)
+ {
+ if ($condition == 'equal') {
+ $return = $this->checkEqual($statement, $to_check);
+ } elseif ($condition == 'not_equal') {
+ $return = $this->checkNotEqual($statement, $to_check);
+ } elseif ($condition == 'contains') {
+ $return = $this->checkContains($statement, $to_check);
+ } elseif ($condition == 'dn_contain') {
+ $return = $this->checkDoNotContain($statement, $to_check);
+ } elseif ($condition == 'starts') {
+ $return = $this->checkStarts($statement, $to_check);
+ } elseif ($condition == 'ends') {
+ $return = $this->checkEnds($statement, $to_check);
+ }
+// elseif($condition == 'match') {
+//
+// } elseif($condition == 'not_match') {
+//
+// }
+ return $return;
+ }
+
+ /**
+ * function to check if the equal functions are applied.
+ *
+ * @param type $statement
+ * @param type $to_check
+ *
+ * @return bool
+ */
+ public function checkEqual($statement, $to_check)
+ {
+ if ($statement == $to_check) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * function to check if the not-equal functions are applied.
+ *
+ * @param type $statement
+ * @param type $to_check
+ *
+ * @return bool
+ */
+ public function checkNotEqual($statement, $to_check)
+ {
+ if ($statement != $to_check) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * function to check if the contains functions are applied.
+ *
+ * @param type $statement
+ * @param type $to_check
+ *
+ * @return bool
+ */
+ public function checkContains($statement, $to_check)
+ {
+ if (strpos($to_check, $statement) !== false) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * function to check if the do not contain functions are applied.
+ *
+ * @param type $statement
+ * @param type $to_check
+ *
+ * @return bool
+ */
+ public function checkDoNotContain($statement, $to_check)
+ {
+ if (strpos($to_check, $statement) == false) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * function to check if the start functions are applied.
+ *
+ * @param type $statement
+ * @param type $to_check
+ *
+ * @return bool
+ */
+ public function checkStarts($statement, $to_check)
+ {
+ if (substr($to_check, 0, strlen($statement)) == $statement) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * function to check if the ends functions are applied.
+ *
+ * @param type $statement
+ * @param type $to_check
+ *
+ * @return bool
+ */
+ public function checkEnds($statement, $to_check)
+ {
+ $to_check = strip_tags($to_check);
+ if (substr($to_check, -strlen($statement)) == $statement) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+// function startsWith($to_check, $statement) {
+// // search backwards starting from haystack length characters from the end
+// return $statement === "" || strrpos($to_check, $statement, -strlen($to_check)) !== false;
+// }
+
+// function endsWith($to_check, $statement) {
+// // search forward starting from end minus needle length characters
+// return $statement === "" || (($temp = strlen($to_check) - strlen($statement)) >= 0 && strpos($to_check, $statement, $temp) !== false);
+// }
+
+ /**
+ * function to apply the action to a ticket.
+ *
+ * @param type $workflow_id
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function applyActionCondition($workflow_id, $ticket_settings_details)
+ {
+ $workflow_actions = WorkflowAction::where('workflow_id', '=', $workflow_id)->get();
+ foreach ($workflow_actions as $workflow_action) {
+ if ($workflow_action->condition == 'reject') {
+ $ticket_settings_details = $this->rejectTicket($ticket_settings_details);
+ } elseif ($workflow_action->condition == 'department') {
+ $ticket_settings_details = $this->changeDepartment($workflow_action, $ticket_settings_details);
+ } elseif ($workflow_action->condition == 'priority') {
+ $ticket_settings_details = $this->changePriority($workflow_action, $ticket_settings_details);
+ } elseif ($workflow_action->condition == 'sla') {
+ $ticket_settings_details = $this->changeSla($workflow_action, $ticket_settings_details);
+ } elseif ($workflow_action->condition == 'team') {
+ $ticket_settings_details = $this->changeTeam($workflow_action, $ticket_settings_details);
+ } elseif ($workflow_action->condition == 'agent') {
+ $ticket_settings_details = $this->changeAgent($workflow_action, $ticket_settings_details);
+ } elseif ($workflow_action->condition == 'helptopic') {
+ $ticket_settings_details = $this->changeHelptopic($workflow_action, $ticket_settings_details);
+ } elseif ($workflow_action->condition == 'status') {
+ $ticket_settings_details = $this->changeStatus($workflow_action, $ticket_settings_details);
+ }
+ }
+
+ return $ticket_settings_details;
+ }
+
+ /**
+ * function to reject ticket.
+ *
+ * @param array $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function rejectTicket($ticket_settings_details)
+ {
+ $ticket_settings_details['reject'] = true;
+
+ return $ticket_settings_details;
+ }
+
+ /**
+ * function to change the department of a ticket.
+ *
+ * @param type $workflow_action
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function changeDepartment($workflow_action, $ticket_settings_details)
+ {
+ $dept = Department::where('id', '=', $workflow_action->action)->first();
+ if ($dept == null) {
+ return $ticket_settings_details;
+ } else {
+ $ticket_settings_details['dept'] = $dept->id;
+
+ return $ticket_settings_details;
+ }
+ }
+
+ /**
+ * function to change the priority of a ticket.
+ *
+ * @param type $workflow_action
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function changePriority($workflow_action, $ticket_settings_details)
+ {
+ $priority = Ticket_Priority::where('priority_id', '=', $workflow_action->action)->first();
+ if ($priority == null) {
+ return $ticket_settings_details;
+ } else {
+ $ticket_settings_details['priority'] = $priority->priority_id;
+
+ return $ticket_settings_details;
+ }
+ }
+
+ /**
+ * function to change the SLA of a ticket.
+ *
+ * @param type $workflow_action
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function changeSla($workflow_action, $ticket_settings_details)
+ {
+ $sla_plan = Sla_plan::where('id', '=', $workflow_action->action)->first();
+ if ($sla_plan == null) {
+ return $ticket_settings_details;
+ } else {
+ $ticket_settings_details['sla'] = $sla_plan->id;
+
+ return $ticket_settings_details;
+ }
+ }
+
+ /**
+ * function to assign tean to a ticket.
+ *
+ * @param type $workflow_action
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function changeTeam($workflow_action, $ticket_settings_details)
+ {
+ $team = Teams::where('id', '=', $workflow_action->action)->first();
+ if ($team == null) {
+ return $ticket_settings_details;
+ } else {
+ $ticket_settings_details['team'] = $team->id;
+
+ return $ticket_settings_details;
+ }
+ }
+
+ /**
+ * function to assing a ticket to an agent.
+ *
+ * @param type $workflow_action
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function changeAgent($workflow_action, $ticket_settings_details)
+ {
+ $agent = User::where('id', '=', $workflow_action->action)->where('role', '!=', 'user')->first();
+ if ($agent == null) {
+ return $ticket_settings_details;
+ } else {
+ $ticket_settings_details['assign'] = $agent->id;
+
+ return $ticket_settings_details;
+ }
+ }
+
+ /**
+ * function to change the helptopic of a ticket.
+ *
+ * @param type $workflow_action
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function changeHelptopic($workflow_action, $ticket_settings_details)
+ {
+ $help_topic = Help_topic::where('id', '=', $workflow_action->action)->first();
+ if ($help_topic == null) {
+ return $ticket_settings_details;
+ } else {
+ $ticket_settings_details['help_topic'] = $help_topic->id;
+
+ return $ticket_settings_details;
+ }
+ }
+
+ /**
+ * function to change the status of a ticket.
+ *
+ * @param type $workflow_action
+ * @param type $ticket_settings_details
+ *
+ * @return type array
+ */
+ public function changeStatus($workflow_action, $ticket_settings_details)
+ {
+ $status = Ticket_Status::where('id', '=', $workflow_action->action)->first();
+ if ($status == null) {
+ return $ticket_settings_details;
+ } else {
+ $ticket_settings_details['status'] = $status->id;
+
+ return $ticket_settings_details;
+ }
+ }
+}
diff --git a/app/Http/Controllers/Agent/kb/SettingsController.php b/app/Http/Controllers/Agent/kb/SettingsController.php
index 95d689ee9..8764b2f15 100644
--- a/app/Http/Controllers/Agent/kb/SettingsController.php
+++ b/app/Http/Controllers/Agent/kb/SettingsController.php
@@ -2,7 +2,8 @@
namespace App\Http\Controllers\Agent\kb;
-// Controllersuse App\Http\Controllers\Agent\helpdesk\TicketController;
+// Controllers
+use App\Http\Controllers\Agent\helpdesk\TicketController;
use App\Http\Controllers\Controller;
// Request
use App\Http\Requests\kb\ProfilePassword;
diff --git a/app/Http/Controllers/Api/v1/ApiController.php b/app/Http/Controllers/Api/v1/ApiController.php
index 91dab4449..d14daaa17 100644
--- a/app/Http/Controllers/Api/v1/ApiController.php
+++ b/app/Http/Controllers/Api/v1/ApiController.php
@@ -60,9 +60,12 @@ class ApiController extends Controller
$this->middleware('jwt.auth');
$this->middleware('api', ['except' => 'GenerateApiKey']);
-
- $user = \JWTAuth::parseToken()->authenticate();
- $this->user = $user;
+ try {
+ $user = \JWTAuth::parseToken()->authenticate();
+ $this->user = $user;
+ } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
+ } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) {
+ }
$ticket = new TicketController();
$this->ticket = $ticket;
@@ -82,6 +85,9 @@ class ApiController extends Controller
$faveoUser = new User();
$this->faveoUser = $faveoUser;
+ $faveoUser = new User();
+ $this->user = $faveoUser;
+
$team = new Teams();
$this->team = $team;
@@ -138,18 +144,23 @@ class ApiController extends Controller
$helptopic = $this->request->input('helptopic');
$sla = $this->request->input('sla');
$priority = $this->request->input('priority');
- $headers = $this->request->input('headers');
+ $header = $this->request->input('cc');
$dept = $this->request->input('dept');
$assignto = $this->request->input('assignto');
$form_data = $this->request->input('form_data');
$source = $this->request->input('source');
$attach = $this->request->input('attachments');
+ $headers = [];
+ if ($header) {
+ $headers = explode(',', $header);
+ }
+ //return $headers;
/*
* return s ticket number
*/
$response = $this->ticket->createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data, $attach);
-
+ //return $response;
/*
* return ticket details
*/
@@ -166,7 +177,8 @@ class ApiController extends Controller
} catch (\TokenExpiredException $e) {
$error = $e->getMessage();
- return response()->json(compact('error'));
+ return response()->json(compact('error'))
+ ->header('Authenticate: xBasic realm', 'fake');
}
}
@@ -303,6 +315,7 @@ class ApiController extends Controller
->whereNotNull('title');
})
->select('first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->orderBy('ticket_thread.updated_at', 'desc')
->groupby('tickets.id')
->distinct()
->paginate(10)
@@ -346,7 +359,8 @@ class ApiController extends Controller
$join->on('tickets.id', '=', 'ticket_thread.ticket_id')
->whereNotNull('title');
})
- ->select('first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->select('user_name', 'first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->orderBy('ticket_thread.updated_at', 'desc')
->groupby('tickets.id')
->distinct()
->paginate(10)
@@ -390,7 +404,8 @@ class ApiController extends Controller
$join->on('tickets.id', '=', 'ticket_thread.ticket_id')
->whereNotNull('title');
})
- ->select('first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->select('user_name', 'first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->orderBy('ticket_thread.updated_at', 'desc')
->groupby('tickets.id')
->distinct()
->paginate(10)
@@ -516,7 +531,8 @@ class ApiController extends Controller
$search = $this->request->input('search');
$result = $this->faveoUser->where('first_name', 'like', '%'.$search.'%')->orWhere('last_name', 'like', '%'.$search.'%')->orWhere('user_name', 'like', '%'.$search.'%')->orWhere('email', 'like', '%'.$search.'%')->get();
- return response()->json(compact('result'));
+ return response()->json(compact('result'))
+ ->header('X-Header-One', 'Header Value');
} catch (Exception $e) {
$error = $e->getMessage();
$line = $e->getLine();
@@ -526,7 +542,9 @@ class ApiController extends Controller
} catch (\TokenExpiredException $e) {
$error = $e->getMessage();
- return response()->json(compact('error'));
+ return response()->json(compact('error'))
+
+ ->header('X-Header-One', 'Header Value');
}
}
@@ -538,26 +556,16 @@ class ApiController extends Controller
public function getCustomersWith()
{
try {
- $users = $this->faveoUser->select('id', 'user_name', 'first_name', 'last_name', 'email', 'phone_number', 'profile_pic')->where('role', 'user')->get();
- $result = [];
- foreach ($users as $key => $user) {
- $result[$key]['id'] = $user->id;
- $result[$key]['user_name'] = $user->user_name;
- $result[$key]['first_name'] = $user->first_name;
- $result[$key]['last_name'] = $user->last_name;
- $result[$key]['email'] = $user->email;
- $result[$key]['phone_number'] = $user->phone_number;
- if ($user->profile_pic) {
- $path = 'lb-faveo/media/profilepic/'.$user->profile_pic;
- } else {
- $path = \Gravatar::src($user->email);
- }
- $result[$key]['picture'] = $path;
- }
- $result = $this->createPagination($result, 10);
- //dd($result);
- //$result->toJson();
- return $result->toJson();
+ $users = $this->user
+ ->leftJoin('user_assign_organization', 'user_assign_organization.user_id', '=', 'users.id')
+ ->leftJoin('organization', 'organization.id', '=', 'user_assign_organization.org_id')
+ ->where('role', 'user')
+ ->select('users.id', 'user_name', 'first_name', 'last_name', 'email', 'phone_number', 'users.profile_pic', 'organization.name AS company', 'users.active')
+ ->paginate(10)
+ ->toJson();
+
+ //dd($users);
+ return $users;
} catch (\Exception $e) {
$error = $e->getMessage();
$line = $e->getLine();
@@ -567,7 +575,8 @@ class ApiController extends Controller
} catch (\TokenExpiredException $e) {
$error = $e->getMessage();
- return response()->json(compact('error'));
+ return response()->json(compact('error'))
+ ->header('Authenticate: xBasic realm', 'fake');
}
}
@@ -654,9 +663,14 @@ class ApiController extends Controller
return response()->json(compact('error'));
}
$id = $this->request->input('id');
- $result = $this->thread->where('ticket_id', $id)->get();
+ $result = $this->user
+ ->leftjoin('ticket_thread', 'ticket_thread.user_id', '=', 'users.id')
+ ->select('ticket_thread.id', 'ticket_id', 'user_id', 'poster', 'source', 'title', 'body', 'is_internal', 'format', 'ip_address', 'ticket_thread.created_at', 'ticket_thread.updated_at', 'users.first_name', 'users.last_name', 'users.user_name', 'users.email', 'users.profile_pic')
+ ->where('ticket_id', $id)
+ ->get()
+ ->toJson();
- return response()->json(compact('result'));
+ return $result;
} catch (\Exception $e) {
$error = $e->getMessage();
$line = $e->getLine();
@@ -689,6 +703,10 @@ class ApiController extends Controller
}
$url = $this->request->input('url');
+ if (!str_is('*/', $url)) {
+ $url = str_finish($url, '/');
+ }
+
$url = $url.'/api/v1/helpdesk/check-url?api_key='.$this->request->input('api_key').'&token='.\Config::get('app.token');
$result = $this->CallGetApi($url);
//dd($result);
@@ -903,7 +921,7 @@ class ApiController extends Controller
public function getTickets()
{
try {
- $tickets = $this->model->paginate(10);
+ $tickets = $this->model->orderBy('created_at', 'desc')->paginate(10);
$tickets->toJson();
return $tickets;
@@ -938,7 +956,8 @@ class ApiController extends Controller
$join->on('tickets.id', '=', 'ticket_thread.ticket_id')
->whereNotNull('title');
})
- ->select('first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->select('user_name', 'first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->orderBy('ticket_thread.updated_at', 'desc')
->groupby('tickets.id')
->distinct()
->paginate(10)
@@ -946,9 +965,9 @@ class ApiController extends Controller
return $inbox;
} catch (\Exception $ex) {
- $error = $e->getMessage();
- $line = $e->getLine();
- $file = $e->getFile();
+ $error = $ex->getMessage();
+ $line = $ex->getLine();
+ $file = $ex->getFile();
return response()->json(compact('error', 'file', 'line'));
} catch (\TokenExpiredException $e) {
@@ -1012,7 +1031,8 @@ class ApiController extends Controller
$join->on('tickets.id', '=', 'ticket_thread.ticket_id')
->whereNotNull('title');
})
- ->select('first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->select('user_name', 'first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->orderBy('ticket_thread.updated_at', 'desc')
->groupby('tickets.id')
->distinct()
->paginate(10)
@@ -1032,7 +1052,7 @@ class ApiController extends Controller
}
}
- public function getMyTickets()
+ public function getMyTicketsAgent()
{
try {
$v = \Validator::make($this->request->all(), [
@@ -1045,7 +1065,58 @@ class ApiController extends Controller
}
$id = $this->request->input('user_id');
if ($this->user->where('id', $id)->first()->role == 'user') {
- $error = 'This user is not an Aget or Admin';
+ $error = 'This user is not an Agent or Admin';
+
+ return response()->json(compact('error'));
+ }
+ $result = $this->user->join('tickets', function ($join) use ($id) {
+ $join->on('users.id', '=', 'tickets.assigned_to')
+ ->where('user_id', '=', $id);
+ })
+ ->join('department', 'department.id', '=', 'tickets.dept_id')
+ ->join('ticket_priority', 'ticket_priority.priority_id', '=', 'tickets.priority_id')
+ ->join('sla_plan', 'sla_plan.id', '=', 'tickets.sla')
+ ->join('help_topic', 'help_topic.id', '=', 'tickets.help_topic_id')
+ ->join('ticket_status', 'ticket_status.id', '=', 'tickets.status')
+ ->join('ticket_thread', function ($join) {
+ $join->on('tickets.id', '=', 'ticket_thread.ticket_id')
+ ->whereNotNull('title');
+ })
+ ->select('user_name', 'first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->orderBy('ticket_thread.updated_at', 'desc')
+ ->groupby('tickets.id')
+ ->distinct()
+ ->paginate(10)
+ ->toJson();
+
+ return $result;
+ } catch (\Exception $e) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ } catch (\TokenExpiredException $e) {
+ $error = $e->getMessage();
+
+ return response()->json(compact('error'));
+ }
+ }
+
+ public function getMyTicketsUser()
+ {
+ try {
+ $v = \Validator::make($this->request->all(), [
+ 'user_id' => 'required|exists:users,id',
+ ]);
+ if ($v->fails()) {
+ $error = $v->errors();
+
+ return response()->json(compact('error'));
+ }
+ $id = $this->request->input('user_id');
+ if ($this->user->where('id', $id)->first()->role == 'admin' || $this->user->where('id', $id)->first()->role == 'agent') {
+ $error = 'This is not a client';
return response()->json(compact('error'));
}
@@ -1062,10 +1133,12 @@ class ApiController extends Controller
$join->on('tickets.id', '=', 'ticket_thread.ticket_id')
->whereNotNull('title');
})
- ->select('first_name', 'last_name', 'email', 'profile_pic', 'ticket_number', 'tickets.id', 'title', 'tickets.created_at', 'department.name as department_name', 'ticket_priority.priority as priotity_name', 'sla_plan.name as sla_plan_name', 'help_topic.topic as help_topic_name', 'ticket_status.name as ticket_status_name')
+ ->select('ticket_number', 'tickets.id', 'title', 'ticket_status.name as ticket_status_name')
+ ->orderBy('ticket_thread.updated_at', 'desc')
->groupby('tickets.id')
->distinct()
- ->paginate(10)
+ ->get()
+ // ->paginate(10)
->toJson();
return $result;
@@ -1143,4 +1216,160 @@ class ApiController extends Controller
return response()->json(compact('error'));
}
}
+
+ public function collaboratorSearch()
+ {
+ $this->validate($this->request, ['term' => 'required']);
+ try {
+ $emails = $this->ticket->autosearch();
+ //return $emails;
+ $user = new User();
+ if (count($emails) > 0) {
+ foreach ($emails as $key => $email) {
+ $user_model = $user->where('email', $email)->first();
+ //return $user_model;
+ $users[$key]['name'] = $user_model->first_name.' '.$user_model->last_name;
+ $users[$key]['email'] = $email;
+ $users[$key]['avatar'] = $this->avatarUrl($email);
+ }
+ }
+ //return $users;
+
+ return response()->json(compact('users'));
+ } catch (\Exception $e) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ }
+ }
+
+ public function avatarUrl($email)
+ {
+ try {
+ $user = new User();
+ $user = $user->where('email', $email)->first();
+ if ($user->profile_pic) {
+ $url = url('lb-faveo/media/profilepic/'.$user->profile_pic);
+ } else {
+ $url = \Gravatar::src($email);
+ }
+
+ return $url;
+ } catch (\Exception $ex) {
+ //return $ex->getMessage();
+ throw new \Exception($ex->getMessage());
+ }
+ }
+
+ public function addCollaboratorForTicket()
+ {
+ try {
+ $v = \Validator::make(\Input::get(), [
+ 'email' => 'required|email|unique:users',
+ 'ticket_id' => 'required',
+ ]
+ );
+ if ($v->fails()) {
+ $error = $v->messages();
+
+ return response()->json(compact('error'));
+ }
+ $collaborator = $this->ticket->useradd();
+
+ return response()->json(compact('collaborator'));
+ } catch (\Exception $e) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $ex) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ }
+ }
+
+ public function getCollaboratorForTicket()
+ {
+ try {
+ $v = \Validator::make(\Input::get(), [
+ 'ticket_id' => 'required',
+ ]
+ );
+ if ($v->fails()) {
+ $error = $v->messages();
+
+ return response()->json(compact('error'));
+ }
+ $collaborator = $this->ticket->getCollaboratorForTicket();
+
+ return response()->json(compact('collaborator'));
+ } catch (\Exception $e) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $ex) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ }
+ }
+
+ public function deleteCollaborator()
+ {
+ try {
+ $v = \Validator::make(\Input::get(), [
+ 'ticketid' => 'required',
+ 'email' => 'required',
+ ]
+ );
+ if ($v->fails()) {
+ $result = $v->messages();
+
+ return response()->json(compact('result'));
+ }
+ $collaborator = $this->ticket->userremove();
+
+ return response()->json(compact('collaborator'));
+ } catch (\Exception $ex) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ }
+ }
+
+ public function dependency()
+ {
+ try {
+ $department = $this->department->select('name', 'id')->get()->toArray();
+ $sla = $this->slaPlan->select('name', 'id')->get()->toArray();
+ $staff = $this->user->where('role', 'agent')->select('email', 'id')->get()->toArray();
+ $team = $this->team->select('name', 'id')->get()->toArray();
+ $priority = \DB::table('ticket_priority')->select('priority', 'priority_id')->get();
+ $helptopic = $this->helptopic->select('topic', 'id')->get()->toArray();
+ $status = \DB::table('ticket_status')->select('name', 'id')->get();
+ $source = \DB::table('ticket_source')->select('name', 'id')->get();
+ $result = ['departments' => $department, 'sla' => $sla, 'staffs' => $staff, 'teams' => $team,
+ 'priorities' => $priority, 'helptopics' => $helptopic, 'status' => $status, 'sources' => $source, ];
+
+ return response()->json(compact('result'));
+ } catch (\Exception $e) {
+ $error = $e->getMessage();
+ $line = $e->getLine();
+ $file = $e->getFile();
+
+ return response()->json(compact('error', 'file', 'line'));
+ }
+ }
}
diff --git a/app/Http/Controllers/Api/v1/ApiExceptAuthController.php b/app/Http/Controllers/Api/v1/ApiExceptAuthController.php
index 9ade975b5..47a9b763f 100644
--- a/app/Http/Controllers/Api/v1/ApiExceptAuthController.php
+++ b/app/Http/Controllers/Api/v1/ApiExceptAuthController.php
@@ -12,7 +12,7 @@ class ApiExceptAuthController extends Controller
public function __construct(Request $request)
{
$this->request = $request;
- $this->middleware('api');
+ //$this->middleware('api');
}
/**
@@ -34,7 +34,12 @@ class ApiExceptAuthController extends Controller
}
$url = $this->request->input('url');
- $url = $url.'/api/v1/helpdesk/check-url';
+ if (!str_is('*/', $url)) {
+ $url = str_finish($url, '/');
+ }
+
+ $url = $url.'api/v1/helpdesk/check-url';
+ //return $url;
$result = $this->CallGetApi($url);
// dd($result);
return response()->json(compact('result'));
diff --git a/app/Http/Controllers/Api/v1/TicketController.php b/app/Http/Controllers/Api/v1/TicketController.php
index 079da83f7..67dbc8352 100644
--- a/app/Http/Controllers/Api/v1/TicketController.php
+++ b/app/Http/Controllers/Api/v1/TicketController.php
@@ -58,6 +58,7 @@ class TicketController extends Controller
public function createTicket($user_id, $subject, $body, $helptopic, $sla, $priority, $source, $headers, $dept, $assignto, $form_data, $attach = '')
{
try {
+ //return $headers;
$max_number = Tickets::whereRaw('id = (select max(`id`) from tickets)')->first();
//dd($max_number);
if ($max_number == null) {
@@ -97,7 +98,7 @@ class TicketController extends Controller
}
}
}
-
+ //return $headers;
$this->storeCollaborators($headers, $id);
$thread = $this->ticketThread($subject, $body, $id, $user_id);
@@ -123,10 +124,11 @@ class TicketController extends Controller
public function storeCollaborators($headers, $id)
{
try {
+ //return $headers;
$company = $this->company();
if (isset($headers)) {
- foreach ($headers as $email => $name) {
- $name = $name;
+ foreach ($headers as $email) {
+ $name = $email;
$email = $email;
if ($this->checkEmail($email) == false) {
$create_user = new User();
@@ -147,6 +149,7 @@ class TicketController extends Controller
$user = $this->checkEmail($email);
$user_id = $user->id;
}
+ //return $user_id;
$collaborator_store = new Ticket_Collaborator();
$collaborator_store->isactive = 1;
$collaborator_store->ticket_id = $id;
@@ -331,10 +334,10 @@ class TicketController extends Controller
// // }
// }, true);
-try {
- $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('0', $ticketdata->dept_id), $to = ['name' => $username, 'email' => $emailadd], $message = ['subject' => $updated_subject, 'scenario' => 'create-ticket-by-agent', 'body' => $body], $template_variables = ['agent_sign' => Auth::user()->agent_sign, 'ticket_number' => $ticket_number2]);
-} catch (\Exception $e) {
-}
+ try {
+ $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('0', $ticketdata->dept_id), $to = ['name' => $username, 'email' => $emailadd], $message = ['subject' => $updated_subject, 'scenario' => 'create-ticket-by-agent', 'body' => $body], $template_variables = ['agent_sign' => Auth::user()->agent_sign, 'ticket_number' => $ticket_number2]);
+ } catch (\Exception $e) {
+ }
$collaborators = Ticket_Collaborator::where('ticket_id', '=', $ticket_id)->get();
foreach ($collaborators as $collaborator) {
@@ -357,10 +360,10 @@ try {
// // }
// }, true);
- try {
- $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('0', $ticketdata->dept_id), $to = ['user' => $admin_user, 'email' => $admin_email], $message = ['subject' => $updated_subject, 'body' => $body, 'scenario' => $mail], $template_variables = ['ticket_agent_name' => $admin_user, 'ticket_client_name' => $username, 'ticket_client_email' => $emailadd, 'user' => $admin_user, 'ticket_number' => $ticket_number2, 'email_address' => $emailadd, 'name' => $ticket_creator]);
- } catch (\Exception $e) {
- }
+ try {
+ $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('0', $ticketdata->dept_id), $to = ['user' => $admin_user, 'email' => $admin_email], $message = ['subject' => $updated_subject, 'body' => $body, 'scenario' => $mail], $template_variables = ['ticket_agent_name' => $admin_user, 'ticket_client_name' => $username, 'ticket_client_email' => $emailadd, 'user' => $admin_user, 'ticket_number' => $ticket_number2, 'email_address' => $emailadd, 'name' => $ticket_creator]);
+ } catch (\Exception $e) {
+ }
}
return $thread;
@@ -548,7 +551,7 @@ try {
{
try {
$check = User::where('email', '=', $email)->first();
- if ($check == true) {
+ if ($check) {
return $check;
} else {
return false;
@@ -601,4 +604,123 @@ try {
return $e->getMessage();
}
}
+
+ /**
+ * autosearch.
+ *
+ * @return type json
+ */
+ public function autosearch()
+ {
+ $term = \Input::get('term');
+ $user = \App\User::where('email', 'LIKE', '%'.$term.'%')->orWhere('first_name', 'LIKE', '%'.$term.'%')->orWhere('last_name', 'LIKE', '%'.$term.'%')->orWhere('user_name', 'LIKE', '%'.$term.'%')->lists('email');
+
+ return $user;
+ }
+
+ /**
+ * useradd.
+ *
+ * @param type Image $image
+ *
+ * @return type json
+ */
+ public function useradd()
+ {
+ $email = Input::get('email');
+ $ticket_id = Input::get('ticket_id');
+ $company = $this->company();
+ $user = new User();
+ $user->user_name = $email;
+ $user->email = $email;
+ $password = $this->generateRandomString();
+ $user->password = \Hash::make($password);
+ $user->role = 'user';
+ $user->active = 1;
+ if ($user->save()) {
+ $user_id = $user->id;
+ $php_mailer = new PhpMailController();
+ $php_mailer->sendmail($from = $php_mailer->mailfrom('1', '0'), $to = ['name' => $email, 'email' => $email], $message = ['subject' => 'Password', 'scenario' => 'registration-notification'], $template_variables = ['user' => $email, 'email_address' => $email, 'user_password' => $password]);
+ }
+ $ticket_collaborator = new Ticket_Collaborator();
+ $ticket_collaborator->isactive = 1;
+ $ticket_collaborator->ticket_id = $ticket_id;
+ $ticket_collaborator->user_id = $user->id;
+ $ticket_collaborator->role = 'ccc';
+ $ticket_collaborator->save();
+
+ $result = [$user->user_name => $user->email];
+
+ return $result;
+ }
+
+ /**
+ * user remove.
+ *
+ * @return type
+ */
+ public function userremove()
+ {
+ $email = Input::get('email');
+ $ticketid = Input::get('ticketid');
+ $user = new User();
+ $user = $user->where('email', $email)->first();
+ $ticket_collaborator = Ticket_Collaborator::where('ticket_id', '=', $ticketid)
+ ->where('user_id', $user->id)
+ ->first();
+ if ($ticket_collaborator) {
+ $ticket_collaborator->delete();
+
+ return 'deleted successfully';
+ } else {
+ return 'not found';
+ }
+ }
+
+ public function getCollaboratorForTicket()
+ {
+ try {
+ $ticketid = Input::get('ticket_id');
+
+ $ticket_collaborator = \DB::table('users')
+ ->join('ticket_collaborator', function ($join) use ($ticketid) {
+ $join->on('users.id', '=', 'ticket_collaborator.user_id')
+ ->where('ticket_collaborator.ticket_id', '=', $ticketid);
+ })
+ ->select('users.email', 'users.user_name')
+ ->get();
+ if (count($ticket_collaborator) > 0) {
+ foreach ($ticket_collaborator as $key => $collaborator) {
+ $collab[$key]['email'] = $collaborator->email;
+ $collab[$key]['user_name'] = $collaborator->user_name;
+ $collab[$key]['avatar'] = $this->avatarUrl($collaborator->email);
+ }
+ } else {
+ $collab = $ticket_collaborator;
+ }
+
+ return $collab;
+ } catch (\Exception $ex) {
+ return $ex->getMessage();
+ throw new \Exception('get collaborator for ticket fails');
+ }
+ }
+
+ public function avatarUrl($email)
+ {
+ try {
+ $user = new User();
+ $user = $user->where('email', $email)->first();
+ if ($user->profile_pic) {
+ $url = url('lb-faveo/media/profilepic/'.$user->profile_pic);
+ } else {
+ $url = \Gravatar::src($email);
+ }
+
+ return $url;
+ } catch (\Exception $ex) {
+ //return $ex->getMessage();
+ throw new \Exception($ex->getMessage());
+ }
+ }
}
diff --git a/app/Http/Controllers/Api/v1/TokenAuthController.php b/app/Http/Controllers/Api/v1/TokenAuthController.php
index cf6fd00e6..d9bfe06cb 100644
--- a/app/Http/Controllers/Api/v1/TokenAuthController.php
+++ b/app/Http/Controllers/Api/v1/TokenAuthController.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Api\v1;
+use App\Http\Controllers\Common\PhpMailController;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
@@ -23,9 +24,14 @@ use Tymon\JWTAuth\Exceptions\JWTException;
*/
class TokenAuthController extends Controller
{
+ public $PhpMailController;
+
public function __construct()
{
$this->middleware('api');
+
+ $PhpMailController = new PhpMailController();
+ $this->PhpMailController = $PhpMailController;
}
/**
@@ -41,7 +47,7 @@ class TokenAuthController extends Controller
$password = $request->input('password');
$field = filter_var($usernameinput, FILTER_VALIDATE_EMAIL) ? 'email' : 'user_name';
- //$credentials = $request->only('email', 'password');
+//$credentials = $request->only('email', 'password');
try {
if (!$token = JWTAuth::attempt([$field => $usernameinput, 'password' => $password])) {
@@ -56,7 +62,7 @@ class TokenAuthController extends Controller
}
$user_id = \Auth::user()->id;
- // if no errors are encountered we can return a JWT
+// if no errors are encountered we can return a JWT
return response()->json(compact('token', 'user_id'));
}
@@ -72,18 +78,18 @@ class TokenAuthController extends Controller
if (!$user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found', 404]);
}
- } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
+ } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
return response()->json(['token_expired', $e->getStatusCode()]);
- } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
+ } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid', $e->getStatusCode()]);
- } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) {
+ } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
return response()->json(['token_absent', $e->getStatusCode()]);
} catch (\Exception $e) {
$error = $e->getMessage();
return response()->json(compact('error'));
}
- //dd($user);
+//dd($user);
return response()->json(compact('user'));
}
@@ -124,7 +130,7 @@ class TokenAuthController extends Controller
*
* @return type json
*/
- public function checkUrl()
+ public function checkUrl(Request $request)
{
try {
$v = \Validator::make($request->all(), [
@@ -144,4 +150,43 @@ class TokenAuthController extends Controller
return response()->json(compact('error'));
}
}
+
+ public function forgotPassword(Request $request)
+ {
+ try {
+ $v = \Validator::make($request->all(), [
+ 'email' => 'required|email|exists:users,email',
+ ]);
+ if ($v->fails()) {
+ $error = $v->errors();
+
+ return response()->json(compact('error'));
+ }
+
+ $date = date('Y-m-d H:i:s');
+ $user = User::where('email', '=', $request->only('email'))->first();
+ if (isset($user)) {
+ $user1 = $user->email;
+ //gen new code and pass
+ $code = str_random(60);
+ $password_reset_table = \DB::table('password_resets')->where('email', '=', $user->email)->first();
+ if (isset($password_reset_table)) {
+ $password_reset_table = \DB::table('password_resets')->where('email', '=', $user->email)->update(['token' => $code, 'created_at' => $date]);
+ // $password_reset_table->token = $code;
+ // $password_reset_table->update(['token' => $code]);
+ } else {
+ $create_password_reset = \DB::table('password_resets')->insert(['email' => $user->email, 'token' => $code, 'created_at' => $date]);
+ }
+
+ $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => $user->user_name, 'email' => $user->email], $message = ['subject' => 'Your Password Reset Link', 'scenario' => 'reset-password'], $template_variables = ['user' => $user->user_name, 'email_address' => $user->email, 'password_reset_link' => url('password/reset/'.$code)]);
+ $result = 'We have e-mailed your password reset link!';
+
+ return response()->json(compact('result'));
+ }
+ } catch (Exception $ex) {
+ $error = $e->getMessage();
+
+ return response()->json(compact('error'));
+ }
+ }
}
diff --git a/app/Http/Controllers/Client/helpdesk/FormController.php b/app/Http/Controllers/Client/helpdesk/FormController.php
index dd8c37a3b..544df7963 100644
--- a/app/Http/Controllers/Client/helpdesk/FormController.php
+++ b/app/Http/Controllers/Client/helpdesk/FormController.php
@@ -3,7 +3,7 @@
namespace App\Http\Controllers\Client\helpdesk;
// controllers
-use App\Http\Controllers\Agent\helpdesk\TicketController;
+use App\Http\Controllers\Agent\helpdesk\TicketWorkflowController;
use App\Http\Controllers\Common\SettingsController;
use App\Http\Controllers\Controller;
// requests
@@ -14,6 +14,7 @@ use App\Model\helpdesk\Form\Fields;
use App\Model\helpdesk\Manage\Help_topic;
use App\Model\helpdesk\Settings\System;
use App\Model\helpdesk\Settings\Ticket;
+use App\Model\helpdesk\Ticket\Ticket_attachments;
use App\Model\helpdesk\Ticket\Ticket_source;
use App\Model\helpdesk\Ticket\Ticket_Thread;
use App\Model\helpdesk\Ticket\Tickets;
@@ -39,12 +40,12 @@ class FormController extends Controller
*
* @return void
*/
- public function __construct(TicketController $TicketController)
+ public function __construct(TicketWorkflowController $TicketWorkflowController)
{
// mail smtp settings
- SettingsController::smtp();
+// SettingsController::smtp();
// creating a TicketController instance
- $this->TicketController = $TicketController;
+ $this->TicketWorkflowController = $TicketWorkflowController;
}
/**
@@ -129,7 +130,7 @@ class FormController extends Controller
* @param type Request $request
* @param type User $user
*/
- public function postedForm(User $user, ClientRequest $request, Ticket $ticket_settings, Ticket_source $ticket_source)
+ public function postedForm(User $user, ClientRequest $request, Ticket $ticket_settings, Ticket_source $ticket_source, Ticket_attachments $ta)
{
$form_extras = $request->except('Name', 'Phone', 'Email', 'Subject', 'Details', 'helptopic', '_wysihtml5_mode', '_token');
@@ -147,13 +148,33 @@ class FormController extends Controller
$helptopic = $ticket_settings->first()->help_topic;
$sla = $ticket_settings->first()->sla;
$priority = $ticket_settings->first()->priority;
- $source = $ticket_source->where('name', '=', 'web')->first();
+ $source = $ticket_source->where('name', '=', 'web')->first()->id;
+ $attachments = $request->file('attachment');
$collaborator = null;
$assignto = null;
$auto_response = 0;
- if ($this->TicketController->create_user($email, $name, $subject, $details, $phone, $helptopic, $sla, $priority, $source->id, $collaborator, $department, $assignto, $form_extras, $auto_response)) {
- return Redirect::route('guest.getform')->with('success', 'Ticket Created Successfully');
+ $team_assign = null;
+
+ $result = $this->TicketWorkflowController->workflow($email, $name, $subject, $details, $phone, $helptopic, $sla, $priority, $source, $collaborator, $department, $assignto, $team_assign, $status, $form_extras, $auto_response);
+
+ if ($result[1] == 1) {
+ $ticketId = Tickets::where('ticket_number', '=', $result[0])->first();
+ $thread = Ticket_Thread::where('ticket_id', '=', $ticketId->id)->first();
+ if ($attachments != null) {
+ foreach ($attachments as $attachment) {
+ if ($attachment != null) {
+ $name = $attachment->getClientOriginalName();
+ $type = $attachment->getClientOriginalExtension();
+ $size = $attachment->getSize();
+ $data = file_get_contents($attachment->getRealPath());
+ $attachPath = $attachment->getRealPath();
+ $ta->create(['thread_id' => $thread->id, 'name' => $name, 'size' => $size, 'type' => $type, 'file' => $data, 'poster' => 'ATTACHMENT']);
+ }
+ }
+ }
+
+ return Redirect::route('guest.getform')->with('success', 'Ticket has been created successfully, your ticket number is '.$result[0].' Please save this for future reference.');
}
}
diff --git a/app/Http/Controllers/Common/NotificationController.php b/app/Http/Controllers/Common/NotificationController.php
new file mode 100644
index 000000000..14034e9d9
--- /dev/null
+++ b/app/Http/Controllers/Common/NotificationController.php
@@ -0,0 +1,83 @@
+user = $user;
+ }
+
+ /**
+ * get the page to list the notifications.
+ *
+ * @return response
+ */
+ public static function getNotifications()
+ {
+ $notifications = UserNotification::join('notifications', 'user_notification.notification_id', '=', 'notifications.id')
+ ->join('notification_types', 'notifications.type_id', '=', 'notification_types.id')
+ ->where('user_notification.is_read', '=', '0')
+ ->where('user_notification.user_id', '=', \Auth::user()->id)
+ ->get();
+
+ return $notifications;
+ }
+
+ public function create($model_id, $userid_created, $type_id, $forwhome = [])
+ {
+ try {
+ if (empty($forwhome)) {
+ $forwhome = $this->user->where('role', '!=', 'user')->get()->toArray();
+ }
+ //dd($forwhome);
+ //system notification
+ $notification = new Notification();
+ $UN = new UserNotification();
+
+ $notify = $notification->create(['model_id' => $model_id, 'userid_created' => $userid_created, 'type_id' => $type_id]);
+ foreach ($forwhome as $agent) {
+ $user_notify = $UN->create(['notification_id' => $notify->id, 'user_id' => $agent['id'], 'is_read' => 0]);
+ }
+ } catch (\Exception $e) {
+ return redirect()->back()->with('fails', $e->getMessage());
+ }
+ }
+
+ public function markRead($id)
+ {
+ $markasread = UserNotification::where('notification_id', '=', $id)->where('user_id', '=', \Auth::user()->id)->where('is_read', '=', '0')->get();
+ foreach ($markasread as $mark) {
+ $mark->is_read = '1';
+ $mark->save();
+ }
+
+ return 1;
+ }
+
+ public function show()
+ {
+ $notifications = $this->getNotifications();
+
+ return view('notifications-all', compact('notifications'));
+ }
+
+ public function delete($id)
+ {
+ $markasread = UserNotification::where('notification_id', '=', $id)->where('user_id', '=', \Auth::user()->id)->get();
+ foreach ($markasread as $mark) {
+ $mark->delete();
+ }
+
+ return 1;
+ }
+}
diff --git a/app/Http/Controllers/Common/SettingsController.php b/app/Http/Controllers/Common/SettingsController.php
index a7206d3d4..266bcf1a7 100644
--- a/app/Http/Controllers/Common/SettingsController.php
+++ b/app/Http/Controllers/Common/SettingsController.php
@@ -414,7 +414,7 @@ class SettingsController extends Controller
public function version_check()
{
$response_url = \URL::route('post-version-check');
- echo "