4300 Commits
Author SHA1 Message Date
FusionPBX 793d386a96 Update the version from 4.0 to 4.0.0. 2015-08-16 03:06:49 -06:00
markjcrane 4aabbab6d0 FusionPBX Official version 4.0 released. 2015-08-16 02:03:09 -06:00
markjcrane 2e6f90fb80 Fax keep local updates. 2015-08-16 02:01:37 -06:00
markjcrane 91911a10ca Add fax default setting keep_local. 2015-08-16 01:53:39 -06:00
markjcrane bdebe75d78 Fix the order by for the destinations class. 2015-08-15 23:24:57 -06:00
markjcrane 74804cea64 Give precedence to number_alias over extension in destinations class that generates the destination select list. 2015-08-15 21:49:27 -06:00
markjcrane 47921ff596 Make the destinations class easier to read. 2015-08-15 19:58:47 -06:00
markjcrane 8d3a286050 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-15 19:41:32 -06:00
markjcrane 8eacfbcb40 Change the email defaults. 2015-08-15 19:41:07 -06:00
markjcrane c1d57a7c1e update the translations 2015-08-16 01:12:05 +00:00
markjcrane c80a1b850e Add latest translation for Access Controls 2015-08-15 23:58:26 +00:00
markjcrane 2de8ac119d Fax variables for inbound, outbound, and both. 2015-08-15 15:26:16 -06:00
markjcrane 504d89dd90 Add a new fax class to make the fax dialplan. 2015-08-15 14:27:27 -06:00
markjcrane 08c4618ec2 Change the default fax_enable_t38_request to false. 2015-08-15 13:20:41 -06:00
markjcrane ed0f02a9e0 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-15 13:17:33 -06:00
markjcrane 7917c7cc8b Make the fax/app_defaults.php more efficient and add fax_enable_t38=true and fax_enable_t38_request=true. 2015-08-15 13:17:07 -06:00
reliberate 22ac756b16 Destinations: Hide Account Code field on Add/Edit of Outbound Destinations. 2015-08-15 10:41:34 -06:00
reliberate 26a810459b Destinations: Hide unrelated form elements on edit of Outbound Destination. 2015-08-15 09:07:01 -06:00
reliberate 0adcd1c0d8 Destinations (Class): Enable preferred number formatting for Destination options. 2015-08-14 20:32:56 -06:00
reliberate a4d324ac46 Destination Add/Edit: Hide irrelevant controls if Type is Outbound, dynamically set Context accordingly. 2015-08-14 18:23:49 -06:00
reliberate 1f2695c38a Minimized Theme: Adjust domain selector icon padding when logout button hidden. 2015-08-14 17:08:21 -06:00
markjcrane 772474faae Update ring group rollover so that it works like standard roll over. If busy it moves to the next line. If not busy and timeout it moves to the timeout action. 2015-08-14 15:27:48 -06:00
markjcrane 1e6d8bfa26 IVR Menu allow one of the options to override direct dial to an extension. 2015-08-14 11:26:11 -06:00
markjcrane 39d44acd1e Change type number to text to fix caller id numbers that start with a 0. 2015-08-14 10:47:15 -06:00
markjcrane 1756b6064f Fix the label for the custom select destination. 2015-08-14 10:33:18 -06:00
markjcrane 6b665af51c If select_found is false then show the custom select. 2015-08-14 10:15:31 -06:00
markjcrane c40cde7360 Change odbc-dsn to core-db-dsn for the ipv6 sip profile. Thanks DigiDaz 2015-08-14 09:55:10 -06:00
markjcrane fe904dfc1c Remove an extra line and change the console message. 2015-08-14 09:47:00 -06:00
markjcrane 5752f732b0 Fix the path to the new default setting, and the changes to the minimized theme. 2015-08-14 09:17:20 -06:00
markjcrane e9663820cc Add logout_icon_visible to theme category in default settings. 2015-08-14 09:08:57 -06:00
markjcrane 83195efcab Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-14 08:51:42 -06:00
markjcrane 54bba850a8 Add a domain link to the theme. 2015-08-14 08:51:21 -06:00
FusionPBX 2c013795c1 Merge pull request #1099 from moteus/operator_panel_number_alias
Fix. Operator panel with extension with number alias.
2015-08-14 08:35:15 -06:00
FusionPBX fe45b3c036 Merge pull request #1098 from moteus/toll_allow_forward
Set Toll Allow for call forward/follow me
2015-08-14 08:34:17 -06:00
FusionPBX 65f0ddd438 Merge pull request #1097 from moteus/toll_allow
Change. toll_allow use ordered template-list.
2015-08-14 08:33:19 -06:00
Alexey Melnichuk a4b609c746 Fix. Operator panel with extension with number alias. 2015-08-14 15:10:21 +04:00
Alexey Melnichuk f50c2a4d46 Change. Use toll_allow of extension who set follow me. 2015-08-14 13:35:50 +04:00
Alexey Melnichuk 46bbc28220 Change. Use toll_allow of extension who set call forward. 2015-08-14 13:27:47 +04:00
Alexey Melnichuk a85e7eb70a Fix. Off debug output 2015-08-14 12:26:34 +04:00
Alexey Melnichuk 0b11ab57de Change. toll_allow use ordered template-list.
Add. Russian toll_allow templates.

This needs because we need
89%d is mobile except 8940%d which one is international.
2015-08-14 12:07:38 +04:00
markjcrane 09c4dd79d0 Remove hostname on the acl memcache variable name. 2015-08-13 19:49:09 -06:00
markjcrane 966f9b9c52 ACL nodes remove the bold label for domain and cidr. 2015-08-13 18:55:13 -06:00
markjcrane d9af79d844 Don't require the description for the new access controls (ACL list). 2015-08-13 18:50:00 -06:00
markjcrane 288b3097a5 Remove domain parent which is confusion and expectations of it working in some particular way. 2015-08-13 16:55:42 -06:00
markjcrane 3f9bef47ee Abbreviation for variables are discouraged because they aren't intuitive especially for those from other languages. Replace 'ep' variable no idea what it represented to 'user' which is what freeswitch calls ans extension that you register to. 2015-08-13 11:34:48 -06:00
markjcrane b2c4ff8008 Remove and extra space. 2015-08-13 11:29:33 -06:00
FusionPBX efa6cef940 Merge pull request #1095 from moteus/extension_exists_chekc_number_alias
Fix. `extension_exists` function also check `number_alias` field.
2015-08-13 11:26:47 -06:00
FusionPBX 080e89243c Merge pull request #1096 from moteus/ext_summary_number_alias
Fix. Display CDR Extension Summary for ext with number alias
2015-08-13 11:26:02 -06:00
FusionPBX c4374178a4 Merge pull request #1093 from moteus/dnd_number_alias
Fix. Use number alias to forward call to VM when DND is on.
2015-08-13 11:25:08 -06:00
FusionPBX 0237697634 Merge pull request #1092 from moteus/logging_create_file
Fix. Create log file only if necessary.
2015-08-13 11:22:35 -06:00
Alexey Melnichuk 24bd0274f7 Fix. Display CDR Extension Summary for ext with number alias 2015-08-13 18:44:17 +04:00
Alexey Melnichuk 3301b4605c Fix. extension_exists function also check number_alias field. 2015-08-13 13:39:39 +04:00
Alexey Melnichuk 5f67be647d Fix. Use number alias to forward call to VM when DND is on (Lua part) 2015-08-13 13:14:46 +04:00
markjcrane d5592672f0 base_dir is not dependable as its irrelevant for freeswitch package installs replace it with settings['switch']['voicemail']['dir']. 2015-08-12 23:45:27 -06:00
markjcrane 27a72bfa59 Remove outbound restriction for intercept. 2015-08-12 23:38:46 -06:00
FusionPBX 72d489ec65 Merge pull request #1091 from moteus/intercept_outbound
Fix. Allow intercept only outbound calls.
2015-08-12 23:34:43 -06:00
markjcrane 47c8fb090d Add expire["acl.conf"] = "3600"; 2015-08-12 23:31:21 -06:00
markjcrane 1af143963b Remove acl.conf.xml. 2015-08-12 23:30:38 -06:00
markjcrane b44cacd07a Add acl.conf.lua to the xml handler. 2015-08-12 23:21:10 -06:00
markjcrane 47e6c57259 Add the Access Controls as the new interface for ACL Lists. 2015-08-12 23:09:07 -06:00
Alexey Melnichuk e5f311e2fa Fix. Use number alias to forward call to VM when DND is on. 2015-08-12 13:02:36 +04:00
Alexey Melnichuk 5d140effd1 Fix. Create log file only if necessary. 2015-08-12 12:44:42 +04:00
Alexey Melnichuk ce9e2cc4d1 Fix. Allow intercept only outbound calls.
Now it is possible intercept call from local extension to the world.

Fix. intercept channels also in EARLY state.

One of my softphones return 180 Ringing with SDP (no 183 Progress).
And FreeSWITCH shows such channel as `EARLY` not as `RINGING`)
2015-08-12 10:09:56 +04:00
markjcrane b439b7953f Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-11 20:57:11 -06:00
markjcrane 76dfa895dd Change the vertical grouping of script-directory. 2015-08-11 20:56:53 -06:00
FusionPBX 81003e35d8 Merge pull request #1018 from moteus/number_alias_as_vm_id
Change. Use number_alias as voicemail_id.
2015-08-11 20:43:20 -06:00
FusionPBX c4fc2f3deb Merge pull request #1070 from moteus/follow_me_ignore_busy
Add. Option to ignore busy from destination in follow me dial-string.
2015-08-11 20:40:16 -06:00
markjcrane 42d9548fac XML Handler - directory.lua change ext to username. 2015-08-11 20:36:01 -06:00
FusionPBX c117b071e6 Merge pull request #1080 from moteus/dial_number_alias
Fix. Use number_alias in dial-string.
2015-08-11 20:31:42 -06:00
FusionPBX 9087c09182 Merge pull request #1081 from moteus/number_alias_as_caller_id
Fix. Use number-alias as caller_id_number variable.
2015-08-11 20:30:19 -06:00
markjcrane 601c532013 Change '//' to '/'. This fixes a problem where its calling require when it should call dofile. 2015-08-11 20:25:34 -06:00
FusionPBX 9f4287a9b4 Merge pull request #1087 from moteus/revert-1086-revert-1053-require_config
Change. Use `require` function to load Lua libraries
2015-08-11 20:05:48 -06:00
FusionPBX 978bec7cbd Merge pull request #1088 from moteus/number_alis_group_intercept
Fix. Group intercept extension with number alias
2015-08-11 20:05:04 -06:00
markjcrane 558c82d386 Add a break to prevent call the failover bridge statement at the same time the primary bridge statement is called. 2015-08-11 13:42:46 -06:00
markjcrane 49e27b3637 Fix destination context for the destinations select list. 2015-08-11 13:24:07 -06:00
markjcrane c57b949503 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-11 13:15:28 -06:00
markjcrane b960fa00e6 Add select dialplan_context as context to fix the context for time conditions. 2015-08-11 13:13:58 -06:00
Alexey Melnichuk 4639001ca3 Fix. Include config file. 2015-08-11 14:40:02 +04:00
Alexey Melnichuk c19b6cc7ee Fix. Group intercept extension with number alias 2015-08-11 14:18:25 +04:00
Alexey Melnichuk 3e16e69adb Revert "Revert "Change. Use require "resources.functions.config" to load co…" 2015-08-11 05:06:33 +03:00
FusionPBX 1615de1358 Merge pull request #1086 from fusionpbx/revert-1053-require_config
Revert "Change. Use `require "resources.functions.config"` to load co…
2015-08-10 11:51:00 -06:00
FusionPBX 2a2dd209df Revert "Change. Use require "resources.functions.config" to load config file." 2015-08-10 11:50:29 -06:00
FusionPBX 1a29486bcc Merge pull request #1062 from moteus/win_service
Add. Support windows services.
2015-08-10 11:32:08 -06:00
FusionPBX 559aa61fbd Merge pull request #1053 from moteus/require_config
Change. Use `require "resources.functions.config"` to load config file.
2015-08-10 11:31:35 -06:00
FusionPBX f1e8e1c366 Merge pull request #1017 from moteus/no_default_domain
Change. Does not use `default` dialplan/directory.
2015-08-10 11:27:19 -06:00
markjcrane 1d6c6463e7 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-10 11:22:11 -06:00
markjcrane bec13ef258 Ring group external destinations use the | as the delimiter for fail-over. 2015-08-10 11:21:48 -06:00
FusionPBX cd21e26893 Merge pull request #1079 from moteus/temp_dir
Fix. Use `temp_dir` variable instead of hard coded `/tmp`
2015-08-10 10:25:22 -06:00
FusionPBX 983365ad41 Merge pull request #1084 from moteus/page_active_conf
Fix. Allow monitoring page conferences via `Active Conferences` app.
2015-08-10 10:23:03 -06:00
FusionPBX 9d83f9f153 Merge pull request #1083 from daniel-lucio/master
Use os.time instead of mysql native function
2015-08-10 10:22:22 -06:00
markjcrane 01ce7bdb88 Add translations for check_voicemail, company_directory and record. 2015-08-10 10:09:37 -06:00
Alexey Melnichuk d8b2ec5271 Fix. add functions/count.lua to preview commit. 2015-08-10 13:01:49 +04:00
Alexey Melnichuk 703b61636a Change. Use only require to load function.
Fix. Remove multiple definition of same function.
2015-08-10 12:43:06 +04:00
Alexey Melnichuk b5cacea373 Fix. Allow monitoring page conferences via Active Conferences app. 2015-08-10 11:43:32 +04:00
Luis Daniel Lucio Quiroz f1e082bc03 Use os.time instead of mysql native function
Odd, but on some deployments LUA wont accept unixtime stamp functions (regardless it works on CLI). So, to workaround this, lets use os.time() which it returns the same value expected.
2015-08-09 21:56:28 -06:00
markjcrane 47c09b99c6 Change $name to ${name} 2015-08-09 12:14:47 -06:00
markjcrane 16b73d63d8 Change array from ['result']['field'] to ['field']. 2015-08-09 12:00:42 -06:00
markjcrane bf8a24d5ee Add Other options to the list of destinations. 2015-08-09 11:20:08 -06:00
markjcrane 3e91d872f4 Add title-other to app_languages.php. 2015-08-09 11:02:18 -06:00
markjcrane d030b52f6d Fix the gateways list for call center agents. 2015-08-07 19:21:25 -06:00
markjcrane 07e884d494 If there is no item in the group of destinations then don't the group name. 2015-08-07 19:50:06 -05:00
markjcrane e19f459cd8 Change call_center_contact to user_contact. 2015-08-07 15:24:24 -05:00
markjcrane e9b93fd426 Remove switch_select_destination function from the remaining features that used it and replace with the destination php class. 2015-08-07 15:06:07 -05:00
markjcrane 6a767846e6 Comment out the sounds in ivr menu edit use the phrases or recordings instead. 2015-08-07 14:38:33 -05:00
markjcrane ce93da056b Increase the memory efficiency and page load time for IVR Menu edit. 2015-08-07 14:34:58 -05:00
markjcrane 3857b04be0 Convert ring groups to use the new php class. 2015-08-07 14:30:29 -05:00
markjcrane 1238d109c6 Remove and extra line and add creation of the object. 2015-08-07 14:25:49 -05:00
markjcrane fac705c1a8 Update voicemail to use the destination php class. 2015-08-07 14:24:58 -05:00
markjcrane 5d457205f6 Move call flows to the new destinations class. 2015-08-07 14:10:24 -05:00
markjcrane bf96d4afc1 Add the missing echo. 2015-08-07 13:39:25 -05:00
markjcrane 4366aa083a Use the new destinations php class for ivr menu and destinations. 2015-08-07 13:13:55 -05:00
Alexey Melnichuk b97ae86283 Fix. Use number-alias as caller_id_number variable. 2015-08-07 16:17:25 +04:00
Alexey Melnichuk bfa72cc78a Fix. Use number_alias in dial-string. 2015-08-07 15:18:52 +04:00
Alexey Melnichuk 630d9e020c Fix. Always use / separator on FS command.
Fix. Override `temp_dir` from `config.lua` file.
2015-08-07 12:11:27 +04:00
Alexey Melnichuk 785136eca9 Fix. Use temp_dir variable instead of hard coded /tmp 2015-08-07 11:52:18 +04:00
markjcrane 181ab435a8 Add a missing 'and' in the SQL query. 2015-08-06 23:21:10 -05:00
markjcrane ef24c2178e Add an empty select option and finish moving to $this->destinations array. 2015-08-06 15:30:43 -05:00
markjcrane d590df4b61 Make time condition use the new destinations class. 2015-08-06 15:24:42 -05:00
markjcrane 8319533034 Move the destinations array generation into the constructor and add selected support. 2015-08-06 12:11:26 -05:00
markjcrane c4bd1a0e72 Use the same array consistently. 2015-08-06 00:25:38 -05:00
markjcrane cb31af2fc5 Escape the $ for $domain_uuid. 2015-08-06 00:14:46 -05:00
markjcrane b04e958d5b Change domain_name to domain_uuid. 2015-08-06 00:13:57 -05:00
markjcrane 15ca076e09 Escape the $ in the domain_uuid variable. 2015-08-05 18:17:39 -05:00
markjcrane 51169dd358 Remove the round brackets. 2015-08-05 17:30:18 -05:00
markjcrane 88f4348be2 Add the database connection. 2015-08-05 17:24:37 -05:00
markjcrane c128c0fc71 A few minor adjustments to the new class. 2015-08-05 17:02:34 -05:00
markjcrane a3a1d4a1dd Initial commit a new php destinations class. Builds a list of destinations dynamically. Typically this contains extensions, ivr menus, ring groups, voicemail and more. 2015-08-05 16:43:22 -05:00
Alexey Melnichuk 2f6994a9ce Fix. Empty comma in dialstring 2015-08-05 13:41:27 +04:00
markjcrane 5c8a6dd7fe Add destination details to several app_config.php files. 2015-08-04 14:52:10 -06:00
markjcrane 7878b0efa8 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-03 18:45:11 -06:00
markjcrane 12f9560595 Add title-call_groups to app/extensions. 2015-08-03 18:42:16 -06:00
Rich Breton 394df070af Merge pull request #1072 from fusionpbx/T46g-template-dhcp-fix
T46g-template-dhcp-fix
2015-08-03 17:03:30 -06:00
Rich Breton 8c65a4dafd T46g-template-dhcp-fix 2015-08-03 17:03:07 -06:00
markjcrane 64e70ed2d9 Add title-call_centers. 2015-08-03 16:36:59 -06:00
markjcrane f1c43c3ea8 Update the menu to use the app/call_centers directory. 2015-08-03 16:12:12 -06:00
markjcrane a59f0377c3 Change app/call_center to app/call_centers. 2015-08-03 16:09:38 -06:00
markjcrane 1ee7961a90 Change 'title' to 'title-recordings' 2015-08-03 16:05:22 -06:00
markjcrane 2b89eaedc8 Change title-time-conditions to title-time_conditions. 2015-08-03 15:53:48 -06:00
markjcrane ac09ce2a02 Change title_phrases to title-phrases. 2015-08-03 15:52:39 -06:00
markjcrane c2ddc91a4f Change the label 'title' to 'title-ring_groups' 2015-08-03 15:46:44 -06:00
markjcrane 73d62546a4 Make the title-<app name> more consistent. Use underscore in the label name instead of a dash. Dash is used between label type and the label name. 2015-08-03 15:17:05 -06:00
markjcrane c8f87ac7e2 Move the email settings into default settings app_defaults.php. 2015-08-03 10:11:41 -06:00
markjcrane 84a97b52fa To be more consistent with naming convention rename app/ivr_menu to app/ivr_menus. 2015-08-03 09:43:15 -06:00
markjcrane 3ee1fb0513 Remove smtp settings entirely from app/settings. 2015-08-03 09:41:58 -06:00
markjcrane 30a33d84b7 Remove the insert to v_settings as this is being done in app_defaults.php. 2015-08-03 09:32:48 -06:00
markjcrane ed49b0fd51 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-08-02 23:43:53 +00:00
root fead5df810 Add latest translations 2015-08-02 23:42:11 +00:00
markjcrane a1fdd5c220 Fix a problem with custom public context and XMl handler. 2015-07-31 21:03:22 -06:00
markjcrane 66aa2ee0a0 Change extension_context to extension_user_context in one location that was missed. 2015-07-31 10:58:38 -06:00
markjcrane 3725a83df2 When writing the call center conf file use the .noload template file. 2015-07-31 10:05:04 -06:00
markjcrane 905c68bfad Add a new permission extension_user_context. 2015-07-31 09:37:53 -06:00
markjcrane 82cd26486b Change else if to elseif on extension_edit.php 2015-07-31 09:18:27 -06:00
markjcrane a181b9f779 Allow 0 to be set for numbers for Call Center Queues. 2015-07-31 09:02:26 -06:00
markjcrane b4f1222565 Simplify the code for the call center dialplan. 2015-07-30 21:06:30 -06:00
FusionPBX 851f6bb9f6 Merge pull request #1063 from moteus/call_center_dialplan_uuid
Fix. Override dialplan_uuid.
2015-07-30 20:56:20 -06:00
markjcrane 173e9ca691 Fix fax_retry.lua for domain_name and domain_uuid. Add [FAX] to the logging to the console. 2015-07-30 19:32:18 -06:00
markjcrane b2595d4713 Add accountcode, domain_name and domain_uuid for fax forward. 2015-07-30 19:07:16 -06:00
markjcrane 22b8649fa3 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-07-30 17:18:53 -06:00
reliberate 85c971eec8 Menu: Updated code to create menu HTML from array, instead of database directly. 2015-07-30 11:49:51 -06:00
Alexey Melnichuk 85d3c1346d Add. Option to ignore busy from destination in follow me dial-string. 2015-07-30 16:21:50 +04:00
Alexey Melnichuk 2b98c86050 Fix. Can not enable follow me via *21 if it was disabled via web.
Problem is that php code clear `dial_string` field in DB.
And Lua code on enable try use it.
2015-07-30 11:48:01 +04:00
markjcrane b9183fddde Remove get user defined variables from advanced -> variables should use default or domains settings instead. 2015-07-28 11:30:28 -06:00
markjcrane 8a0a149a1d Remove the old default and even older classic themes. 2015-07-28 11:19:22 -06:00
markjcrane 5af837466d Adjust the vertical line spacing to make it more consistent with the rest of the project. 2015-07-28 11:18:20 -06:00
markjcrane ac734e6140 The email_validate is a generic function so moving it to resources/functions.php. 2015-07-28 11:17:33 -06:00
markjcrane 9506d9c655 Remove code that is no longer being used. 2015-07-28 11:12:42 -06:00
markjcrane 3f4a674364 Change the indentation. Add a conditional include. 2015-07-28 10:42:07 -06:00
Alexey Melnichuk 565395c44f Fix. Correct path when user on group_confirm_file 2015-07-28 15:59:04 +04:00
markjcrane e255e7eb0c Change from if_group to if_permission which is preferred in most cases. 2015-07-27 14:57:37 -06:00
markjcrane e6ff9576ce Add a permission check to core/domain_settings/domain_edit.php. 2015-07-25 22:52:57 -06:00
markjcrane 82a61ed614 Simplify adding items to the domains array. 2015-07-25 17:44:56 -06:00
markjcrane 63e35e2278 Organize the device profiles according to the key vendor. 2015-07-25 07:57:07 -06:00
markjcrane a0bf30e2c6 Domain name edit only perform the actions if the features are installed. 2015-07-24 14:05:02 -06:00
markjcrane 089f270957 Only include if the domain_setting_edit permission has been assigned to the current user. 2015-07-24 08:59:13 -06:00
Alexey Melnichuk 19d05b3aed Fix. Override dialplan_uuid. 2015-07-24 14:46:31 +04:00
Alexey Melnichuk 6f28a7123b Add. Support windows services. 2015-07-24 11:26:11 +04:00
markjcrane 9e24112904 Remove setting the domain array again as its redundant. 2015-07-23 17:51:39 -06:00
markjcrane d8c9c3910f Remove trailing tabs. 2015-07-23 17:50:16 -06:00
markjcrane 09886a63a7 Remove one trip to the database. 2015-07-23 14:03:24 -06:00
markjcrane d676c5ee17 Fix a problem with groups not showing up on PHP 5.5.9. 2015-07-22 16:02:06 -06:00
markjcrane 32b782d3f0 Prevent nil errors in settings.lua. 2015-07-22 09:42:35 -06:00
Alexey Melnichuk 3da348fff0 Change. Use require "resources.functions.config" to load config file.
Change. Move `script_dir` definition into config file.
2015-07-22 13:20:51 +04:00
markjcrane 3692c1deb8 Move the 'show application' completely out of the content. Then save the result in a session variable $_SESSION['switch']['applications']. 2015-07-21 09:47:23 -06:00
FusionPBX 3473c580d6 Merge pull request #1048 from moteus/dialplan_edit_without_fs
Fix. Edit dialplan without running FS may load too long.
2015-07-21 09:33:39 -06:00
Alexey Melnichuk 26fe054581 Fix. Edit dialplan without running FS may load too long. 2015-07-21 11:44:13 +04:00
Alexey Melnichuk 953462f400 Merge branch 'master' into no_default_domain
Conflicts:
	app/hot_desking/extension_edit.php
2015-07-21 11:24:59 +04:00
Alexey Melnichuk c556498dae Fix. remove hot_desking app. 2015-07-21 11:22:16 +04:00
Alexey Melnichuk 57808740ef Merge branch 'master' into number_alias_as_vm_id
Conflicts:
	app/hot_desking/extension_edit.php
2015-07-21 11:19:13 +04:00
FusionPBX a214b57f81 Merge pull request #1047 from moteus/page_concat_conf_name
Fix. Concat conf name in page.lua
2015-07-20 16:52:23 -06:00
markjcrane 4a55588898 Remove xml and json from the select list as its horribly inefficient. Move accountcode outside of billing as that may be used by others using the account code. 2015-07-20 15:34:23 -06:00
markjcrane b8f9b423c7 Improve code to update the scripts directory. 2015-07-20 15:32:52 -06:00
markjcrane 6f9eb6ab29 After call forward has been set with feature code *72 or *74 play back the number that call forward is set to. 2015-07-20 12:59:45 -06:00
markjcrane 4fc2bbaa9f Voicemail to email send the email in the send_email.lua rather than with email.lua. So that the delete doesn't occur until after email is sent. 2015-07-20 11:40:31 -06:00
Alexey Melnichuk 4b30e652b4 Fix. Concat conf name in page.lua 2015-07-20 12:44:05 +04:00
FusionPBX b689e726a4 Merge pull request #1013 from moteus/issues_1008
Disable of sip profile does not work
2015-07-18 13:08:10 -07:00
FusionPBX 45a15a3f83 Merge pull request #1038 from moteus/odbc-db-type
Change. Use odbc connector if there exists odbc database
2015-07-18 13:03:59 -07:00
FusionPBX 11cb15fc88 Merge pull request #1021 from moteus/show_reg_force_domain
Fix. Show registrations to sip profile with force-XXX-domain.
2015-07-18 12:57:10 -07:00
FusionPBX 861e545541 Merge pull request #1037 from moteus/copy_voice_mail
Fix. Use OS specific copy function.
2015-07-18 12:55:05 -07:00
FusionPBX 59e4f6b91f Merge pull request #1023 from moteus/ext-dial-string
Fix. Use extension to generate dial-string in xml_handler
2015-07-18 12:54:24 -07:00
FusionPBX 1423dd953b Merge pull request #1036 from moteus/remove_debug_output
Fix. Remove debug output.
2015-07-18 12:52:17 -07:00
FusionPBX ed186836e2 Merge pull request #1014 from moteus/domain_name_on_install
Add. Allow edit domain name while installing.
2015-07-18 12:50:52 -07:00
FusionPBX 6bf0404e5d Merge pull request #1015 from moteus/remove_feature_context
Remove using `feature` context.
2015-07-18 12:48:41 -07:00
FusionPBX 064f73aa70 Merge pull request #1045 from moteus/page_domain
Page domain
2015-07-18 12:47:55 -07:00
FusionPBX 8e989c7fb6 Merge pull request #1040 from moteus/vm-phrase
Change. Use predefined phrases in vm menu.
2015-07-18 12:45:34 -07:00
FusionPBX 5ebee5d19e Merge pull request #1046 from moteus/temp_dir_dialplan
Fix. Use `temp_dir` to debug dialplan xml file
2015-07-18 12:42:50 -07:00
FusionPBX 5c14e56dbe Merge pull request #1032 from moteus/win-send-fax
Fix. Send fax via web on Windows.
2015-07-18 12:41:31 -07:00
markjcrane f2bca9ce5f Remove minute from time conditions as its better to use one of the other options. 2015-07-18 12:20:09 -07:00
markjcrane aed3b4f9d8 Prevent duplicate call center dialplans. 2015-07-18 11:17:15 -07:00
markjcrane 72037fc19e Fix the sip profile loading during the install or when using app -> defaults. 2015-07-16 12:34:01 -07:00
Alexey Melnichuk 61f5e77cfb Fix. Use temp_dir to debug dialplan xml file 2015-07-16 12:56:13 +04:00
Alexey Melnichuk 78541b67ce Fix. Use correct conf name on originate 2015-07-16 12:11:57 +04:00
Alexey Melnichuk 8fbbbda5a4 Fix. Make page extension domain specific. 2015-07-16 11:50:07 +04:00
markjcrane 262737828c Enable XML Handler by default. 2015-07-15 23:43:03 -07:00
Alexey Melnichuk 3a805e1870 Change. Use predefined phrases in vm menu.
Current implementation produces not correct phrases e.g. on Russian language.
2015-07-14 13:42:05 +04:00
Alexey Melnichuk 243dffe949 Change. Use odbc connector if there exists odbc database
It needs because on windows FreeSWITCH builds without native support PostgreSQL.
2015-07-13 15:04:33 +04:00
Alexey Melnichuk acec54be57 Fix. Use OS specific copy function. 2015-07-13 10:44:47 +04:00
Alexey Melnichuk 3c394e8fc3 Fix. Remove debug output. 2015-07-13 10:42:14 +04:00
FusionPBX 4f0a57ac7d Merge pull request #1016 from moteus/xml_cdr_escape
Fix. Escape `<>` in all fields in CDR xml.
2015-07-10 08:58:13 -03:00
FusionPBX a6d8f7068c Merge pull request #1012 from moteus/issues_1006
Use long string syntax to generate `config.lua` file.
2015-07-10 08:56:32 -03:00
markjcrane 63c6031da6 Change 'is null' to 'is not null'. 2015-07-10 08:00:08 -03:00
markjcrane f0d90fd1e0 Fix the call center dialplan so that it does not create duplicates using the new call center class. 2015-07-09 10:48:01 -03:00
Alexey Melnichuk a6440ac0aa Fix. Send fax via web on Windows.
* tiffXXX utils did not work with paths like `C:/xxx/ddd.tif`
 * using `gswin32c` instead of `gs`
 * using `copy` function instead of `cp` command
2015-07-09 16:12:27 +04:00
markjcrane 55b04e9d4d Fix the dialplan_uuid for call center dialplan. 2015-07-09 01:01:12 -03:00
markjcrane b92448366d Fix the call center timeout action for the dialplan. 2015-07-09 00:54:27 -03:00
markjcrane c5a1139342 Change {#server_address_2} to {$server_address_2} for the GX42xx template. 2015-07-09 00:05:29 -03:00
markjcrane ec532e8d12 Play voicemail messages with the newest messages first. 2015-07-08 15:46:34 -03:00
markjcrane c0a6c121f2 Prevent nil from causing problems with functions/settings.lua. 2015-07-08 15:36:33 -03:00
markjcrane d140e264ef This Hot desking has been moved to optional Apps directory. It is now considered to be deprecated and replaced by a better feature. 2015-07-08 12:10:17 -03:00
markjcrane db84e4d8ec Remove trailing spaces and adjust the vertical spacing. 2015-07-08 09:30:00 -03:00
markjcrane 62a11caa62 Don't override the device vendor type. 2015-07-08 01:43:52 -03:00
markjcrane 358ff5844b Add device key type column add the vendor name. 2015-07-08 01:41:24 -03:00
markjcrane ad3145ba19 Add several provision default settings. 2015-07-07 18:07:25 -03:00
markjcrane 2838d29a89 Change the table name from device lines to keys. 2015-07-07 14:44:14 -03:00
markjcrane 02664f02a7 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-07-07 14:31:08 -03:00
markjcrane f52f7999a0 Add device key vendor to assign a key to a vendor. 2015-07-07 14:25:00 -03:00
Alexey Melnichuk fec3b0f14c Fix. xml_handler/directory generate vm params based on number_alias 2015-07-07 18:16:21 +04:00
Alexey Melnichuk 1d5bb75f2d Fix. Use extension to generate dial-string in xml_handler
When uses number_alias contact should be searched by extension name.
2015-07-07 17:47:50 +04:00
Alexey Melnichuk 3e8284c36e Use existed variable. 2015-07-07 13:46:25 +04:00
Alexey Melnichuk 86a961e46b Fix. Show registrations to sip profile with force-XXX-domain.
When on profile set `force-register-db-domain` realm on xmlstatus is just IP but user is like 101@domain.name.
2015-07-07 13:39:57 +04:00
Rich Breton 60706b6278 Update README.md
Added some info to make it less confusing
2015-07-06 19:37:18 -06:00
markjcrane a46295a4f2 The extension_password permission is not needed on the field name as the password is auto-generated. Because of this its only needed on the update. 2015-07-06 12:15:03 -06:00
markjcrane 44245e760f Add AR eg translation. 2015-07-05 23:13:46 -06:00
markjcrane c4ded231f9 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-07-05 23:11:29 -06:00
markjcrane e522fbf8ae Adjustments to event_socket_request to make it faster. 2015-07-05 23:08:10 -06:00
Rich Breton 76f4a4e1ee Update README.md
Adding more clarification for contributions
2015-07-05 01:01:37 -06:00
FusionPBX 410cb1a268 Update confirm.lua
Add a domain_name nil check.
2015-07-04 04:16:44 -06:00
markjcrane 41f052901f Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-07-03 09:52:36 -06:00
markjcrane 8b3c4ca914 Use originate_delay_start to fix the enterprise ring group delay. 2015-07-03 09:51:02 -06:00
Rich Breton 00bc718f2b Update README.md
Added formatting to the Contributing section
2015-07-03 09:36:17 -06:00
Rich Breton e63ca5f0f5 Update README.md
Added contributing section to explain why we require a CLA
2015-07-03 09:35:30 -06:00
Rich Breton 8d7832768b Update README.md
Updating the readme to put in some more info to help people understand the project and get going
2015-07-03 08:54:10 -06:00
reliberate 4dfc24d1bd Upgrade: Undo test commit. 2015-07-02 22:17:02 -06:00
reliberate 948b9a73de Test: Commit change to test Advanced > Upgrade changes. 2015-07-02 21:47:59 -06:00
reliberate f4ef721edc Merge branch 'master' of https://github.com/fusionpbx/fusionpbx 2015-07-02 21:26:59 -06:00
reliberate 39ff3bee5a Upgrade: Better handle Git response. 2015-07-02 21:25:45 -06:00
reliberate 911036c6ae Upgrade: Remove invalid ampersands. 2015-07-02 21:15:43 -06:00
reliberate 73f2c21674 Upgrade: Converted Advanced > Upgrade to use Git instead of SVN (untested).
Misc: Added provisions elsewhere to account for .git/* files, as currently done with .svn/* files.
2015-07-02 17:25:41 -06:00
Rich Breton e7051129ac initial commit of README for GitHub 2015-07-02 16:29:20 -06:00
reliberate 0f9f7850ee Undo: Commit test. 2015-07-02 16:24:01 -06:00
reliberate 902f8f9019 Merge branch 'master' of https://github.com/fusionpbx/fusionpbx
Conflicts:
	root.php
2015-07-02 16:23:11 -06:00
reliberate dddefb7b42 Undo: Test commit. 2015-07-02 16:16:33 -06:00
reliberate 0cff228558 Test commit. 2015-07-02 15:42:09 -06:00
Alexey Melnichuk 130394ff01 Use non greedy match. 2015-07-02 19:12:12 +04:00
Alexey Melnichuk 90d91c8b5a Fix. Escape <> in all fields in CDR xml.
When using redirect cdr also can contain e.g. `sip_redirect_contact_0` / `sip_redirected_to`.
I use `preg_replace_callback` to proceed all fields.
May be it more correct use urlencode because if we get xml with non UTF8 char we lost CDR.
```php
$xml_string = preg_replace_callback("/<([^><]+)>(.*?)<\/\g1>/",
	function ($matches) {
		// var_dump($matches);
		return '<' . $matches[1] . '>' .
			urlencode($matches[2]).
		'</' . $matches[1] . '>';
	},
	$xml_string
);
```
2015-07-02 19:08:48 +04:00
Alexey Melnichuk cdc4b670d2 Change. Use number_alias as voicemail_id. 2015-07-02 18:49:58 +04:00
Alexey Melnichuk 5059613a40 Change. Does not use default dialplan/directory.
I think it more consistent that it allows edit domain in single place.
Also on my Windows machine while installing all users/context creates not in `default` directory.
And I have problem because remove users did not work, `default.xml` file contain `$${v_domain}` variables.
2015-07-02 13:14:35 +04:00
Alexey Melnichuk 526b6e6b7f Remove using feature context.
Default dilplan context contains all needed extension to does not use `feature` context.
2015-07-02 12:35:34 +04:00
Alexey Melnichuk f04798654a Fix. indent. 2015-07-02 12:24:58 +04:00
Alexey Melnichuk 0825eba324 Add. Allow edit domain name while installing.
On my Windows machine default domain now is `127.0.0.1` which is quite useless.
2015-07-02 12:21:53 +04:00
Alexey Melnichuk e97ab47c98 Disable of sip profile does not work
Close #1008
2015-07-02 12:09:09 +04:00
Alexey Melnichuk a7eb1f12d0 Use long string syntax to generate config.lua file.
Close #1006
2015-07-02 11:39:48 +04:00
FusionPBX c4f1221015 Update app_menu.php
Correct the ordinal value of login and logout menu array.
2015-07-02 00:17:15 -06:00
Mark Crane cafc371c88 Fix a problem where the inbound context has public in the name with public@ as a prefix and .public as a suffix. 2015-06-30 18:42:52 +00:00
Mark Crane f994329edb FAX sure domain_uuid is set at the right time. 2015-06-30 18:01:30 +00:00
Mark Crane 21f02c4042 Add translations for Logout that I had access to. 2015-06-30 17:21:11 +00:00
Mark Crane 2788d69ded Move the Login and Logout items in the menu to a location that is accessible to the translation server. 2015-06-30 17:11:39 +00:00
Mark Crane b6c93351eb Add latest translations 2015-06-30 16:30:02 +00:00
Mark Crane 8356f9ffe3 Prevent a fax problem when current user is in both the admin and also in the user group. 2015-06-30 15:35:23 +00:00
Mark Crane 2448a092b0 Add latest translations 2015-06-30 13:30:02 +00:00
Mark Crane fb9a2bc9b6 Add latest translations 2015-06-30 12:30:02 +00:00
Mark Crane 0480048950 Add latest translations 2015-06-30 11:30:02 +00:00
Mark Crane 4681c145b4 Add latest translations 2015-06-30 10:30:02 +00:00
Mark Crane f438ccef0f Add latest translations 2015-06-29 22:30:02 +00:00
Mark Crane fd027f91e7 Add latest translations 2015-06-29 21:30:03 +00:00
luis daniel lucio quiroz b22d8a78f7 little typo 2015-06-29 19:03:06 +00:00
luis daniel lucio quiroz 96189ed7a4 add a condition, not everybody may need the fix 2015-06-29 18:57:03 +00:00
Mark Crane 0da20b3f4e Add latest translations 2015-06-29 18:30:03 +00:00
Mark Crane 683ba25ec8 Fix the default setting language code select box so that it displays the current value accurately. 2015-06-29 07:52:21 +00:00
Mark Crane c44bf38f7e Add latest translations 2015-06-29 03:19:56 +00:00
Mark Crane 639c051288 Add transaction support to menu and users app_defaults.php. 2015-06-25 21:25:22 +00:00
Mark Crane d4333c2a75 Add transaction support to dialplan import. 2015-06-25 21:10:50 +00:00
Mark Crane 31dd57bffe Add beginTransaction and commit to speed up the install and upgrade. 2015-06-25 21:00:15 +00:00
Mark Crane 42a06f13f5 SIP profiles comment and disable the following params inbound-use-callid-as-uuid and outbound-use-callid-as-uuid if set to true even temporarily they will cause the call UUID not to be a UUID which FusionPBX is dependent on. 2015-06-25 20:27:00 +00:00
Mark Crane b1556926eb Correct the dialplan detail tag for the call center dialplan. 2015-06-25 09:46:27 +00:00
Mark Crane fc3974f557 Write the call center dialplan with the new call center class. 2015-06-25 08:25:00 +00:00
Mark Crane 88ef7714b5 Minor adjustments for confirm.lua and ring groups ensure domain_name and domain_uuid are set. 2015-06-24 19:31:53 +00:00
luis daniel lucio quiroz 8e527ff817 caller id fixed 2015-06-24 16:49:07 +00:00
Mark Crane f2bbf183fa Add the call screen recording to work with call forward and follow me. 2015-06-23 23:41:15 +00:00
Mark Crane 1dede161c4 Change the call screen recording name. 2015-06-23 23:16:55 +00:00
Mark Crane 6091bd005f Change the filename reference to file and the caller id number to the call uuid. 2015-06-23 22:19:46 +00:00
Mark Crane 63705169bb Add call_direction inbound filter and inline true. 2015-06-23 21:57:31 +00:00
Mark Crane 242e26c746 Change call_screen to call_screen_enabled. 2015-06-23 21:21:50 +00:00
Mark Crane f01988c84d Fix the the syntax so the default will work correctly. 2015-06-23 21:13:22 +00:00
Mark Crane fbb6576901 Add call_screen_enabled to the extension insert, update and then set the default to false. 2015-06-23 20:42:26 +00:00
Mark Crane ad34763c8d Set call_screen_enabled as a variable in directory.lua. 2015-06-23 20:33:22 +00:00
Mark Crane 1510c1c631 Add extension_call_screen permission, and add call_screen_enabled to extensions/extension_edit.php. 2015-06-23 20:06:44 +00:00
Mark Crane 209fa831a7 Add call_screen_enabled to extension_edit.php. 2015-06-23 19:59:51 +00:00
Mark Crane 574c63a83a Add call_screen_enabled to the database and add the lable for translations. 2015-06-23 19:58:07 +00:00
Mark Crane 517eab93c0 Add dialplans needed for call screening. 2015-06-23 19:48:40 +00:00
Mark Crane e8d45ff480 Move extension devices up on the page to make it more convenient for configuring devices. 2015-06-23 19:43:12 +00:00
Mark Crane e2afcf857d Update the phrases in en/us/ivr/sounds.xml. 2015-06-23 19:37:09 +00:00
Mark Crane 536a2fd827 Add latest translations 2015-06-22 22:30:03 +00:00
Mark Crane 93e788399a Add menu array to the menu class. 2015-06-22 17:56:40 +00:00
Mark Crane 9bb10da76d Add latest translations 2015-06-22 09:30:02 +00:00
Mark Crane ab25689fef Add latest translations 2015-06-22 08:30:02 +00:00
Mark Crane c703ec09a2 Remove call center log table and remove redundant semi-colons. 2015-06-21 05:43:06 +00:00
Mark Crane a9bc524330 Add latest translations 2015-06-20 12:30:02 +00:00
Mark Crane dbee568624 Add latest translations 2015-06-20 11:30:02 +00:00
Mark Crane 2f9dd5f1e0 A few more adjustments to get the ring group missed call working. 2015-06-20 04:06:20 +00:00
Mark Crane 140af2ffa2 Add missed call option to ring groups. 2015-06-20 03:43:38 +00:00
Nate Jones 611b308d9e Ring Groups: Added Missed Call notification interface.
Extensions: Removed unnecessary echoes.
2015-06-19 16:33:05 +00:00
Mark Crane 5a58a9c3d4 Add auto_insert_enabled to the provision variables in default settings. 2015-06-19 15:54:13 +00:00
Mark Crane 72191ac270 Add latest translations 2015-06-19 15:30:03 +00:00
Mark Crane 50eca991c2 Add latest translations 2015-06-19 14:30:02 +00:00
Mark Crane b825f35fee Add latest translations 2015-06-19 01:30:02 +00:00
Mark Crane 6252e5bfb0 Fix call center xml handler domain. 2015-06-18 20:08:54 +00:00
Mark Crane 7cec657e76 Add a missing quote fixes a problem with call center using xml handler and fix the indentation. 2015-06-18 19:25:42 +00:00
Mark Crane 0bcea327b9 Add a missing quote fixes a problem with call center using xml handler. 2015-06-18 19:20:51 +00:00
Mark Crane 64772fa2bb Add latest translations 2015-06-18 08:30:02 +00:00
Mark Crane 9e6b33267b Add latest translations 2015-06-18 07:30:02 +00:00
Mark Crane cbb81d43f4 When dialing *74 clear the call forward destination which will allow it to set a new one with *73. 2015-06-18 06:55:46 +00:00
Mark Crane 36537afe27 Might save time fix the syntax by adding the missing " and leave the wrong characters that will make it obvious that it needs to be redone. 2015-06-16 01:49:17 +00:00
Mark Crane 7f1602df48 Remove some of the invalid characters from notifications/app_languages.php that occurred from converting the file from ANSI to UTF-8. 2015-06-16 01:44:11 +00:00
Mark Crane c296880fff Add variable for Ring Group Distinctive Ring ${domain_name} and ${local_ip_v4} 2015-06-15 23:26:02 +00:00
Mark Crane 6654507706 Add latest translations 2015-06-15 19:30:00 +00:00
Mark Crane b64c850a9a Sync the recent translations 2015-06-13 05:35:54 +00:00
Mark Crane 5bc0ccd7ed Fix the domain filter on provisioning. 2015-06-11 17:42:47 +00:00
Mark Crane 9f787925dc Help with NAT keep alive. 2015-06-11 17:38:06 +00:00
Mark Crane 83daf1ed73 When leaving a voicemail use the message_waiting function. 2015-06-11 06:31:10 +00:00
Mark Crane f80bc84639 Use the mwi_account under accounts -> extensions to allow sending MWI to multiple extensions. 2015-06-11 06:30:21 +00:00
luis daniel lucio quiroz 5a168e3779 load balancing fixed 2015-06-11 01:43:30 +00:00
Mark Crane bf15ad6e8b Unhide mwi_account again. 2015-06-11 00:17:27 +00:00
Nate Jones 5992912abe IVR Menu: Invalid Sound not required. 2015-06-08 20:55:38 +00:00
Mark Crane 6ed42f4a9c Improve vertical line spacing. 2015-06-08 18:11:56 +00:00
Mark Crane fb87aac5db Set fax_enable_t38_request to false solves problem with 'Called dropped prematurely' 2015-06-08 17:54:49 +00:00
Mark Crane c33995d84b Add ring_group_distinctive_ring to the destinations array. 2015-06-07 16:26:53 +00:00
Mark Crane 83e4bbc1d1 Change the type from numeric to text. 2015-06-07 05:46:00 +00:00
Mark Crane 8d71798eeb Add a prefix of Alert-Info= 2015-06-07 04:10:41 +00:00
Mark Crane 7cdddbf5d0 Add ring group distinctive ring option to the lua. 2015-06-07 04:06:39 +00:00
Mark Crane 2b69ac00d7 Synchronize the translations. 2015-06-06 02:37:26 +00:00
Mark Crane 076f842993 Operator Panel - Change the file type from ANSI to UTF-8 without BOM. will need to re-translate several of the languages. 2015-06-06 02:25:16 +00:00
Mark Crane b316de986f Fix ring group form save change distinctive_ring to ring_group_distinctive_ring. 2015-06-05 17:44:12 +00:00
luis daniel lucio quiroz e51c6a925b little space, nothing special 2015-06-05 16:10:55 +00:00
Mark Crane 3de401da03 Fix hold music when used with Conference Center and XML Handler. 2015-06-04 22:43:46 +00:00
Nate Jones ec9bf926a5 Default Settings: Prevent wrapping on button controls at the top-right. 2015-06-04 16:10:18 +00:00
Mark Crane e5d7debabe Fix the syntax in app/ring_groups/app_languages.php 2015-06-04 15:12:06 +00:00
Mark Crane 16280cb10c Conver this file to UTF without BOM 2015-06-04 15:10:02 +00:00
Mark Crane 655b056492 Add new text in english for ring group distinctive ring. 2015-06-04 05:29:17 +00:00
Mark Crane 167599cf62 Sync the translations for ring groups. 2015-06-04 05:26:12 +00:00
Mark Crane 57e23c331b Fix outbound dialplan when using a transfer. 2015-06-03 07:11:05 +00:00
Nate Jones c2157600b2 Device: Swap Alternate and Vendor field locations. 2015-06-02 22:25:43 +00:00
Nate Jones 9b3aecda15 Extension: Hide MWI Account field till functionality restored. 2015-06-02 21:51:15 +00:00
Nate Jones 08b0bcf050 System Variables: Adjust Hostname cell style. 2015-06-02 21:33:43 +00:00
Mark Crane f76c3944c4 Add imap_errors() the fax/fax_emails.php to make it possible to see IMAP connection problems. 2015-06-01 22:44:28 +00:00
Mark Crane 09ea679bdb If Remote Inbox Subject Tag is not set then check the local fax files. 2015-06-01 21:21:33 +00:00
Mark Crane 4ec6c893c1 Account for the fact that mb_strtolower is not always available. 2015-06-01 04:54:21 +00:00
Mark Crane e49a437967 Set the domain_uuid as hidden for devices when device_domain is not assigned. 2015-05-31 04:43:02 +00:00
Mark Crane 2536d8a9de Seems that Polycom needs this set to 1. 2015-05-31 04:12:09 +00:00
Mark Crane b9d1395b14 If gateway type is transfer then use action transfer. 2015-05-31 03:34:37 +00:00
luis daniel lucio quiroz 7b5b36ffa0 mod_verto xml handler support 2015-05-30 22:14:01 +00:00
Mark Crane 227faa2489 More work to make domain names case insensitive. 2015-05-30 20:59:11 +00:00
Mark Crane 8f2c82bbac Minor version update for the development branch updated to 3.9.0. 2015-05-30 20:33:12 +00:00
Mark Crane d060fd8b70 Sync the changes to fix conference recording from the dev branch. Add a few comments and make the indentation consistent. 2015-05-30 20:32:01 +00:00
Mark Crane c65187284a Improve the indentation. 2015-05-30 20:19:36 +00:00
Mark Crane 6a22c5d919 Polycom add feature.broadsoftUcOne.enabled="0" to disable a default that created an error. 2015-05-30 20:17:44 +00:00
Mark Crane da40f90cc1 Reduce the security footprint, number of files, and bandwidth used by removing the template engines that are not being used. They can be added at any time if we need to use them in the future. 2015-05-30 15:35:13 +00:00
Mark Crane 4a85e9e33a Add an option for a default setting that uses provision -> auto_insert_enabled type: boolean value: true.
This will not be set by default so the provision auto insert will be disabled by default.
2015-05-30 07:35:50 +00:00
Mark Crane adae336c01 Change always reboot on sync for Polycom to false. 2015-05-30 05:08:55 +00:00
Mark Crane e969555a46 A little more polish for this feature. 2015-05-30 04:50:19 +00:00
Mark Crane a761e12bec Contact timer change the color to a comfortable blue. 2015-05-29 07:07:18 +00:00
Mark Crane 0bd5391e34 Add the api object to the failur handler. 2015-05-29 05:53:02 +00:00
Mark Crane 4c45d7d457 Update failure handler with the necessary changes for missed calls. 2015-05-29 05:46:21 +00:00
Mark Crane dd3f6bc784 Add trim include to the failure_handler. 2015-05-29 05:36:50 +00:00
Mark Crane c380e29913 Add a hangup hook to dialplan local_extension and remove originator cancel from the failure_handler. 2015-05-29 05:16:34 +00:00
Mark Crane 47f37420c8 Add app/hangup to support originator cancel for missed calls. 2015-05-29 05:12:41 +00:00
Mark Crane d14507fdf8 Add missed call email notification. 2015-05-29 03:56:49 +00:00
Mark Crane 9b9d174d8c Change the file from ANSI to UTF-8 no BOM. 2015-05-29 02:55:25 +00:00
Mark Crane 909a8f4984 Dump another html5 number... <input class='formfld' type='number' name='ring_group_extension' maxlength='255' min='0' step='1' value="010" required='required'> Shows in the gui as 10 instead of 010. To fix it I change the type to text. 2015-05-29 01:58:27 +00:00
Mark Crane f16a6270cc Change the default setting from enabled false to true. 2015-05-29 01:10:19 +00:00
Mark Crane 9de9ba1391 Add 3 more variables to device settings for the provision category and make it check default settings with one query rather than multiple making it more efficient. 2015-05-29 00:42:31 +00:00
luis daniel lucio quiroz 49ea23507c conference_session_uuid issue fixed, the recording path is now fixed with/without multitenant 2015-05-28 18:41:43 +00:00
Mark Crane 9827c55863 Fix the show all devices so it doesn't display duplicates. 2015-05-28 00:55:10 +00:00
Mark Crane 1a2ae8b3eb Add last_mod_date, and last_mod_user to contacts. 2015-05-26 16:06:01 +00:00
Mark Crane 4b9099b050 IVR Menu exit sound should not be required by default. 2015-05-26 15:19:53 +00:00
Mark Crane 4a937c83f1 Change how the previous alternate device is handled. 2015-05-25 16:31:08 +00:00
Mark Crane 8a5c09b0ee Remove redundant code from login.php. 2015-05-25 15:52:16 +00:00
Mark Crane ba7d32cb4f Devices, Update Alternate show the device label. 2015-05-24 07:14:11 +00:00
Mark Crane be8aba2e39 Add a link to unset the alternate device. 2015-05-24 05:00:40 +00:00
Mark Crane 05f3ed8e4a Sync the latests bug fixes. 2015-05-23 22:02:28 +00:00
Nate Jones afb1ffe027 Extensions: Missed Call notification option. 2015-05-23 02:11:26 +00:00
Mark Crane 46df72f8af More work on device alternate. 2015-05-22 04:34:31 +00:00
Mark Crane 410c9d6596 Add <td> and </td> surrounding the new Alternate link. 2015-05-22 04:14:04 +00:00
Mark Crane a9177255b6 Add Device Alternate link. 2015-05-22 04:10:43 +00:00
Mark Crane 0ca48f2f8a Changes result array to devices. 2015-05-22 03:08:02 +00:00
Mark Crane 7416f617d2 In the Devices list move Enabled after the Template column. 2015-05-22 03:04:42 +00:00
Mark Crane 84f524dd27 Fix a problem caused by the new FAX prefix. 2015-05-22 00:04:55 +00:00
Mark Crane cd1ac8dc14 Add an empty select option for IVR Menu exit sound we don't want always require an exit sound. 2015-05-21 21:31:56 +00:00
Mark Crane 6a31f2de45 Remove the underscore to fix the syntax. 2015-05-21 20:34:59 +00:00
Mark Crane 0ee195fd6b Missed str_len add it back. 2015-05-21 20:32:00 +00:00
Mark Crane a3933aa1fd If the time condition preset array name doesn't match a translation then use the nae from the array. 2015-05-21 20:28:42 +00:00
Nate Jones c036329ca7 Domains: Require Name on add. 2015-05-21 19:12:42 +00:00
Mark Crane 0e27f79edf Update the fax prefix description. 2015-05-21 04:07:51 +00:00
Mark Crane 4a67abb23a Remove the default settings fax prefix and move it to the FAX server table. 2015-05-21 03:48:37 +00:00
Mark Crane fce5968566 Add category: fax, subcategory: prefix, type: text and set a value of some kind of prefix. 2015-05-21 03:05:07 +00:00
Mark Crane 8850cf2f6c Fix the syntax by adding a missing ). 2015-05-20 22:34:16 +00:00
Mark Crane f6a4a5daaa A few more adjustments for the new password permissions. 2015-05-20 22:32:55 +00:00
Mark Crane 551aba5941 Add extension_password and device_line_password permissions. Goal is to make it possible to hide the password from the admin as desired by the superadmin. 2015-05-20 22:24:19 +00:00
Mark Crane 1bc20de00b Allow limit max to set to 0 to disable the extension calling. 2015-05-20 16:54:55 +00:00
Mark Crane b37a63ed7e Yealink provisioning if using Conference Meet-Me or BLF use the pickup value instead of the key extension. 2015-05-20 07:31:17 +00:00
Mark Crane 314e16f823 Revert changes of test code that were accidently committed in revision r8208 because it was breaking provisioning when device key extension is set. 2015-05-20 06:40:24 +00:00
Mark Crane 02cabe3a61 Set the defaults in device edit. 2015-05-20 05:14:14 +00:00
Mark Crane 34c6da3330 If follow me is disabled allow it to save the destination(s). This will finish making it work. 2015-05-20 02:46:06 +00:00
Mark Crane 0dcfa6be77 If follow me is disabled still allow it to save the destination(s). 2015-05-20 02:39:05 +00:00
Mark Crane f28fdbb13d Add missing commas. 2015-05-20 02:28:10 +00:00
Mark Crane 9686d68182 Add defaults for sip port and transport, expires to extension_edit.php. 2015-05-20 02:21:10 +00:00
Nate Jones 33df3bbe6f Devices: Add Enabled field to Lines. 2015-05-19 16:09:04 +00:00
Mark Crane 38f7850c30 Remove the word polycom from the if statement. 2015-05-19 01:46:13 +00:00
Mark Crane b6704f99fe Add another attribute to the 'if statement' on provisioning. 2015-05-19 01:43:58 +00:00
Mark Crane f25837ca19 Increment <sd> 2015-05-19 01:01:35 +00:00
Mark Crane c6c30841f9 Specify the correct table. 2015-05-19 00:52:29 +00:00
Mark Crane 68a8a9b02f Add the missing 'and' in the sql query. 2015-05-19 00:51:03 +00:00
Mark Crane 71bc24631b Add the specific fields to the contacts array. 2015-05-19 00:48:36 +00:00
Mark Crane c31bdc26f9 Add phone number to the contacts array. 2015-05-19 00:38:40 +00:00
Mark Crane a3ec7b5661 Add a file to the template. 2015-05-19 00:38:01 +00:00
Mark Crane 31107b6aed Change $db to $this->db because its in the PHP class. 2015-05-18 23:00:45 +00:00
Mark Crane 3cba7737bc Add contacts array to provisioning. 2015-05-18 22:45:31 +00:00
Mark Crane c140141ac7 Update nowrap to nowrap='nowrap' 2015-05-18 22:10:59 +00:00
Nate Jones 23f0d8ed1b Calls Active: Show gateway name instead of uuid in Application data string, change to jQuery ajax refresh. 2015-05-18 16:44:38 +00:00
Nate Jones bc7e7f1551 Contact Times: Timer now works for contacts under foreign domains. Limit edit and delete to user's own Time entries. 2015-05-17 09:58:57 +00:00
Nate Jones 3a173b4f3c Contact Times: Simplify Timer with jQuery ajax instead. 2015-05-17 09:08:52 +00:00
Nate Jones 09c2587256 Contact Times: Minor style/layout mods to timer duration. 2015-05-17 08:39:57 +00:00
Nate Jones 7ab6015847 Contact Times: An open Timer now works after changing domains. 2015-05-17 07:35:35 +00:00
Nate Jones 4ad1038f10 Contact Times: Fix redirect issue on Timer. 2015-05-17 07:19:07 +00:00
Nate Jones 4c7005f7c6 Contact Times: Style adjustments. 2015-05-17 07:15:28 +00:00
Nate Jones 0abb5b9584 Contact Times: Layout tweaks, link contact name on Timer to open contact edit. 2015-05-17 06:40:37 +00:00
Nate Jones 019db17698 Contact Times: Remove debug line. 2015-05-17 06:23:51 +00:00
Nate Jones 2e34662735 Contacts: Added Times/Timer to track support. 2015-05-17 06:16:43 +00:00
Mark Crane 196a99b70a Handle Do Not Disturb set on the extension for ring groups. 2015-05-16 23:38:07 +00:00
Nate Jones 6e87e5ca86 Fax: Fixed an issue when multiple email addresses are defined in fax-to-email feature (was only sending email to the last address listed). Thx CraigH. 2015-05-15 20:33:39 +00:00
Mark Crane 7aacf2578c Remove the code that is attempts and succeeds to prevent DND extension from affecting the Ring Groups because it also prevents calling external numbers and using bridge statements in the ring group. Will commit a fix soon that does an alternative way of removing extensions that are set to DND in FusionPBX's GUI. 2015-05-15 19:14:18 +00:00
Mark Crane 2e51a38216 Change eavesdrop from *88[ext] to *33[ext] to prevent a conflict with page extension on *8[ext] 2015-05-15 18:05:31 +00:00
Mark Crane e7703ad3b7 Filter for sip_P-Preferred-Identity in xml cdr import as a work around for invalid XML sent over HTTP POST. 2015-05-15 09:26:13 +00:00
Mark Crane f2403e5efa Remove session:sleep from scripts/confirm.lua. 2015-05-15 01:38:09 +00:00
Mark Crane b446035547 Polycom option to set headset_mode in provisioning. 2015-05-14 02:22:00 +00:00
Mark Crane 28c4f7ea50 Page conference settings need page caller controls. For non modertor 0 mute and press again to unmute. 2015-05-14 01:56:11 +00:00
Mark Crane a9107f4edf Remove ;; from the XML Handler. 2015-05-13 16:43:30 +00:00
Mark Crane a438c8134b Fix a nil error for fax_remote_station_id and make the caller id name and number work for inbound FAX. 2015-05-13 06:46:36 +00:00
Mark Crane b2a4a112f4 Update release to fix big for systems where GLOB_BRACE is not available. 2015-05-13 04:37:36 +00:00
Nate Jones 9d2a16a4f7 Upgrade: Using Advanced > Upgrade > Source Code now automatically updates switch /scripts/ folder contents (on by default), keeping switch scripts up to date with each system upgrade. Option to opt out of auto script updates is available via a Default Setting (switch > scripts_update > boolean > false). 2015-05-12 22:42:20 +00:00
Nate Jones e00f3ce583 Misc: Removed use of GLOB_BRACE as doesn't work on some systems, use non-GLOB_BRACE method instead. Thanks [xming] and Risk64. Should resolve Issue 916, as well. 2015-05-12 18:11:05 +00:00
Mark Crane 4a52fac56e Minor version update to FusionPBX 3.8.3. 2015-05-12 06:51:01 +00:00
Nate Jones 0eecb60280 Menu: Re-enable Restore Default button for menus other than default, adjust other code to work better with non-default menus. 2015-05-12 06:31:34 +00:00
Nate Jones 7860fe106d Ring Groups: DND extensions not included when retrieving Ring Group destinations (real fix for Issue 927, re: r8338). 2015-05-12 05:59:33 +00:00
Nate Jones 3dd4f7b831 Menu: Prevent Title text from opening both item for edit AND specified Link when target is External or Email. 2015-05-12 03:24:50 +00:00
Nate Jones fba18b1c6b Menu: Restore Default now restores unprotected menu items and their default groups. Removed Restore All function (no longer necessary). Hide Restore Default button for menus other than the default menu. 2015-05-12 03:03:09 +00:00
Nate Jones a3b256b4d9 Fax: Fix fax-to-email, better conversion to PDF. 2015-05-11 23:41:11 +00:00
Mark Crane 5b1cf8f58b Minor version upgrade FusionPBX 3.8.2. 2015-05-10 06:36:19 +00:00
Nate Jones eb6f163d5a Group Members: Order by Domain, then by User. 2015-05-10 06:13:05 +00:00
Nate Jones a45e970c99 User List: Offer Back button when showing all users (from all domains). 2015-05-10 05:26:57 +00:00
Nate Jones d799c3f609 User List: Show domain on non-global groups. 2015-05-10 05:23:42 +00:00
Nate Jones f43a47fe1f User Edit: If changing user's domain, unassign any foreign domain groups. 2015-05-10 05:13:03 +00:00
Nate Jones a23688b4bb User Add: Fix missing translation. 2015-05-10 04:51:56 +00:00
Nate Jones 3388ceebc0 User Add: Include domain for non-global groups in select. 2015-05-10 04:48:20 +00:00
Nate Jones e3909eaca6 Menu: Include all groups in list and select. 2015-05-10 04:34:14 +00:00
Mark Crane 5d77aa75bc Add missing group_uuid in v_group_permissions. 2015-05-09 23:30:56 +00:00
Nate Jones f2623e23f3 Menu: Include domain for non-global groups in list and select. 2015-05-09 22:19:02 +00:00
Nate Jones 933563a43b Menu: App Defaults to generate uuid for pk, and populate group uuid field. 2015-05-09 22:11:07 +00:00
Nate Jones 53ebdd2ea5 User Edit: Query fixes. 2015-05-09 21:54:33 +00:00
Nate Jones 5534adc647 User Edit: Remove italics from global group names. 2015-05-09 20:46:33 +00:00
Nate Jones 90dc4ff6cf User Edit: Include domain for non-global groups in list and select. 2015-05-09 20:30:35 +00:00
Mark Crane a99552f484 Minor update to a few files in the menu. 2015-05-09 20:29:26 +00:00
Mark Crane 461872c726 Menu manager needs group_uuid to get off relating by group_name. Add group_uuid to the app_config.php. 2015-05-09 20:22:19 +00:00
Mark Crane 3ec1066e92 Minor version update FusionPBX 3.8.1 2015-05-09 18:34:02 +00:00
Nate Jones 9b200a70d3 Fax: Prevent fax_destination field from being populated on received faxes. 2015-05-09 06:21:53 +00:00
Nate Jones 4406875476 Fax: Fix on edit to re-enable Advanced features, due to recent file rename. 2015-05-09 06:02:48 +00:00
Nate Jones 3d00560648 Fax: Fix Remote Inbox link (oops). 2015-05-09 05:40:39 +00:00
Nate Jones 95e965b108 Fax: Upgrade script to generate and store meta-data from existing fax files, fix Lua script to insert correct fax file path into db, JavaScript prompt corrections, adjust redirect after send to use new interface, fix delete so files on file system are removed (using path from db), fix paging and sorting on Inbox and Sent, fix TIF to PDF conversion for viewing sent/received faxes (if PDF version not present). 2015-05-09 05:22:29 +00:00
Nate Jones 771ebbdc1a CDR: Fixed recording playback / download. 2015-05-08 17:21:20 +00:00
Mark Crane b48f216946 Fix call forward no answer by changing originate_disposition from "ALLOTTED_TIMEOUT" to "NO_ANSWER". 2015-05-08 14:48:48 +00:00
Mark Crane a04f13c89e Update the comments on provision/index.lua 2015-05-06 04:39:26 +00:00
Mark Crane b946f39e97 Change user_status to agent_status. 2015-05-05 17:24:02 +00:00
Mark Crane 1fbd2a332b Put the message date back in the email template but comment it out. It's removed by default because it doesn't respect the timezone per domain. 2015-05-05 17:23:25 +00:00
Nate Jones 7c03d2955a Extensions: Only show Call Control button on edit. 2015-05-05 16:45:35 +00:00
Mark Crane ffa7603990 Remove the message_date from the voicemail to email template. 2015-05-05 16:25:51 +00:00
Mark Crane 9f98aea211 Release the official version of FusionPBX 3.8. 2015-05-05 08:20:49 +00:00
Mark Crane 736e4591f0 Add call_timout to the extension xml files. 2015-05-05 07:45:05 +00:00
Mark Crane 497296c8a1 Add call_timeout tot he user_exists dialplan so it works in both directions. 2015-05-05 07:36:06 +00:00
Mark Crane b1a33cf477 Change leg_timeout for call_timeout in the xml handler directory. 2015-05-05 07:34:19 +00:00
Mark Crane da8bd3f010 Change the copyright year on the ring groups lua script. 2015-05-05 07:12:44 +00:00
Mark Crane c889363820 Add domain_uuid to the ring group SQL query. 2015-05-05 07:11:31 +00:00
Mark Crane 8cda7312cd Remove the DND check on the ring groups as it caused the query to return duplicate destination numbers. 2015-05-05 06:35:43 +00:00
Mark Crane 7f9e98e988 Show only sip profiles that are enabled on the Gateway edit page. 2015-05-05 05:48:27 +00:00
Mark Crane 7b6837bbf7 Show only sip profiles that are enabled on the Status -> SIP status. 2015-05-05 05:45:42 +00:00
Mark Crane b701652c78 Fix the sip profile enabled by changing the alias from 's' to a 'p'. 2015-05-05 05:34:00 +00:00
Mark Crane 2b7fa564de Add the format number to destinations list and adjust the function to only process numeric. 2015-05-05 04:50:23 +00:00
Mark Crane 45590912eb Add format phone to the dialplan number. 2015-05-05 04:44:34 +00:00
Nate Jones e71c720670 Call Center Agent: Prevent duplicate Agent IDs (within the same domain).
Devices: Remove unnecessary javascript.
2015-05-04 21:01:55 +00:00
Nate Jones 53b884b431 Devices: Language updates supporting previous commit. Removed required check on MAC Address field. 2015-05-04 20:09:29 +00:00
Nate Jones 5bc8ea29f2 Devices: Prevent duplicate username within domain (if device assigned to a domain) or globally (if domain set to Global).
Functions: Added is_mac() and format_mac() functions.
2015-05-04 20:07:51 +00:00
Mark Crane 81af7c19e7 Add _id to *23 name. 2015-05-04 19:06:04 +00:00
Mark Crane 0da91562e8 Remove one file and rename the dialplan attribute inside the XML. 2015-05-04 19:05:20 +00:00
Mark Crane 45081453d3 Add *23 for agent status that requests the id and password. 2015-05-04 18:58:18 +00:00
Mark Crane f76a5a4514 Rename the user_status dialplan. 2015-05-04 18:48:09 +00:00
Mark Crane 96d4e0cea1 Change scripts directory from user_status to agent_status. 2015-05-04 18:40:54 +00:00
Mark Crane cbd41428c8 Lua script app/user_status updated to use agent_id and agent_password. 2015-05-04 18:34:43 +00:00
Mark Crane e5421c26c0 Add Agent ID column to the agent list. 2015-05-04 17:09:21 +00:00
Mark Crane 6675610f05 Move it to the correct field and change the type to password. 2015-05-04 03:26:50 +00:00
Mark Crane 4d13fce118 Escape the $ and ". 2015-05-04 03:19:31 +00:00
Mark Crane 2969469e08 Hide the agent password. 2015-05-04 03:12:11 +00:00
Mark Crane 96e5c7ec74 Add missing '+;' to the app_config.php. 2015-05-04 02:50:31 +00:00
Mark Crane 29dfbbd66e Add the missing call center translation. 2015-05-04 01:48:41 +00:00
Mark Crane 973cd566c9 Add the call center agent ID and password. 2015-05-03 16:55:43 +00:00
Mark Crane f79c9925f0 Add support for the new sip profiles enabled field. 2015-05-02 05:08:41 +00:00
Nate Jones 18b23608ae SIP Profiles: Added Enabled select box to manage the profile state. 2015-05-02 04:53:45 +00:00
Nate Jones 37e57d1caa Status Graph: Auto-load first interface found. 2015-05-02 03:35:18 +00:00
luis daniel lucio quiroz 61baff0ad6 fix a pricing display bug when billing installed 2015-05-01 18:52:01 +00:00
luis daniel lucio quiroz 7d8566d595 better sql queries for billing 2015-05-01 18:35:40 +00:00
luis daniel lucio quiroz da7e958808 lcr_currency wrong set 2015-05-01 17:39:13 +00:00
Mark Crane 0a5d4588e4 Update the version from 3.7.1 to 3.8 Release Candidate 1. We have tested it heavily so anticipate it will be a short RC version. 2015-05-01 13:48:42 +00:00
Mark Crane e972d383d1 Add domain_uuid to the provision SQL queries and add debug SQL option. 2015-05-01 13:37:04 +00:00
Mark Crane 9b2cac9d34 Add additional auhtorized checks and comment out debugging code. 2015-05-01 12:57:06 +00:00
Mark Crane 28508d1557 Fix the redirect on the fax file delete and change the tabbing. 2015-05-01 12:38:30 +00:00
Nate Jones 827701409b Default Settings: Fix set() function in domains class to first clear ALL default/domain settings, then only load settings that are currently enabled. 2015-05-01 12:14:52 +00:00
Mark Crane 664c9f5f1d More work on the delete. 2015-05-01 11:55:53 +00:00
Mark Crane f1650b9bf0 Fix a little syntax in the delete file. 2015-05-01 11:49:19 +00:00
Mark Crane d048a0e9ac Delete the fax tif and/or pdf in addition to remove the row from the database. 2015-05-01 11:38:44 +00:00
Mark Crane e755290b00 Fix the fax file delete so it redirects correctly and removes the file. 2015-05-01 11:21:19 +00:00
Nate Jones ab403f5f3c Language file merge from translation server. 2015-05-01 11:13:39 +00:00
Mark Crane 94452846fe Link to the fax_files.php file and use fax_inbox_view and fax_sent_view permissions. 2015-05-01 10:48:48 +00:00
Mark Crane ec179ff1fe Add the FAX TIF and PDF file download. 2015-05-01 10:24:24 +00:00
Mark Crane 919d038be0 Fix the page header and adjust indentation. 2015-05-01 08:48:32 +00:00
Nate Jones c5509ec012 Domain Settings: Obfuscate sensitive values.
Enhanced/Minimized Theme: Adjust styles allowing ability to completely turn off login/menu/body/footer shadows and quicker opacity control (via default/domain settings), add default/domain setting domain_shadow_color (Enhanced only).
2015-05-01 08:22:21 +00:00
Mark Crane 0dde5e15ea Add many changes to fax_files.php including formatting the date, fixing the page header and hide unnecessary fields. 2015-05-01 08:19:56 +00:00
Mark Crane 83fa4d4659 Test if the id is a uuid if it is then set fax_uuid value. 2015-05-01 08:17:39 +00:00
Mark Crane 791bb2c687 Add the license with the correct year. 2015-05-01 07:22:33 +00:00
Mark Crane 9bd72fd1ae Add FAX files. 2015-05-01 07:21:01 +00:00
Nate Jones 8a593c8ae5 Default Settings: Obfuscate sensitive values (little better). 2015-05-01 07:18:02 +00:00
Nate Jones ffebf944f9 Default Settings: Obfuscate sensitive values. 2015-05-01 07:12:07 +00:00
Mark Crane 6f396ca5c6 Add fax file permission and fix the data type for date and epoch. 2015-05-01 07:10:31 +00:00
Mark Crane 489479ecdd Add the FAX files translations. 2015-05-01 06:59:55 +00:00
Nate Jones 56b9a3092a SIP Status: Toggle Start/Stop button visibility, and Refresh button. 2015-05-01 06:52:51 +00:00
Nate Jones 09702ed59f Active Calls: Add Show All feature for Superadmin, basic view for Admin, refresh activity icon.
Registrations: Minor visual adjustments.
2015-05-01 06:35:40 +00:00
luis daniel lucio quiroz 2aa37f94ce change the Billing when you change the Tenant name 2015-04-30 13:45:13 +00:00
Mark Crane 59b7e3078b Change device_model to device_uuid_alternate for the provision override. 2015-04-30 10:25:00 +00:00
Mark Crane 144ac08ca9 Change device_model to device_uuid_alternate. 2015-04-30 10:21:23 +00:00
Nate Jones b38be32c9c Paging: Ability to grant caller moderator status/controls, auto-generate random pin.
Conference: Add missing caller-controls and moderator-controls parameters in autoload_config.
2015-04-30 09:45:41 +00:00
Mark Crane 1f3c104435 Get the login details from devices table. 2015-04-30 09:33:19 +00:00
Mark Crane 5462ce7a78 Change page extension to order 250. 2015-04-30 08:30:43 +00:00
Mark Crane 4eed12a418 Change the order of the page dialplan. 2015-04-30 08:30:01 +00:00
Mark Crane 957a9d42c7 Had the login and logout backwards. 2015-04-30 08:06:11 +00:00
Nate Jones cad0b090b6 XML Handler: Include missing language macros. 2015-04-30 06:59:24 +00:00
Mark Crane 06e4d78e5d Add the provision dialplan as *11 and *12. 2015-04-30 06:21:19 +00:00
Mark Crane ffa08fda46 Add lua script app/provision. 2015-04-30 05:42:30 +00:00
Mark Crane 461a276266 Get the device username and password to show on the same line and hide the password when the field is not selected. 2015-04-30 04:36:57 +00:00
Mark Crane 7c5cf78350 Add label-device to devices/app_languages.php. 2015-04-30 04:25:36 +00:00
Nate Jones 4d2b8ba5f2 Active Calls: Removed broken Transfer, Park and Record options in favor the Operator Panel (Park functionality to eventually be added to the OP).
Operator Panel: Only superadmin group can view debug info.
2015-04-30 02:55:35 +00:00
Mark Crane f80e2c5d3c Add dialplan add temporary permissions. 2015-04-30 01:17:47 +00:00
Mark Crane 5b0e78f656 Add a space. 2015-04-30 01:05:09 +00:00
Mark Crane 0dbfe88608 Add the sub table dialplan destination permission. 2015-04-30 01:03:55 +00:00
Mark Crane 78c526c4ab Change the permission name from delete to edit. 2015-04-29 23:50:00 +00:00
Mark Crane 3d0e258f30 Fix the permissions for admin using the time conditions and dialplan -> destinations. 2015-04-29 23:22:36 +00:00
Mark Crane b9ab9596d3 Add an api_hangup_hook to ensure all members of page hangup. 2015-04-29 21:54:02 +00:00
Mark Crane f7db70d77c Remove two trailing tabs from the end of the lines. 2015-04-29 21:48:08 +00:00
Mark Crane b66bee911c Additional work with temporary permissions. 2015-04-29 21:45:05 +00:00
Nate Jones ab4d1840b4 SIP: Return "NO_ANSWER" instead of "NORMAL_CLEARING" if an extension is called with voicemail disabled. Implements patch suggested in Issue 920. Thanks. 2015-04-29 21:21:00 +00:00
Nate Jones 7ec16e4dda Recordings: Add sleep (1s) before ID prompt. 2015-04-29 21:05:19 +00:00
Digital Daz 3b221ca1ae Slight change to correct sql queries for times, thanks Nate. 2015-04-29 20:45:32 +00:00
Mark Crane 1f3c88820f Simplify the page dialplan. 2015-04-29 18:25:20 +00:00
Mark Crane 177127198d Change the name of extension-intercom to page-extension. 2015-04-29 18:14:26 +00:00
Mark Crane f4a7c91afe Fix the delete method. 2015-04-29 07:30:58 +00:00
Mark Crane aa76b79148 Update the permission delete method one more time. 2015-04-29 07:06:23 +00:00
Mark Crane aa5c833c79 Modify the delete permission. 2015-04-29 06:33:48 +00:00
Mark Crane 2eb043173c Add a new permission class. 2015-04-29 06:24:04 +00:00
Nate Jones 1429f978f0 Ring Group: Fixes Issue 927 - Assigned extensions set to DND (via the GUI) will not be included when the Ring Group executes. 2015-04-29 00:29:20 +00:00
Mark Crane 7b494f0fce Change the order of the fax dialplan details. 2015-04-28 21:12:27 +00:00
Nate Jones 65d8359590 Phrases: Remove phrase from memcache if phrase detail deleted (no, really). 2015-04-28 19:28:16 +00:00
Nate Jones 3a77c5dfe2 Phrases: Remove phrase from memcache if phrase detail deleted. 2015-04-28 19:10:52 +00:00
Nate Jones 36a1a36cea Phrases: Include full path for recordings (not sounds), when not using base64. 2015-04-28 19:06:27 +00:00
Nate Jones 3b9c777d77 Phrases: Save phrases xml and delete phrases from memcache after converting to/from base64 in app_defaults.
IVR: Using phrase greetings, DTMF tones now captured and executed, but only after playback completes (uses session:variable).  Still searching for a better solution.
2015-04-28 17:24:32 +00:00
Mark Crane 8fe9a0432d Update the api_hangup_hook for the fax dialplan. 2015-04-28 14:47:17 +00:00
Nate Jones 46541d4f8b Phrases: App Defaults now converts phrases between base64 compatible and back, enhanced interface with better js manipulation, easily add pauses to a phrase.
Note: Currently DTMF tones are not recognized during phrase playback in IVR (rrrrr!).
2015-04-28 09:54:02 +00:00
Mark Crane 47f5588c45 Add the new fax hangup hook. 2015-04-28 06:44:11 +00:00
Mark Crane c017ee74d2 Make the fax_to_email.php work with $name with the fax file name and also with the full path and file name. 2015-04-28 00:25:59 +00:00
Mark Crane 0003bb1d82 Add document_root to config.lua. 2015-04-28 00:05:01 +00:00
Mark Crane 03e4777832 Add php_bin and php_dir to the config.lua script. 2015-04-27 23:50:15 +00:00
Mark Crane 0985d0a840 Fix some line spacing and one tab in fax_retry.lua. 2015-04-27 16:45:23 +00:00
Mark Crane 6d863601de Update fax retry to use fax_files.lua. 2015-04-27 14:32:29 +00:00
Nate Jones 751a9f342b Phrases: Add support for using base64 recordings. Already existing phrases don't yet convert. 2015-04-26 00:19:02 +00:00
Nate Jones 942060d2de Recordings: On upload, put original file name in description, and better format the name auto-generated from the saved file name. 2015-04-25 22:25:26 +00:00
Nate Jones 17d57f35ad Cleanup: Remove unused shockwave flash files. 2015-04-25 21:48:08 +00:00
Nate Jones da9379db93 Recordings: app_defaults to move recordings from file system to base64 in db (and vice versa). 2015-04-25 21:46:01 +00:00
Mark Crane 52160cab54 Add fax files table for storing meta data and optional base64. 2015-04-25 21:07:01 +00:00
Nate Jones 33248f605f Voicemail Greetings: Better base64 support in gui (playback, download, etc) and lua scripts, some lua mods to allow re-recording without having to enter greeting # again, fixed choose greeting function, new greeting recordings now only save when told to (uses a temp file prior to), fix sorting on greetings list, app_defaults to move greetings from file system to base64 in db (and vice versa).
Recordings: Fix sorting and paging.

IVRs: Code cleanup.

(... and some other stuff I can't remember at this hour.)
2015-04-25 12:26:31 +00:00
Mark Crane aa51218465 Move menu items that are for superadmins to the advanced menu. 2015-04-25 06:29:45 +00:00
Mark Crane eabe0581b2 Prevent cross site scripting by limiting the value of $show on the registrations page. 2015-04-25 05:47:35 +00:00
Mark Crane 95dd5922ff Move app/xmpp as an optional application in dev/apps. 2015-04-24 20:55:53 +00:00
Mark Crane 6a0885e535 Move content manager to apps/content marking it as an optional application. That is not installed by default. 2015-04-24 20:53:26 +00:00
Mark Crane 0db6b50e5b Fix the indentation on lua app/avmd/index.lua. 2015-04-24 20:44:47 +00:00
Mark Crane 8920457dbd Menu change System to Home. 2015-04-24 20:37:29 +00:00
Mark Crane 896ed317dc Contact page change Contact Add to just Contact as the page indicates that its an add. 2015-04-24 20:32:36 +00:00
Mark Crane fe49648190 Prevent nil errors in the ivr_menu.lua also change file_name_only to file_name as the name already implies name only. 2015-04-24 05:24:43 +00:00
Mark Crane d07e89d9fb Increase the limit in the loop to allow more data across event socket. 2015-04-24 04:43:32 +00:00
Nate Jones 2d2eac5cbc Lua: Remove debug console output from streamfile.lua. 2015-04-24 02:54:03 +00:00
Nate Jones 998b6e6197 IVR: Better support for the use of base64 Recordings, added option to use Phrases in a couple places, fixed the Exit Sound. (Note: A selected Sound with the same file name as a Recording will get trumped.) 2015-04-24 02:47:10 +00:00
luis daniel lucio quiroz 7cf0150765 device_vendor & device_mac_address are a must 2015-04-23 16:39:49 +00:00
Nate Jones 3ef85d9645 Recordings: Add support for base64 Play and Download, and bi-directional conversion between base64 and local files on page load. 2015-04-23 08:41:05 +00:00
Nate Jones 704d2ebf1c Voicemail: local and base64 fixes. 2015-04-23 05:25:21 +00:00
Nate Jones b790f34278 Voicemail: Add functionality to Play and Download base64 messages in the database. 2015-04-23 00:10:31 +00:00
Mark Crane 94a00a7fd5 If mod_shout exists then record to mp3 using it if it doesn't exist then use lame. 2015-04-23 00:05:56 +00:00
Mark Crane 5179ddcee9 Replace voicemail_message_uuid for uuid in two additional places. 2015-04-22 23:33:25 +00:00
Mark Crane e34569f1fc Use the call uuid for the voicemail_message_uuid. 2015-04-22 23:23:59 +00:00
Mark Crane a6f9ac0214 Fix conference sound file problem and add the missing profiles that are in the standard conference.conf.xml file. 2015-04-22 22:45:05 +00:00
Mark Crane 9a0b99bbd5 Add a few comments and adjust the indentation. 2015-04-22 18:11:41 +00:00
Mark Crane ef05dbc888 Save the ivr menu then update the dialplan. 2015-04-21 18:17:25 +00:00
Mark Crane 2521f8bd1c Move ring group context above enabled. Goal is moving it lower since its a setting that is changed rarely. 2015-04-21 18:15:51 +00:00
luis daniel lucio quiroz e1a00cc934 use numeric not alphanumeric on variables & logging options 2015-04-21 16:56:58 +00:00
Mark Crane 1f646ccd14 Change the behavior of BLF. 2015-04-20 23:53:33 +00:00
Mark Crane d52692d691 Comment the sql string again as its no longer needed. 2015-04-18 22:51:43 +00:00
Mark Crane fc29210cb2 Change the row table array to field to prevent a conflict with the existing row table / array. 2015-04-18 22:49:09 +00:00
Mark Crane 5182ca7491 Show the sql statement. 2015-04-18 22:46:09 +00:00
Mark Crane d08dbebc11 Connect to the database earlier in the script. 2015-04-18 22:41:45 +00:00
Mark Crane 7b56d073e2 Add the scripts_dir to directory.lua. 2015-04-18 22:39:14 +00:00
Mark Crane 168d9309cb Update the company directory.lua. 2015-04-18 22:36:26 +00:00
Mark Crane 7ba8ca8f84 Additional work on base64 optional storage in the database. 2015-04-18 19:59:50 +00:00
Mark Crane 96f3dc488f After saving the base64 remove the file. 2015-04-18 18:42:39 +00:00
Mark Crane 17897ac69a Remove the accidental changes to index.php 2015-04-18 18:40:07 +00:00
Mark Crane 10253ab34e Update voicemail index.php 2015-04-18 18:35:03 +00:00
Mark Crane 8231e6bfde When using base64 after playing the greeting remove the file from the file system. When sending the email get it from the database save it to the file system. Then send the email and afterwards remove it. 2015-04-18 18:19:22 +00:00
Nate Jones 48f7524e35 Voicemail: Removed settings code (redundant?) 2015-04-18 00:22:09 +00:00
Nate Jones 978bea9caf Voicemail: Fix greeting path. 2015-04-18 00:08:54 +00:00
Nate Jones cd5706eeb5 Default Settings: Added 'Reload' button to update Default/Domain/User settings on demand. 2015-04-17 20:26:14 +00:00
Mark Crane 93dffec059 Additional work on voicemail with base64. 2015-04-17 20:10:36 +00:00
Nate Jones 949b2ec3fe Recordings / Voicemail Messages: Hide file size column if storing as base64 in db. 2015-04-17 19:30:06 +00:00
Nate Jones 25715dd290 Conference Center: Add ability to use a Phrase for the Greeting, resolving Issue 921 and Issue 818. 2015-04-17 18:41:31 +00:00
Mark Crane 4477b452db Fix the greeting using base64. 2015-04-17 18:08:29 +00:00
Nate Jones 06ff9915b3 Adjust switch_select_destination() function logic to match selected option better. 2015-04-17 02:46:25 +00:00
Nate Jones 4fc7450338 Remove debug SQL echo from previous commit. 2015-04-17 01:12:17 +00:00
Nate Jones eba670b844 Prevent select option groups from displaying in switch_select_destination() function if no options available. 2015-04-17 01:04:29 +00:00
Nate Jones f595801a31 Prevent 'XMPP Gateways' option group from displaying in switch_select_destination() function if none found. 2015-04-17 00:21:29 +00:00
Nate Jones 1fe85e41a0 Prevent 'Recordings' option group from being repeated in switch_select_destination() function 2015-04-17 00:18:03 +00:00
Nate Jones 24f4fa8f49 IVR: Prevent option from losing it's value on edit. 2015-04-17 00:11:55 +00:00
Mark Crane 289942b159 Remove the numeric restriction on fax forward number as it isn't required to be a number. 2015-04-16 20:49:43 +00:00
Nate Jones 3b00f8f7b5 Registrations: Manually pause refresh, and pause on button hover. Requested in Issue 922. 2015-04-16 20:02:04 +00:00
Nate Jones 8348ade285 User Edit: Language file adjustment. 2015-04-16 19:21:39 +00:00
Nate Jones 0f4a14d69e Themes: Remove unnecessary JS functions.
Call Block: Fixed issue in language file.
User Edit: Fixed issue in language file.
File Editor: Fix JS issue in header.
2015-04-16 19:14:20 +00:00
Mark Crane c1976beb4a Add the database dbh connection to recordings.lua. 2015-04-16 19:13:05 +00:00
Nate Jones aebdfbf062 Fax Server: Log detail view now available. Resolves issue 923. 2015-04-16 16:05:39 +00:00
Mark Crane ce90112969 Add record in recordings table no matter what type of storage type is used. 2015-04-16 14:47:21 +00:00
Mark Crane aaaff650c0 Remove the old park.lua dialplans in favor of mod_valet. 2015-04-15 23:21:32 +00:00
Nate Jones 6f2cde7523 Operator Panel: Fix to show Status of User assigned to an Extension. 2015-04-15 23:19:50 +00:00
Mark Crane a3883ec8ae Remove v_ as they are not used in the dialplan templates. 2015-04-15 23:19:13 +00:00
Mark Crane 255bfc79f0 Remove the mkdir that isn't needed in recordings.lua. 2015-04-15 21:16:11 +00:00
Nate Jones 9dcfdbb71b CDR Details: Define column % widths. 2015-04-15 18:44:22 +00:00
Nate Jones fbcb44df20 Default Settings: Added search category name.
Group Permissions: Added search app name.
2015-04-15 18:28:53 +00:00
Nate Jones f056630e29 Group Permissions: Set focus to search box on page load. 2015-04-15 18:03:26 +00:00
Nate Jones 59bb7d04c7 Group Permissions: Hide apps for which there are no permissions. 2015-04-15 17:52:46 +00:00
Nate Jones e869a9a70e Group Permissions: Added JS search functionality. 2015-04-15 17:26:50 +00:00
Nate Jones b99f5b7b07 Various: Return HTML5 audio playback volume to 100%. 2015-04-15 06:29:46 +00:00
Nate Jones c1c6837c0a Default Settings: Minor visual adjustment. 2015-04-15 06:19:44 +00:00
Nate Jones 09a5f153b6 Group Permissions: Adjust checkbox padding. 2015-04-15 06:15:48 +00:00
Nate Jones 45bf2e5fd6 Default Settings: Better/cleaner search functionality. 2015-04-15 06:08:18 +00:00
Nate Jones 16ea47f58f Group Manager: Fix group permission protection feature. 2015-04-15 04:28:26 +00:00
Mark Crane b17c8061c8 Connect to the database before using this function and it will use the database connection. 2015-04-15 03:13:10 +00:00
Mark Crane 8fad7af1b3 Remove mysql_connect as it is marked as deprecated. 2015-04-15 01:43:20 +00:00
Mark Crane a92e5f5afd Remove mysql_connect. 2015-04-15 01:35:15 +00:00
luis daniel lucio quiroz be2ff2b651 numeric version function 2015-04-14 23:58:03 +00:00
Nate Jones 122fe66d60 Adminer: Resolve function conflict. 2015-04-14 21:46:58 +00:00
Nate Jones e26f1fefa5 Adminer: Update to latest version available (4.2.1). 2015-04-14 21:38:33 +00:00
Nate Jones b133528e36 Default Settings: Prevent list control icons from wrapping in IE. 2015-04-14 20:16:52 +00:00
Nate Jones 0625548f5d Default Settings: Forgot JS search language variable for input placeholder. 2015-04-14 20:11:39 +00:00
Nate Jones 0bb39ae49f Default Settings: Added JS search functionality.
Themes: Removed duplicate language variables.
2015-04-14 20:10:27 +00:00
Nate Jones 0bc9f24d09 Default Settings: Reverted. 2015-04-14 19:16:51 +00:00
Nate Jones 648cab35bf Content Manager: Fix app_languages (using Translate server version). 2015-04-14 18:53:35 +00:00
Nate Jones 76f15d42d2 Default Settings: Potential new layout. 2015-04-14 18:41:56 +00:00
Nate Jones 415e4f4fc0 MOH: Selecting an MP3 now hides the Sampling field. Selecting files other than MP3 and WAV will result in a warning message being displayed. Uploading an MP3 now places a copy of the file in all rate folders at once. 2015-04-14 16:40:51 +00:00
Nate Jones ffa30aaf89 Various: Set HTML5 audio playback volume to 50%. 2015-04-14 08:34:26 +00:00
Nate Jones 660f14ed6b CDR: Restore 'Recording' label. 2015-04-14 08:01:02 +00:00
Nate Jones a4f18db6c2 Themes: Add body_opacity (Enhanced & Minimized) and menu_opacity (Minimized only) settings.
Login: Prevent error on logout, if session not set.
2015-04-14 07:13:51 +00:00
Nate Jones 5ff5a93ece Registrations: Order by domain (sip-auth-realm), then user. 2015-04-14 04:27:07 +00:00
Nate Jones f78be9df5b Contacts: Fix app_menu.php, restore menu item. 2015-04-14 03:54:01 +00:00
Nate Jones 92b311ef2b IVR Menu: Change Description field to textarea. 2015-04-14 02:26:34 +00:00
Nate Jones a73ada0cd3 Login: Don't overwrite message if not attempting login (restores Password Reset 'Reset Link Sent' message). 2015-04-14 01:42:57 +00:00
Nate Jones 9f90e93d2f Login: Display error message on invalid login credentials. 2015-04-14 01:36:01 +00:00
Nate Jones 55dbe3c885 Call Center Agents / Dialplan Edit: Optimize Gateway Name lookup (only do if necessary). 2015-04-14 00:42:15 +00:00
Nate Jones bbe24cc75f Call Center Agents: If selected as Contact, show Gateway name instead of UUID.
Call Center Agent Edit: Set width on Contact select box.
2015-04-14 00:25:59 +00:00
Nate Jones 9437791df4 Various: Smoother playback progress indicator for audio files. 2015-04-13 23:26:43 +00:00
Nate Jones d328141419 VM Greetings: Playback progress indicator column adjustment. 2015-04-13 22:29:10 +00:00
Nate Jones 1631962f83 Various: Added playback progress indicator for audio files (CDR, VM, etc). 2015-04-13 22:26:50 +00:00
Nate Jones d5c2a2653b CDR: Template and layout adjustments to prevent wrapping. 2015-04-13 20:06:46 +00:00
Nate Jones 36e9a69163 Time Conditions: Correct comments. 2015-04-13 19:57:09 +00:00
Nate Jones d4f3db618d Time Conditions: Convert time-of-day to minute-of-day values, due to inconsistent behavior for time-of-day. 2015-04-13 19:36:45 +00:00
Mark Crane ca2673fd74 Update the base64 code. 2015-04-13 17:52:59 +00:00
Nate Jones 623af0c156 Call Center: Fix SQL error on Agent Status change, clarify Status as Default Status on Agent Edit. 2015-04-13 17:00:09 +00:00
Nate Jones 47055cc9c3 Logout: Prevent SQL error on logout if already logged out in a different window/tab. 2015-04-12 19:48:29 +00:00
luis daniel lucio quiroz deaaf0c4eb missing space & mysql support 2015-04-12 17:40:58 +00:00
Digital Daz 572d83a828 First part of fix for load balancing - Prevent stale hostname being used for expired registration that has not yet been purged by freeswitch 2015-04-12 10:08:47 +00:00
Mark Crane dd8f9e9dd9 Remove the Yealink hot desking as I believe I have created a better way that is more secure. 2015-04-12 01:22:02 +00:00
Mark Crane 33658f1dd9 Add device username and password. 2015-04-12 00:35:11 +00:00
Mark Crane 485ecc57a8 Add device_username, device_password and device_uuid_alternate. 2015-04-12 00:12:48 +00:00
Nate Jones a38af349e0 Extension Summary: Better search form functionality (auto-submit on Quick Select change, added "This Week" option, reset Quick Select if Start or End date/time defined and vice-versa), language additions. 2015-04-10 18:08:09 +00:00
Nate Jones 37d0141687 Extension Summary: List domain on Show All, change Quick Select 'Default' label to 'Last 7 Days', update Description column style to be consistent. 2015-04-10 16:46:22 +00:00
Nate Jones 323d3de4b1 Extension Add: Fix for Issue 910 - Skip check on extensions limit if not defined. 2015-04-10 14:42:55 +00:00
Mark Crane 0fa4f2047d 2015-04-10 05:36:09 +00:00
Mark Crane 2900fdeeba Device UUID work still needs permanent home for the UUID. 2015-04-10 03:25:53 +00:00
Nate Jones 33f0e22ac3 Voicemail: Restore missing 'No messages found.' message in languages file. 2015-04-10 01:41:30 +00:00
Nate Jones 42769cb631 Voicemail: Fix confirmed and applied as suggested in Issue 905. Thanks. 2015-04-10 01:22:17 +00:00
Nate Jones 7dcac4655c Voicemail: Fix file storage location, restores playback/download functionality of GUI. 2015-04-10 00:24:43 +00:00
James Rose 83bca7cdbf from GILL: minor corrections 2015-04-09 21:40:40 +00:00
James Rose b2da37a067 EDITS BY GILL: add support for 711 (TTY), fix issue where caller id is sometimes sent incorrectly with flowroute. 2015-04-09 18:44:00 +00:00
luis daniel lucio quiroz 582843dc70 /tmp/provisioning_log.txt only when debug is on 2015-04-09 17:03:50 +00:00
luis daniel lucio quiroz 97e4a0ead4 debug must be turned on manually with a default setting 2015-04-09 16:13:21 +00:00
Mark Crane f052e8533b Fix the problem on calls_active/app_languages.php. 2015-04-09 15:58:56 +00:00
luis daniel lucio quiroz f79c83ee29 just a little more debug info when provisioning fails 2015-04-09 14:26:47 +00:00
Nate Jones 6167c6f773 MOH: Restore 'Default' label in select box. 2015-04-08 20:13:45 +00:00
Mark Crane d6636aee17 Update the translations from the translation server. Includes the following new languages Brazilian Portuguese, Polish, and Swedish Sweden. Thanks to those that put in the effort to add these languages additional translator volunteers are welcome. 2015-04-08 13:38:58 +00:00
Nate Jones 9e5f9b9556 Operator Panel: Optimizations, bug fixes, better auto-complete searching. 2015-04-08 08:54:10 +00:00
Nate Jones 1eb713230b Operator Panel: Reduce font size and change font of auto-complete suggestion list (forgot Enhanced template). 2015-04-08 07:11:29 +00:00
Nate Jones 8ca1d1a910 Operator Panel: JS fix to restore functionality in Chrome and IE, Reduce font size and change font of auto-complete suggestion list.
Minimized Template: Similar JS fix for Chrome and IE.
2015-04-08 03:50:09 +00:00
Nate Jones fb1ace1d07 Operator Panel:
- Add transfer active calls to ANY destination using keypad.
- Move inline CSS styles to theme templates.
- Use local jQuery UI CSS file instead of remote.
2015-04-08 01:01:46 +00:00
Digital Daz cd91c1e7d9 Prevent users bypassing extension limits by using range 2015-04-07 23:50:36 +00:00
Nate Jones 1747103a66 Operator Panel: Adjustments to correctly display the user status of the extensions assigned to the current user. 2015-04-07 17:03:39 +00:00
Mark Crane 54938ab56a Some people are experiencing problems with challenge-realm with auto_from so setting the default for new installs to auto_to. 2015-04-07 11:59:50 +00:00
Mark Crane 8afee33689 If the MAC address is set then validate it is a Mac address. 2015-04-06 23:39:19 +00:00
Mark Crane 689d5d39ab Check to see if domain_uuid has a value. 2015-04-06 22:27:16 +00:00
Nate Jones 81fdeb8453 Voicemail: Copyright date changes. 2015-04-06 21:58:55 +00:00
Nate Jones 69e3bca4ad Voicemail: Mods to make it work as expected, if non-admins/superadmins are given access to it. 2015-04-06 21:57:06 +00:00
Mark Crane d0c86f1f58 Update the URI with the file name change. 2015-04-06 21:29:34 +00:00
Mark Crane 7671d78b2d Rename index.xml in favor of config.xml as this file provides the XML configuration. 2015-04-06 21:19:13 +00:00
Mark Crane ece8529927 Remove the CSS class that makes the MAC address appear to be required. 2015-04-06 19:52:16 +00:00
Mark Crane 3f9650d873 Remove the requirement for the MAC address as it breaks the template feature and another new feature. 2015-04-06 19:48:21 +00:00
Nate Jones c3795a851e User Dashboard: Remove explicit call to load_extensions(), as already loaded via check_auth(). 2015-04-06 18:17:17 +00:00
Mark Crane 1721732288 Add a comment for $term in autocomplete.php //search term 2015-04-06 17:50:46 +00:00
Mark Crane 1a5eb79043 Complete http_cache for the IVR Menu and Recordings. 2015-04-06 14:14:32 +00:00
Mark Crane 23fad6a07c Add http_cache to IVR Menu. 2015-04-06 14:06:11 +00:00
Mark Crane fcadaae178 One more attempt to improve the spacing. 2015-04-06 09:46:38 +00:00
Mark Crane f534bb9396 Additional work on the spacing for the template. 2015-04-06 09:44:56 +00:00
Mark Crane 0a66bab25e Fix register expires and attempt to fix the vertical spacing. 2015-04-06 09:35:43 +00:00
Mark Crane cc5b2fac66 One final adjustment to get it all working again. 2015-04-06 09:30:30 +00:00
Nate Jones fb0737167a Operator Panel: Include (enabled) Extensions in auto-complete suggestion list. 2015-04-06 09:27:57 +00:00
Mark Crane ab1ebf581b Fix code that allowed userid / passwd as well as user_id / password. 2015-04-06 09:08:57 +00:00
Mark Crane 1265011c1d Remove redundant equal signs. 2015-04-06 08:53:00 +00:00
Mark Crane f734e4983c Fix a syntax error with the new code. 2015-04-06 08:51:12 +00:00
Mark Crane f6d197b8ea Add key variables to provisioning. 2015-04-06 08:37:06 +00:00
Mark Crane f3b14c28ab Add user_id and template variables for provisioning. 2015-04-06 07:38:24 +00:00
Mark Crane deba11aa4f Start the option for http_cache. 2015-04-06 07:34:02 +00:00
Mark Crane 5352d2fbb2 Add template to the cancel link. 2015-04-06 07:17:51 +00:00
Mark Crane b194261635 Add voicemail storage path variables. 2015-04-06 07:08:17 +00:00
Mark Crane 3bac48cebb Add the original base64 class I was using as an alternative if mime is not loaded. 2015-04-06 06:25:42 +00:00
Nate Jones 5fe09e3e02 Operator Panel: Added Contact search/auto-complete. 2015-04-06 01:15:44 +00:00
Mark Crane 62bba24350 Don't require the MAC address. 2015-04-05 22:29:56 +00:00
Mark Crane 6d249d0b61 Update the provision class. 2015-04-05 22:28:02 +00:00
Mark Crane bf0a2b728d Update the new yealink template. 2015-04-05 22:21:38 +00:00
Nate Jones 0a8ef439ab Follow Me: Ignore pre-populating fields if no follow_me_uuid assigned to extension (fixes SQL error). 2015-04-05 03:12:46 +00:00
Nate Jones 919a7e2bd2 CDR Stats: Added missing 'and' in SQL queries. 2015-04-05 02:26:31 +00:00
Mark Crane 23c27f1347 Add login and cancel XML files. 2015-04-04 22:57:07 +00:00
Nate Jones 001fdb1327 Enhanced Template: Add light shadow to domain name text (top-right) to match domain-selector and logout icons, and make text more visible on dark backgrounds. 2015-04-04 20:05:57 +00:00
Nate Jones 23db4c67a1 Login: Minor fix to sql query in Password Reset feature. 2015-04-04 19:43:51 +00:00
Mark Crane 2cb1b40093 Add a type of Yealink template. 2015-04-04 19:41:56 +00:00
Nate Jones 8d734bb3fe User Add: Email now correctly stored with newly created Contact. 2015-04-04 19:40:20 +00:00
Nate Jones f768825085 Added ability to return (on login) to last visited page on logout. 2015-04-04 18:46:44 +00:00
Nate Jones a58479f825 Operator Panel: Start refresh after clicking a status button, and disable clicked status button until refresh. 2015-04-04 16:44:43 +00:00
Mark Crane defd4d10d6 XML CDR, Add a fix for unescaped data in <sip_Remote-Party-ID>. 2015-04-04 16:09:11 +00:00
Mark Crane ce6be3f778 Fix the long and short greetings for the IVR Menu. 2015-04-04 09:38:26 +00:00
Mark Crane 20ec80d46c Check for a nil to prevent an error for voicemail, ivr menu and recordings. 2015-04-04 09:09:09 +00:00
Mark Crane 17c68d7e2b Prevent a bad domain_name from causing a nil error for reverse authentication. 2015-04-04 06:24:41 +00:00
Nate Jones 8c00436e80 CDR: Integrate existing permissions for Recording Playback and Download buttons.
Misc: Background visual adjustments for Playback and Download icons.
2015-04-03 21:07:24 +00:00
Mark Crane b46e215be2 Some devices need port 0 for DNS SRV so modifying the port number to allow 0. 2015-04-03 19:34:05 +00:00
Mark Crane dc41325a8a Improve indentation, use base64 value from database bypass writing the value to a variable first. 2015-04-03 19:06:16 +00:00
Mark Crane 513e23403a Remove a PDO parameter that is not used. 2015-04-03 19:04:30 +00:00
Mark Crane e6eb36ff51 Additional work on option to save files in base64 for voicemail and ivr menu. 2015-04-03 18:59:12 +00:00
Nate Jones b1cef30022 IVR: Additional check for nil needed. 2015-04-03 17:58:49 +00:00
luis daniel lucio quiroz 807ae5317c let the xml_cdr download/play, regardless mono/multi tenant 2015-04-03 16:23:24 +00:00
Mark Crane 17cbd9d289 Add a place to add voicemail name in base64. 2015-04-03 15:21:28 +00:00
Mark Crane fe627204c1 Update the local_extension dialplan. 2015-04-01 10:22:34 +00:00
Mark Crane b52e420662 Get the list of recordings from the database. 2015-04-01 10:19:47 +00:00
Mark Crane fb7ded71ce Set auto-gain-level to 0 or disabled. 2015-04-01 10:18:48 +00:00
Nate Jones 7fffc5ca9d Group Edit: Add Copy button. 2015-04-01 09:26:14 +00:00
Nate Jones 4764516894 CDR: Hide Missed Calls button after clicked. Visual adjustment when top paging buttons aren't present.
Contacts: Visual adjustment when top paging buttons aren't present.
2015-04-01 09:06:02 +00:00
Nate Jones 5077ee1179 Contacts / CDR: Minified top paging controls. 2015-04-01 09:00:17 +00:00
Mark Crane 00873011cd Remove an extra vertical space and fix the indenting for one line. 2015-04-01 08:22:42 +00:00
Nate Jones 67d19535ee Groups: Better DB record management on Group rename and Group Domain change. 2015-04-01 08:17:51 +00:00
Mark Crane 3b117a3d0d Remove http_cache:// from the path and allow it to be defined in the storage path. 2015-04-01 08:14:03 +00:00
Mark Crane 44295deab6 Remove trailing spaces from the ivr_menu.lua. 2015-04-01 08:12:27 +00:00
Mark Crane 6f14a0b6d5 When a new greeting is created set it as the greeting id. 2015-04-01 08:11:44 +00:00
Mark Crane 63f55e076d Add a missing semi-colon and remove trailing spaces. 2015-04-01 07:57:47 +00:00
Mark Crane 3c36351762 Add an option to save the greeting to the database. 2015-04-01 07:56:56 +00:00
Mark Crane 7f8e7d98ca Add greeting_id to the voicemail greetings table. 2015-04-01 07:40:34 +00:00
Mark Crane 3111110909 Pre-define the variables for the ivr menu. 2015-04-01 06:52:45 +00:00
Mark Crane 5912dae9f0 2015-04-01 05:48:44 +00:00
Mark Crane 82c28cb9e1 Use luasql for recordings only if base64 is chosen. 2015-04-01 05:44:07 +00:00
Mark Crane bde561a950 Change base64.enc to base64.encode. 2015-04-01 03:56:23 +00:00
Nate Jones 9ccc2ce97c CDR: Hide Show All button after clicked, moved to top for consistency. 2015-04-01 00:51:09 +00:00
Nate Jones f9580111da Groups: Restore (but keep disabled) list control icons for default system groups. 2015-04-01 00:37:50 +00:00
Nate Jones 975dbb41ab Contacts: Close mailto tag on email link. 2015-03-31 23:35:13 +00:00
Nate Jones 88295a53d7 Groups: Integrate Show All and ability to edit assigned Domain. Create, edit, delete non-default groups.
Users: Adjust so assigned Domain doesn't get overwritten if user_all permission exists, but user_domain doesn't.
Destinations: Adjust so assigned Domain doesn't get overwritten if destination_all permission exists, but destination_domain doesn't.
2015-03-31 21:47:31 +00:00
Mark Crane 30bb3e211d Improve the speed of base64 encode and decode. 2015-03-31 18:48:00 +00:00
luis daniel lucio quiroz 8604ce0870 let the xml_cdr find the wav file, regardles mono/multi tenant 2015-03-31 16:20:55 +00:00
Nate Jones 7afde6e4a9 Users: Prep language file for upcoming Group mods. 2015-03-31 06:10:12 +00:00
Nate Jones 4865768a59 Users: Added Show All feature. 2015-03-31 06:05:08 +00:00
Nate Jones 608329dfb9 CDR & Devices: Hide Show All buttons after showing all. 2015-03-31 03:16:20 +00:00
Mark Crane 8e4d2092ee Prevent trying to pickup the call from the caller in the same call group. 2015-03-31 03:06:55 +00:00
Nate Jones 2fb45fe1d2 Destinations: Changing a Destination's Domain should now also update the domain_uuid on the associated dialplan and dialplan details. Delete Destination from a different domain should also function properly now. 2015-03-31 02:53:36 +00:00
Nate Jones 8616a5b03f Users: Added ability to move User to different domain. Also remove User Settings upon delete. 2015-03-31 00:54:24 +00:00
Mark Crane d69df4ba65 Add base64 decode to the IVR Menu. 2015-03-31 00:50:13 +00:00
Mark Crane e263d520b7 Add an additional method to store the recordings. 2015-03-30 23:08:21 +00:00
Nate Jones 1fb31f0f63 Destinations: Fix issue with Domain not getting set correctly when editing Destination under a remote (different than current) domain (via the destination_domain permission). 2015-03-30 22:57:12 +00:00
Mark Crane dc4cb7dfd3 Change the array from $result to $recordings. 2015-03-30 22:49:47 +00:00
Mark Crane 15820cf1aa Get the recording list from the database instead of the file system. 2015-03-30 22:40:03 +00:00
Nate Jones 49044ff0f4 Permissions: Consistify (new word!) permission names for Show All functionality on Devices & Destinations. 2015-03-29 01:33:56 +00:00
Mark Crane 127adbf7a5 Get a new set of default and domain settings for use when http_domain_filter is set to false. Remove debug numbers from access denied messages in provisioning and remove other redundant code. 2015-03-28 11:37:56 +00:00
Mark Crane b166a21f5e Update the 4.x and 5.x Polycom templates. 2015-03-28 09:59:00 +00:00
Mark Crane 1d84b28715 Change the category to type. 2015-03-28 09:58:19 +00:00
Mark Crane 8760d75c04 Fix a bug added when adding the key profiles feature. Device key id would conflict with other categories of keys like line, memory and expansion keys. If only using the line keys you wouldn't experience this problem. 2015-03-28 04:42:24 +00:00
Mark Crane 58d5c5a913 Fix Destinations so that it will correctly show DIDs that are not assigned to a domain. 2015-03-27 18:13:03 +00:00
Nate Jones 5d7d72d958 Enhanced/Minimized Theme: Adjust <th> text size. 2015-03-27 17:44:12 +00:00
Mark Crane 86b356e4bf Remove the search by. 2015-03-27 17:31:00 +00:00
Mark Crane 9b05f29c6f Add 4.x template for Polycom to make it more intuitive. 2015-03-27 16:20:07 +00:00
Mark Crane a9da1c3add Increase the security on accounts -> users list and streamline the search. 2015-03-27 16:18:30 +00:00
Nate Jones 41acf3c968 Contacts: Fixed/implemented permissions, added Relations. 2015-03-27 04:35:21 +00:00
luis daniel lucio quiroz fbbd475ad6 optional text_append 2015-03-27 01:09:25 +00:00
Nate Jones 30fe8156fd Contacts: Sort list initially by Organization, then by First, Last. 2015-03-26 20:13:24 +00:00
Nate Jones 347577af4f User Edit: Sort Contact select options a little better. 2015-03-26 19:51:53 +00:00
Nate Jones 80e4849bc0 Contacts: Fix redirect after Add and Edit, remove redundant [+] buttons and auto-scroll Notes. 2015-03-26 19:47:57 +00:00
Mark Crane 972117d298 Provisioning Devices add DNS SRV record to the SIP transport select list. 2015-03-26 15:48:57 +00:00
Mark Crane 8df3e822de Completed the change and test for system -> variables with final adjustments. 2015-03-26 00:18:19 +00:00
Mark Crane 2f3c7bab3b Correct the order of the tags. 2015-03-26 00:09:54 +00:00
Mark Crane da1bd47284 Try again to get the position right. 2015-03-26 00:05:14 +00:00
Mark Crane 04206891cc Move the hostname column and fix the add button position. 2015-03-26 00:01:24 +00:00
Mark Crane db7f701d01 Save the variables when the hostname is not set or when the hostname matches the current server. 2015-03-25 23:50:48 +00:00
Nate Jones 6734ee23c9 Ring Groups: Corrected redirect to be relative on Back and Save. Added Call Forward edit link to main Ring Groups list (as displayed on User Dashboard). 2015-03-25 22:47:11 +00:00
Mark Crane d8144b48ff Add hostname to the variable list. 2015-03-25 20:30:17 +00:00
Mark Crane 9e6e1ee6e2 Add hostname to the variables. 2015-03-25 18:30:18 +00:00
Nate Jones bc1e5374b0 Fax Server: Mods to email2fax feature to prevent unnecessary/undesired cover page from being generated. 2015-03-25 17:52:45 +00:00
Nate Jones f87aea5211 Fax Server: Sort Sent faxes descending. 2015-03-25 17:42:45 +00:00
Nate Jones ed4ee38b4c Extensions: Added direct link to Calls page, requested in Issue 870. 2015-03-25 17:11:07 +00:00
luis daniel lucio quiroz 3bf77b3716 not short-tags on all project 2015-03-25 13:46:19 +00:00
luis daniel lucio quiroz ee92e7fadc not short-tags on time-conditions 2015-03-25 13:30:26 +00:00
Mark Crane 66af9472f9 Fix the order of the LDAP options so its used before ldap_bind. 2015-03-24 20:49:44 +00:00
Mark Crane d986adf0f8 Add a time out for the LDAP. 2015-03-24 20:16:53 +00:00
Mark Crane fac5c85cf2 Update the LDAP authentication. 2015-03-24 19:54:59 +00:00
Mark Crane bf7f1d6d6a Don't require the domain to be lower case. 2015-03-24 08:40:02 +00:00
Mark Crane 73c6cec61c No need for this include again as the scripts_dir is already set by this point. 2015-03-24 07:05:28 +00:00
Mark Crane 95344623ce Fix the XML for languages.lua. 2015-03-24 06:21:47 +00:00
Nate Jones b82de6cd1f Destination: Exclude set:accountcode from being displayed in the Actions list. 2015-03-23 23:57:27 +00:00
Mark Crane cb68c028bf Fix the LDAP user log in by setting user_uuid SESSION and account for the user unique global option. 2015-03-23 23:46:18 +00:00
Nate Jones 85d98d49cd Notifications: Default to using file_get_contents(), instead of cURL, and hide Recipient (email) field unless Notifications is enabled. 2015-03-23 23:13:52 +00:00
Mark Crane 3b46b8ff67 Add a missing semi-colon on the signup.php page. 2015-03-23 20:06:28 +00:00
Nate Jones 6f983669da Fax Server: Added permission to control Advanced section visibility. Addresses comment on r7943. 2015-03-23 17:26:47 +00:00
Nate Jones 83ee064db6 Destinations: Fixed search, sorting and paging. Should resolve issue 891 (at least #1). 2015-03-23 16:33:16 +00:00
Errol Samuels 87a30dcd97 Added goodbye message when maximum searches have been reached so caller is aware the call will hangup. 2015-03-23 05:35:41 +00:00
Mark Crane 15ece0d43e Schemas is used by only 1-2 people so I'm moving it to an optional application under the apps directory. 2015-03-23 04:31:46 +00:00
Mark Crane 880cfd5069 Change the context to the domain_name. 2015-03-23 04:29:09 +00:00
luis daniel lucio quiroz 85d84b11d0 do not change headers, add yours 2015-03-23 01:53:25 +00:00
Errol Samuels 6025abd8e9 slight correction 2015-03-22 20:30:40 +00:00
Errol Samuels e1ca972a8e Peplaced transfer_context with just context because transfer_context seems to return an
UNDEF value and breaks att_xfer when attempting to transfer using *4.
2015-03-22 20:26:22 +00:00
Mark Crane 116c6f05d2 Add base64 field to recordings, voicemail, and voicemail recordings. 2015-03-22 10:52:10 +00:00
Nate Jones f50824fb41 Extensions: Fixed sorting. 2015-03-22 08:48:50 +00:00
Nate Jones ff5746bba5 Extensions: Search fixed. 2015-03-22 08:42:44 +00:00
Nate Jones e575f492d5 Fax Server: Additional checks on folder presence and permissions. 2015-03-22 08:22:51 +00:00
Nate Jones fcb53fd7f9 Misc: Implement maximum limits on multiple apps. 2015-03-22 08:17:04 +00:00
Errol Samuels 0e67783602 Added remote reboot capability for Aastra phones 2015-03-22 08:04:03 +00:00
Mark Crane 16480d62dd Fix the database class count. 2015-03-22 07:54:35 +00:00
Mark Crane 6d13f8a872 Update http_cache.conf.xml for a more complete set of instructions. 2015-03-22 04:15:26 +00:00
Mark Crane be4de11ed2 Show all the default settings without paging. 2015-03-22 04:02:29 +00:00
Mark Crane f742c22359 Set the user_context on an call flows to the domain name for single tenant. 2015-03-22 03:33:37 +00:00
Mark Crane 48499a0e2b Set the user_context on an ring_groups to the domain name. 2015-03-22 03:27:42 +00:00
Mark Crane 81c213f8d8 Set the user_context on an extension to the domain name. 2015-03-22 03:22:05 +00:00
Nate Jones 4e29b11b7c Follow Me: Fix redirect issue, after save, from Issue 886.
Destinations: Minor visual adjustments.
2015-03-22 00:53:56 +00:00
Nate Jones 6680e41956 Time Conditions: Changed Advanced button (top) to Dialplan instead. 2015-03-22 00:25:55 +00:00
Nate Jones 060af354eb Time Conditions: Use break instead of space when adding additional 'Advanced' description. 2015-03-22 00:10:52 +00:00
Mark Crane 46a66f9771 Remove extra line spaces. 2015-03-22 00:01:39 +00:00
Mark Crane cbf7ed1c1a Add CDR http_enabled to default settings and add the settings more efficiently. 2015-03-21 23:59:56 +00:00
Nate Jones 014191f047 Time Conditions: Change how preset destinations function (when a Preset is checked, the Alternate Destination is required and used, unless a Default Destination is selected, or a Destination is set on the individual Presets themselves. Interface also adjusts if Presets are NOT available. 2015-03-21 23:55:20 +00:00
Mark Crane 268aaee702 Add alternative options for bridging calls for call forward and fix LCR option for follow me. 2015-03-21 22:49:12 +00:00
Mark Crane 621f5036e5 Add another work around for FreeSWITCH XML CDR that is not escaped correctly in FreeSWITCH 1.4.17. 2015-03-21 20:52:59 +00:00
Errol Samuels 5657a688cb Fixed problem with accountcode not passing in SIP Header 2015-03-21 09:21:29 +00:00
Errol Samuels 747b45f9a0 Fixed problem with accountcode not passing in SIP Header 2015-03-21 09:02:51 +00:00
Mark Crane 3e35981e18 Save the Call Center XML only if the directory path has a value. 2015-03-21 06:14:28 +00:00
Mark Crane 7bdb0e5402 Add switch call_center dir to default settings. 2015-03-21 06:03:58 +00:00
Mark Crane a0fb7210c7 Fix the API label using an elseif. 2015-03-21 05:43:21 +00:00
Mark Crane 76c3acd122 Compress the vertical spacing default settings code. Display the category API in upper case. 2015-03-21 05:36:52 +00:00
Mark Crane 51ec4a9466 Move strtolower function to reduce one line of code. 2015-03-21 03:25:35 +00:00
Mark Crane d82708ddac Update dialplan edit adjust to ensure the dialplan is able to be viewed correctly and validate the uuid with is_uuid. 2015-03-21 03:23:44 +00:00
Mark Crane 77fbe94767 Fix conference center greeting allow upper case file names. 2015-03-20 19:05:49 +00:00
Mark Crane 03181426b5 IVR Menu use the ringback method from ring groups. 2015-03-20 04:56:25 +00:00
Mark Crane eabfe79a1a IVR Menu commit ringback this approach will be replaced but is added to document the approach. 2015-03-20 04:54:49 +00:00
Nate Jones 6ec0de14ad CDR: Fixed Issue 885, clicking records now results in the correct details being loaded. 2015-03-20 02:50:30 +00:00
Nate Jones 5730130b8e Voicemail: Added default settings to control default Voicemail File and Keep Local settings when creating new extensions and/or Voicemail boxes. 2015-03-20 01:09:18 +00:00
Nate Jones 70ba072c6f Dialplan Edit: Default details group to 0 if not specified (also fixes Copy feature). Fix details group order by. 2015-03-19 23:42:25 +00:00
Nate Jones e43e7d14a2 Fax Server: Added refresh button, and fixed sorting and paging on logs. 2015-03-19 00:45:22 +00:00
Nate Jones c30234e953 Fax Server: Account code value now retrieved properly from the db on edit. 2015-03-19 00:10:18 +00:00
Nate Jones 96fac87d4e IVR: Change Invalid Sound field to select box. 2015-03-18 23:49:53 +00:00
Mark Crane ee3f09be15 Fix ringback on the ivr menu by getting the global variable representing the ring back tones. 2015-03-18 23:31:14 +00:00
Nate Jones 2305e71eb3 MOH: Prevent duplicate options in MOH select boxes. 2015-03-18 22:47:11 +00:00
Nate Jones 1c5e9196d6 Destinations: Fixed a logic issue causing actions to be discarded. Also, retain the existing dialplan Name and Description through an update of a Destination. 2015-03-18 22:21:40 +00:00
Mark Crane 4385aac2dd Remove trailing spaces or tabs. 2015-03-18 20:51:13 +00:00
Mark Crane 4e60342c7c Don't give this permission to any group by default follow_me_cid_set. 2015-03-18 18:34:12 +00:00
Nate Jones b5dde45892 Calls: Added ability to unset the caller id on Follow Me and Call Forwarding. 2015-03-18 14:36:12 +00:00
Mark Crane 9e28e6a8b5 Update XML CDR import replace xml_cdr -> http_enabled -> text with cdr -> http_enabled -> boolean. 2015-03-18 12:53:40 +00:00
Mark Crane 176163f24a Set event socket break to 8000. 2015-03-18 10:45:34 +00:00
Nate Jones 1c394b0a89 Account Settings: Vertical aligned form labels. 2015-03-18 08:59:33 +00:00
Nate Jones f982637c2b User Edit: Fix Language select box not populating with available languages. 2015-03-18 08:57:18 +00:00
Nate Jones 0e0311e271 Calls Edit: Included missing jquery-ui images, add label to Forwarding CID select box. 2015-03-18 08:17:57 +00:00
Nate Jones fe2c8ed41f Destinations: Removed attempt to create a dialplan entry when no Action is selected. Resolves Issue 867. 2015-03-18 07:28:05 +00:00
Nate Jones 0d9c51f753 Implemented fix suggested in Issue 823 - Add DOCUMENT_ROOT to require_once path on domain edit [and contacts_vcard.php, and save_switch_xml() function]. 2015-03-18 06:17:09 +00:00
Nate Jones d84fe69cbf Contacts: Fix suggested in Issue 787. Thanks. 2015-03-18 05:38:35 +00:00
Nate Jones 0e7e9c9ff4 Time Conditions: Add clarity to Preset description. 2015-03-18 05:23:33 +00:00
Nate Jones c8ad51b6a0 Time Conditions: Fixed destination select box problem mentioned in Issue 876 - reworked switch_select_destination() function. 2015-03-18 05:17:28 +00:00
Mark Crane 2e247d8182 Uncomment the SQL insert statements for LDAP. 2015-03-18 03:41:19 +00:00
Mark Crane 2b2a9afd2f Update LDAP authentication. 2015-03-18 02:39:35 +00:00
Nate Jones 535f62a1e1 Time Conditions: Fix for Issue 881 (Advanced button) and Issue 882 (Delete issue). 2015-03-17 19:02:48 +00:00
Mark Crane 71dc6eb570 Get rid of $auth_failed, if username session is set consider the the user authenticated. 2015-03-17 14:44:09 +00:00
Mark Crane 85d590ac81 Fix the register.expires on the Polycom 5.x template. 2015-03-17 06:41:47 +00:00
Nate Jones edbc99405d Fax Server: Fixed list row background color on local Inbox. 2015-03-16 22:12:55 +00:00
Mark Crane 8ba2167261 Update event socket timing for waiting for results. 2015-03-16 21:59:08 +00:00
Nate Jones eb32faf725 Contacts: Fixed URLs and Emails not displaying the Description in list view. 2015-03-16 20:04:38 +00:00
Mark Crane ce09537c21 Remove comments in the 5.x in under devices. 2015-03-16 18:33:50 +00:00
Mark Crane ac2c7146b7 Sometimes the Yealink fails to provide the 'p' therefor filter only for 'vp530'. 2015-03-16 17:46:34 +00:00
Mark Crane b2e729dcf2 Add a few additional params to the Polycom/5.x template. 2015-03-16 17:26:02 +00:00
Mark Crane 5546858298 Additional changes to the polycom/5.x template. 2015-03-16 16:46:09 +00:00
Mark Crane d5ddddefd5 Fix the provisioning for Yealink vp530. 2015-03-16 16:37:19 +00:00
Mark Crane 39e31960c1 Update the new polycom/5.x template. 2015-03-16 15:25:22 +00:00
Mark Crane 92c7eaaea6 Improve indentation on the mac.cfg file. 2015-03-15 21:58:25 +00:00
Mark Crane b41803b0f6 Update the Polycom 5.x template. 2015-03-15 21:52:33 +00:00
Mark Crane 66588cc513 Remove all of these extra files. 2015-03-15 21:31:04 +00:00
Nate Jones 0e2378068b Fax Logs: Fix for Issue 857, paging now works properly. 2015-03-15 10:18:23 +00:00
Nate Jones 266f9e1063 Voicemail:
- Adjust for single-quotes in caller_id_name on insert query (hopefully addressing Issue 877).
- If Keep Local is false, remove the recording from the file system.
- Fix Forward Destinations so message is fully copied to other extension voicemail boxes, not just emailed.
- Add script to Ext and VM Edit pages to prevent Listen or Download links being sent when Keep Local is false.
- Minor language mods.
2015-03-15 09:15:04 +00:00
Mark Crane 8448a2f504 Fix the time condition back button link. 2015-03-15 05:27:13 +00:00
Mark Crane ee2f31d4e9 Update the translations for time conditions. 2015-03-15 05:17:18 +00:00
Mark Crane f5990a29a4 Filter for the time condition app_uuid. 2015-03-15 04:55:05 +00:00
Mark Crane ced14d93dd Add time conditions list and delete so that permissions can be used to allow users to use it. 2015-03-15 03:36:51 +00:00
Nate Jones b3443bec1c Resolves Issue 878 - Restriction removed that required at least one user account to remain in a domain. Superadmin/Admin still not allowed to delete their own account (for obvious reasons). 2015-03-15 02:11:35 +00:00
Nate Jones 44b67c820d Tidy up a different switch statement within save_dialplan_xml(). 2015-03-15 01:33:27 +00:00
Nate Jones fca19e3c5f Implemented fix proposed in Issue 880 to include missing time-of-day case in switch statement within save_dialplan_xml(). Thanks, Seth. 2015-03-15 01:15:23 +00:00
Nate Jones 82d6d1808e Status > Emails: Added ability to view, download, resend and/or delete failed emails. 2015-03-14 06:43:19 +00:00
Nate Jones 61f1e00d32 CDR: Prevent users with no assigned extensions from viewing records. Search form mods. Fix issue with CDR Delete removing the wrong call recording. 2015-03-14 00:03:16 +00:00
Mark Crane ee331f8643 Adjust the debug code for call center agent status. 2015-03-13 19:17:14 +00:00
Mark Crane b56318dcbf More adjustments to fix agent status. 2015-03-13 18:50:29 +00:00
Mark Crane a81d340c11 Update call center agent status so that it gets the list of agents from the database instead of mod_callcenter. 2015-03-13 18:08:25 +00:00
Mark Crane 812a0618e9 Fix IVR Menu ringback. 2015-03-13 16:45:05 +00:00
luis daniel lucio quiroz 676f025076 custom html for enhanced theme 2015-03-12 18:20:17 +00:00
Mark Crane 449b8edce5 Remove as Polycom refers to it as an unknown parameter. 2015-03-12 00:41:18 +00:00
Mark Crane 5f84ec7824 Add a new polycom config for firmware version 5.x 2015-03-12 00:16:11 +00:00
Nate Jones fc90260e05 Enhanced/Minimized Themes: Hide number input spinners. 2015-03-11 23:20:18 +00:00
Mark Crane 006af7d74d Fix the indentation in callcenter.conf.lua. 2015-03-11 19:33:07 +00:00
Mark Crane 700f27d89f Call Center XML Handler now generates XML correctly. 2015-03-11 19:28:18 +00:00
Nate Jones d9ab12eb5c Fax Server: Hide advanced settings for Users. 2015-03-10 20:31:45 +00:00
Mark Crane a423291096 Change valet_park_out $1 to $2. 2015-03-10 18:27:28 +00:00
Mark Crane 05033b14d2 Set the user context to the domain name. 2015-03-10 10:48:50 +00:00
Mark Crane a051c70ad1 A little more work to get rid of the default context. 2015-03-10 10:47:25 +00:00
Mark Crane 94163c7537 Fix a missing comma. 2015-03-10 10:41:26 +00:00
Mark Crane 3cd71946f2 Change the dialplan context to the domain name. 2015-03-10 10:21:43 +00:00
Mark Crane 245c43ddb5 Fix the search for destinations (DID/DDI) across domains for superadmins. 2015-03-10 05:10:22 +00:00
Mark Crane f5d1ff8928 Hide the back button for Account -> Settings. 2015-03-10 03:41:34 +00:00
Mark Crane 8f224fee80 Flush memcache when changing phrases. 2015-03-10 00:47:42 +00:00
Mark Crane 3406ff62b4 Add the missing include for the languages section. 2015-03-09 23:49:15 +00:00
Mark Crane 2cecd0643b Time condition remove the break never on the destination_number. 2015-03-09 19:35:35 +00:00
Mark Crane 81b1056bfa Add time-of-day to XML files. 2015-03-09 15:58:02 +00:00
Mark Crane a1055b60a3 Add time-of-day to the XML handler. 2015-03-09 15:51:49 +00:00
Mark Crane 4642a6e4a5 Add XML Handler section language. 2015-03-09 05:26:10 +00:00
Mark Crane f77fc97ed2 Fix the device key delete. 2015-03-08 03:26:25 +00:00
Mark Crane d3a624fc33 Finish the device show all button. 2015-03-07 22:51:32 +00:00
Mark Crane dcbab015ab Add 'Show All' button text for Devices. 2015-03-07 21:59:17 +00:00
Mark Crane 96900f5e33 Changes the order of one of the columns and adjust some spacing. 2015-03-07 21:51:02 +00:00
Mark Crane fc4fc69878 Add device show all which allows a domain administrator the option to see all devices on the entire system. 2015-03-07 21:35:18 +00:00
Nate Jones a21846b195 Time Conditions: Properly load "Alternate Destination" action on edit, and some other logic fixes. 2015-03-07 20:56:40 +00:00
Mark Crane 788697e8d3 Fix the indentation in the file. 2015-03-07 13:48:13 +00:00
Mark Crane fe180d7075 Add missing fields to dialplan copy: dialplan inline, break, and groups. 2015-03-07 13:45:22 +00:00
Mark Crane 8fa504becd 2015-03-07 13:44:27 +00:00
Mark Crane 55b74bfd72 Remove the ucwords for the domain name as its not used anywhere else. 2015-03-07 13:04:33 +00:00
Mark Crane d5ac3009a5 Add show all button for dialplan -> destinations 2015-03-07 12:59:53 +00:00
Mark Crane 98305d23e9 Fix the CDR statistics show all. 2015-03-07 12:39:42 +00:00
Mark Crane 86cc3fe196 Change the anti-action to an action for the alternate destination because it is the last dialplan group and has a condition that will always match when the time condition destination number is called. 2015-03-07 11:09:11 +00:00
Mark Crane 1b0c8ccc98 Set debug to false. 2015-03-07 10:59:00 +00:00
Mark Crane 37e3355237 Escape sip_full_from, sip_full_to, caller_id so that the HTTP POST for CDR will work. Will remove once FreeSWITCH corrects the bug and its in a release version. 2015-03-07 10:45:33 +00:00
Mark Crane 872a7bf19e Improve the security on the delete for devices by validating the uuid and fix the delete when deleting a key from a global device profile. 2015-03-07 07:03:22 +00:00
Nate Jones eaaa7d0258 Time Conditions: Remove condition group if no action is defined. 2015-03-06 22:31:55 +00:00
Mark Crane 426df6e524 Add show all code donated by Chris Black 2015-03-06 17:15:09 +00:00
Nate Jones 525e1df6a9 Time Conditions: Implemented time-of-day variable. 2015-03-05 13:34:59 +00:00
Nate Jones b004a901d7 Time Conditions: Another fix. 2015-03-05 12:45:22 +00:00
Mark Crane 2a4f9f6a10 A few minor changes. 2015-03-05 12:38:35 +00:00
Nate Jones 8170e5188c Time Conditions: Another fix. 2015-03-05 12:37:36 +00:00
Mark Crane 8e24025518 Select only group_name to make it more efficient. 2015-03-05 12:34:48 +00:00
Nate Jones 5176bd53db Time Conditions: Few more bugs squashed. 2015-03-05 12:02:26 +00:00
Nate Jones dfb361531d Time Conditions: Still under construction, but almost finished. 2015-03-05 11:15:11 +00:00
Mark Crane e485944001 Add group_uuid to the group member delete redirect. 2015-03-05 10:49:26 +00:00
Mark Crane 03e9d0a632 Add group_uuid to the browser redirect. 2015-03-05 10:47:13 +00:00
Mark Crane 867f245cc2 Switch from group_name to group_uuid. 2015-03-05 10:32:21 +00:00
Mark Crane e8dad06afc Add group_uuid to the links and move the sql query out of the content. 2015-03-05 10:26:44 +00:00
Mark Crane f035560027 Add group_uuid to v_group_users when assigning a user to a group. 2015-03-05 10:17:47 +00:00
Mark Crane 1fbb5febbf When deleting the group delete the group user and group permissions. Increase the security by validating the uuid. 2015-03-05 09:37:37 +00:00
Nate Jones 1c4a197b7c Adjusted switch_select_destination() to maintain space between placeholder option. 2015-03-04 21:05:45 +00:00
Nate Jones 419a9555cf Adjusted switch_select_destination() to allow placeholder text as first option. 2015-03-04 20:31:02 +00:00
Nate Jones 4cd8ac2ea8 Adjusted switch_select_destination() function so doesn't select last (blank) option by default. 2015-03-04 07:04:41 +00:00
Mark Crane 53c6a1784d Fix limit on inbound and outbound routes. 2015-03-03 18:48:08 +00:00
Mark Crane 5b9e7deeb2 Add lua function settings. 2015-03-02 18:07:06 +00:00
Mark Crane 1818add6ac Remove deprecation on voicemail_attach_file which was done prematurely. 2015-03-01 07:40:06 +00:00
luis daniel lucio quiroz 2551d5559a short php tags fixed and javascript routine to make many other things to work 2015-03-01 00:27:04 +00:00
luis daniel lucio quiroz ae730b412e new follow_me_cid_set permission to allow cid change 2015-02-28 18:14:48 +00:00
Mark Crane 1b066c81c5 Add a new permission to hide the dial string from admins by default. 2015-02-28 16:18:12 +00:00
luis daniel lucio quiroz 68886ebf82 you can fix your forward caller id number/name 2015-02-28 04:07:15 +00:00
luis daniel lucio quiroz dcbe8b9abf you can fix your follow me caller id number/name 2015-02-28 02:32:25 +00:00
luis daniel lucio quiroz dd7dc99163 missing text class include 2015-02-28 01:31:24 +00:00
luis daniel lucio quiroz 7d83237154 do not show others extension to non-admin users 2015-02-27 15:25:49 +00:00
Nate Jones 3bb60ce71b Emails: Different arrow. 2015-02-26 04:21:48 +00:00
Nate Jones 1c7932a4e6 Emails: Initial build of failed email log. Still under construction. 2015-02-26 04:18:16 +00:00
Nate Jones f734a88530 Phrases: Prevent empty Structure entry from being created on save. 2015-02-25 23:38:20 +00:00
Nate Jones 571a0cd2d8 IVR Menu: Edit - Made top Save button functional. 2015-02-25 23:03:05 +00:00
Nate Jones 6c6e98743f Contacts: Fix paging on list view. 2015-02-25 22:46:58 +00:00
Nate Jones eba17b6b88 Interactive Conference: Removed some testing code, fixed formatting of Joined and Quiet times. 2015-02-25 21:03:15 +00:00
Digital Daz 3dd2ec4a2e Remove a log line used for debug 2015-02-25 20:40:51 +00:00
Nate Jones b8eeb44fca Interactive Conference: Simplified layout a bit, added icons. 2015-02-25 20:38:24 +00:00
Digital Daz ad82d7fe49 Fixed a couple of typos and changed the way the DSN is inserted. 2015-02-25 20:35:22 +00:00
Nate Jones 8712b69e0a Conference Center: Change PIN Length field to operate as a 'minimum pin length'. Added translation of error messages. 2015-02-25 18:15:16 +00:00
Nate Jones 105b75dc7b Themes: Restored Enhanced theme template. 2015-02-25 10:35:14 +00:00
Nate Jones 78e4a3471f Themes: Menu, body and domain selector drop shadow now uses login drop shadow color. Added new background image for Enhanced/Minimized theme. 2015-02-25 10:27:45 +00:00
Nate Jones 930306ab32 Time Conditions: Remove debug code.
Dialplan Manager: Set width on checkbox column.
2015-02-25 10:09:22 +00:00
Nate Jones 3647421bf1 Time Conditions: Editable. 2015-02-25 09:52:12 +00:00
Mark Crane d42d8f4da4 2015-02-25 09:10:12 +00:00
Mark Crane 7f75b4f415 Additional work to get the time condition edit to save to the database. Not completed yet. 2015-02-24 19:29:10 +00:00
Nate Jones 561c292ec0 Fax Server: New Fax - Minor layout adjustment for consistency. 2015-02-24 18:39:21 +00:00
Nate Jones 0e3085cead Fax Server: Sent - Removed "application/download" content type, was causing file type to be mis-identified in FireFox. 2015-02-24 18:21:14 +00:00
Nate Jones 9a1b836f6d Voicemail: Email notification script updated to support multiple languages. 2015-02-24 09:40:45 +00:00
Nate Jones cbb39328f5 Voicemail: Added additional options for email notification (attach vm, download link, auto-play listen link). Also cleaned up email templates a little. 2015-02-24 08:09:01 +00:00
Mark Crane a3a623aa35 Ensure the mac address is only hexadecimal value. Add provision http_domain_filter values of false as an option for provisioning. 2015-02-24 07:24:50 +00:00
Nate Jones eb7a47917f Voicemail: Remove prompt to listen to new or saved messages if no new or saved messages exist. 2015-02-23 22:51:24 +00:00
Mark Crane 15510460e1 Add rport to the vp530. 2015-02-23 07:07:41 +00:00
Mark Crane 93d22dce39 Voicemail IVR is now completed and ready to go. 2015-02-22 23:58:37 +00:00
Mark Crane bf8247d332 Add additional protection to prevent intercepting calls that have already been answered. 2015-02-21 20:33:23 +00:00
Mark Crane 7887e4ddd3 Add callcenter.conf.lua for xml handler. 2015-02-21 09:33:36 +00:00
Mark Crane 7f961d03dc 2015-02-21 05:33:53 +00:00
Mark Crane c5ba922679 Set the min='0' for dialplan detail edit. 2015-02-20 04:27:14 +00:00
Mark Crane a040769c9a FAX edit destination number is not always a number so have to remove the constraint. 2015-02-20 04:24:18 +00:00
Nate Jones bf64ee1c09 Fax Server: Move default FusionPBX cover page logo graphic to resources folder. 2015-02-19 23:55:44 +00:00
Nate Jones 475997d6f9 Fax Server: Revert Destination Number field to type text to support non-numeric entries. 2015-02-19 23:37:48 +00:00
Nate Jones 6b6f749e51 CDR Delete: Removed unnecessary output. 2015-02-19 23:32:20 +00:00
Nate Jones e5d29fed34 CDR: Some fixes and enhancements...
- Ability to delete single and multiple CDR records, if desired (permission required, includes recording, if any).

- Search criteria kept through paging, deleting, sorting, and upon using the provided 'Back' button on the CDR Details page.

- Added some missing language translations.
2015-02-19 23:28:40 +00:00
Mark Crane 39cd7742ef Write the xml file for sip profiles and reloadxml when the sip profiles are missing add new defaults. 2015-02-17 19:18:43 +00:00
Nate Jones 10896c10ac Operator Panel: Added ability to set Eavesdrop destination (from assigned extensions), pause refresh manually or on mouse hover of control elements for better user experience. Hide eavesdrop function if no extensions assigned to user (addresses Issue 851). 2015-02-17 11:04:56 +00:00
Mark Crane fbd0d4fd8d Rebuild the array to allow profile keys to be overridden by keys assigned to this device. 2015-02-15 20:57:43 +00:00
Mark Crane 17bad08d5e Change device_key_line from text to numeric. 2015-02-15 20:41:39 +00:00
Mark Crane 6bd812b9f4 Integrate the device profile keys with the provisioning templates. 2015-02-15 20:26:08 +00:00
Mark Crane ea54d1b618 Update the device profiles. 2015-02-15 19:00:16 +00:00
Mark Crane 336f83d02a Allow the domain_uuid to be changed only with the device_profile_domain permission. 2015-02-15 18:53:10 +00:00
Mark Crane 7b38c69206 One more minor change. 2015-02-15 18:42:38 +00:00
Mark Crane 091adf9f70 Change app_languages.php for Key Profile to Profile. 2015-02-15 18:39:08 +00:00
Mark Crane 506e4929fa Move the acl to the optional Apps directory as it isn't completed yet. 2015-02-15 18:29:40 +00:00
Mark Crane 57d22b4604 Set play file as the default by removing the empty select option. 2015-02-15 17:46:07 +00:00
Mark Crane ae3b61ff2b Fix the play option in phrases. 2015-02-15 17:35:05 +00:00
Nate Jones 91fe322c00 Visual adjustments. 2015-02-15 11:57:14 +00:00
Nate Jones 80fddb7fd4 Visual adjustments. 2015-02-15 10:05:08 +00:00
Nate Jones eb3618e9f7 Visual adjustments. 2015-02-15 09:39:23 +00:00
Nate Jones 44f7e38a09 Visual adjustments. 2015-02-15 09:29:10 +00:00
Nate Jones 18fefa3682 Visual adjustments. 2015-02-15 09:20:19 +00:00
Nate Jones d8751d1e62 Visual adjustments. 2015-02-15 09:15:34 +00:00
Nate Jones 485c91a1cc Services: Fully mutlilinguified. 2015-02-15 09:04:54 +00:00
Nate Jones 2b0396063a Code cleanup. 2015-02-15 08:46:20 +00:00
Nate Jones 45637ba48a Missing semicolon. 2015-02-15 08:12:04 +00:00
Nate Jones 14212325f4 ACL: Language fixes. 2015-02-15 08:11:21 +00:00
Nate Jones 6de949d074 Visual adjustments. 2015-02-15 08:05:14 +00:00
Nate Jones dbd9fbc07b Visual adjustments. 2015-02-15 07:59:02 +00:00
Nate Jones 256e424b3e Removal of colon next to form label names. 2015-02-15 06:50:00 +00:00
Nate Jones 151d2db735 Voicemails: Initial GUI for adding IVR-style menu options to the voicemail system.
Devices: Minor visual adjustment.
IVR Menu: Minor visual and language adjustments.
2015-02-15 04:54:32 +00:00
Nate Jones 0f0b40e6aa Devices: Fixed MAC formatting on devices list. 2015-02-15 00:46:58 +00:00
Nate Jones 257b986318 Devices: Add view permission to Key Profiles button. 2015-02-15 00:40:39 +00:00
Nate Jones 69d4caeed6 Devices: Added GUI for new Key Profiles feature.
Destinations: Fixed missing label.
2015-02-15 00:33:56 +00:00
Nate Jones cc8677bbc8 Phrases: Completed app_languages file. 2015-02-14 05:39:36 +00:00
Nate Jones e6a687e785 Phrases: Ability to sequence playback of audio files in the IVR, initial groundwork for other switch phrase manipulation. 2015-02-14 05:32:43 +00:00
Mark Crane 13b71977ef Remove the trailing line feed. Goal is to remove all trailing line feeds. 2015-02-13 23:22:30 +00:00
luis daniel lucio quiroz 0aa0966789 support for created_by 2015-02-13 22:17:42 +00:00
luis daniel lucio quiroz 4fe67c39c5 only superadmins and admins can assign a user 2015-02-13 21:17:02 +00:00
luis daniel lucio quiroz 5e39fa64e6 conference menu for users 2015-02-13 20:29:08 +00:00
luis daniel lucio quiroz eeedadb499 acl menu fix 2015-02-13 19:16:35 +00:00
luis daniel lucio quiroz 0bc858bffa debug messages for conference center 2015-02-13 18:51:19 +00:00
Mark Crane d7f46b4fdb Minor formatting adjusts to the xml cdr import. 2015-02-12 16:42:58 +00:00
Nate Jones 557a1d6e6d Conferences: Visual adjustments, fixed Active Conferences links.
Active Conferences: Reworked/renamed permissions, removed Active Conference from the User's menu (addressing Issue 662), misc visual adjustments.
Conference Center: Misc visual adjustments.
2015-02-12 02:09:59 +00:00
Mark Crane 163c8a1e8c Remove the importing XML CDR from the file system when the xml_cdr.php is loaded. This will make the page load faster. Use a POST to the web server or a cron job to load from the file system. 2015-02-11 16:39:54 +00:00
Mark Crane 475f2d4a3d Additional work on time conditions plan to finish it tonight or tomorrow. 2015-02-11 16:34:03 +00:00
Mark Crane 22fcdc5f5a When the user is updated increase the salt length and remove special characters that can cause problems. 2015-02-10 20:54:03 +00:00
Mark Crane 5a4b509206 Signup.php increase the salt length and remove special characters that can cause problems. 2015-02-10 20:44:16 +00:00
Mark Crane 6b36561cef Ordinal change didn't help after all comment out the deprecated fields. 2015-02-10 19:55:28 +00:00
Mark Crane 14961a5a30 Add the ordinal value for an edge case that requires it when it shouldn't be required. 2015-02-10 19:44:00 +00:00
Mark Crane c0769586b7 Update the comments in the yealink/t46g template. 2015-02-10 06:15:26 +00:00
Mark Crane 0bb3b0529f Correct many of the comments in the yealink/t42g/{$mac}.cfg template. 2015-02-10 05:50:28 +00:00
Mark Crane 499299b09c Fix a few of the comments in the yealink/t42g/y000000000029.cfg template. 2015-02-10 05:18:18 +00:00
Mark Crane 926d688237 Add a comment to the code and fix the indentation to match the rest of code. 2015-02-10 00:56:57 +00:00
Digital Daz cc96241171 Use the domain timezone in voicemail message playback. 2015-02-10 00:01:37 +00:00
Mark Crane 8c33d8d493 More work to get the new time conditions to save to the database. 2015-02-09 18:20:44 +00:00
Mark Crane 1f3c2a92e4 Next phase of work on time conditions edit to hide time settings for the preset holidays. 2015-02-08 08:34:24 +00:00
Digital Daz d42d185917 Fix formatting on previous commit 2015-02-07 18:28:12 +00:00
Digital Daz 8d4efb0683 Allow other modules callerID prefixes to propagate down if prefix is not populated. eg Destinations prefix. 2015-02-07 18:20:03 +00:00
Mark Crane fe0575faa6 Fix hot desking internal and outbound caller id for the hot desked phone. 2015-02-06 18:51:22 +00:00
Nate Jones bc8095a624 Contacts: Fix Shared Groups select query. 2015-02-06 04:11:11 +00:00
Nate Jones 84596b7107 Domains: Add front end to set domain status, and assign a parent domain. 2015-02-06 01:26:06 +00:00
Nate Jones 2f5fe5055f Fax to Email: Minor format adjustment. 2015-02-05 09:43:44 +00:00
Mark Crane b412709734 Time condition edit set the action and anti-action. 2015-02-05 06:59:32 +00:00
Nate Jones ae042687a3 Interactive Conference: Removed echo of error on try/catch. 2015-02-05 02:59:49 +00:00
Nate Jones ef3ddebe99 Active Conferences: Fixed View link and Name, added Participant PIN column. 2015-02-05 02:50:39 +00:00
Nate Jones 15fe7a8500 Interactive Conference: Replace recording status text with an icon. 2015-02-05 00:43:17 +00:00
Mark Crane 6c09689499 Fix music on hold issue for the Panasonic UT1xx models. Resolves issue 840. 2015-02-04 07:33:00 +00:00
Mark Crane 06c829fc0b Fix music on hold for the Polycom VVX template works with version 4+ firmware. Google code issue 840. 2015-02-04 07:27:45 +00:00
luis daniel lucio quiroz a1ed5c5d54 spa support 2015-02-04 03:53:34 +00:00
Mark Crane 124aa45f02 Time condition update the indentation and get time condition details from the database. 2015-02-03 15:30:41 +00:00
Mark Crane af9da4d8ab Add odbc-dsn to external and ipv6 sip profiles. 2015-02-03 03:21:21 +00:00
Mark Crane 9926d69bcb Remove the email type from the input form for fax edit as it doesn't allow multiple email addresses. 2015-01-30 23:20:01 +00:00
Mark Crane 6d901034ad Work on intercept.lua to prevent an error with the hostname. 2015-01-30 01:32:38 +00:00
Nate Jones fe90df7ce5 User Dashboard: Restore missing column headings (a better solution considering variable overwrite happening). 2015-01-29 19:31:06 +00:00
Nate Jones c770dd389c User Dashboard: Restore missing column headings. 2015-01-29 19:24:26 +00:00
Mark Crane d9ff915ec2 When adding or deleting a conference center clear memcache correctly. 2015-01-29 10:17:56 +00:00
Mark Crane 37e5339fd3 Fix the conference default greeting. 2015-01-29 10:07:50 +00:00
Mark Crane 3c475f1e1f Fix fpdf so that it is capable of UTF-8. 2015-01-29 08:36:49 +00:00
Mark Crane 8a895958e8 Sort voicemail boxes in ascending order. 2015-01-29 07:18:29 +00:00
Mark Crane 384afc98fa Remove order by on the select count for ring_groups.php as its not needed. 2015-01-29 07:14:57 +00:00
Mark Crane 5fefdd595b Tested gateway with registration set to false on 1.4.15 no longer requires a username and password so it is no longer required in fusionpbx when the registration is set to false. 2015-01-29 07:07:54 +00:00
Mark Crane 187ca5ee25 Adjust the provisioning for the polycom vvx templates so that the line type key assignment is more accurate. 2015-01-29 07:00:21 +00:00
Nate Jones 742289f6cd IVR Menu Option Edit: Increase width of Destination field. 2015-01-28 23:28:33 +00:00
Mark Crane 3a910469d9 Remove the extension password as required if its empty then it provides a default password. 2015-01-28 18:37:56 +00:00
Nate Jones f207c81655 Extension Edit: Restore mouseover reveal on VM Password. 2015-01-27 18:19:34 +00:00
Mark Crane 3176e6197f Remove the type numeric from the voicemail password as it conflicts password reveal code. 2015-01-27 18:11:05 +00:00
James Rose 6ae84db42d Changed DTMF to AVT (rfc2833) on ext1. Commented provisioning of phone volume (ring/speaker/handset/headset). 2015-01-27 15:27:06 +00:00
luis daniel lucio quiroz 56872c05a2 for_fax now on fax 2015-01-27 14:51:57 +00:00
luis daniel lucio quiroz 226651280e accountcode now on fax, PCMU/A as absolute codec string 2015-01-26 19:54:52 +00:00
luis daniel lucio quiroz 0fb50b5559 upgrade.php missing class php 2015-01-26 18:32:08 +00:00
luis daniel lucio quiroz 0d59e882e4 voicemails send HTML and Plain emails 2015-01-26 16:07:17 +00:00
Mark Crane e4a74c8d26 Add to the text translations for Domains. 2015-01-25 09:01:59 +00:00
Mark Crane 7aac4451c7 Add domain control to dialplan -> destinations to users in the superadmin group by default. 2015-01-25 08:24:32 +00:00
Mark Crane b98a475d80 Unset the generic $array variable to prevent duplicates in app -> default settings. 2015-01-24 20:56:10 +00:00
Mark Crane 4a04ff4cc0 Prevent duplicates on the time conditons presets and make it more efficient to load the default settings. 2015-01-24 10:22:16 +00:00
Nate Jones 0c741a9016 Default Settings Edit: JSON value detection.
Functions: is_json function added.
2015-01-24 04:39:17 +00:00
Nate Jones b17af46313 Time Conditions: Overhaul (on Add only, so far). 2015-01-24 04:10:37 +00:00
Mark Crane 12ca6e7498 Add the project path to accounts -> extensions and device MAC address link. 2015-01-24 02:15:18 +00:00
Nate Jones c65851ff39 Default Settings: Added multi-word Category formatting, minor code cleanup. 2015-01-23 20:01:48 +00:00
Mark Crane 1e989c23f0 Fix the handling for * with stream file. 2015-01-23 18:10:48 +00:00
Nate Jones dc3682df3e Dialplan Edit: Some code cleanup. 2015-01-23 00:58:47 +00:00
Nate Jones 4ac2d8adfc Dialplan Edit: Some code cleanup. 2015-01-22 23:49:02 +00:00
Philippe Rioual bb27d3bf5d removed extra digit in FR toll allow templates 2015-01-22 19:44:58 +00:00
Nate Jones 22ea16bdb0 Dialplan Edit: Implement dynamic stretching on Data column. 2015-01-22 19:14:12 +00:00
luis daniel lucio quiroz 0d769dbf75 callee instaed of caller when billing incoming calls 2015-01-22 15:29:43 +00:00
Mark Crane 3fb65b68fa Fix the menu for the acl. 2015-01-22 12:00:30 +00:00
Mark Crane 5ee1d567bf Add a the beginning of a gui for ACL. 2015-01-22 11:51:26 +00:00
Mark Crane 46f12b3fb3 Increase the gateway domain_uuid security. 2015-01-22 11:32:16 +00:00
Mark Crane 79512bd009 Fix the gateway delete. 2015-01-22 11:26:06 +00:00
Mark Crane 4d672a63e8 Show global gateways. 2015-01-22 11:21:18 +00:00
Mark Crane 3cb5e94d0f Allow the gateway domain_uuid to be null to support global gateways. 2015-01-22 11:18:34 +00:00
Mark Crane 04b0ffccc1 Enable ability to have global gateways. 2015-01-22 11:10:51 +00:00
Mark Crane 99af5bc728 Fix the internal-ipv6 xml. 2015-01-22 10:28:03 +00:00
Mark Crane 1a2d0c88f6 A few minor changes to the sip profile spacing. 2015-01-22 10:14:45 +00:00
Mark Crane ea947db1e8 When sip profiles are loaded use the new enabled attribute. 2015-01-22 09:41:45 +00:00
Nate Jones 3fbcd188cd Variables: Click to toggle Enabled state. 2015-01-22 01:10:30 +00:00
Nate Jones e4e1fb7912 SIP Profiles: Save xml and reload. 2015-01-22 01:07:37 +00:00
Nate Jones f3f1fd11bf SIP Profiles: Click to toggle Enabled state. Fixed column sorting. 2015-01-22 00:51:01 +00:00
Mark Crane 0b4f178fcd Add sip profiles enabled="false" for variables that are default disabled. 2015-01-22 00:22:15 +00:00
Philippe Rioual 659adc8731 added french "FR" country toll_allow templates 2015-01-21 16:11:06 +00:00
Digital Daz 56770f3b31 Add missing preset label for extension summary 2015-01-21 09:17:43 +00:00
Digital Daz 9b94049314 Fixed up ALOC in extensions summary 2015-01-21 01:46:34 +00:00
Digital Daz 58d1830fda Add some preselects to extensions summary, 'Last Hour', 'Today', 'Yesterday', 'This Month' and 'This Year' 2015-01-21 01:06:22 +00:00
Digital Daz 3dc9c26b72 Add extra options to xml_cdr language file. 2015-01-21 00:51:39 +00:00
Digital Daz 789cdd480b Fix music on hold for tone streams 2015-01-21 00:07:41 +00:00
Mark Crane e2e1a24dca Simplify use of domain_uuid in extensions.php. 2015-01-20 20:59:27 +00:00
luis daniel lucio quiroz 76b908dcd2 v_mailto supports doctype as well 2015-01-20 19:10:00 +00:00
Mark Crane da886099a7 Add a missing template variable that was removed by another developer. 2015-01-20 19:06:02 +00:00
Mark Crane d1684a3511 Change require to include. 2015-01-20 06:44:12 +00:00
Mark Crane 5929762e9c Fix the install the text class. 2015-01-20 06:27:20 +00:00
Mark Crane fde1aff5ba Change the number of allowed loops for event socket to 2000 to prevent registrations from being truncated. 2015-01-20 01:16:10 +00:00
luis daniel lucio quiroz 230be9198f better voicemail templates 2015-01-19 18:59:59 +00:00
Mark Crane 0ff0aa11ae Add fax codec changes as recommended by glk70. -Thanks 2015-01-18 12:05:21 +00:00
Nate Jones 557742c385 Default Settings: Fixed blank value when Translate tool enabled. 2015-01-18 11:43:17 +00:00
Mark Crane 0ce69b3009 Change the primary key for v_languages from languages_uuid to language_uuid. 2015-01-18 11:13:49 +00:00
Nate Jones d199d58487 Add UUID field to Language table population. 2015-01-18 11:09:04 +00:00
Mark Crane 472c6936fc Add the primary key to the schema. 2015-01-18 11:06:26 +00:00
Nate Jones 3f775412fd Account Settings: Fix Language select box. 2015-01-18 11:02:42 +00:00
Nate Jones f119831044 Rename & move Languages table creation/population to core. 2015-01-18 10:59:42 +00:00
Mark Crane 035fd71e45 Fix the language select on domain and default settings. 2015-01-18 10:56:41 +00:00
Nate Jones 852986a231 Text class fix. 2015-01-18 10:40:41 +00:00
Nate Jones 474e63f939 Use the new multi-lingual code on misc files. 2015-01-18 10:33:34 +00:00
Mark Crane 4e2ec883b1 Add the text class to more of the optional applications. 2015-01-18 10:15:38 +00:00
Mark Crane 03220c9754 Add the text class to more of the applications. 2015-01-18 10:06:08 +00:00
Nate Jones fbb48feb0d Use the new multi-lingual code on fusionpbx/app sub directories. 2015-01-18 10:04:43 +00:00
Nate Jones 2346af5e4b Text Class: Fixes. 2015-01-18 09:25:50 +00:00
Mark Crane a3ecd317d4 Use the new multi-lingual code on fusionpbx/core sub directories. 2015-01-18 09:22:07 +00:00
Nate Jones 23f87feb57 Translate: Necessary resource mods. 2015-01-18 07:54:19 +00:00
Mark Crane ee4890b01f Add the app session languages array as a list of available languages that have been translated for that application. 2015-01-18 07:52:28 +00:00
Mark Crane 9f11255e80 Use the new text class for multi-lingual support. 2015-01-18 07:42:57 +00:00
Mark Crane 6244a12b64 Update classes/text.php 2015-01-18 07:42:17 +00:00
Mark Crane 7a3e20f926 Add a new text array that is used in the translations. 2015-01-18 06:36:00 +00:00
luis daniel lucio quiroz 07a167248a v_mailto is more tolerant to default settings misconfiguration 2015-01-17 23:34:58 +00:00
Mark Crane 6c1bf58baf Fix voicemail copy to multiple destinations. 2015-01-17 21:56:56 +00:00
Mark Crane 573159519b Handle the space used in fax name by adding a dash before it is saved to the database. Then when displaying it remove the dash. 2015-01-17 17:47:59 +00:00
Mark Crane 350749623b Contact phone edit change the type from number to text. We use a regular expression to remove all formatting but its convenient to allow the formatting and then remove it to save in the databaase. In particular its convenient when using copy and paste. 2015-01-17 08:26:08 +00:00
Mark Crane f4c24f77ad Switch the email to text as voicemail_mail_to can be more than one email address which is not allowed using the email type. 2015-01-17 08:21:33 +00:00
Mark Crane 7bbac16e9e Remove some extra line feeds. 2015-01-17 07:50:43 +00:00
Mark Crane 2de87d1b49 Fix is_local.lua script on the stable branch. 2015-01-17 07:31:50 +00:00
Mark Crane 332bf6116f Use the conference description on the active conferences page. 2015-01-17 06:59:12 +00:00
Nate Jones a6a0581116 Upgrade: Restored Menu Defaults functionality. 2015-01-17 03:27:10 +00:00
Mark Crane b68953e384 Use memcache flush in the new PHP class. 2015-01-16 08:25:54 +00:00
Mark Crane 44107c5d30 Remove an extra space in the event. 2015-01-16 04:16:56 +00:00
Mark Crane ce3b932116 Send a custom memcache event to FreeSWITCH. 2015-01-16 03:52:32 +00:00
Mark Crane dd07ee6a45 Update event_socket_create and event_socket_request. 2015-01-16 03:29:51 +00:00
Mark Crane 91bfa85bac Update the memcache reference to use the new cache PHP class. 2015-01-16 00:21:02 +00:00
Mark Crane 618626e97a Fix the string quotations and return on the method. 2015-01-15 19:33:27 +00:00
Mark Crane 783ecc762a Change the methods from private to public. 2015-01-15 19:24:54 +00:00
Mark Crane 2d62405e7e Add a missing bracket. 2015-01-15 19:22:39 +00:00
Mark Crane 8d1f9fe7d4 Exchange the direct call to memcache for the dialplan edit and replace it with the 'cache' class. 2015-01-15 19:15:01 +00:00
Nate Jones f34bda3f45 Operator Panel: Add permission to control visibility of "(Available) On Demand" button. 2015-01-15 18:55:24 +00:00
Mark Crane 93b22c2ec7 Get rid of this variable since its not being used. 2015-01-15 18:34:02 +00:00
Mark Crane d636119e23 Correct the methods in the class description. 2015-01-15 18:19:54 +00:00
Mark Crane 2d9c6769f6 Add the first version of the cache class. 2015-01-15 18:15:25 +00:00
Mark Crane 595745ce30 Add FusionPBX events class. 2015-01-15 16:24:53 +00:00
Mark Crane c506c56efc Allow admins to edit dialplan destinations. 2015-01-12 21:12:27 +00:00
Mark Crane f00f426aba Add a missing ) to fix the syntax. 2015-01-12 18:34:12 +00:00
Mark Crane f223d1ec96 Fix the menu item edit group list so that it shows the global groups. 2015-01-12 18:32:18 +00:00
Mark Crane 9c968daaa0 Add a SQLite example as requested in this issue.
https://code.google.com/p/fusionpbx/issues/detail?id=806&start=100
2015-01-11 08:11:50 +00:00
Mark Crane 1a1dcd43aa Change the queue_announce_frequency default to 0. 2015-01-11 08:04:55 +00:00
Mark Crane d29de219c5 Add > 0 2015-01-10 01:03:20 +00:00
Mark Crane cc4a4ab8d2 Only write the provisioning files if switch provision dir path is set. 2015-01-10 01:02:39 +00:00
Mark Crane 5a8ba17b57 Sets the domain_uuid to null on the child data for global dialplans. 2015-01-09 22:29:12 +00:00
Mark Crane dd51a8237b Make the indentation on the dialplan delete more consistent with the rest of the code base. 2015-01-09 22:09:58 +00:00
Mark Crane bb1886ad63 Finish removing the paths for the main menus. 2015-01-09 21:44:31 +00:00
Mark Crane 0688fcca37 Remove the path for the main menu links. Doing this to make the menu more compatible with touch screens. 2015-01-09 21:38:34 +00:00
Mark Crane db523f4f68 Fix the main menu color. 2015-01-09 20:57:40 +00:00
Mark Crane c39447e510 Remove active extensions from the menu. 2015-01-09 20:23:13 +00:00
Mark Crane 60a128265c Remove active extensions. 2015-01-09 20:16:08 +00:00
Mark Crane a131772df8 Remove active extensions. 2015-01-09 20:15:47 +00:00
Mark Crane 07f8b1e9c4 Remove active extensions. 2015-01-09 20:15:21 +00:00
Mark Crane 7ddc15972e outbound_route_to_bridge simplify the dialplan detail SQL select. 2015-01-09 11:10:13 +00:00
Mark Crane 64c3580302 Fix the group list for accounts -> user -> edit. 2015-01-08 09:54:24 +00:00
Mark Crane 8d6146fa7a Additional work to fix groups and permissions. 2015-01-08 08:51:40 +00:00
Mark Crane a82143e6b6 Fix the null check on groups. 2015-01-08 06:15:05 +00:00
Mark Crane 6c9f3e41f8 Fix call block paging. 2015-01-08 06:13:24 +00:00
Mark Crane 76f6f7b1d4 Properly escape < and > for dialplan detail data. 2015-01-07 17:11:06 +00:00
luis daniel lucio quiroz f57a194d91 v_mailto now works without attachments 2015-01-07 03:18:35 +00:00
Mark Crane 3a1c749f8f Change the recording playback in the destination select list to use the new streamfile.lua. 2015-01-04 09:36:58 +00:00
Mark Crane 058dcb0f0e Add streamfile.lua to provide ability to stream files and change the volume, position of the playback, pause and more. 2015-01-04 09:29:02 +00:00
luis daniel lucio quiroz 0595bd9556 more error support to event handler 2015-01-04 04:08:38 +00:00
luis daniel lucio quiroz 0f725276d6 new event handler 2015-01-04 03:49:10 +00:00
luis daniel lucio quiroz 8a28d55936 new version function as an alias of software_version 2015-01-04 02:34:22 +00:00
Mark Crane 3744bb9eb0 If mod shout exits use it to save voicemail messages as mp3. 2015-01-04 00:10:52 +00:00
Mark Crane 90b55b3d54 Remove the logging to make way for a better logging. The older one caused a problem for someone without permission to write to /tmp/logfile.txt 2015-01-03 08:32:30 +00:00
Mark Crane 9cb0c180d8 Fix the sip profile path when the fusionpbx directory is inside the website root directory. 2014-12-31 23:34:17 +00:00
luis daniel lucio quiroz b74adefc32 no strlen on billing maths 2014-12-29 05:35:08 +00:00
Mark Crane 06660dbf5a Add logout menu again. 2014-12-27 21:05:56 +00:00
Mark Crane 33e0f047c5 Remove extra line spaces. 2014-12-27 20:26:28 +00:00
Mark Crane c5d18e41be Get rid of the is included which prevents the redirect. 2014-12-27 18:20:30 +00:00
Mark Crane 86582905c0 Remove a trailing line feed. 2014-12-27 17:52:06 +00:00
Mark Crane 3164693197 Add debug information. 2014-12-27 17:49:35 +00:00
Mark Crane cec874e932 Need to add GLOB_BRACE to support the {menu,config} 2014-12-27 17:30:07 +00:00
Mark Crane 449daffbef Change the | to a comma had to review the syntax on the glob command. 2014-12-27 17:28:07 +00:00
Mark Crane 7889e26cfa Add $y = 0; and a try catch block to the menu. 2014-12-27 17:22:57 +00:00
Mark Crane 86b55ee887 Fix the file extension for app/meetings/app_menu.php 2014-12-27 17:12:42 +00:00
Mark Crane 01cf058e00 Add a missing ? to fix the syntax. 2014-12-27 16:44:17 +00:00
Mark Crane a6bea0aa6f Add a try catch to the menu include loop. 2014-12-27 07:25:11 +00:00
Mark Crane 4eb984f3d8 Fix the null used in users/app_defaults.php 2014-12-27 07:11:26 +00:00
Mark Crane d573aa8b0b Run the users app defaults only once. 2014-12-26 15:47:37 +00:00
Mark Crane b9bb32f4bd Change domain_uuid variable to look for null. 2014-12-26 07:32:25 +00:00
Mark Crane 55bf6740eb Work on the menu restore more. 2014-12-26 07:27:13 +00:00
Mark Crane b3751de936 Allow the domain_uuid for flexibility but when null is set consider it a global default. 2014-12-26 07:15:12 +00:00
Mark Crane 250d7f5898 Minor change on the variable name. 2014-12-26 07:08:54 +00:00
Mark Crane b6d94b46e0 Check for permissions that have a null domain_uuid. 2014-12-26 07:08:05 +00:00
Mark Crane af20b81b0e Add a missing greater than sign. 2014-12-26 06:55:04 +00:00
Mark Crane ae62c8600c Delete the group permissions before restoring them. 2014-12-26 06:53:27 +00:00
Mark Crane 1b1738ed3f Make groups and group permissions global. Managing these per domain is too much work to manage per domain. 2014-12-26 06:37:07 +00:00
Mark Crane 630177eb55 Remove the park directory. 2014-12-26 03:30:00 +00:00
Mark Crane ddca77629e Move the menu array to app_menu.php 2014-12-26 03:27:54 +00:00
Mark Crane 6d98ffc320 Add app_menu.php files for the menu. 2014-12-25 19:32:57 +00:00
Mark Crane cfc13830c9 Add no answer, aloc, and busy to the extension summary. 2014-12-25 19:00:14 +00:00
Mark Crane bc4c165d6e Add no answer, aloc, and busy to extension summary app_languages. 2014-12-25 02:03:21 +00:00
Mark Crane 091a8aeaa9 Add the description translation to app_languages.php. 2014-12-24 06:38:17 +00:00
Mark Crane f5c7e7038b Update the example code to set MOH. Add the auto_loader class only if it is not defined. 2014-12-24 06:36:09 +00:00
luis daniel lucio quiroz cef63582d0 HTML5 input patter for mac address 2014-12-23 01:06:20 +00:00
luis daniel lucio quiroz bc479c6053 my bad, it was polycom 2014-12-22 23:49:41 +00:00
luis daniel lucio quiroz 16e6e0aa08 yealink needs mac without dashes 2014-12-22 23:47:41 +00:00
Mark Crane 5aac3aa44d Add trim function to is_local.lua. 2014-12-22 19:34:55 +00:00
Mark Crane 36589ca987 Fix a problem with wakeup calls prompting for the extension. 2014-12-22 18:18:55 +00:00
luis daniel lucio quiroz 4d09350319 HTML5 input tags for ring_group_edit 2014-12-21 19:33:54 +00:00
luis daniel lucio quiroz 3b0954fe0c HTML5 input tags for fifo_add 2014-12-21 19:26:44 +00:00
luis daniel lucio quiroz a5155d6bad HTML5 input tags for ivr_menu_edit 2014-12-21 19:21:44 +00:00
luis daniel lucio quiroz 230c469c01 HTML5 input tags for extension_edit 2014-12-21 19:12:53 +00:00
luis daniel lucio quiroz 87242ccaf3 HTML5 input tags for fax_*_edit 2014-12-21 19:05:41 +00:00
luis daniel lucio quiroz 3fa422fb86 HTML5 input tags for contact_*_edit 2014-12-21 18:38:20 +00:00
Mark Crane 48aa4d5ac3 Remove redundant gmtOffset information. 2014-12-21 08:15:05 +00:00
luis daniel lucio quiroz 175fcf7624 use standard PHP tags 2014-12-21 07:15:59 +00:00
luis daniel lucio quiroz 39be364de4 HTML5 input tags for call_center_agent_edit 2014-12-21 07:03:10 +00:00
luis daniel lucio quiroz 02d0c5f2ad HTML5 input tags for call_center_queue_edit 2014-12-21 06:52:39 +00:00
luis daniel lucio quiroz 64a793bdfd HTML5 input tags for call_broadcast_edit 2014-12-21 06:40:39 +00:00
luis daniel lucio quiroz ffb0c71a8e HTML5 input tags for call_block_edit 2014-12-21 06:34:17 +00:00
luis daniel lucio quiroz 4438c2cc70 HTML5 input tags for dialplan_edit 2014-12-21 06:27:18 +00:00
luis daniel lucio quiroz affb15ba13 HTML5 input tags for destination_edit 2014-12-21 06:18:18 +00:00
luis daniel lucio quiroz ce959b8fc5 HTML5 input tags for usersupdate 2014-12-21 06:12:21 +00:00
luis daniel lucio quiroz 57b8e4e71e HTML5 input tags for xmpp_profile_edit 2014-12-21 06:08:47 +00:00
luis daniel lucio quiroz 2616a95007 HTML5 input tags for gateway_edit 2014-12-21 06:01:41 +00:00
luis daniel lucio quiroz 2a837f5ce1 HTML5 input tags for extension_edit 2014-12-21 05:46:21 +00:00
luis daniel lucio quiroz e24a1d91bc HTML5 input tags for device_edit 2014-12-21 05:11:44 +00:00
Mark Crane ab84c00798 Add outbound_proxy port and transport to the Polycom vvx template (works with firmware v4 or higher) 2014-12-21 04:42:48 +00:00
Richard Neese 82c6f9b20c working on fixing moh with mark for playing in the gui and on moh 2014-12-20 00:55:29 +00:00
Mark Crane a050975da4 Add category to the html5 playback and strip slashes from the category and filename. 2014-12-20 00:26:09 +00:00
Mark Crane 39fae5ee50 Fix Dialplan Destination so that it won't fail if fax app is not installed. 2014-12-17 11:33:31 +00:00
Mark Crane 79ca28c0f4 Change one of the call center defaults from from 3 to 30. 2014-12-17 11:00:25 +00:00
Mark Crane da943b2975 Remove an extra comma in the dial_string. 2014-12-17 10:46:03 +00:00
Mark Crane 9787e03878 Fix the extension_uuid in the dial_string. 2014-12-17 10:41:30 +00:00
Mark Crane cd364e46ce Fix the per leg variables in the follow me dial_string. 2014-12-17 10:34:40 +00:00
Mark Crane 5741eb92c5 Missed one of the variables. 2014-12-17 10:11:13 +00:00
Mark Crane 26d23ad06b Prevent the dial_string from being truncated. 2014-12-17 10:10:40 +00:00
Mark Crane b7c79aff95 Update the leg timeout in the dial_string. 2014-12-17 09:58:00 +00:00
Mark Crane cdabd17e88 Update the dialed_domain in the dial_string. 2014-12-17 09:53:13 +00:00
Mark Crane 34a570ac73 Fix the dial_string remove the extra comma. 2014-12-17 09:33:18 +00:00
Mark Crane 4b25ab2587 Add follow me [domain][bridge][text] = outbound,loopback,lcr 2014-12-17 09:23:06 +00:00
Mark Crane 287106e66a Fix the dial string for follow me. 2014-12-17 06:50:12 +00:00
Mark Crane 0dfc2baafb Remove the deprecated schema definition for call forward no answer. 2014-12-16 22:59:25 +00:00
Mark Crane 95ad819b31 Fix the time condition dialplan detail order. 2014-12-16 22:14:42 +00:00
Mark Crane 778ea05932 Add outbound proxy to the Polycom VVX template. 2014-12-16 03:09:42 +00:00
Nate Jones ed511a229f Operator Panel: Stylized status buttons, moved CSS to templates. 2014-12-12 22:04:27 +00:00
Mark Crane 515ae0f0ae Remove the global intercept dialplan. 2014-12-12 10:24:38 +00:00
Mark Crane 8525e3abd7 Take please hold dialplan to the next level. 2014-12-12 10:18:55 +00:00
Mark Crane 92cf19395c Call Center set better defaults. 2014-12-12 10:05:57 +00:00
Mark Crane 1286906b28 Aastra change BLF/xfer to BLF Xfer. 2014-12-12 07:41:08 +00:00
Mark Crane da1e6ecb61 Fix the aastra labels. 2014-12-12 07:32:58 +00:00
Mark Crane e0a6ac107a Add Aastra feature codes for device provisioning. 2014-12-12 07:29:33 +00:00
Mark Crane 210fc09b2b Update the aastra template add a loop for each line and for key assignment. 2014-12-12 07:09:51 +00:00
Mark Crane 0a5498581c Fix the snom provisioning file names. 2014-12-10 17:37:47 +00:00
Mark Crane 84878056f9 Change the domain to the $${local_ip_v4} 2014-12-10 05:12:12 +00:00
Mark Crane e4953136b4 Only filter the conditions from the dialplan actions. 2014-12-10 04:43:27 +00:00
Nate Jones 1bb578c8e7 Issue 764 Fix: Explicitly defined desired fields in CDR select query, as suggested. 2014-12-10 03:57:48 +00:00
Nate Jones ab9a4f5ef9 Issue 767 Fix: Invalid Sound file path was hard coded in lua, modified as suggested to use file path defined in IVR. 2014-12-10 03:26:52 +00:00
Nate Jones 8e730e96dc Issue 782 Fix: Account Code previously set by SuperAdmin was being overwritten if Admin saved extension without billing system present. 2014-12-10 03:13:46 +00:00
Nate Jones 314bb4ff20 Operator Panel: Show status change buttons only if extensions assigned to current user. 2014-12-09 18:55:17 +00:00
Mark Crane 4c3a023bf7 Remove the a1 hash which breaks integration with Asterisk. a1 hash was also undermined by reverse authentication. 2014-12-09 09:45:14 +00:00
Nate Jones ff28327335 Default Login: JS issues, minor tweaks. 2014-12-09 05:17:36 +00:00
Nate Jones 7b0f504426 Enhanced Theme: Remove redundant app_languages include (fixes issue with Domain Selector). 2014-12-09 04:59:28 +00:00
Nate Jones 8a8f399b7b Operator Panel: Added ability to record an extension, and set the current user's status. 2014-12-09 03:38:02 +00:00
Nate Jones f81c65edc1 Operator Panel: Implemented additional permissions, Added ability to eavesdrop. 2014-12-09 00:31:25 +00:00
Nate Jones e682d95e3f Operator Panel: Cleanup (on previous commit) 2014-12-08 20:35:20 +00:00
Nate Jones 8a8f1dffba Operator Panel: Drag/drop functionality should work now within IE. 2014-12-08 20:28:24 +00:00
Nate Jones 81acdcea05 Operator Panel: Extension icon now indicates Status (Available, On Break, etc). 2014-12-08 19:43:21 +00:00
Nate Jones 90d0760335 Enhanced Theme: Correct app_languages include path. 2014-12-08 18:32:28 +00:00
Nate Jones 8fa3f0b9f7 Upgrade: Handle SVN Update response better. 2014-12-08 17:23:24 +00:00
Mark Crane 5cdd2561d2 Prevent call_hostname nil issue by pre-defining it. Improve the uuid nil check to prevent an error. 2014-12-07 02:06:32 +00:00
Mark Crane 9cb7a97857 Fix more tabbing, line feeds and domain_uuid to the session domain uuid. 2014-12-07 00:13:29 +00:00
Nate Jones bf215c6499 Login (Default): Password Reset functionality (requires PHP mcrypt library, Enhanced & Minimized themes only, enable in Default Settings). 2014-12-06 17:53:29 +00:00
luis daniel lucio quiroz 8d72b9d70c select_value was not selected 2014-12-06 17:01:16 +00:00
luis daniel lucio quiroz dfd68d123a we do not try to convert rate if price is zero, this will speed up things 2014-12-06 15:04:38 +00:00
Nate Jones f8b93f774c CDR: Minor visual adjustment on table cell if CID Name not present. 2014-12-06 10:34:29 +00:00
Nate Jones 77590a299f CDR: Added ability to export records in PDF format. 2014-12-06 10:30:44 +00:00
Nate Jones cb21c76c99 Login (Enhanced & Minimized Themes): Login box should now stretch to fit its content. Added login_shadow_color Default Setting.
Default Settings: When using Enabled toggle link, scrolls to previous position in setting list.
2014-12-06 01:54:30 +00:00
Nate Jones b698a14908 User Edit: Removed redundant app_languages include. 2014-12-06 00:15:05 +00:00
Mark Crane 2c2d129790 Fix forward on busy. 2014-12-05 12:55:04 +00:00
Mark Crane b135de42f0 Fix a problem with the previous commit. 2014-12-05 02:45:56 +00:00
Mark Crane fb4fd4d471 Play only the Conference Center Greeting if it has been provided. 2014-12-05 02:40:21 +00:00
Richard Neese 8c824eee1b fixing moh to work with all levels. 2014-12-04 23:17:11 +00:00
Richard Neese f74fa00d89 fixing moh for pkgs 2014-12-04 22:32:25 +00:00
Mark Crane 7c37ecd4a2 Add support for voicemail forward destinations. 2014-12-04 13:43:09 +00:00
Mark Crane b9e6aeef00 Fix the redirect on saving the voicemail settings to make it faster to setup. 2014-12-04 08:00:20 +00:00
Mark Crane 22b85f7d92 Add domain_uuid to the voicemail destinations table. 2014-12-04 07:51:05 +00:00
Nate Jones 5ac03c3df5 Operator Panel: Minor position adjustments to call kill icon. 2014-12-04 07:40:07 +00:00
Nate Jones c166ef396f Operator Panel: Added ability to kill a call. 2014-12-04 07:09:02 +00:00
Nate Jones 08732be364 Operator Panel: Enable auto-answer for calling ext for origination. 2014-12-04 05:54:58 +00:00
Nate Jones 46b1c5fa95 Operator Panel: Re-enable manual number dial feature (oops). 2014-12-04 05:21:02 +00:00
Nate Jones 4f5139aecf Operator Panel: Added ability to click the icons (first the 'from', then the 'to') to originate or transfer a call. 2014-12-04 02:24:27 +00:00
Nate Jones 3c8ae91400 Operator Panel: Tighten extension blocks vertically when group selected, but no assigned extensions exist. 2014-12-03 20:05:49 +00:00
Mark Crane 4503a7d7bb Uncomment voicemail forward destinations. 2014-12-03 15:10:36 +00:00
Mark Crane 42ba9a8598 Fix the operator panel permission assignment to the groups. 2014-12-03 12:56:51 +00:00
Mark Crane 31fffb21f2 Fix permissions on the operator panel. 2014-12-03 12:35:52 +00:00
Mark Crane 0dbe87a1cc Update the failure handler to work with the new call forward no answer feature. Optimize it using the variables instead of the database. Change the indentation. 2014-12-03 11:57:34 +00:00
Nate Jones 4f4237bb7e Operator Panel: Minor adjustment to re-enable auto-refresh. 2014-12-03 11:16:08 +00:00
Nate Jones f64b010c28 Operator Panel: Drag n' drop call transfer and origination, extension monitoring, etc. 2014-12-03 11:05:13 +00:00
Nate Jones bed960fd04 Fax Server: Added email-to-fax functionality. 2014-12-03 11:03:52 +00:00
Mark Crane d4f2c57455 Get the values from the database and set them as lua variables. 2014-12-03 09:02:54 +00:00
Mark Crane 2495e9e935 Set extension variables for forward all, busy, no answer, and do not disturb. 2014-12-03 08:05:41 +00:00
Mark Crane 13c62fa880 Get dialplan variables for forward all, busy and no answer. 2014-12-03 07:54:43 +00:00
Mark Crane e34a149a81 Change Call Forward Unanswered to Call Forward No Answer 2014-12-03 05:55:01 +00:00
Mark Crane 901117fab7 Revert the changes to call_block dialplan. 2014-12-03 01:44:10 +00:00
Nate Jones 6dc43cc200 Conference Rooms: Adjust Description column width of list. 2014-11-30 05:32:07 +00:00
Nate Jones 941ddd23eb Conference Rooms: Adjust colspan. 2014-11-30 05:28:20 +00:00
Nate Jones 8c1639ab31 Fax Server: Updated Copy function to include recently added fields. 2014-11-30 04:39:38 +00:00
Nate Jones 071da3a969 Default Settings: Auto-scroll previous Default Settings category into view after add/edit submit. 2014-11-30 04:34:23 +00:00
Nate Jones bd6f243190 Conference Center: Added room name field. 2014-11-30 03:43:04 +00:00
Nate Jones bbd8c183ef Conference Center: Lua script mods for Room Schedule (start/stop) functionality completed. 2014-11-30 03:08:02 +00:00
Nate Jones 402b9f5845 Conference Center: Added schedule (start/stop) fields to Conference Room edit gui. Back end forthcoming. 2014-11-29 21:21:26 +00:00
Nate Jones e8cc2b8e6e Call Forwarding: Added 'Unanswered' gui controls, script mods forthcoming. 2014-11-29 18:14:23 +00:00
Nate Jones cd1f1d6919 Fax Server: Mask account connection password field. 2014-11-29 16:19:55 +00:00
Nate Jones 8ca42bd67c Fax Server: Included check typo, and pull contact email from contact_emails table. 2014-11-29 15:29:49 +00:00
Nate Jones f31db4fec8 Fax Retry (LUA): nulls to nils. 2014-11-29 15:24:02 +00:00
Nate Jones 6a459dd3b4 Fax Server: Fixed uninitialized variable error. 2014-11-29 13:51:05 +00:00
Nate Jones c3f0a450c2 Fax Server: Send faxes to multiple recipients at once, customizable 'Subject Tag' for Remote Inbox viewing, preparations for Email-to-Fax functionality. 2014-11-29 13:32:42 +00:00
Nate Jones 3ec3f8ca2e Fax Server: Fax-to-Email Subject Tag addition to Subject text. 2014-11-29 13:10:57 +00:00
Nate Jones 4245225599 Functions: Miskey in valid_email function check. 2014-11-29 13:01:59 +00:00
Mark Crane cbe9e9f619 Ensure that call forward doesn't update follow me if follow_me_uuid is an empty string. 2014-11-28 20:40:59 +00:00
luis daniel lucio quiroz fb02f54a6a xml_handler directory.lua is now tolerant when no memcache available, fix a nil variable 2014-11-27 14:43:28 +00:00
Nate Jones d7180a79f3 Fax Server: Added interface to access (via IMAP or POP3) the inbound fax target email account. Required: PHP IMAP extension (obviously). 2014-11-27 13:37:08 +00:00
Nate Jones 221142554f Contacts: Added option to skip or replace Google contacts previously imported. 2014-11-27 02:28:47 +00:00
Nate Jones c72fbc50d9 Users: Delete prompt (for own account) multilinguified. 2014-11-27 00:48:42 +00:00
Mark Crane d9ce24a7a2 Revert r7258 as caused problems with endpoints receiving calls. 2014-11-26 20:54:44 +00:00
Mark Crane 8c526c2b76 Fix the Yealink t22p template remove an extra character that broke the template. 2014-11-26 03:24:43 +00:00
luis daniel lucio quiroz c188fe13e1 fix odd billing currency error when using different currencies 2014-11-25 22:22:28 +00:00
Nate Jones a8f019afb2 Contacts: Fix address import (typo). 2014-11-25 18:44:48 +00:00
Nate Jones 57ce284b68 Contacts: Language corrections and additions, curl and setting check (for Google import), remove groups on contact delete, added additional options for Google Contact import (select fields, set contact type, category and shared state). 2014-11-25 18:38:22 +00:00
Nate Jones 25dd27db2f Contacts: Added ability to import Google Contacts. Requires: PHP curl and Google: Account, API Console Project, Contacts API and OAuth Client ID credentials. 2014-11-25 08:35:53 +00:00
Nate Jones db64db6f50 Contacts: Additional "Community" field, language additions, misc adjustments. 2014-11-25 00:49:04 +00:00
Nate Jones d0378e3006 Contact Addresses: Update Google Maps image path. 2014-11-25 00:34:17 +00:00
Mark Crane dc0427f8f0 Move the icon_gmaps.png to the images directory. 2014-11-25 00:31:24 +00:00
Mark Crane 13a754f3f9 Add an images directory to contacts for the google icon. 2014-11-25 00:29:01 +00:00
Mark Crane 939ec6af1b Add additional directories to contacts. 2014-11-25 00:25:47 +00:00
Mark Crane c6a4352d2a predefine a variable to prevent a PHP notice. 2014-11-25 00:23:02 +00:00
Mark Crane 1fc85bb959 Change contact setting type label to name. 2014-11-24 22:08:50 +00:00
Mark Crane fdf08899ab Add templates for Grandstream gxp3240 and gxp3275. 2014-11-24 21:50:32 +00:00
Mark Crane 264a19c165 Change the class name from switch_modules to modules. 2014-11-23 09:45:10 +00:00
Mark Crane 202b30a2c1 Remove the require once for the modules class as its no longer needed. 2014-11-23 09:38:19 +00:00
Mark Crane 07158bf041 Move modules class from fusionpbx/resources/clasess to the app/modules/resources/classes directory. 2014-11-23 09:35:15 +00:00
Mark Crane 41c5adde54 Add modules/resources/classes directory. 2014-11-23 09:32:51 +00:00
Mark Crane 3f226c4203 Add modules/resources directory. 2014-11-23 09:32:18 +00:00
Mark Crane 2ca6548e3f Enable valet by default. 2014-11-23 09:30:50 +00:00
Nate Jones ba7b2b3a2c Contacts: Added Prefix, Middle and Suffix name fields. 2014-11-22 00:06:38 +00:00
Mark Crane 5b2fc71997 Remove example domain settings for menu and theme as they are not needed because default settings copy to a domain option. 2014-11-21 19:36:42 +00:00
Riccardo Granchi 390a5d4724 Engineered the management of bridge failures in local extension, with optional variables which by default provides the standard behavior. Changed the default order for extension_queue, which has *800 prefix, before the extension-intercom, which has the *8 prefix 2014-11-21 15:38:26 +00:00
Mark Crane 3daa03d2a5 Fix the alias for the XML handler. 2014-11-21 04:37:43 +00:00
Mark Crane 285504c976 Set the device line_number default to 1. 2014-11-20 02:34:03 +00:00
Nate Jones 6534872d28 Contacts: Ability to add unlimited Emails and URLs. Ability to specify a primary Email, Address, URL, and Number. Ability to select or define a custom label for Emails, Addresses, URLs, and Numbers (similar to Google Contacts). 2014-11-19 03:44:41 +00:00
Mark Crane daad4f0ca3 If forward all destination is not set then request it when using *72 otherwise use the current destination. 2014-11-18 11:16:59 +00:00
Mark Crane 394c03faa9 When disabling call forward do not remove the call forward destination number only disable it. 2014-11-18 10:38:11 +00:00
Mark Crane 3f603e664f Default behavior before call forward on busy was if busy go to voicemail. I just re-established that default for any company wanting to simply hangup on calls when the destination is busy then set system -> variables or domain -> variables to send_to_voicemail=false. This is a better default as it would require those wanting to simply hangup to set the value to false allowing the default behavior is preserved. 2014-11-18 10:29:03 +00:00
Mark Crane c35a348347 Add a few spaces to make the code consistent such as if( changed to if ( 2014-11-18 10:10:37 +00:00
Mark Crane a2daf9a3a3 (not forward_on_busy and originate_disposition ~= "CALL_REJECTED") needs to be optional behavior as it contradicts current behavior. My response here is complaints that the new behavior is a bug at least in some peoples eyes so needs to be a configurable option that is not forced onto those that don't want it. 2014-11-18 10:09:29 +00:00
Mark Crane 4a2d99d3a2 Remove hangup on subscriber absent user_exists condition on dialplan_local extension already verifies that it is an extension. 2014-11-18 10:04:17 +00:00
Mark Crane bd597ab23e Adjust app.lua improve the line spacing. 2014-11-18 10:03:00 +00:00
Mark Crane 1f201eaca6 Cleanup up the tabbing and trailing spaces and tabs. 2014-11-18 09:35:33 +00:00
Mark Crane 8add692a43 Correct the English used in the comment. 2014-11-18 09:33:19 +00:00
Mark Crane 5b45bde211 Add a missing single quote and xhtml nowrap. 2014-11-16 09:24:24 +00:00
Mark Crane ff2bdfcdf6 No longer force to a single domain for new single tenant installs. 2014-11-16 04:28:14 +00:00
Mark Crane 63315f7eb9 Fix a little white spacing. 2014-11-16 02:03:19 +00:00
Mark Crane d71c37cdf2 unset the 2 more prepared statements on domain settings. 2014-11-16 01:51:10 +00:00
Mark Crane f1963c6b6c Unset domain setting prepared statements. 2014-11-16 01:44:27 +00:00
Mark Crane 7da3244285 Change the translations for the command option and label. 2014-11-16 00:46:58 +00:00
Mark Crane 729d14ae2d Change backup cron script to command because it generates the backup command that could be used in a cron script but its not a cron script. 2014-11-16 00:26:11 +00:00
Mark Crane 8ab78eb8c2 Add snom 3xx, 7xx, and 8xx provisioning templates. 2014-11-16 00:00:18 +00:00
Mark Crane e4d104e060 Add the missing echo to device labels. 2014-11-15 22:23:33 +00:00
Mark Crane 1889130274 Add snom device category. 2014-11-15 22:19:11 +00:00
Mark Crane 68a43489c8 Add autoload_configs/verto.conf.xml 2014-11-15 21:04:18 +00:00
Mark Crane 90844598d6 Change $value to $row. 2014-11-15 00:36:54 +00:00
Mark Crane 13ca3b306b Add number_alias to the SQL select. 2014-11-15 00:27:17 +00:00
Mark Crane a8d0972d41 Fixed a problem with voicemail that was not including extensions that use a number alias. 2014-11-15 00:16:29 +00:00
luis daniel lucio quiroz 17b8c3ac69 cosmetic coding for disa 2014-11-14 22:12:18 +00:00
luis daniel lucio quiroz 1e732b9467 new enhanced disa without loopback 2014-11-14 20:39:15 +00:00
luis daniel lucio quiroz 00c6b78950 new enhanced disa 2014-11-14 17:47:45 +00:00
Riccardo Granchi 397f1e6ad3 Added export alert-info in inbound routes to implements distinctive ringtones 2014-11-14 14:27:33 +00:00
Riccardo Granchi e791130124 Added extension click_to_call_auto_answer to prevent auto-answer on b-leg 2014-11-14 14:12:50 +00:00
Riccardo Granchi 49e09f21f8 Set channel variable click_to_call=true during click_to_call 2014-11-14 14:04:18 +00:00
Mark Crane 22b3619da6 Fix a typo in the ubuntu/debian install scripts. 2014-11-14 06:44:02 +00:00
luis daniel lucio quiroz 7453c6a978 better place for rec_extension 2014-11-13 21:16:37 +00:00
luis daniel lucio quiroz a04ef0929a set record extension to wav 2014-11-13 16:26:14 +00:00
luis daniel lucio quiroz c37897b45a console messages for eavesdrop 2014-11-13 15:32:02 +00:00
Riccardo Granchi 9aacbb4d73 Disabled debug and minor log changes 2014-11-13 13:09:53 +00:00
Riccardo Granchi f9d854bc94 Added toll allow and ability to enable it in outbound routes 2014-11-13 12:12:41 +00:00
Riccardo Granchi 9a8945d374 Added back the ability to select multiple dialplan expressions, recognized automatically outbound prefix 2014-11-13 10:59:09 +00:00
Mark Crane 0d166590dd xml_handler will bind if memcached is down 2014-11-13 08:51:46 +00:00
Nate Jones d3c504fe4e Backup: Added ability to generate a cron script for automated backups. 2014-11-13 07:42:24 +00:00
Mark Crane 78146515d9 Fix the restore file so that file name can be provided. 2014-11-13 07:06:29 +00:00
Mark Crane 7836ed1211 Add a return string to the backup and restore. 2014-11-13 07:00:29 +00:00
Mark Crane 1eac4b3608 Add download, backup and restore to the backup PHP class. 2014-11-13 06:56:35 +00:00
Mark Crane 19734f0e3f Fix the backup extension in the backup class. 2014-11-13 02:11:23 +00:00
Mark Crane d28f86f783 Add a new backup PHP class. 2014-11-13 01:50:39 +00:00
Mark Crane 8cbfc0b9d4 Deprecate contact_groups_uuid and change it to contact_group_uuid. 2014-11-12 02:15:57 +00:00
Mark Crane b206469822 Remove the test code. 2014-11-08 22:24:33 +00:00
Mark Crane 1b404b2556 Work on the contact labels. 2014-11-08 22:13:47 +00:00
Mark Crane 4e6637dfda Fix the app_languages labels as the only the type should have the dash after it. Fix the spacing so the layout looks better. 2014-11-08 21:44:57 +00:00
Mark Crane a8a2631381 Fix remove excessive messages when using XML handler. 2014-11-08 04:46:51 +00:00
luis daniel lucio quiroz 8aee2dca59 delete contact settings support as well 2014-11-08 03:59:31 +00:00
luis daniel lucio quiroz 2c9cebfdb2 contact settings support 2014-11-08 03:34:02 +00:00
Riccardo Granchi 02f8e6366d Added inline=true in toll_type_assignment extension 2014-11-07 16:00:11 +00:00
Riccardo Granchi b36cbfb320 Fixed set_country_vars() duplicate declaration issue during domain creation 2014-11-07 15:21:34 +00:00
Riccardo Granchi eea6801c55 Possibilty to select a country in installation phase to set default country code variables 2014-11-07 10:22:56 +00:00
Riccardo Granchi 768bdf21b2 Added toll_type_assignment extension 2014-11-06 17:23:27 +00:00
Riccardo Granchi 8b7429f38c Added toll type assignment based on country templates 2014-11-06 16:56:31 +00:00
Riccardo Granchi d083708258 Simplified the use of a custom prefix in the outbound routes 2014-11-05 16:40:48 +00:00
Riccardo Granchi cebf871783 Fixed phone's redial problem, adding the ability to specify the outbound prefix in inbound route 2014-11-05 09:05:35 +00:00
Riccardo Granchi 98987576ce Added cleaning for own international prefix and sqlite compatibility 2014-11-04 15:29:05 +00:00
Mark Crane 6338b038e0 Paging - Prevent calling the user that initiated the page 2014-11-03 18:57:01 +00:00
Riccardo Granchi a86b83be7a Added it-ring definition 2014-11-03 11:16:10 +00:00
Mark Crane 3a25204bd9 Add the table name v_contact_settings 2014-11-02 09:40:47 +00:00
luis daniel lucio quiroz 587dcd0a2e lets prepare for custom settings on contacts app 2014-10-31 21:19:54 +00:00
Nate Jones ef97f0d7ad Ring Groups: Correction (Sequence, not Simultaneous). 2014-10-31 05:12:21 +00:00
Nate Jones 2ff71010e5 Ring Groups: Toggle Destinations Delay/Order column heading based on Strategy select value. 2014-10-31 05:06:46 +00:00
Mark Crane eb142de87e Change the default order for extension queue dialplan to give it a more appropriate order. Dialplan order below 110 are special because they apply to outbound routes. Therefore only dialplans that should affect outbound routes can be below order 110. 2014-10-31 04:30:30 +00:00
Mark Crane 5366c9e21b This should fix SIP profiles being loaded by the install or when using advanced -> upgrade when using the package install. 2014-10-31 04:11:06 +00:00
Nate Jones 78b7da1ca5 Dialplan Manager: Click Enabled value to toggle dialplan state. 2014-10-31 04:00:01 +00:00
Riccardo Granchi 14133e6df4 Fixed loop issue during forward to voicemail on busy 2014-10-30 09:30:31 +00:00
Nate Jones d0651aef25 Calls: Radio button label mods. 2014-10-30 05:50:03 +00:00
Nate Jones e2ffc6aaf0 Calls: Visual mods. 2014-10-30 05:39:04 +00:00
Nate Jones aee3e84216 Call Forwarding (on Busy): Minor visual mods. 2014-10-30 05:19:03 +00:00
Nate Jones 353be9755d Call Center Queue: Minor control button adjustments. 2014-10-30 04:37:19 +00:00
Digital Daz d7c8d5879c Fix indentation again 2014-10-30 02:58:04 +00:00
Digital Daz e9b96b8843 Fix indentation of last commit 2014-10-30 02:54:00 +00:00
Digital Daz 11b0a36a35 Added record_ext to record_template 2014-10-30 02:48:44 +00:00
Digital Daz 56812e0aa5 Added queue stop, start and restart buttons. 2014-10-30 02:16:53 +00:00
Digital Daz 6667c59282 Moved queue start, stop and reload buttons back to queue_edit as they do not work here. 2014-10-30 02:12:34 +00:00
Riccardo Granchi b4c6906520 Added forward on busy and extension queue features 2014-10-29 16:06:53 +00:00
Mark Crane 76c09322da Remove an extra 'the' to correct description in click to call. 2014-10-29 14:15:10 +00:00
Mark Crane b041144193 Fix the syntax on click to call. 2014-10-29 14:11:45 +00:00
Riccardo Granchi 7cf9b846bd Fixed call forward disabling 2014-10-29 13:35:18 +00:00
Philippe Rioual 22f04d0556 updated / enhanced french translations 2014-10-29 08:51:56 +00:00
Mark Crane a6e1bfec09 Fix a problem loading sip profiles when /etc/fusionpbx directory exists for a non package install. 2014-10-29 07:13:42 +00:00
Nate Jones 9be7b90b69 Default & Domain Settings: Clicking True/False value in Enabled column toggles status. 2014-10-28 09:17:58 +00:00
Mark Crane 91a6791c4e Voicemail Greetings - Fix the back button, automatically set select the greeting when its uploaded, and add the onclick to be able to change the greeeting. 2014-10-28 05:36:31 +00:00
Mark Crane a527ac7964 When assigning and extension to a device set the display_name. 2014-10-28 03:26:01 +00:00
Richard Neese cc2b15d47e added a missing / between freeswitch/sounds 2014-10-26 14:22:41 +00:00
Richard Neese 4bc95b13e7 patch for music_on_hold.php for package base installs 2014-10-26 02:29:39 +00:00
Richard Neese 543c7a8868 reverting a change thast not needed with new dir in place 2014-10-25 21:17:02 +00:00
Richard Neese f7e0f56109 working on moh fhs 2014-10-25 20:21:07 +00:00
Richard Neese b6a9d9c28d quick fix for music on hold 2014-10-25 19:53:16 +00:00
Mark Crane 14fa909cd2 Ensure the api object is set for is_local. 2014-10-25 00:25:08 +00:00
Mark Crane 46ebdd2fce Fix a syntax problem. 2014-10-25 00:19:43 +00:00
Mark Crane b006d8c28c Fix *98 for extensions with number-alias. 2014-10-25 00:01:46 +00:00
Richard Neese 2cbf1c7a14 fix for reading template from correct dir. 2014-10-24 18:24:16 +00:00
Nate Jones 8dfa1dac95 Active Call Center: Misc visual mods, moved queue counts to top of list, removed Eavesdrop link for Abandoned calls. 2014-10-24 02:59:30 +00:00
Nate Jones b6ce52c620 Call Center: Misc visual mods, moved/renamed module control buttons, removed unnecessary blank options from selects. 2014-10-24 02:55:55 +00:00
Nate Jones 54ee7fd1a4 Call Center: Added cc_cancel_reason log field. 2014-10-24 01:49:45 +00:00
Richard Neese c972415613 fixing /usr/share/fusionpbx to be /usr/share/examples/fusionpbx 2014-10-23 18:03:33 +00:00
Richard Neese 5ebf8e137b working on upgrade page svn issue wiht pkgs 2014-10-23 17:22:49 +00:00
Richard Neese 62f03fc5b1 fixing upgrade for pkgs not to display svn 2014-10-23 16:59:48 +00:00
Richard Neese 791054bf8e disabling sounds in the head branch as we are working to rm them from the install 2014-10-23 01:29:31 +00:00
Richard Neese 9aa46765bc 2014-10-23 00:43:47 +00:00
Richard Neese fc980bf20e adding atcom to dev branch 2014-10-23 00:19:49 +00:00
Mark Crane 91b6e4e194 Menu -> Status -> Services change 'pid file' to 'pid', and add 'file'. 2014-10-22 08:15:20 +00:00
Mark Crane 50dcfc3fae Update the Voicemail MWI LUA script to use the new scripts/resources/run directory. 2014-10-22 08:09:10 +00:00
Mark Crane 1392e00d7b Add a run directory in freeswitch/scripts/resources. 2014-10-22 06:40:38 +00:00
Mark Crane 71bfd161b3 Replace if statement so that it doesn't cause a problem with user_exist. 2014-10-22 00:32:00 +00:00
Mark Crane fb4a561149 Fix extension number-alias for extensions using paging. 2014-10-21 22:57:29 +00:00
Mark Crane 7508c06034 Fix the xml handler nil error for number_alias and fix some indentation. 2014-10-21 19:30:40 +00:00
Mark Crane f79e1f0b2e Add extension number-alias support to voicemail to fix a problem when using number-alias and checking voicemail with *97. 2014-10-21 19:19:04 +00:00
Toto Caruso 73cf21ca46 Fixed call_block loop on forward to answer machine and cache clean on delete/edit 2014-10-21 16:16:10 +00:00
Riccardo Granchi 3e0003abcf Fixed queue creation 2014-10-21 15:17:03 +00:00
Riccardo Granchi 22aae7955b Fixed audio stream absolute path in fifo member 2014-10-21 10:46:05 +00:00
Mark Crane fe4d4c64a4 disable registration for number-alias 2014-10-21 10:01:30 +00:00
Mark Crane 0265989a2d Add max tries to pin_number.lua so that if the pin number is wrong it will request the pin number again up to the maximum tries. 2014-10-21 05:48:27 +00:00
Mark Crane 024f536037 Fix a problem with DND when Follow Me hasn't been used for a particular extension. 2014-10-20 09:03:23 +00:00
Richard Neese aeba29f371 no longer using flash 2014-10-18 21:50:31 +00:00
Richard Neese 2f965c06bf fixing install.php with new layout for fhs com pliancy 2014-10-18 20:55:42 +00:00
Nate Jones f4bda82934 Fax Server: Only display allowed (shared and/or private) contacts in recipient select box when creating a new fax. 2014-10-18 08:58:59 +00:00
Nate Jones 9c32392394 Contact Add: Superadmins can create only Shared contacts under a foreign domain. 2014-10-18 08:27:26 +00:00
Nate Jones 06bd8c0ab1 Contact Edit: Remove ability for superadmin to change Shared status on a contact in a foreign domain. 2014-10-18 08:20:12 +00:00
Nate Jones 1f482e0834 User Create/Edit: Require a group assignment. 2014-10-18 08:18:03 +00:00
Nate Jones 982d7a5b93 Contacts: Minor code simplifications. 2014-10-18 07:14:41 +00:00
Nate Jones ce440b917a Contacts: Private or Shared. User can create a private contact only visible to them, or can choose to share a contact with others by assigning it to group(s). Users can view only contacts assigned to their group(s) and contacts NOT assigned to any group. 2014-10-18 06:49:34 +00:00
Nate Jones 254c92be1d User Edit: Adds group_uuid to v_group_users when assigning user to a group. 2014-10-18 03:17:13 +00:00
Nate Jones 5fc3ebfe9a Populate new group_uuid field in v_group_users table. 2014-10-18 01:25:57 +00:00
Mark Crane dde2ff4e06 Add group_uuid to the group users table. 2014-10-18 01:06:07 +00:00
Mark Crane 177b5105c3 Add a check for domain_uuid session. 2014-10-17 22:59:47 +00:00
Mark Crane 5ab03d30ad Allow 2 digit pins. 2014-10-17 20:39:56 +00:00
luis daniel lucio quiroz 53719264fb xmpp (aka dingaling) support to dropdown menu 2014-10-17 19:39:14 +00:00
James Rose 1b35155b52 fixed caller id prefix so it shows up on the phone in call center. changed # to - so it's cleaner on the display. 2014-10-17 17:56:52 +00:00
Mark Crane 693b741b23 Correct the rewrite rule for Apache using Polycom. 2014-10-17 00:21:45 +00:00
James Rose a4a6d9a7f0 Fixed a small bug where the incorrect caller id information is sent to the destination. 2014-10-16 19:17:07 +00:00
Nate Jones be3e3cad2e Group Permissions: Added all/none checkbox above each group of App permissions. 2014-10-15 20:47:04 +00:00
Nate Jones 88a9e83d37 Contacts: Added ability to assign Contact to multiple Groups. 2014-10-15 20:11:17 +00:00
Mark Crane 759621255a Fix the xml handler nil error for number_alias. 2014-10-15 17:32:02 +00:00
Nate Jones 949ffdfb51 Fax Server: Added clear (reset) buttons to file input fields. 2014-10-13 20:56:36 +00:00
Mark Crane 7d5f648f10 Fix XML handler with number_alias. 2014-10-13 20:10:14 +00:00
Johan Brannlund a55b5b9c4e Fix *2 recording path for single-tenant (right patch for dev branch this time) 2014-10-12 15:29:31 +00:00
Mark Crane 344c9e5768 Only use call center queue-announce_frequency when it has a value 2014-10-12 08:51:43 +00:00
Mark Crane bb2c58a6fa Add ${record_ext} variable back into local_extension for *2 on demand recording. 2014-10-11 17:17:40 +00:00
Johan Brannlund 9e844f0ebd Fix *2 recording path for single-tenant 2014-10-11 13:43:33 +00:00
Mark Crane a5caaea666 Remove the closing multi-line comment 2014-10-11 07:26:59 +00:00
Mark Crane 76d0db0fb1 Add the menu_item_group_uuid primary key when adding a group to the menu 2014-10-11 07:16:04 +00:00
Nate Jones 4ba2fd43d4 Domain Setting Edit: Added app-specific controls on value field, such as color picker, select boxes for fax server options, etc. 2014-10-11 05:30:06 +00:00
Mark Crane 0a1962c637 Allow making longer recordings with *732 2014-10-03 06:21:38 +00:00
Mark Crane 71c0a33143 Fix the hostname used in conference center 2014-10-03 06:19:03 +00:00
Mark Crane 0665e83aa4 Add voicemail params to the directory section of the xml handler 2014-10-03 06:17:43 +00:00
Mark Crane c67fb2c877 Add http auth username and password to the gxp21xx template 2014-10-02 04:59:56 +00:00
Mark Crane fe7a2987a6 Cisco Shared Line Appearance 2014-10-02 04:55:16 +00:00
Nate Jones f1558cd1c5 Functions: Corrected logic in valid_email(). 2014-09-30 09:22:29 +00:00
Mark Crane d5e3e8aef4 Change limit_execute to limit for outbound routes and change db to hash to be more efficietn 2014-09-29 22:37:39 +00:00
Mark Crane 7c5377eb61 Fix the syntax on the .htaccess file remove semi-colon and add [QSA] on two lines. 2014-09-29 16:46:17 +00:00
Mark Crane 3fcb51608e Remove an extra double quote to fix the .htaccess file 2014-09-29 16:29:15 +00:00
Mark Crane a74d0c90dc Update the Apache .htaccess file 2014-09-29 16:26:47 +00:00
Mark Crane 4e6d29924f Update the provision class to change the switch statement to the if/elseif/else to again fix a problem iwth php fpm on Ubuntu 14.04 LTS 2014-09-29 08:05:10 +00:00
Mark Crane 77af438abb Replace the switch with if/elseif/else to fix a problem with accounts -> extensions for php fpm on Ubuntu 14.04 LTS 2014-09-29 07:29:44 +00:00
Nate Jones d6d893e4c0 CDR Paging: Minor tweak. 2014-09-28 08:35:49 +00:00
Nate Jones 2e95192a3b Paging controls revamped. Can now enter a specific page to jump to. Press Enter/Return to submit. 2014-09-28 07:49:51 +00:00
Mark Crane 59a6738559 Add hostname to registrations 2014-09-24 04:56:59 +00:00
Mark Crane ce5d133d88 Add additional RewriteRules for Apache .htaccess 2014-09-24 04:33:29 +00:00
luis daniel lucio quiroz 5b44ff82db billing compatibility for callbroadcast 2014-09-24 01:03:34 +00:00
Mark Crane 9cf7ba063d Fix call forward user_exists result is a string this fixes ability to call external numbers 2014-09-23 08:01:56 +00:00
Mark Crane 7265388ca1 Fix 2 problems with call forward first fix the alias and unforward. 2014-09-23 07:45:40 +00:00
Mark Crane 1c6a6b15ec Add multi-delete in advanced -> domain settings 2014-09-21 09:39:32 +00:00
Mark Crane e56e600230 Move paging controls to the bottom to be consistent with all other pages 2014-09-21 02:09:02 +00:00
Mark Crane e1650e035e Add mod_shout decoder select list to system -> settings 2014-09-21 02:03:06 +00:00
Mark Crane 3a3a4ec8f0 Add primary key uuid to menu item group inserts 2014-09-20 04:01:53 +00:00
Mark Crane a556222bb0 Remove app_defaults.php a little more 2014-09-20 03:48:31 +00:00
Mark Crane 3105febebf Fix the default settings for settings 2014-09-20 03:43:25 +00:00
Mark Crane 0dd92eb4e7 Add default settings 2014-09-20 03:32:55 +00:00
Mark Crane a0032d5a3b Fix the primary keys for settings, and meetings tables 2014-09-20 02:56:25 +00:00
Mark Crane 3d0b913e8f Fix primary key for menu languages, items and item groups 2014-09-20 02:51:48 +00:00
Mark Crane b60b2be4c3 Add hold_music variable so that outbound calls work with custom per extension music on hold 2014-09-20 01:18:20 +00:00
Mark Crane 4257f3c81b Add the translation for TTA on CDR 2014-09-20 01:13:14 +00:00
Mark Crane 8f15b3c254 Add digium d50 template. Still needs more work 2014-09-20 01:12:23 +00:00
Mark Crane f25835e98c Add reverse authentication required for the provision and reboot options on the status -> registrations. 2014-09-17 17:04:41 +00:00
Mark Crane 877b49877f Fix syntax problem in install.php 2014-09-15 22:18:57 +00:00
Richard Neese c26f99110c fixed some typo's 2014-09-15 20:24:08 +00:00
Mark Crane d393fb7b8a Fix the volume persistence on the polycom vvx (firmware 4 or higher) provisioning template 2014-09-15 17:42:35 +00:00
Mark Crane d15bf10ed8 Fix a problem where in rare cases dialplan was cached without global dialplans 2014-09-15 15:56:18 +00:00
Mark Crane 265622afc4 Prevent saving an empty call forward destination 2014-09-13 10:01:41 +00:00
Mark Crane bfcdd28e9d Prevent an empty call forward destination 2014-09-13 09:30:25 +00:00
Richard Neese c32a09a2e2 changes for fhs layout for pkgs 2014-09-13 02:26:14 +00:00
Nate Jones 3c3df6dadc VM Greetings, VMs: Integrated HTML5 playback button. Misc fixes with other integrations. 2014-09-11 19:48:19 +00:00
Nate Jones bd155fbe2b MOH: Integrated HTML5 playback button. 2014-09-11 18:55:07 +00:00
Nate Jones 1f90b6a98c Recordings: Playback fixes. 2014-09-11 18:48:13 +00:00
Nate Jones 425fda689d Recordings: Integrated HTML5 playback button. 2014-09-11 18:34:53 +00:00
Nate Jones 265f1fa07e CDR: Recording playback - disabled preloading, return Tools column and icons to middle, hide if duration is zero. 2014-09-11 18:25:00 +00:00
Nate Jones 201b6768d0 Corrected preloaded icon image paths in HTML5 audio player Javascript. 2014-09-11 04:16:13 +00:00
Nate Jones cc1d6afb6e CDR: Added new HTML5 recording playback and download controls. 2014-09-11 03:14:52 +00:00
Mark Crane 25a97fbb77 Fix the fax log delete redirect 2014-09-09 18:41:03 +00:00
Mark Crane 85e74daf7b Fix the fax date 2014-09-09 17:59:20 +00:00
Mark Crane 544caf0ff1 Remove the add permission for fax log add 2014-09-09 17:56:58 +00:00
Mark Crane 178090e55f Remove the add button for fax log 2014-09-09 17:53:50 +00:00
Mark Crane aecb14abbe Work on the fax log redirect and links 2014-09-09 17:51:18 +00:00
Mark Crane 587afdfab5 Add a back button to fax logs 2014-09-09 17:04:47 +00:00
Mark Crane 8d665a3c0f Change GET fax_uuid to id 2014-09-09 17:00:22 +00:00
Mark Crane 75dc5d6278 Make the log link plural and fix the spacing between the tools 2014-09-09 16:53:26 +00:00
Mark Crane f9ae84631c Add the log link to fax 2014-09-09 16:49:58 +00:00
Mark Crane 3725ad27e0 Move fax logs inside app/fax 2014-09-09 16:41:53 +00:00
Mark Crane 24be63aa3b Add fax_uuid to the fax_retry.lua script 2014-09-09 11:03:00 +00:00
Mark Crane c95731d37a Fix the fax logs, add fax_uuid 2014-09-09 10:48:20 +00:00
Mark Crane b090067352 Fax log add fax_uuid 2014-09-09 09:43:06 +00:00
Mark Crane 8862002a79 A small fix for the CDR page format 2014-09-09 09:15:32 +00:00
Mark Crane 73069cac7f Add App -> Fax Logs 2014-09-09 05:43:09 +00:00
Nate Jones e3685a3314 Variables: Added record_ext variable to set recording file type (wav, mp3). 2014-09-09 05:32:04 +00:00
Mark Crane 3188cecce6 Use record_ext in local_extension 2014-09-09 05:10:54 +00:00
Nate Jones 8e8bb0b1cc Fax Server: Restored page count detection. 2014-09-09 04:10:34 +00:00
Nate Jones a1bb2a9549 Fax Server: Modified file conversion methods, misc minor changes. 2014-09-09 03:41:23 +00:00
Nate Jones 866709a715 Contact Add/Edit: Style adjustment to input boxes - auto-grow/shrink. 2014-09-09 01:00:22 +00:00
Nate Jones ca9c4cef02 CDR: Added TTA (Time To Answer) column, tool-tip explanations to call direction icons, and paging controls to top of beginning of CDR list. 2014-09-08 18:06:36 +00:00
Mark Crane 2b5a8f3a2d Add copy fax file to sent directory not ready to do in lua without additional changes to the interface 2014-09-07 05:38:27 +00:00
Mark Crane ceaef7bdb2 Add domain_uuid, fax_date, fax_epoch to fax retry 2014-09-07 05:18:35 +00:00
Mark Crane 045178855c Add fax date, epoch and primary key for the fax_logs table 2014-09-07 00:44:47 +00:00
Mark Crane a2b5cd59e1 Add ring group cid number prefix to the database and to the ring group lua script 2014-09-06 07:45:17 +00:00
Nate Jones 4f0d0eb688 Ring Group: Added ability to set Caller ID Number Prefix - Part 1 2014-09-06 07:43:51 +00:00
Mark Crane fea9194c5c Change the order of the redial 2014-09-06 04:18:34 +00:00
Mark Crane 3a822733c0 Fix redial by adding by inserting last_dial 2014-09-06 04:00:25 +00:00
Mark Crane 6359e09942 Fix the indentation and improve the comments 2014-09-05 06:53:46 +00:00
Errol Samuels 05479cfa91 fixed for SUN and Solaris where there is a slight variation with copy command. 2014-09-05 06:34:21 +00:00
Nate Jones bd01f31851 Fax Server: Hide Contacts select box if no Contacts with a fax number exist. Order Contacts by name (company, first, last, nick) in select box, cleaned up code a bit. 2014-09-05 02:58:47 +00:00
Nate Jones 7000e201f6 Fax Server: Added ability to select an existing Contact as the fax Recipient.
Updated jquery.autosize.input.js to latest version.
2014-09-05 02:29:29 +00:00
luis daniel lucio quiroz 4070aa19cf billing postgresql compatibility 2014-09-04 20:58:20 +00:00
Nate Jones 253205199e Minimized Theme: Rearrange Logout and Domain Selector icons to match Enhanced theme, add ability to show domain name in menu bar. 2014-09-04 08:42:25 +00:00
Mark Crane 29d01ee57a Add Fax logging. 2014-09-04 07:12:47 +00:00
Nate Jones d3c7e2728f Fax Server: Removed echo of array in fax_send.php. 2014-09-04 07:01:17 +00:00
Nate Jones e65ef600c5 Default Setting Edit: Select option correction for superfine. 2014-09-04 07:00:10 +00:00
Nate Jones 930acb5fdb Fax Server: Multiple file upload, customize contact info line and footer in cover sheet, other minor tweaks. 2014-09-04 06:57:26 +00:00
Mark Crane abd9921b1d Fix a problem with Devices for viewing the key assignments for MySQL 2014-09-04 04:06:19 +00:00
Mark Crane 5f2bbf15df Fix the destination edit so that it will update the dialplan 2014-09-04 01:19:02 +00:00
Nate Jones c03889add5 Fax Server: Select up to 5 files (TIF or PDF) to send. Added Default Setting for default page size (Auto, Letter, Legal, A4), or override at time of sending fax. 2014-09-04 00:57:09 +00:00
Mark Crane f571ab36a8 Fix memcache flush for the Fax dialplan 2014-09-03 19:43:52 +00:00
Mark Crane d40c939b4d Dialplan destinations do not add the dialplan if the action was not defined 2014-09-03 03:32:46 +00:00
Nate Jones e7e6db5743 Fax Server: Misc enhancements, including multilingual and customizable cover page generation, fax resolution selection, etc. More to come.
FPDI and TCPDF libraries added to accommodate the above, and future enhancements.
2014-09-03 02:41:11 +00:00
Mark Crane c3adfafeed Fix the release theme so that it can show the domain name for multi-tenant 2014-09-02 22:18:28 +00:00
Mark Crane 226ac77c37 Fix the content manager show that it will display the content again 2014-09-01 20:23:18 +00:00
Mark Crane 9d02e8fe16 Fix and move the format_phone array 2014-08-31 00:57:58 +00:00
Mark Crane 907c1b7445 Fix the format_phone function 2014-08-30 23:14:24 +00:00
Mark Crane e33bdcd119 Fix ring group enterprise confirm 2014-08-30 18:22:06 +00:00
Mark Crane 2a38d563db Remove the back slashes on time conditions templates 2014-08-30 18:10:13 +00:00
Nate Jones d691c90cb4 Enhanced Theme: Domain name style adjustments (background off by default, larger text, etc). 2014-08-30 07:04:53 +00:00
Nate Jones 0d214a4bdd Enhanced Theme: Restored displaying domain name in header, can control visibility and style using Default Settings. 2014-08-30 06:31:14 +00:00
luis daniel lucio quiroz 72058f2962 sql queries fixed to be compatible with mysql AND pgsql 2014-08-29 15:34:51 +00:00
Mark Crane 3d131cc514 Fix a white space and a empty uuid 2014-08-29 08:33:15 +00:00
luis daniel lucio quiroz 2accf75870 seems to be final fix for billling multi-currency issue 2014-08-28 16:11:24 +00:00
Mark Crane f5d579eb21 Ring groups remove spaces 2014-08-25 20:40:03 +00:00
Mark Crane 1380052688 Fix ring group move the domain check 2014-08-25 20:25:42 +00:00
Nate Jones 1f073c1027 Function: Moved recur_sounds_dir() to functions.php, removed from ivr_menu_edit.php and conference_center_edit.php. 2014-08-25 18:01:26 +00:00
Mark Crane 811ecd9bd8 Fix ring group skip active issue 2014-08-25 16:07:47 +00:00
Mark Crane 4f071c013d is_zrtp_secure set continue to true 2014-08-25 01:06:34 +00:00
Mark Crane f6f4a596ea Prevent mysql_connect error message 2014-08-24 09:46:32 +00:00
Mark Crane f5a00b4230 Add the dialplan number for hot desking. Remove a few more redundant continue xml dialplan attributes 2014-08-24 09:02:00 +00:00
Mark Crane ff3a748f57 Remove a redundant continue xml attribute 2014-08-24 08:24:18 +00:00
Mark Crane 6ef129e44d Remove this code that set the dialplan_number as it is no longer needed because of the xml number attribute that was added to the dialplan 2014-08-24 07:53:54 +00:00
Mark Crane 27c760ef3c Fix the call direction dialplan which on sqlite was showing up empty, and missing completely in Postgres. 2014-08-24 07:41:48 +00:00
Mark Crane a5643cf97b Remove the digit-map for polycom to allow it to dial any digits and add a comma in the dialstring for ring groups that was missing 2014-08-23 21:12:06 +00:00
Errol Samuels 6e3656cdfd Fixed intercept **[ext] to work better when using multiple Freeswitch servers 2014-08-23 14:03:23 +00:00
Nate Jones ae13d5b618 Contact Edit: Integrated certificate creation, if available. 2014-08-23 06:50:54 +00:00
luis daniel lucio quiroz bbc598a054 some billing sql queries fixes, for a extrange reason when currencies are different there was a lack of accuracy 2014-08-23 04:28:43 +00:00
Mark Crane f6e9d52830 Update dev branch version to 3.7.1 2014-08-22 08:19:59 +00:00
Mark Crane cba59236ee Align intercept with group interceptl 2014-08-22 07:57:47 +00:00
Mark Crane 28eb38d0ad XML Handler dialplan set dialplan to 1 hour cache timeout 2014-08-22 07:40:34 +00:00
Mark Crane 3e421a3d34 Feature code call forward *72 on, *73 off, *74 request id and password toggle on/off complete the commits 2014-08-22 07:37:13 +00:00
Mark Crane ca66aa8214 Feature code call forward *72 on, *73 off, *74 request id and password toggle on/off 2014-08-22 07:36:07 +00:00
Mark Crane 52907729d2 Fix domain sessions for user@domain when users is logging into a different domain 2014-08-20 23:40:13 +00:00
Nate Jones ac11bfc168 Minimized Theme: Now mouseover to dismiss response message, and a minor bug fix relating to the dismissal. 2014-08-20 22:57:33 +00:00
Errol Samuels 93c316dfa6 Improved group intercept to work with load balanced FusionPBX servers. 2014-08-20 21:24:05 +00:00
Nate Jones b69cb3182a Minimized Theme: Style adjustment to increase right margin of the Logout icon on a single-tenant system. 2014-08-20 17:38:37 +00:00
luis daniel lucio quiroz 29c29d4ea8 update to jquery 1.11.1 2014-08-19 19:17:25 +00:00
Mark Crane 44e621d94d Update the dev branch version to 3.7 and get rid of GLOB_BRACE which is not defined in Solaris 2014-08-19 09:16:01 +00:00
Mark Crane 2ce4740246 FusionPBX 3.6.0 Release 2014-08-17 15:13:25 +00:00
Nate Jones 25bd70eec9 Minimal Theme: Adjust to use Enhanced Theme background images. Click to dismiss response message, as well. 2014-08-17 15:09:05 +00:00
Nate Jones 1cb519e989 Theme Default Settings: Prevent background_color from getting added more than twice, and adds both colors if none exist. 2014-08-17 14:29:51 +00:00
Nate Jones 97f97e023a CDR Statistics: Fixed graph. 2014-08-17 13:59:55 +00:00
Nate Jones 4bc6a78161 Added a variation of the Enhanced Theme: Minimized. 2014-08-17 13:41:57 +00:00
Mark Crane fa4260057d Move is_local to the dialplan and app/is_local/index.lua 2014-08-17 13:16:18 +00:00
Mark Crane 4497a37280 Set the background_image array to false by default 2014-08-17 12:19:38 +00:00
Mark Crane 1c412d5ae7 Change the background_image description 2014-08-17 12:02:48 +00:00
Mark Crane 6c8482674f Add the description and remove the previous background_image 2014-08-17 11:48:41 +00:00
Mark Crane 6745907aaa Add background_image array to default settings 2014-08-17 11:47:03 +00:00
Mark Crane 4caca92df9 Fix pdo.php isset 2014-08-17 07:29:27 +00:00
Nate Jones 0ffb39c682 Enhanced Theme: Modified default bottom color of background gradient a little. 2014-08-17 07:26:45 +00:00
Nate Jones fbb1b5a04b Clean up pdo.php. 2014-08-17 07:13:39 +00:00
Nate Jones 48d7a56e4a Enhanced Theme: Natural sort the domains in the Domain Selector. 2014-08-17 07:09:57 +00:00
Mark Crane 5fe7287c7b Change the enhanced theme to use background image array instead of text. 2014-08-17 06:59:53 +00:00
Nate Jones 322fb0627d Enhanced Theme: Added Default Settings to control the color, background color, opacity and hide delay of header response messages. 2014-08-17 06:30:31 +00:00
Nate Jones b11eb26f3e Provisioning: Reordered provision/app_defaults.php so App Defaults now detects and restores each Provision default setting individually/ 2014-08-17 05:53:32 +00:00
Nate Jones a9cf2ce762 Enhanced Theme: Added JS confirm prompt to logout button. 2014-08-17 05:15:07 +00:00
Nate Jones 5f9701d263 Enhanced Theme: Missing Theme items in Default Settings are now detected and restored individually by enhanced/app_defaults.php. No need to delete all Theme settings to have them restored by App Defaults on Upgrade page. 2014-08-17 05:03:50 +00:00
Nate Jones ba8a1de67b Enhanced Theme: Added Default Settings to control footer colors and opacity.
Other minor code enhancements.
2014-08-17 04:33:57 +00:00
Nate Jones f9a760359a (ahem...) Enhanced Theme: Previously mentioned icons now available. 2014-08-17 03:32:59 +00:00
Nate Jones bbaeacd063 Enhanced Theme: Implemented new icons for Domain Selector and Logout in header. Hover to see current user/domain and active domain.
Domain Selector: Now includes and highlights active domain in domain list.
2014-08-17 03:30:28 +00:00
Mark Crane 031ffb0444 Remove Edit and Add from Variables 2014-08-17 00:14:03 +00:00
Mark Crane bdb42e0ff5 Missed the Menu Item Add 2014-08-17 00:11:23 +00:00
Mark Crane 3ab99664fe Remove Edit and Add from the page titles on the Menu Manager 2014-08-17 00:09:26 +00:00
Mark Crane d52de4b4d8 Correct the menu parent uuid 2014-08-16 22:42:50 +00:00
Mark Crane bfe852b3e6 Move the Backup tool under the Advanced menu 2014-08-16 22:40:24 +00:00
Nate Jones 3b9daf63fb Backup: Completed functionality to back up and restore paths defined in Default Settings. 2014-08-16 22:15:01 +00:00
Mark Crane c00d056fc2 Add another default settings -> theme option 2014-08-16 20:29:45 +00:00
Mark Crane 865e9668d3 Make sure the dialplan_uuid is set before trying to delete it 2014-08-16 18:54:32 +00:00
Mark Crane 3654d64a96 Remove the global app.lua dialplan as it failed to scale 2014-08-16 18:51:43 +00:00
Nate Jones d092413956 Enhanced Theme: New CSS class added to file input fields to adjust their hight to be equal to other input fields. 2014-08-16 18:24:41 +00:00
Mark Crane 846e06eb95 Don't add the global inbound routes by default 2014-08-16 18:22:36 +00:00
Mark Crane a63258b283 Slight efficiency improvement for active calls 2014-08-16 02:01:53 +00:00
Mark Crane f9269016f9 Status -> Active Calls now uses JSON 2014-08-16 01:06:09 +00:00
Mark Crane a23b6c541a Remove the old core/backup 2014-08-16 00:16:26 +00:00
Mark Crane a1c10a012b Build the backup file and add the restore command 2014-08-15 23:49:46 +00:00
Mark Crane abc1106ee0 Add a backup feature 2014-08-15 23:33:20 +00:00
Mark Crane 9de4d96298 Update the version to 3.6.0-rc4 2014-08-15 18:58:52 +00:00
Mark Crane b83a9a5c63 Fix system -> variables if you did a recent install and the variables page has 2 items on it delete them, update the source, run upgrade -> app defaults to get the defaults 2014-08-15 18:44:40 +00:00
Nate Jones 9566dce374 User Edit: Add button to load an auto-generated API Key (UUID) into the input field. 2014-08-15 07:04:52 +00:00
Nate Jones 615aae2e65 SIP Status: Multilinguify sofia status column headings, only link gateway names in domain currently being managed. 2014-08-15 05:53:21 +00:00
Nate Jones 301e734b23 Variables: Set default 'domain' variable value on install (corrected according to heredoc syntax for variables). 2014-08-15 05:41:36 +00:00
Nate Jones 63d90bf8ba Variables: Set default 'domain' variable value on install. 2014-08-15 04:54:16 +00:00
James Rose 23fa592eb5 more support for different voicemail numbers 2014-08-15 00:48:15 +00:00
James Rose 0ebde731cd add support for alternate voicemail numbers so you can subscribe to different mailboxes. requires user to create their own dialplan to support it. 2014-08-15 00:36:56 +00:00
Mark Crane b22eb25460 Remove the confirm default only prompt to confirm if confirm is set to true 2014-08-14 18:26:50 +00:00
Mark Crane 3f9644bef0 Add a short delay before playing the audio 2014-08-14 09:00:41 +00:00
Mark Crane 67eb77262d The key to group_confirm for simulataneous is to declare it inside the { and } instead of per leg 2014-08-14 08:52:07 +00:00
Mark Crane 5200a38820 Change follow me prompt from true to 1 2014-08-14 08:33:13 +00:00
Mark Crane a2b2ccdfac Fix a syntax error on the destination prompt 2014-08-14 07:52:52 +00:00
Nate Jones 0bc1c23deb Follow Me: Confirm prompt mods. 2014-08-14 07:44:05 +00:00
Nate Jones 8ed3f00b84 Domain Edit: On rename, set Variables > domain value to new domain name (single-tenant only). 2014-08-14 07:24:26 +00:00
Mark Crane 870cade69b Fix the follow me form so that it will save 2014-08-14 06:43:31 +00:00
Mark Crane 348f74a146 Continue working on follow me prompt 2014-08-14 06:06:20 +00:00
Mark Crane 64f4e29900 Add follow me prompt permission and remove follow me global call prompt 2014-08-14 05:56:43 +00:00
Nate Jones 8c978595a9 Follow Me: Reorganized to match Ring Group layout, added Confirm select box. 2014-08-14 05:36:23 +00:00
Mark Crane e73ee91237 Add follow me prompt to the follow me class 2014-08-14 05:27:45 +00:00
Mark Crane 65d290e6de Add follow_me_prompt field to the database 2014-08-14 03:43:56 +00:00
Mark Crane 57c71488b3 Add ring_group_prompt permission for admin and superadmin groups 2014-08-14 03:40:48 +00:00
Mark Crane 6c6cd6903e Update confirm.lua 2014-08-14 03:35:59 +00:00
Mark Crane e1b9886d87 Improve group confirm for ring groups 2014-08-14 03:06:00 +00:00
Mark Crane 26c378e263 Fix recordings per extension for ring groups 2014-08-14 01:21:55 +00:00
Nate Jones eccf7ec85d Gateway Edit/Delete: Removes gateway xml file, if present, on delete and/or disable. 2014-08-13 22:08:39 +00:00
Mark Crane 4dfb7a824e Add ring group skip active to the lua script 2014-08-13 10:51:51 +00:00
Mark Crane 9129890be3 set the style class 2014-08-13 09:13:22 +00:00
Mark Crane b0c8b22833 Add ring group skip active 2014-08-13 08:41:44 +00:00
James Rose 4c4ac5a7c3 added the ability to use cdr group to give full call detail records access to non admins. 2014-08-13 03:17:12 +00:00
Mark Crane 63fc2e132b Fix the recordings permissions 2014-08-12 19:36:56 +00:00
Mark Crane 6e6c58ad08 Fix the SIP profiles for the package install 2014-08-12 19:18:36 +00:00
Richard Neese c4136913d6 fixed the path correctly rm /sounds 2014-08-12 13:52:46 +00:00
Mark Crane 9d2b040978 Fix the spelling 2014-08-12 08:02:09 +00:00
Mark Crane f322d8a88f Very minor changes 2014-08-12 08:00:32 +00:00
Mark Crane 8781180730 When the ring group confirm is not set then do not request the confirm 2014-08-12 07:51:31 +00:00
Mark Crane 292bed896e Fix the follow me add method 2014-08-12 05:31:39 +00:00
Mark Crane 8f0d192cc1 Update the version to 3.6 RC3 2014-08-12 04:48:45 +00:00
Mark Crane 3b5a84c3cc Fix the sound_prefix path 2014-08-12 04:27:55 +00:00
Mark Crane 73c325b6e9 Fix the destination select list for conference center and conference 2014-08-11 19:37:46 +00:00
luis daniel lucio quiroz 2b4fb544e5 some nore details about cidlookup.conf.xml 2014-08-11 17:48:46 +00:00
luis daniel lucio quiroz a62b4feaed some details about cidlookup.conf.xml 2014-08-10 17:45:38 +00:00
James Rose 31c5a38f77 FS param need - not _ 2014-08-09 17:31:29 +00:00
Mark Crane 6d1e4033a9 Fix the domain array settings 2014-08-09 16:32:52 +00:00
Mark Crane b64b6055a6 Cleanup previous default settings 2014-08-09 16:05:03 +00:00
luis daniel lucio quiroz d9e56efc3f cidlookup lua script that allows private cnam using concact application 2014-08-09 03:25:42 +00:00
luis daniel lucio quiroz b0c2d11fb1 server side verifications of accountcode 2014-08-08 12:37:06 +00:00
luis daniel lucio quiroz b38e47cea7 admin only can set specific accountcodes 2014-08-08 12:19:48 +00:00
Mark Crane 42b038f824 Only set the avmd if avmd is set to true 2014-08-08 07:00:31 +00:00
Mark Crane 1b63f7ba9f If the frequency is not set then do not include it. 2014-08-08 06:49:18 +00:00
James Rose f25723a3e7 added support for call_announce in callcenter 2014-08-08 03:14:20 +00:00
Mark Crane e38e931446 Complete fixing the dialplan destination edit functionality so that it will not duplicate the dialplan details 2014-08-08 01:16:30 +00:00
Mark Crane d9f8952dac Fix duplication of some of the dialplan details. 2014-08-07 16:11:10 +00:00
Mark Crane 9cdcf5b7ef Add call center queue annound sound and frequency to the database. 2014-08-07 15:46:44 +00:00
Mark Crane 49fdce0bd7 Add bridge uuid for cdr wav and mp3s 2014-08-07 04:43:14 +00:00
Mark Crane 64c34744e6 Fix the order of these dialplans 2014-08-06 09:39:49 +00:00
Mark Crane c49328a09c Change the call_direction dialplan to account for outbound call direciton eaerlier in the dialplan. 2014-08-06 09:13:38 +00:00
Mark Crane 14d0d5129a Change the order of the code so that domain_name is preserved for multi-tenant in additional cases. 2014-08-06 06:31:47 +00:00
Nate Jones d4e3d9a7b5 Extension Summary: New report - displays per extension call count and usage statistics within a given date range. 2014-08-06 05:21:13 +00:00
luis daniel lucio quiroz bc5c15667b dropdown into login screen too 2014-08-06 02:39:47 +00:00
luis daniel lucio quiroz 490bdfe2ba better place for language dropdown 2014-08-06 02:28:53 +00:00
luis daniel lucio quiroz fd1bab39f3 little language details 2014-08-06 01:33:45 +00:00
luis daniel lucio quiroz c0b3ef759b we do support more than 32 languages 2014-08-06 01:14:55 +00:00
Nate Jones 097956f8fd CDR: Remove unnecessary </td> tag. 2014-08-06 00:42:32 +00:00
Mark Crane 068e8e1b99 Only write the dialplan for dialplan -> destinations if the destination_number is set 2014-08-05 23:57:48 +00:00
Nate Jones dc03a9c201 Reverted: File may be used for older browser support. 2014-08-05 23:28:12 +00:00
Nate Jones d1470462de Remove unused file. 2014-08-05 23:23:07 +00:00
luis daniel lucio quiroz 307d793ea4 just a little format to have the same code 2014-08-05 22:37:23 +00:00
luis daniel lucio quiroz 689adca734 when discounting, let us use negative numbers 2014-08-05 22:35:03 +00:00
Nate Jones b48a672a67 Default Setting Edit: Fixed Domain selector and color picker - moved color picker JS files to Enhanced template.php. 2014-08-05 22:32:14 +00:00
luis daniel lucio quiroz dbf2f9df4e billing needs to convert to billing currency always! 2014-08-05 22:27:12 +00:00
Nate Jones 46430c52c8 Enhanced Theme: Modified Domain Selector bar icon, slight gradient, like standard button style. 2014-08-04 19:50:23 +00:00
Nate Jones 2e9d4e9655 Dialplan Edit: Truncate initially displayed Data values with ellipsis (pre edit). 2014-08-04 19:33:26 +00:00
luis daniel lucio quiroz 0170b9e9ba You can now change favicon in enhanced theme with default settings 2014-08-03 23:09:55 +00:00
James Rose c630123df3 Added support for tier 0. If using tiers then tier 1 will not ring until Tier Rule Wait Second expires. This effectively leaves queue callers on hold unnecessarily. Using tier 0 as the lowest tier fixes this (but may also break other things [untested, just a wag]). 2014-08-03 21:23:51 +00:00
James Rose e89ffc0cff Fixed callcenter so that remote calls will time out properly (leg_timeout) and changed group confirm announce time from default 5 seconds to 2. 2014-08-03 20:54:15 +00:00
Mark Crane e16716408b Disable user_exists and user_record lua scripts as they have been replaced by dialplans 2014-08-03 18:22:30 +00:00
Mark Crane 31e3765a76 Enable the user_record dialplan, fix api_on_answer 2014-08-03 17:58:00 +00:00
Mark Crane 4adc3fc657 Add domain_name to the recording path 2014-08-03 17:41:09 +00:00
Mark Crane 9ce9be52a6 Add from_extension back to the user_record dialplan and fix the record_session condition 2014-08-03 17:16:00 +00:00
Mark Crane 62626d2a7c Add break=never for user_record 2014-08-03 17:05:01 +00:00
Mark Crane e4a447f2b8 Add inline = true for user_exists and user_record 2014-08-03 16:38:38 +00:00
Mark Crane 707d0c4841 Update the version to 3.6.0-rc2 2014-08-03 15:48:22 +00:00
Mark Crane 7453036367 More work with user_exists to get extension_uuid 2014-08-03 14:57:08 +00:00
Mark Crane 7d091e3bc1 Add user_exist, and user_record to the dialplan as replacement to app.lua dialplan 2014-08-03 14:28:50 +00:00
Mark Crane c7dff4a4a4 Check the length of user_record 2014-08-03 12:35:24 +00:00
Mark Crane 33f8c20d97 Fix the user_data request in ring groups 2014-08-03 12:06:49 +00:00
Mark Crane 7ab90efaa1 Make the xml cdr generated xml easier to read 2014-08-03 11:14:56 +00:00
Mark Crane b9dab31212 Add extension_uuid variable to call forward and follow me 2014-08-03 11:05:05 +00:00
Mark Crane ccd6585c6b Add domain_name to the extension xml file 2014-08-03 10:48:45 +00:00
Mark Crane 7e0d68aec0 Add variable extension_uuid to ring groups that call extensions. 2014-08-03 10:35:01 +00:00
Nate Jones 5bb2bea640 Input Type Switch Button: Changed from left triangle (&#10782;) to left triangle (&#9665;), as wasn't displaying properly in FF on Mac. 2014-08-03 07:02:12 +00:00
Nate Jones 0c523370da Destination Edit: Corrected misplaced HTML tags, remove colon (:) output when not necessary on Actions select box. 2014-08-03 06:43:49 +00:00
Nate Jones 8ded50c67e Input Type Switch Button: Changed from < to left triangle (&#10782;) 2014-08-03 06:18:06 +00:00
Nate Jones b3ef3894f8 Input Type Switch Button: No interprets HTML entities code for left triangle (&#10782;) after switching element type once (wasn't being parsed as an HTML entity, but displayed literally). 2014-08-03 06:12:10 +00:00
Nate Jones c0209959a8 Input Type Switch Button: Changed from < to left triangle (&#10782;) 2014-08-03 05:31:42 +00:00
Nate Jones d848e9c11a CDR: Minor/style mods to date/time Range fields. 2014-08-03 05:23:44 +00:00
Nate Jones a4a23fd659 Paging: Changed Prev/Next buttons to symbols. 2014-08-03 04:30:19 +00:00
Nate Jones 2074f2de0c CDR: Search Source explicitly by extension number. 2014-08-03 04:03:44 +00:00
Nate Jones 95fdfc4f40 Device: Updated other themes to work with duplicate checker. 2014-08-02 13:43:11 +00:00
Nate Jones 827a0aa9e6 CDR: Moved date/time picker JS to template, Domain Selector now working again on CDR page. 2014-08-02 12:49:22 +00:00
Nate Jones 5b4ae6734d Device Edit: Added comment on the duplicate check js. 2014-08-02 12:45:24 +00:00
Nate Jones c9a5e7c2f5 Device Edit: Adjust duplicate mac check. 2014-08-02 12:00:30 +00:00
Nate Jones f9fdb28a6f Enhanced Theme: Fixed JS error in Chrome. 2014-08-02 11:23:15 +00:00
Nate Jones a11f2e9ef9 CDR: Added Date/Time calendar picker, enhanced searching ability - added Start, Answered and End ranges. 2014-08-02 10:57:02 +00:00
Mark Crane b25c22ab67 Add the caller id prefix 2014-08-02 10:39:49 +00:00
Nate Jones 078f321738 Response Message: Mood adjustments. 2014-08-02 07:02:31 +00:00
Nate Jones 559ccd52c3 Enhanced Theme: Message alert style adjustments.
Devices Edit: Check, alert and prevent duplicate MAC address (only on submit).
2014-08-02 06:45:10 +00:00
Mark Crane 50cfe6a201 Add effectice to caller_id_number to make it set the new caller id with the prefix.'; 2014-08-02 06:18:57 +00:00
Mark Crane 0c43687567 Move the caller id name prefix to a different position inside Destinations 2014-08-02 06:09:55 +00:00
Mark Crane 128745b3cb Fix the syntax in destination_edit.php 2014-08-02 06:02:12 +00:00
Mark Crane 5440e82df6 Add caller ID name prefix to inbound routes via dialplan destinations. 2014-08-02 04:41:00 +00:00
Mark Crane 52241db9a7 Fix the highest menu item order 2014-08-02 03:37:38 +00:00
Mark Crane 24cbf15374 Add a missing semi-colon. 2014-08-02 03:24:27 +00:00
Mark Crane f9514ecfb0 Fix ability to set the an empty Parent Menu 2014-08-02 03:22:33 +00:00
Nate Jones 92c2da7f11 Enhanced Theme: New message alert display style and method.
Devices Edit: Check, alert and prevent duplicate MAC address.
2014-08-02 02:16:46 +00:00
Mark Crane e9fb5fbf02 Fix the dialplan context for clearing memcache when adding an outbound route. 2014-08-02 01:43:25 +00:00
Mark Crane 7e3a9d4510 Remove the empty choice in the record select list 2014-08-02 01:33:19 +00:00
Mark Crane 710928dcf9 Change the rec_template variable name. 2014-08-02 01:31:38 +00:00
Mark Crane 3307ded353 Remove the text input box for record template 2014-08-02 01:29:21 +00:00
Mark Crane 50315a40e3 Change how the record template is used in Call Center 2014-08-02 01:27:37 +00:00
Mark Crane 99a1957ccd Organize the fax code a little better and add an options to save the original fax file. 2014-08-02 00:16:57 +00:00
Mark Crane 2464b0e99b Add fax file conversion with libreoffice headless to support sending faxes with .doc, .docx, xls, xlsx, and images such as png, jpg, gif and etc. Thanks Wei for sharing this code with the project. 2014-08-01 22:33:20 +00:00
Mark Crane a7feeab3d8 Fix issue 669 adding PROJECT_PATH to the ring group forward link 2014-08-01 20:45:07 +00:00
Mark Crane 6768ffbdac Fix the title 2014-08-01 18:40:28 +00:00
Mark Crane 93dee1d17c remove the call block lua as its used instead in app/call_block 2014-08-01 18:21:15 +00:00
Mark Crane 1a8376ec45 Add a little more flexibility on the title 2014-08-01 16:59:50 +00:00
Mark Crane 315211ce89 Remove capitalization on the context its better to show the case that it actually uses 2014-08-01 14:26:58 +00:00
Mark Crane 8a6a3e6622 Change user context to context and add context to the extensions page 2014-08-01 14:21:06 +00:00
Mark Crane 447b038ae1 Use the session domain_uuid rather than the domain_uuid variable 2014-08-01 14:02:45 +00:00
luis daniel lucio quiroz 5b91184867 billing now supports domain_uuid to let currect domain erasing work properly, missing support to bill extension created added 2014-08-01 13:14:50 +00:00
Mark Crane 2c555502d2 Add uppercase transport to the Cisco SPA 112 and 122 2014-08-01 06:35:41 +00:00
luis daniel lucio quiroz 193f34a687 login logo is now fixed to 250px to fit the login square in enhanced theme 2014-08-01 04:12:18 +00:00
James Rose 564b42a988 added variable runonce to prevent the loop. Have seen this script crash a busy FS install. Now possible to run via cron. 2014-07-31 20:15:06 +00:00
Nate Jones 0bc5a4870c Dialplan: Implemented bulk-delete.
Default Settings: Minor fixes and enhancements.
2014-07-31 09:21:16 +00:00
Mark Crane d7f189d07f svn diff 2014-07-31 08:40:15 +00:00
Nate Jones ae0adf4454 Enhanced Theme: New background images lightened at the top. 2014-07-31 06:39:51 +00:00
Mark Crane 15c4f9651e recordings.lua change the custom recording to a standard freeswitch recording 2014-07-30 22:35:46 +00:00
James Rose cab5295199 added provision variable cisco_spa_rport for spa51x and spa50x phones. 2014-07-30 17:35:34 +00:00
James Rose bd8ad478c8 Added provision variable yealink_rport_X so you can enable rport on yealinks per account. Default is OFF so if not set, the behavior stays the same. 2014-07-30 17:28:24 +00:00
James Rose f7c4ddc429 Added provision variable for yealink provisioning url. 2014-07-30 17:06:11 +00:00
James Rose 5583edac52 Added provisioning variables for firmware for spa50x spa51x and yealink phones 2014-07-30 16:57:30 +00:00
Mark Crane 2008f1d8db Fix the record-template path assume multi-tenant 2014-07-30 05:17:49 +00:00
Mark Crane c8cf795c10 Move the account code description to an appropriate location. 2014-07-30 01:12:41 +00:00
Mark Crane 9e04993152 Call block standardize on domain_name 2014-07-30 01:01:41 +00:00
Nate Jones 02b59494a6 Copyright Bar: Fixed overlapping issue with in Schema Edit/Fields. 2014-07-29 23:42:34 +00:00
Nate Jones 055b8cd436 Copyright Bar: Fixed overlapping issue with in Domain Edit/Settings. 2014-07-29 23:29:44 +00:00
Nate Jones 7e6236abf9 Log Viewer: Lightened background color a little to allow partial transparency. 2014-07-29 23:04:36 +00:00
Mark Crane 966b6d8cde Fix the commented reference from the wiki to confluence. 2014-07-29 22:58:19 +00:00
Nate Jones 6debbb3eee Copyright Bar: Fixed overlapping issue with SIP Profile Edit page and Log Viewer (also removed deprecated HTML tags, such as <font>, etc). 2014-07-29 22:39:30 +00:00
Mark Crane 4f06e08538 Change the path where the sip profiles defaults settings are picked up 2014-07-29 22:13:22 +00:00
Mark Crane e41a7a481e Another adjustment for follow me toggle 2014-07-29 09:52:27 +00:00
Mark Crane 7d53de8400 Follow Me *21 feature code is now working 2014-07-29 09:40:45 +00:00
Mark Crane 9d9cd291b8 Remove an extra comman 2014-07-29 09:29:53 +00:00
Mark Crane 18a171444f Execute the sql query 2014-07-29 09:22:06 +00:00
Mark Crane ed667578ac Add a dial string to the follow me table 2014-07-29 09:15:32 +00:00
Mark Crane 8980931b6e Add Follow Me to the display 2014-07-29 07:56:01 +00:00
Mark Crane f1297a303c Fix a SQL query in follow_me.lua script 2014-07-29 07:54:48 +00:00
Mark Crane 044ba54ab4 Remove a variable from follow_me.lua that was not being used 2014-07-29 07:47:59 +00:00
Mark Crane 5896a21faa Add the follow me dialplan 2014-07-29 07:42:30 +00:00
Mark Crane 8880822311 Add a redirect for voicemails 2014-07-29 07:28:44 +00:00
Mark Crane 0d4c1cb129 Fix the voicemail view so that they are marked as read 2014-07-29 07:25:28 +00:00
Mark Crane c04b3d4707 By default provision enabled should be set to false. 2014-07-29 06:34:34 +00:00
Mark Crane dc35c9607b Add provision enabled and other variables to default settings when provision is installed 2014-07-29 05:58:12 +00:00
Mark Crane a34188276e Add a check for domain and api cidr 2014-07-29 04:26:32 +00:00
Mark Crane 7b0c11b1f7 Move the check_cidr function 2014-07-29 04:08:39 +00:00
Mark Crane 76e972ef30 Increase the api_key required length to 30 characters or greater 2014-07-29 03:15:31 +00:00
Mark Crane e0bdd93196 DRY out the authentication a little more 2014-07-29 03:03:22 +00:00
luis daniel lucio quiroz e0fa00b160 you can now change logo in enhanced theme using default setting 2014-07-28 13:58:22 +00:00
luis daniel lucio quiroz dcf602bd54 dont use order by when only requestion count(*) 2014-07-28 13:49:37 +00:00
Omar Irbouh 5cc1c96d74 0px -> 0 2014-07-27 17:55:43 +00:00
Nate Jones 98b25b54ff Copyright: Fixed CDR Details and Dialplan Edit so copyright line stays where intended. Enhanced theme restored. 2014-07-27 15:52:34 +00:00
Mark Crane 377bd69939 Add the toggle for follow me 2014-07-27 13:33:28 +00:00
Mark Crane e17723f47d Add follow me lua script 2014-07-27 13:28:08 +00:00
Mark Crane 1cafcad180 Change the copyright footer as previous one would show up over the content in the CDR details, and dialplan details.; 2014-07-27 13:14:04 +00:00
Mark Crane c08c961c5b Add follow_me lua script 2014-07-27 12:42:05 +00:00
Mark Crane b0aaa54a22 Ha ha change .php to .lua 2014-07-27 11:56:04 +00:00
Mark Crane 5d41b746fc Add feature code *78 and *79 to enabled and disable do not disturb. 2014-07-27 11:52:38 +00:00
Mark Crane ceb002499c Take provision cidr range and make it possible to use as an array. 2014-07-27 10:09:04 +00:00
Mark Crane c6c05f468d Fix the footer reference 2014-07-27 08:08:18 +00:00
Mark Crane 929d0b0530 Working on the index page 2014-07-27 08:04:41 +00:00
Mark Crane dfedc3bdb6 Fix the indentation and login redirect issue 2014-07-27 08:00:16 +00:00
Mark Crane e3db9ffb35 Update the dialplan entry for DND 2014-07-27 06:58:15 +00:00
Mark Crane 3d4a237799 Fix the search string for the dialplans 2014-07-27 05:24:27 +00:00
Mark Crane d3e337d232 Changet GET to a REQUEST 2014-07-27 05:12:27 +00:00
Mark Crane 2327d51886 Add the app uuid and order by to the dialplan search 2014-07-27 05:10:21 +00:00
Mark Crane b4cc3da829 Fix the search for the diaplan_order 2014-07-27 04:59:14 +00:00
Mark Crane 097552d571 Search the dialplan name 2014-07-27 04:46:52 +00:00
Mark Crane 49481d8e6b Add the search translation 2014-07-27 04:43:56 +00:00
Mark Crane 5fb6c7607b Add a search for the inbound, outbound routes and the dialplan 2014-07-27 04:40:14 +00:00
Mark Crane 9b9d056bba A minor improvement for the tittle 2014-07-27 04:24:34 +00:00
Nate Jones 5c966a6087 Default Settings: Added bulk delete, did away with need for default_setting_delete.php. 2014-07-27 04:09:25 +00:00
Mark Crane 83296c81bf Fix the if statement 2014-07-27 03:38:09 +00:00
Mark Crane 14db33a351 Set the title 2014-07-27 03:34:36 +00:00
Nate Jones 5651e4f317 Default Login: Adjust height of background box to accommodate domain input/select box (if present). 2014-07-27 03:11:21 +00:00
Nate Jones 1d598f8d00 Default Login: Added ability to control login box background opacity and color via Default Settings. 2014-07-27 02:53:10 +00:00
Nate Jones 854f5de9ad Default Login: Remove drop-shadow when no background image or color(s) enabled. 2014-07-27 01:08:11 +00:00
Nate Jones 588a9f5aac Enhanced Theme: Lighten the top of background image. 2014-07-27 00:57:54 +00:00
Nate Jones 2d3ec2e9e7 Login: Minor session adjustment to /index.php (allows refresh to change background image, like /login.php). 2014-07-27 00:56:45 +00:00
Mark Crane 07e986d022 FreeSWITCH allows a named extension so allowed ivr menu extension to be text 2014-07-27 00:54:12 +00:00
Nate Jones a100447b3d Enhanced Theme: Additional background images. 2014-07-27 00:25:39 +00:00
Nate Jones e962705677 Login Changes:
If visiting /index.php and /themes/[theme]/index.php exists, will load it.
If visiting /index.php and /themes/[theme]/login.php exists, will load it.
If NEITHER exist, will load /resources/login.php.

If visiting /login.php and /themes/[theme]/login.php exists, will load it.
If DOESN'T exist, will load /resources/login.php/

/resources/login.php reworked, Enhanced theme reworked.
2014-07-27 00:13:52 +00:00
Mark Crane 87b428c435 Minor change to the database schema class 2014-07-26 22:48:32 +00:00
Nate Jones 8a7c25dff0 Logout/Login: Clear session on login.php instead of logout.php - allows refresh to easily rotate background photos, if desired. 2014-07-26 19:37:29 +00:00
Nate Jones fe19a0e610 Domain Selector: Slightly increased drop-shadow. 2014-07-26 07:13:53 +00:00
Nate Jones 817903dfec Contacts: Added comment for qr code generation code. 2014-07-26 06:50:19 +00:00
Nate Jones 5102186372 Contacts: QR code logo png file moved to theme folders, instead of /app/contacts/ 2014-07-26 06:45:45 +00:00
Nate Jones 3757bf4357 Contacts: Removed hard-coded Title, Category and Role select box widths. 2014-07-26 06:31:11 +00:00
Nate Jones 25bc7ebc78 Contacts: Implemented a new QR Code generator, includes additional contact detail fields. 2014-07-26 06:02:21 +00:00
luis daniel lucio quiroz 67df8684e8 nibble_account can only be changed by superadmins 2014-07-25 22:33:56 +00:00
Mark Crane 2ff4bd21a4 Update the call forward lua script and remove the pin number 2014-07-25 11:04:16 +00:00
Mark Crane 9dcf8aa2a8 Get the domain settings only if the domain_uuid has a value 2014-07-25 09:08:51 +00:00
Mark Crane 0e49a135c6 Change value park from continue true to false as continue is not needed and it uses a little more resources when its set to true 2014-07-25 08:32:19 +00:00
Mark Crane 5228789d75 Add continue to all the default dialplans 2014-07-25 08:24:24 +00:00
Mark Crane 62bd78e97c Add continue false to the call forward dialplan 2014-07-25 08:08:59 +00:00
Mark Crane 9fdd07b1bb Add break on-true to the call forward dialplan 2014-07-25 08:03:41 +00:00
Nate Jones a05f476396 Default Settings: Copy status responses multilinguified (part 2). 2014-07-25 07:29:52 +00:00
Nate Jones 62f8d8ba02 Default Settings: Copy status responses multilinguified. 2014-07-25 07:28:59 +00:00
Nate Jones 6f00d29260 Default Settings: Copy checked settings to selected Domain (back end finished). 2014-07-25 07:23:35 +00:00
Mark Crane 551c96d2bd Add call forward dialplan 2014-07-25 07:09:36 +00:00
Nate Jones 267364788b Default Settings: Copy selected settings to domain (form prep, still under construction). 2014-07-25 06:11:07 +00:00
Mark Crane 5562152995 Changing the release version to align with FreeSWITCH's 3 digit release. 3.5 is dev branch 3.6 will be the release version number.'; 2014-07-25 04:34:02 +00:00
Nate Jones 00b6de500f Default & Domain Settings Edit: Implemented order field. 2014-07-25 02:45:23 +00:00
Mark Crane 75f7543d0b Add domain and default setting order to the list 2014-07-25 02:20:54 +00:00
Nate Jones 3701af88b8 Default Settings: Edit - Added Order select box for settings with type 'array'. 2014-07-25 02:07:03 +00:00
Mark Crane 9d52142e1d Show more default settings before paging 2014-07-25 02:01:31 +00:00
Mark Crane fed6914774 Add domain and user setting order 2014-07-25 01:45:58 +00:00
Mark Crane e785dfd499 Change the logic a little more for the smooth fall back 2014-07-25 01:38:17 +00:00
Mark Crane ef6a37a66a Make the setting order with a try catch to make the upgrade smoother 2014-07-25 01:32:36 +00:00
Nate Jones 4c3d699858 Nature Theme: Removed - The Enhanced theme now supports background images, background color and gradient. 2014-07-25 01:09:41 +00:00
Nate Jones ea00f9baa3 Default Settings: Array type modifications, change Theme background color to type array instead of text, add order field to v_default_settings table. 2014-07-25 00:57:43 +00:00
Mark Crane 2a3be99035 Add default,domain, and user settings 2014-07-25 00:43:15 +00:00
Nate Jones 9789fc2858 Default Settings: Implemented color picker for Enhanced template Theme background color selection. 2014-07-24 23:20:12 +00:00
Nate Jones a3eabd0589 Enhanced Theme: Extended background image Default Setting to support a single images, custom image folder paths, and remote images via http/s. Added background color and vertical gradient options, as well. 2014-07-24 22:17:09 +00:00
Nate Jones 2f2cfe222f Domain Selector: Display number of domains next to title. 2014-07-24 09:24:53 +00:00
Nate Jones 30c216e9d7 Enhanced Theme: Remove dead space at bottom. 2014-07-24 09:12:15 +00:00
Nate Jones 24ebc8aeac Enhanced Theme: Corrected background image path, and added images. 2014-07-24 08:58:01 +00:00
Nate Jones 48688e986e Enhanced Theme: Misc visual mods, added ability to enable background images using Theme > background_images in Default Settings. 2014-07-24 08:51:37 +00:00
Nate Jones 0e3cdd0c31 Domain Selector: Open and close with the Escape key. 2014-07-24 07:01:20 +00:00
Nate Jones 80faf2357c Domains List: Added Tools heading, multilinguified. 2014-07-24 06:05:05 +00:00
Nate Jones e4c5528a55 Domains List: Revert domain name to edit link, add Manage links for each domain in list. 2014-07-24 05:58:01 +00:00
luis daniel lucio quiroz e9feec7825 we save more info to let reporting accuracy 2014-07-24 05:32:16 +00:00
luis daniel lucio quiroz 3b3c99cdee discount new destination value from balance when billing 2014-07-24 03:48:26 +00:00
luis daniel lucio quiroz cdc8971d41 add support to save buying price for destination (billing) 2014-07-24 03:06:33 +00:00
luis daniel lucio quiroz d4a712cd71 default currency support using default settings 2014-07-24 00:41:32 +00:00
Mark Crane db9ed99dcf Add the not found inbound route only if using the xml handler 2014-07-23 23:06:14 +00:00
luis daniel lucio quiroz c7cac6c6a4 add number field for monthly price (billing) 2014-07-23 22:53:51 +00:00
Mark Crane da5662b1f6 Update the version to FusionPBX 3.5. rc 4 2014-07-23 22:07:28 +00:00
Mark Crane 1613d19c3b Unset the prepared statements used in the app_defaults.php files. 2014-07-23 22:00:03 +00:00
Mark Crane 09ff31ae5a Disable the global and not found inbound routes by default 2014-07-23 21:35:12 +00:00
Mark Crane 3c536c1e56 Change the wording of the comment in fax_retry.lua 2014-07-23 21:02:28 +00:00
Mark Crane c961b4ab82 Show the billing warning only if its installed 2014-07-23 20:47:00 +00:00
Mark Crane 314da0b559 Change limit_execute back to limit as limit_execute is not available on most systems 2014-07-23 20:30:32 +00:00
Mark Crane a74cd36793 Unset the prepared statement in the ORM class after the sql query has been executed 2014-07-23 20:11:05 +00:00
Mark Crane 7acad86def Unset the prepared statements after they have been used in destination_edit.php 2014-07-23 20:06:09 +00:00
Nate Jones a104ae3ecc Domain Selector: Disable close on blur for time being, causing conflict with selecting a domain to manage. 2014-07-23 19:18:08 +00:00
Mark Crane 453009734c Fix the paging on the domains page 2014-07-23 04:30:10 +00:00
Mark Crane 8c27431854 Fix the search 2014-07-23 04:28:06 +00:00
Mark Crane 09862a3085 Add a domain search tool 2014-07-23 04:24:57 +00:00
Mark Crane 658b5b85c4 Add an alternate way to switch domains from advanced -> domains 2014-07-23 03:42:05 +00:00
Mark Crane 4f61b256c9 Get rid of some test code 2014-07-22 21:26:13 +00:00
Mark Crane b1ce33cefc Add dialplan for an extension calling itself to check voicemail 2014-07-22 19:53:23 +00:00
Mark Crane fc93dab5ea Fix the provision array by unsetting the previous value 2014-07-22 19:12:32 +00:00
Mark Crane 6f3a3c20f7 Remove the string length requirement on the domain_settings 2014-07-22 18:26:02 +00:00
Mark Crane 6fa02b0cfd SQL Backup - Do not backup fields that have been deprecated 2014-07-22 10:25:20 +00:00
Mark Crane 1dc516524a Deprecate provisioning_list in the v_extensions table 2014-07-22 10:12:24 +00:00
Mark Crane 133e709e2b Add ntp_server_primary and polycom_gmt_offset to the polycom vvx template 2014-07-21 20:40:18 +00:00
Omar Irbouh a8b11e0e33 sql escape json content 2014-07-20 16:41:36 +00:00
Omar Irbouh 0a7bcb4e68 sql escape json content 2014-07-20 16:39:16 +00:00
Mark Crane 117507a951 Add directedCallPickupString ** to the VVX template 2014-07-20 10:46:23 +00:00
Mark Crane e746c0cf0b Use the lines array for the Polycom VVX template 2014-07-20 10:41:30 +00:00
Mark Crane a84d81fa9b Polycom firmware 4.x key assignment is working great with on demand web based provisioning no files are saved to the file system. 2014-07-20 09:23:10 +00:00
Mark Crane a75cc0fccd Add a lines array for provisioning. 2014-07-20 09:14:51 +00:00
Mark Crane b0c0cbbd92 Remove attendant options in as they are already defined in features.cfg 2014-07-20 07:37:28 +00:00
Mark Crane bad4ecaf4f Move the VVX blf attendant information to web.cfg template 2014-07-20 07:12:12 +00:00
Mark Crane bb3f23d939 Fix the a syntax problem in the Polycom VVX template 2014-07-20 06:28:41 +00:00
Mark Crane bd2810e619 Add key assignment for the Polycom template 2014-07-20 06:16:44 +00:00
Mark Crane 5f788ae6fe Add normal and automata options for the Polycom provisioning templates 2014-07-20 06:11:37 +00:00
Mark Crane c7434ddfa9 Update the Cisco SPA phone templates 2014-07-20 04:53:53 +00:00
Mark Crane eaad2f3226 Fix the key category and type for the spa504g 2014-07-20 04:10:26 +00:00
Mark Crane e25008ab51 Set the SIP transport as uppercase for Cisco SPA504g 2014-07-20 03:58:37 +00:00
Mark Crane a7cccbf443 Add Cisco SPA expansion 1 and 2 to the spa504g device template 2014-07-20 00:53:31 +00:00
Mark Crane dac1fff99b Add Cisco SPA expansion 1 and expansion 2 to devices 2014-07-20 00:49:27 +00:00
Mark Crane f5979f2c09 Fix the save button on the contact page 2014-07-20 00:18:07 +00:00
luis daniel lucio quiroz 4cddee4fae th_order_by now has additional support to pass more GET params 2014-07-20 00:05:23 +00:00
luis daniel lucio quiroz e025e4036d add check_float function 2014-07-19 02:41:52 +00:00
Mark Crane 9e599e2370 Remove the redundant local_stream:// 2014-07-19 02:29:47 +00:00
Mark Crane 3c7535515f Change the double quotes to single quotes 2014-07-19 02:26:46 +00:00
Mark Crane f21c251a4e Fix call center per domain music on hold 2014-07-19 02:22:55 +00:00
Mark Crane 05f4be636d Hide svn on the upgrade page when the FusionPBX package is installed 2014-07-18 21:21:29 +00:00
Mark Crane 87ecf36366 Change the order of the device device_label, device_description 2014-07-18 21:01:12 +00:00
Mark Crane c897034165 Update the freeswitch conf directory 2014-07-18 20:30:36 +00:00
Mark Crane cee09a674f A1 Hash the extension and voicemail passwords'; 2014-07-18 04:12:06 +00:00
Mark Crane 618b8441ce Comment out the ivr menu xml class until its ready to use in the future 2014-07-18 02:06:43 +00:00
Mark Crane 30a6dcf361 remove some of the deprecated names from v_users 2014-07-18 01:51:30 +00:00
Mark Crane 95fb28454a Use the escaped destination number 2014-07-18 00:32:15 +00:00
Mark Crane a65f9b5f38 Add a \ to escape the + in destination number formatted in E.164 format. 2014-07-18 00:31:07 +00:00
luis daniel lucio quiroz eff69a72bc a variable was wrong 2014-07-18 00:13:44 +00:00
luis daniel lucio quiroz 536d5ae24d more support to fussion schema 2014-07-17 23:46:04 +00:00
luis daniel lucio quiroz 2ef8b18ae0 billing app update support 2014-07-17 20:47:35 +00:00
luis daniel lucio quiroz 60990a9e27 billing app update support 2014-07-17 19:31:50 +00:00
Mark Crane fb1bc360a9 Add translations for the CDR advanced search 2014-07-17 19:04:20 +00:00
Mark Crane 22fda854d2 Missed updating before commit repairing xml_cdr.php 2014-07-17 17:47:20 +00:00
Mark Crane 40523af169 XML CDR add call direction to the advanced search 2014-07-17 17:35:14 +00:00
Mark Crane 2f763f8a78 Revert the previous commit. 2014-07-17 16:52:31 +00:00
Mark Crane f48db7cf45 CDR change direction to call_direction 2014-07-17 16:23:49 +00:00
luis daniel lucio quiroz b8001adfd8 some translations for notifications app 2014-07-16 19:46:06 +00:00
James Rose f824937a9f Fixed Call Pickup for BLF buttons on Cisco SPA50x and SPA51x so it picks up the ringing extension and no longer dials *98. 2014-07-16 16:53:29 +00:00
Mark Crane d0a1b862d1 Make the domain and schema work with the PHP classes 2014-07-16 04:30:49 +00:00
Mark Crane 681a72367f Add globals needed by the app defaults in domains upgrade method. 2014-07-15 17:49:28 +00:00
Mark Crane 0721212366 Make upgrade.php use the schema and domain upgrade classes 2014-07-15 17:11:13 +00:00
Mark Crane fa21e32f44 Update schema dn domains 2014-07-15 10:30:31 +00:00
Mark Crane 205792242e Add to the schema class and adjust the db connection obect in the domains class 2014-07-15 07:58:01 +00:00
Mark Crane 9d2b1a0033 Set XML CDR debug to false 2014-07-15 06:33:10 +00:00
Mark Crane ae1c715d4e Update dialplan destinations 2014-07-15 06:26:51 +00:00
Mark Crane 780d15a895 Move accouncode in default into the if statement and move it above enabled. 2014-07-15 06:19:19 +00:00
Mark Crane b379375529 Move domain upgrade into the domain class and upgrade_schema into the schema class 2014-07-15 05:46:15 +00:00
Mark Crane 9825db2573 Fix group intercept lua script 2014-07-14 21:32:23 +00:00
Mark Crane 7500574d5a Add the project path missing for a link in the enhanced theme'; 2014-07-14 18:11:30 +00:00
Mark Crane 008744dc9f Update the destination number for the page dialplan 2014-07-14 18:00:01 +00:00
Mark Crane bce4b41cd8 Prevent speed dial transfer to page extension as reported at https://code.google.com/p/fusionpbx/issues/detail?id=639 2014-07-14 17:57:37 +00:00
Mark Crane b4b47852bc Fix voicemail *97 by changing the sip_from_display variable back to the original caller_id_number 2014-07-14 17:44:22 +00:00
luis daniel lucio quiroz 53b3427a6b some language and default values support 2014-07-14 03:42:13 +00:00
luis daniel lucio quiroz a5626ea2dd set carrier and accountcode for incoming routes if data exists 2014-07-13 23:22:15 +00:00
luis daniel lucio quiroz 8748359fc5 preliminar support for carrier & accountcode for destinations 2014-07-13 22:29:25 +00:00
Mark Crane 40ac982b7e Add group confirm to ring group bridge statements 2014-07-13 09:24:51 +00:00
Mark Crane a1e1c6ff09 Enable outbound_route_to_bridge function to use global domains 2014-07-13 06:56:23 +00:00
Mark Crane 5de5699da8 Fix the call direction dialplan name 2014-07-13 05:11:01 +00:00
Mark Crane 7df0bd628d Add global outbound route compatibility for ring groups external destinations 2014-07-13 04:12:04 +00:00
Mark Crane aca28e7efb Ring Group - Change the method used for to provide confirm 2014-07-13 03:25:05 +00:00
Mark Crane 49a8e9d4ff Fix call block the last change inadvertantly removed some code from call block 2014-07-12 21:49:05 +00:00
Mark Crane 2fca642782 Adjust the tabbing and remove cmd C option from call_block lua script 2014-07-12 21:15:01 +00:00
Mark Crane 1ed22da0df Remove the C from call block as its no longer needed 2014-07-12 21:12:35 +00:00
Mark Crane 8bbe4615c6 Add memcache to call block 2014-07-12 12:01:19 +00:00
Nate Jones 82e71755f4 Enhanced Theme: Hide Domain Selector on blur (click off) 2014-07-12 09:19:34 +00:00
Mark Crane c6c408ab8e fix the xml cdr import'; 2014-07-12 08:43:13 +00:00
Nate Jones 8965dbcda8 Enhanced Theme: Tweaked domain hover in Domain Selector 2014-07-12 08:30:16 +00:00
Mark Crane 053ce37dfa Fix the name on the variables dialplan 2014-07-12 07:57:04 +00:00
luis daniel lucio quiroz 32c9294312 adding more support for xml_cdr to multicurrency bill 2014-07-12 07:49:41 +00:00
Nate Jones 478e015e1d Call Block: Enhanced Recent Calls list (row hover click, direction icon, view icon link to CDR record, etc). 2014-07-12 07:47:46 +00:00
Nate Jones 50ee05df62 Call Block: Enable dialplan entry if disabled when adding a number to block, ability to set custom name on recent call add. 2014-07-12 07:02:38 +00:00
Nate Jones 7e60c1c19c Notifications: Updated app_config.php to reflect path change. 2014-07-12 05:39:18 +00:00
Nate Jones 4034401e14 Functions: Created is_uuid() function for validation. 2014-07-12 05:32:35 +00:00
Mark Crane d79b45663e Change limit_excecute to limit 2014-07-12 05:13:15 +00:00
Mark Crane 667023311a Add call direction dialplan back with its original app_uuid. Add variables dialplan for per domain variables 2014-07-12 04:28:55 +00:00
Mark Crane 2e809f0570 Fix the dialplan detail order for call center increment by 10 2014-07-12 04:04:14 +00:00
Mark Crane 2fad16af2e Fix one more thing in call block 2014-07-12 02:59:02 +00:00
Mark Crane 97f3d676a7 Add call block default dialplan 2014-07-12 02:31:48 +00:00
Nate Jones 9db3ca8a8f Notifications: Update link path in login message. 2014-07-12 01:41:02 +00:00
Mark Crane 57377e790a Move notifications to the core directory 2014-07-12 01:26:06 +00:00
Nate Jones efcc7ef86a Extensions: Provisioning MAC Address select box set to a fixed width to prevent Advanced section column width inconsistency. 2014-07-11 05:34:27 +00:00
Mark Crane cb557f34aa Fix the cdr app_defaults 2014-07-11 02:03:47 +00:00
Mark Crane 53dd7f31b1 Add cdr limit to default settings 2014-07-11 01:44:44 +00:00
Mark Crane d9f26f8cd7 Add CDR limit 2014-07-11 01:34:47 +00:00
Mark Crane c42890d4f1 Remove the uuid_exists from call center activity page to fix a problem it caused and improve the call center efficiency 2014-07-10 21:05:06 +00:00
Nate Jones 8b1c6feabb Upgrade: Fixed language issue when executing Permission Defaults. 2014-07-10 09:35:07 +00:00
Nate Jones b7b2d22884 Upgrade: Fixed language issue when executing Menu Defaults. 2014-07-10 09:30:32 +00:00
Nate Jones 58e5030eb9 Upgrade: Completed Data Type check option and multilinguified everything. 2014-07-10 09:20:11 +00:00
Nate Jones 18ce69121b Upgrade: Forgot a couple files for the last revision submission. 2014-07-10 07:16:58 +00:00
Nate Jones aa89557ea7 Upgrade: Added SVN Update, handle Upgrade Data Types differently (still under construction...) 2014-07-10 07:15:51 +00:00
Nate Jones 605547d18f Upgrade: Response message mod - show specific if only one action performed, general message if more than one. 2014-07-10 06:14:59 +00:00
Nate Jones aca76ce8e0 Upgrade: Minor modification. 2014-07-10 06:07:13 +00:00
Nate Jones e89d28495a Upgrade: Divides Upgrade Schema into separate processes. Complete translation forthcoming. (Still under construction...) 2014-07-10 06:05:22 +00:00
Mark Crane cfb833aa25 Reduce one request to the database and create a better domains array 2014-07-10 05:23:53 +00:00
Nate Jones afcd21de5a Document (Window) Title: If empty, sets a default title, otherwise adds " - FusionPBX". 2014-07-10 00:40:44 +00:00
Nate Jones e67aa0c638 Document (Window) Title: Update variable name to avoid conflict when paging is used. 2014-07-10 00:32:50 +00:00
Nate Jones 5b8414066f Notifications: Added other translations for demographics-only message. 2014-07-10 00:23:50 +00:00
Nate Jones c5dfccfe5a Notifications: Added ability to ONLY submit demographics, if desired. 2014-07-10 00:09:33 +00:00
Nate Jones 7f683bba1f User Dashboard: Visual mods, added explicit link under System menu. 2014-07-09 22:19:08 +00:00
Nate Jones 07e263bce2 Enhanced Theme: Modified header to show domain of current user, added labels. 2014-07-09 22:02:34 +00:00
Nate Jones dbc31f2dc3 Notifications: Remove unnecessary permission. 2014-07-09 21:59:55 +00:00
Nate Jones 24ab15b621 User Dashboard: Add page header, some language mods. 2014-07-09 21:56:11 +00:00
Nate Jones 515ef676d5 Notifications: Change permission to use group instead. 2014-07-09 20:02:06 +00:00
Mark Crane ee2175c23a Disable get domain lua script as it is now handled an alternative way 2014-07-09 08:00:10 +00:00
Mark Crane 743bb3b410 Set continue to false for inbound route - not found 2014-07-09 07:55:57 +00:00
Mark Crane d2decc727a Set the domain info once per inbound route dialplan 2014-07-09 07:36:13 +00:00
Mark Crane 6fb0434fd3 Add domain info to inbound route xml files 2014-07-09 06:07:56 +00:00
Mark Crane d8ed0c3db3 Add inline to the anti-action xml dialplan files 2014-07-09 05:56:01 +00:00
Mark Crane 0c9e632607 Add domain info to the xml handler for inbound routes 2014-07-09 05:40:17 +00:00
Mark Crane 1a42551cc0 Try again on the voicemail quota bug 2014-07-09 02:47:15 +00:00
Mark Crane 9f9603d4a8 Fix voicemail quota for new voicemail boxes message_sum 2014-07-09 02:09:08 +00:00
Nate Jones 40d2135191 Domain Edit: Optimize select queries used during Domain rename. 2014-07-08 12:02:04 +00:00
Nate Jones ff4570cdba Domain Edit: On Domain rename, update MORE database records and dialplan xml files. 2014-07-08 11:28:28 +00:00
Nate Jones d3a46b58cf Theme - Enhanced: Domain selector language adjustments to correct selector heading bug when managing Domains. 2014-07-08 08:47:55 +00:00
Nate Jones c99f436ac8 Domain Edit: On Domain rename, update switch domain folders & files...
- switch/storage/voicemail/default/[domain] (folder)
- switch/storage/fax/[domain] (folder)
- switch/conf/dialplan/[domain] (folder/file.xml)
- switch/conf/dialplan/public/[domain] (folder/file.xml)
- switch/conf/directory/[domain] (folder/file.xml)
- switch/recordings/[domain] (folder.xml)
2014-07-08 08:23:22 +00:00
Nate Jones 4fc4b6a239 Domain Edit: On Domain rename, update CDR records where appropriate. 2014-07-08 06:47:52 +00:00
Nate Jones 7337fba360 Voicemail-to-Email: Backup email to database if sending fails, better detection of ContentType. 2014-07-08 06:38:23 +00:00
Mark Crane 33eb19e9ae Testing performance not checking data type on upgrade schema 2014-07-08 06:04:30 +00:00
luis daniel lucio quiroz 6a28c418e3 absolute path fixed 2014-07-08 02:39:59 +00:00
Nate Jones 090d3cacb2 Voicemail-to-Email: Add custom headers containing domain_uuid, domain_name, call_uuid and email_type. Send email using Domain smtp settings, if defined under Default Settings. 2014-07-08 02:30:57 +00:00
Mark Crane 38f97e2012 Fix the call center buttons which were broken for Queue names with a space in them 2014-07-08 02:22:32 +00:00
Mark Crane 502ac356d0 Change the variable to identify the voicemail ID. The sip_from_display is compatible with the number alias 2014-07-07 21:37:51 +00:00
Nate Jones 30370d41ca Call Broadcast: Added other translations. 2014-07-07 20:45:21 +00:00
Nate Jones b9c957cea3 Call Broadcast: Add controls for Voicemail Detection. 2014-07-07 20:43:45 +00:00
Mark Crane d8967892fd Add AVMD lua script 2014-07-07 20:15:13 +00:00
Nate Jones 722e235909 Domain Edit: On Domain rename, update Dialplans and Extensions where appropriate. 2014-07-07 19:57:52 +00:00
Nate Jones 8d052b636b Misc: jQuery goodness for Advanced buttons. 2014-07-07 19:33:17 +00:00
Nate Jones f19755d481 User Create/Edit: More advanced password match/mismatch notifications. 2014-07-07 19:04:28 +00:00
Mark Crane 38241060e7 Fix a syntax error the fax settings edit 2014-07-07 18:39:53 +00:00
Nate Jones 30e20766ab User Create: Column width adjustment. 2014-07-07 18:11:55 +00:00
Nate Jones a724d97f9a Notifications: Allow subscribe even if no notification channels enabled (collects demographic data and email), some jQuery goodness. 2014-07-07 17:55:07 +00:00
Mark Crane efd4c0e239 Fax, convert a tif to a pdf only if the pdf file does not exist 2014-07-07 17:27:32 +00:00
Nate Jones 73105d432e User Create/Edit: Added JS to change CSS style on password boxes if values are not identical. 2014-07-07 16:34:43 +00:00
Nate Jones 6dd90e41ad Notifications: Retains postback values if input was invalid. 2014-07-07 15:37:34 +00:00
Nate Jones 3df8a0c267 Login Message: Prevent re-enable message post Upgrade Schema. 2014-07-06 04:50:56 +00:00
Mark Crane 9c39f39561 Update the noticiations language file 2014-07-06 04:48:05 +00:00
Nate Jones fe478c3831 2014-07-06 03:51:49 +00:00
Nate Jones 061b07e863 Implemented Login Message feature for superadmin only, advertising new Notifications section 2014-07-06 03:50:18 +00:00
Nate Jones 89b6a466aa Updated menu link to remove plurality from notifications_edit.php (to be notification_edit.php) 2014-07-06 03:16:33 +00:00
Mark Crane 06b35fe083 Fix the software_uuid issue for upgrade schema 2014-07-06 01:22:33 +00:00
Mark Crane 88e4af8969 Remove the original notifications_edit.php file 2014-07-06 00:59:06 +00:00
Mark Crane a365df4d86 Add the notification edit file 2014-07-05 22:46:25 +00:00
Mark Crane 68189986ba Change the notifications_edit permission to notification_edit 2014-07-05 20:03:30 +00:00
Mark Crane ac3f12d96d Fix the uuid for the custom menus 2014-07-05 19:21:53 +00:00
Mark Crane b84aaab4ca Fix custom menu items. 2014-07-05 19:03:54 +00:00
Nate Jones 44d661e92e New Project Notifications feature, collect installation demographics. 2014-07-04 22:45:43 +00:00
Mark Crane 0ff20506fd Update the polycom vvx template to enable checkSync reboot. This template works for polycom phones version 4 and higher 2014-07-04 21:31:30 +00:00
Mark Crane 6628bb087f Fix the registration buttons: reboot and provision for polycom version 4 and higher and snom phones 2014-07-04 21:28:28 +00:00
Mark Crane f0e1d9a59b Fix the identation on the xml handler directory xml 2014-07-04 18:20:11 +00:00
Mark Crane 2f0571053f Work on registration provision and reboot so that it works with the Cisco SPA, Yealink, Grandstream phones. 2014-07-04 09:47:37 +00:00
Mark Crane 13f89f6850 Add a patch for voicemail thanks GerritV for contributing it. 2014-07-04 05:27:42 +00:00
Mark Crane 596f68bd34 Remove the ring_group_timeout_sec from the database request 2014-07-04 04:33:58 +00:00
Mark Crane 6727d0841d Remove ring group call timeout as the per leg timeout makes it redundant 2014-07-04 04:25:09 +00:00
Mark Crane 9fc843babb Add show all to registrations 2014-07-04 03:47:32 +00:00
Nate Jones 39eddf4b0a Added valid_email() function for verifying email address syntax. 2014-07-03 23:19:30 +00:00
Mark Crane 4cc005cf55 Make sure the conference center array is created 2014-07-03 22:52:17 +00:00
Mark Crane 32df475415 Prevent Conference Room Pin Number duplicates 2014-07-03 22:16:29 +00:00
Mark Crane 9f74a8dd5b Fix the conference room delete 2014-07-03 21:54:45 +00:00
Mark Crane e478b34887 Hide fax pin number which isnt used currently 2014-07-03 19:29:20 +00:00
Mark Crane aa7cb1987c Remove an extra line 2014-07-02 22:29:30 +00:00
Mark Crane 026b25464c Add the software name, version and url 2014-07-02 22:21:16 +00:00
Mark Crane 91645a6833 Move the software table into core/upgrade/app_config.php 2014-07-02 21:41:41 +00:00
Mark Crane 6674d22a4c Add a primary key to the software table 2014-07-02 21:38:23 +00:00
Mark Crane 513a5768d6 Change the label used for fax detection 2014-07-02 21:06:46 +00:00
Mark Crane 1fa6771ba1 Remove the automatic null for empty string in the check_sql function 2014-07-02 16:22:37 +00:00
Mark Crane 196eb3a55b Change the dialplan detail order so that it starts with 10 instead of 0 2014-07-02 06:42:43 +00:00
Mark Crane 4d00203e79 Fix the a syntax problem and the dialplan detail order 2014-07-02 06:40:28 +00:00
Mark Crane 3f59cff54e Add fax detection when adding a dialplan destination if the fax extension is set 2014-07-02 06:21:20 +00:00
Mark Crane 50d024e33e Fix the ON NET outbound caller id name and number 2014-07-02 05:34:14 +00:00
Mark Crane 48c6645688 Add global dialplan option when using the xml handler. 2014-07-02 04:02:50 +00:00
Nate Jones 1546661013 Dialplan Edit: If action is bridge, and data is sofia/gateway/... initially show Gateway Name instead of UUID. UUID showed on click to edit. 2014-06-29 06:39:40 +00:00
Mark Crane 7d6334a750 Work on the reboot and provision buttons on the registrations 2014-06-27 19:50:15 +00:00
Mark Crane 6af80a602a Prevent an error on the reverse authentication for the xml handler when its sent and invalid domain from FreeSWITCH. 2014-06-27 19:41:31 +00:00
luis daniel lucio quiroz 05657b1dfb database object must be globally local 2014-06-26 01:54:35 +00:00
luis daniel lucio quiroz 3e7b00b630 multi-currency support to xml_cdr 2014-06-25 23:58:47 +00:00
luis daniel lucio quiroz e47f4b2f56 try to get rid of usless warnings 2014-06-25 23:40:42 +00:00
luis daniel lucio quiroz 8625762d64 workarround for #635 2014-06-25 20:26:30 +00:00
luis daniel lucio quiroz 797b0307dc extension app is getting ready for billing 2014-06-25 17:45:48 +00:00
Nate Jones 463bc4f7c7 Ring Groups: Fix Prompt select box to select the option loaded from db. 2014-06-25 00:09:30 +00:00
luis daniel lucio quiroz 5c15c43560 better billing decition, specially to allow tollfree billing 2014-06-24 11:51:37 +00:00
luis daniel lucio quiroz d15883a3ec if not rate specified, outcalls rate 0.01, local/inbound 0 2014-06-24 11:29:48 +00:00
Mark Crane a91f7ae504 unset the prepared statement 2014-06-24 06:48:39 +00:00
Mark Crane 7a01104700 Ensure the gateway_uuid is lower case 2014-06-24 06:40:29 +00:00
luis daniel lucio quiroz 3215aa7eb9 sync balances after call has finished 2014-06-24 01:09:41 +00:00
Nate Jones 611edd0cf1 CDR Search: Added support for asterisk ("*") as a wildcard character in Source, Destination and CID Name fields. 2014-06-24 00:37:17 +00:00
Mark Crane 4793ab0311 Account for a gateway uuid which in a rare edge case the UUID is upper case 2014-06-23 23:05:16 +00:00
Mark Crane 6663b2b3a1 Set the uuid to lower case 2014-06-23 22:45:45 +00:00
luis daniel lucio quiroz bcb25c49e9 billing support for destination objects 2014-06-23 15:18:22 +00:00
luis daniel lucio quiroz 189a5ee5f1 v_xml_cdr_import fixed when debug off 2014-06-23 04:04:57 +00:00
luis daniel lucio quiroz 7e695edb57 xml_cdr also saves the LCR carrier 2014-06-22 18:52:14 +00:00
luis daniel lucio quiroz ca3f246e37 I updated my email 2014-06-22 18:38:46 +00:00
luis daniel lucio quiroz fb0df1b1b8 Fix a little french translation, add language support for world Price, add column of selling price when billing module is installed 2014-06-22 18:24:32 +00:00
Mark Crane 1a628deefe remove edit from domain settings 2014-06-22 08:15:51 +00:00
Mark Crane ad83bc17a9 Remove edit title 2014-06-22 08:12:07 +00:00
Mark Crane b963af88e9 Remove edit from the content edit page 2014-06-22 07:59:59 +00:00
Nate Jones b2d577e9a0 Description column style mods, just for consistency. 2014-06-22 06:35:33 +00:00
Nate Jones c67af11f1f Default Settings: Style mod. 2014-06-22 06:09:38 +00:00
Mark Crane 6bd8e327b5 Remove the fieldset on the CDR search 2014-06-22 06:00:27 +00:00
Mark Crane ebcc853173 Remove the empty select option 2014-06-22 05:47:53 +00:00
Nate Jones 7cd3ba9ac3 Usability Enhancement: Click on list rows to View/Edit items. 2014-06-22 04:53:29 +00:00
Nate Jones 09e5da60a8 Usability Enhancement: Click on list rows to View/Edit items.
Misc other fixes.
2014-06-22 04:50:16 +00:00
Nate Jones 7f36b2d6d2 Usability Enhancement: Click on list rows to View/Edit items.
Misc other fixes.
2014-06-22 04:34:19 +00:00
Mark Crane a8f2d03cd6 Update the app_defaults so that it works correctly 2014-06-22 04:31:21 +00:00
Mark Crane 0012ef5ef2 Add a more elegant way to add cdr -> format and cdr -> storage to default settings. 2014-06-22 03:52:23 +00:00
Mark Crane e6a28510a7 Fix the storage select 2014-06-22 03:38:37 +00:00
Mark Crane 562d469ae5 Add Default Settings format and storage select list. 2014-06-22 03:36:26 +00:00
Nate Jones 752ad07d8a Usability Enhancement: Click on list rows to View/Edit items.
Conference Center: Misc minor visual mods.
Contacts: Misc minor visual mods.
2014-06-22 03:24:36 +00:00
Nate Jones 3412d12f79 CDR: Added View icon to right column.
CDR: List row Edit clicking disabled for Click-2-Call column cells. 
Themes: New style to accommodate width of single control icon (as currently used on CDR)
2014-06-22 02:18:58 +00:00
Nate Jones bf6306705a Fix missing / on closing <tr> tags. 2014-06-22 01:16:49 +00:00
Nate Jones 1c20d24653 Usability Enhancement: Click on list rows to Edit items. 2014-06-22 01:10:24 +00:00
Mark Crane cf1a250b38 Fix the syntax 2014-06-22 00:04:13 +00:00
Mark Crane 8084161dd5 Add cdr format and storage settings to default settings 2014-06-22 00:02:04 +00:00
Mark Crane 5a0017c5be Fix CDR for json when read from the file system 2014-06-21 23:49:21 +00:00
luis daniel lucio quiroz d7ca2bddd2 v_xml_cdr_import support for billing 2014-06-21 22:08:11 +00:00
Nate Jones 08ec3bb249 Ring Groups: Description column style fix. 2014-06-21 21:15:26 +00:00
Nate Jones c38f98c5f0 User Manager: Changed Groups to Group in column heading. 2014-06-21 19:54:47 +00:00
Nate Jones 50fd28d271 User Manager: Added Groups column on User list. 2014-06-21 19:52:55 +00:00
Nate Jones a695d35ca2 Sort all Group select boxes by group_name asc.
Create User now allows to select a single Group to add User to at time of User creation.
2014-06-21 19:40:16 +00:00
Nate Jones 814dca1839 Interactive Conference: URL Decode Caller ID Name. 2014-06-21 10:54:37 +00:00
Nate Jones e179a475f2 CDR & Enhanced Theme: Added Direction indicator icon. 2014-06-21 10:38:02 +00:00
Nate Jones eb8b71db66 SIP Status: Rename and multilinguify. 2014-06-21 09:12:17 +00:00
Nate Jones ec1ba51eb9 (Modified) Usability Enhancement: Click on list rows to Edit items. Now uses jQuery (instead of onclick) to avoid being redirected to Edit when canceling a Delete. 2014-06-21 08:52:47 +00:00
Nate Jones 8e7b388b44 Add links to certain column text in a list view - integrated click on list rows to Edit items, as well. Misc bug fixes. 2014-06-21 07:51:31 +00:00
Nate Jones a117993264 Usability Enhancement: Click on list rows to Edit items. 2014-06-21 07:04:04 +00:00
Nate Jones fd918a10b8 Account Settings: Visual adjustment to Additional Info table widths. 2014-06-21 06:13:24 +00:00
luis daniel lucio quiroz 3f0f7ab1a5 missing a connect verification 2014-06-21 05:22:45 +00:00
Nate Jones 926d170960 Contact Extensions: Integrated permission check on Edit and Delete buttons. 2014-06-21 05:14:32 +00:00
luis daniel lucio quiroz 5c73a105a8 missing a this 2014-06-21 05:05:32 +00:00
luis daniel lucio quiroz f2c37a9dbe new method for database object 2014-06-21 04:59:25 +00:00
Nate Jones 632fd2cb39 Add links to certain column text in a list view.
Misc bug fixes.
2014-06-21 03:42:09 +00:00
Omar Irbouh d5a9796e0f added extensions section to contacts page 2014-06-21 02:30:16 +00:00
Omar Irbouh 9080648f57 display users as link 2014-06-21 01:51:05 +00:00
Nate Jones 0b9849c124 Modify th_order_by function to allow the passing of CSS to the generated <th> tag. 2014-06-21 00:59:41 +00:00
Nate Jones e979147858 Add links to certain column text in a list view.
Add ability to edit Call Block number.
2014-06-21 00:58:16 +00:00
Nate Jones 93786dd1b9 User Manager: Ability to edit Username, verifies unique. 2014-06-20 22:21:39 +00:00
Nate Jones 5722ac20b1 Call Center Agent Add/Edit: Indicate required fields. 2014-06-20 21:04:07 +00:00
Nate Jones 5b212badfa Added column title "Tools" for group Permissions and Members links. 2014-06-20 18:56:02 +00:00
Nate Jones 6dc698d0d2 Expand then limit query string NULL mods to insert statements only. 2014-06-20 18:43:51 +00:00
Nate Jones 74f72a4ba7 Fix Group (Permissions) Copy. 2014-06-20 18:42:17 +00:00
Nate Jones f8da5edc7e Group Members: Prevent the adding of a user more than once. 2014-06-20 00:49:46 +00:00
Nate Jones 2f6ea48001 Group Permissions: Display message and redirect on Save. 2014-06-20 00:48:38 +00:00
Nate Jones f36d5a9220 Group Permissions: Restore Default respects Protected group permissions again. 2014-06-20 00:17:22 +00:00
Nate Jones fef364a3e3 Add Protected column label to Groups. 2014-06-19 23:37:28 +00:00
Nate Jones 8bd2526063 Remove ? cursor. 2014-06-19 23:12:43 +00:00
Nate Jones bfd7a5959d Hover % Fix, ? cursor. 2014-06-19 23:09:01 +00:00
Nate Jones 0198a2b34a Alt to Title for hover %. 2014-06-19 23:06:57 +00:00
Nate Jones e1f796283b Added PDD and MOS permissions and MOS score to CDR list. 2014-06-19 23:00:43 +00:00
luis daniel lucio quiroz d3cf54faf0 xml_cdr starts getting ready for billing app 2014-06-19 20:52:41 +00:00
Nate Jones a5fce3c667 Minor layout mods. 2014-06-18 15:52:35 +00:00
Mark Crane 1dac552a64 2014-06-18 15:41:57 +00:00
Mark Crane c2a6eda65b Change basic search to just search 2014-06-18 15:40:05 +00:00
luis daniel lucio quiroz b1bb4f3818 pre-filling by default accountcode with current _SESSION[domain_name] only for superadmin and when adding 2014-06-18 12:22:38 +00:00
luis daniel lucio quiroz c4d3beb59d do not change accountcode when updating and not superadmin 2014-06-18 12:10:46 +00:00
luis daniel lucio quiroz f0af99fd40 accountcode can only be set by superadmin, domain value set by default 2014-06-18 11:53:31 +00:00
Nate Jones 1dd5a10668 Fix for Issue 481 (Enhanced) - Links to protected pages (such as emailed conference recording links, etc) will now properly redirect upon a successful login attempt AFTER failed login attempts. 2014-06-18 04:53:18 +00:00
Nate Jones 0334a5d787 Fix for Issue 481 - Links to protected pages (such as emailed conference recording links) will now properly redirect after login. 2014-06-18 03:13:12 +00:00
Nate Jones c2ebfec5b0 Visual adjustments to Music on Hold page. 2014-06-18 02:28:31 +00:00
luis daniel lucio quiroz 9469b84a94 debout output for _POST[cdr] 2014-06-18 01:40:17 +00:00
Nate Jones 78efbfe4d1 Minor Tweak: Enhanced delete own domain/user prevention. 2014-06-17 21:27:10 +00:00
Nate Jones f833cf3c91 Enhanced delete own domain/user prevention. 2014-06-17 21:24:44 +00:00
Nate Jones 59f80f04e4 Retains bottom border on table cell(s) if content is empty. 2014-06-17 18:51:32 +00:00
Nate Jones d897e6dbae Restored ability to pass a custom profile to status_registrations.php; defaults to 'internal'. 2014-06-17 03:27:06 +00:00
Nate Jones cffb83b87b Clean up on Registrations page. 2014-06-17 01:56:43 +00:00
Nate Jones f3d45bf89c Registrations auto-refresh via Ajax 2014-06-17 01:32:32 +00:00
Nate Jones b1fe4e4f71 Fix Active Calls & Registrations page window titles. 2014-06-16 22:50:47 +00:00
Nate Jones 73493541b8 Show current user at top-right. 2014-06-16 22:09:10 +00:00
Nate Jones 13554c75c0 CDR Search fix for Users group, some additional permissions. 2014-06-16 22:08:30 +00:00
Nate Jones e5a23aabaf CDR basic search query, style and language mods, misc minor style mods. 2014-06-16 18:12:21 +00:00
Mark Crane 69bf98f6f7 Fix the caller id info on CDR details 2014-06-14 09:30:53 +00:00
Mark Crane 09a4c20efb Fix call flows on CDR details 2014-06-14 09:27:09 +00:00
Mark Crane 752b72edcd Correct the syntax and remove test code 2014-06-14 08:29:57 +00:00
Mark Crane aeb72c371a Change from CDR details from an xml object to a multi-dimensional array 2014-06-14 08:27:21 +00:00
Mark Crane ace39f7efc Update the CDR details 2014-06-14 08:00:10 +00:00
Mark Crane e3fcc4a9a4 Add json option for CDR details 2014-06-14 07:41:22 +00:00
Mark Crane 8d2bfeb23e Minor code cleanup 2014-06-14 07:19:56 +00:00
Mark Crane 0d7e95a1e9 In advanced -> default settings add the following cdr->format->text = xml,json and cdr->storage->text = db,dir 2014-06-14 07:07:04 +00:00
Mark Crane 0a37951438 Make the new json field operation with json_encode 2014-06-14 04:58:50 +00:00
Mark Crane 2ab1c81d98 Add pin_number and json option to xml cdr 2014-06-14 04:53:04 +00:00
Nate Jones 48b860de36 Implemented Issue 594 (Feature Request) - Memcache status added to bottom of System Status page. 2014-06-13 20:28:46 +00:00
Nate Jones cfd0d013aa Fix for Issue 589 - Implemented proposed fix, implementing tone_stream in the moh-sound parameter. 2014-06-13 17:56:53 +00:00
Nate Jones 7f670d37b5 Fix for Issue 525 - Removed old delete query code on non-existent table v_meeting_pins. 2014-06-13 05:54:54 +00:00
Nate Jones e4744049b4 Fix for Issue 601 - Recordings should now play properly. Tested on Windows 7 in Chrome 35, FF 30, IE 11 and Linux (Xubuntu) in Chromium 33, FF 30. 2014-06-13 04:39:23 +00:00
Nate Jones 935a8319c2 Fix for Issue 610 - Extra greater-than symbol removed. 2014-06-13 02:27:44 +00:00
Nate Jones 5f2fd538d1 Fix for Issue 615 - Caller ID Number in Follow Me now removable upon save. 2014-06-13 02:17:10 +00:00
Mark Crane a192ffd900 Add rtp_audio_in_mos to the Call Detail Record indexed details 2014-06-12 11:53:52 +00:00
Mark Crane be2c379852 Fix a bug in IVR Menu exit action select hangup did not display the action correctly 2014-06-12 11:17:28 +00:00
Mark Crane 66745fde08 Change the refresh rate for the registrations page 2014-06-12 04:32:33 +00:00
Richard Neese cbca5f015b rm the added files 2014-06-11 03:41:00 +00:00
Richard Neese 3c4dbd41e2 added in for adding in a menu in a new theme 2014-06-11 03:00:11 +00:00
Mark Crane 79d8d44e27 Add permissions only if there are groups assigned to the user. 2014-06-10 21:16:42 +00:00
Mark Crane 299d2081f4 Fix the menu and labels when switching domains in certain circumstances 2014-06-10 20:04:14 +00:00
Mark Crane 4c6b5e6b76 More adjustments to refresh interval 2014-06-10 07:06:26 +00:00
Mark Crane 1021a5115b Reduce the spacing between back and refresh 2014-06-10 06:59:51 +00:00
Mark Crane 9798610bfd Remove the registration interval label and add the refresh button again 2014-06-10 06:57:47 +00:00
Mark Crane a10c01f350 Set the refresh interval on registrations 2014-06-10 06:54:32 +00:00
Mark Crane 2f127541fc Change the version to release candidate 2 anticipated that the full release will be in another day or two. 2014-06-10 03:56:22 +00:00
Mark Crane 4118edd666 Make the Grandstream use the lua event notify script, and add the sip profile name. 2014-06-10 03:32:35 +00:00
Mark Crane 8f3579f0d1 Add profile, sync, reboot and explode to event notify lua script. 2014-06-10 03:23:02 +00:00
Omar Irbouh 66088be1b5 fixed nil issue when voicemail has no messages 2014-06-09 22:43:08 +00:00
Mark Crane 77e6e03533 Inbound routes dialplan continue set default to false 2014-06-09 20:00:28 +00:00
Mark Crane 7f36ff3652 Fix the luarun cal to voicemail 2014-06-09 19:59:25 +00:00
Mark Crane a2a6363d08 Fix destination edit so it will save again 2014-06-09 19:41:34 +00:00
Mark Crane ad0a5b9a72 Fix a security vulnerability for provisioning 2014-06-09 17:47:37 +00:00
luis daniel lucio quiroz 1b1a97e5b9 local_extension regexp change to allow alphanumeric usernames 2014-06-09 13:53:45 +00:00
Richard Neese 8966001e75 fixed a close from | to } in the sqlite section 2014-06-06 03:27:32 +00:00
Richard Neese fe2d95aeed fixing sql file dir for pkgs 2014-06-06 01:19:59 +00:00
Mark Crane 8a415bc482 Improve the Polycom VVX provisioning template tested with latest 5.x firmware should work with any Polycom using version 4 or higher 2014-06-05 00:32:29 +00:00
Mark Crane 17d1e262e3 Drop the SQL like statement and use equals for best performance 2014-06-05 00:13:00 +00:00
Mark Crane 632b16b296 remove the plus from destination_number 2014-06-04 20:57:08 +00:00
Mark Crane b00d56a61a Add avmd to call broadcast 2014-06-04 09:13:27 +00:00
Mark Crane 7f6ec439bb Change the package path from /etc/fusionpbx/templates/provision to /etc/fusionpbx/resources/templates/provision 2014-06-03 17:45:24 +00:00
Mark Crane 2c1deb911a Unset the prepared statement 2014-05-30 08:03:55 +00:00
Mark Crane 9a6f8a8572 work on the order on the dialplan destatinations updating inbound routes 2014-05-30 07:47:44 +00:00
Mark Crane 2dae4b0d7d On dialplan destinations only show bridge and transfer actions 2014-05-30 07:30:43 +00:00
Mark Crane acd24da012 Remove one of the sql queries that was in dialplan -> destinations 2014-05-30 07:24:06 +00:00
Mark Crane 3c603dbc5d Fix outbound caller id for outbound on net calls 2014-05-30 06:34:57 +00:00
Mark Crane e2678fd2e2 Update the snom provisioning templates add the admin_name and admin_password to the snom820 template, add outbound_proxy to snom 820 and the 720 2014-05-30 06:14:50 +00:00
Mark Crane 89d1689df5 One more adjustment to get the extension copy working 2014-05-30 04:28:19 +00:00
Mark Crane dbfa1a317e When copying an extension fields that are numeric should use a null if the variable has not length 2014-05-30 04:14:28 +00:00
Mark Crane 67d2381ab7 add domain_uuid, domain, and domain_name to call broadcast, follow me, and call forward. 2014-05-29 23:49:17 +00:00
Mark Crane e3b8d54a7b Fix extension writing to xml files when number alias is not used 2014-05-28 03:19:51 +00:00
Mark Crane bd50dfcc38 Add Europe International 2014-05-27 00:19:56 +00:00
Mark Crane 3ad788a364 Remove the destination_number from the SQL where 2014-05-26 17:08:53 +00:00
Mark Crane daa128ba00 Finish up the changes to the duplicate test. 2014-05-26 17:06:02 +00:00
Mark Crane 6688443ca9 Improve the duplicate test used on dialplan -> destinations 2014-05-26 17:00:29 +00:00
Mark Crane 7481c8e79a Fix the voicemail mail to. 2014-05-25 06:59:55 +00:00
Mark Crane 67f77e5555 move the copy scripts to app_defaults.php. 2014-05-25 06:45:30 +00:00
Mark Crane e9ab76c49e Fix the layout for the extension show advanced button 2014-05-25 05:40:06 +00:00
Mark Crane ceff696cc0 Adjust advanced button html for extensions 2014-05-25 02:49:00 +00:00
Mark Crane 0c94547e1c Remove an extra html tag 2014-05-25 02:40:40 +00:00
Mark Crane b63d791fbd Add ability to configure the extension directory xml to provide the option to use freeswitch voicemail 2014-05-25 01:43:47 +00:00
Mark Crane eb9342c83d Add the translation for Duplicate Detected on the destination edit. 2014-05-24 20:06:27 +00:00
Mark Crane e1b27da857 Dialplan -> Destination -> Edit require type, number, context and enabled 2014-05-24 18:59:37 +00:00
Mark Crane 34a71a0eb7 Add record_ext=mp3 option when recording an extension. 2014-05-24 17:32:32 +00:00
Mark Crane 90d53e5bea clear memcache correctly when saving a call flow 2014-05-24 14:15:18 +00:00
Mark Crane e7e7a7ff60 work on dialplan domain select 2014-05-24 03:15:51 +00:00
Mark Crane 67d6447207 Call Center Queue handle Queue names with spaces 2014-05-22 19:56:04 +00:00
Mark Crane b1dad9e75f More work on the domain select on the dialplan editor 2014-05-22 06:44:35 +00:00
Mark Crane ab1a992341 Fix up the device delete so it removes all sub data 2014-05-22 06:20:30 +00:00
Mark Crane 9ddc1e5968 Fix the device delete 2014-05-22 04:52:42 +00:00
Mark Crane 6138594f2c Work on the device copy 2014-05-22 04:37:42 +00:00
Mark Crane 59763c0c23 Update the dialplan copy 2014-05-22 04:36:04 +00:00
Mark Crane a39cbaf094 Add a dialplan domain select only available to a user in the superadmin group 2014-05-22 04:20:28 +00:00
Mark Crane 48ba04b0dc Remove the jquery.autosize.js script reference 2014-05-21 15:58:04 +00:00
Mark Crane eeecf770e0 Fix the per user language user_setting so that it is only applied if it has a value 2014-05-21 05:52:39 +00:00
Mark Crane 1d15d6955e Set default settings and domain settings forced to lowercase 2014-05-20 16:45:26 +00:00
Mark Crane c31801816c Remove the directory path from the extensions list 2014-05-20 07:47:43 +00:00
Mark Crane 4a4449d2c0 Fix the layout for Account Settings 2014-05-20 07:42:18 +00:00
Mark Crane b78b021e0d Remove the directory path 2014-05-20 07:35:42 +00:00
Mark Crane 5eab7013df Add a not found log as a last restort inbound route 2014-05-20 07:19:30 +00:00
Mark Crane 748bbe5fe1 Change http_username to http_auth_username 2014-05-20 06:27:44 +00:00
Mark Crane 9ac3452530 Remove the call center tiers button 2014-05-16 18:44:38 +00:00
Mark Crane ab061d9767 Remove the call center tiers button 2014-05-16 18:41:38 +00:00
Nate Jones c2e530c67d Remove Agent from tiers table on Agent delete. 2014-05-16 18:31:58 +00:00
Nate Jones eebd1e49a5 Moved Tier management to Queue Edit page, remove Tier view and delete files. Hide Voicemail Forward Destination field until development complete. 2014-05-16 18:25:40 +00:00
Mark Crane 8ba0321d0b Update the group intercept lua script 2014-05-16 07:29:16 +00:00
Mark Crane ceb1c150be Add intercept_group.lua 2014-05-16 07:28:28 +00:00
Mark Crane b12c74a074 Fix the sounds copy 2014-05-16 07:11:18 +00:00
Mark Crane d899cc23cd Fix the cp -R 2014-05-16 06:28:27 +00:00
Mark Crane b9643b60ee recursive_copy function use cp -R if it exists 2014-05-16 05:14:44 +00:00
Mark Crane 59e112e7ff Add the languages array 2014-05-13 06:09:28 +00:00
Mark Crane 6c54d110c5 Additional work on the alignment of the contents 2014-05-13 05:47:28 +00:00
Mark Crane 05f6b02d39 Fix the table alignment 2014-05-13 05:45:04 +00:00
Mark Crane 833560e57c Add user language to accounts -> user manager -> edit user 2014-05-13 05:41:44 +00:00
Mark Crane c33aeb97f1 Fix alignment issues for the labels on Accounts -> User Manager -> Edit 2014-05-13 05:25:51 +00:00
Mark Crane 4bea3bd16a Reboot and Check Sync 2014-05-13 01:27:18 +00:00
Mark Crane b210e4358a Fix the user setting so they work. User settings need to be set after login 2014-05-12 23:30:26 +00:00
Mark Crane 37fb8a03b5 User language, correct the variable 2014-05-12 15:51:39 +00:00
Mark Crane bfe4163248 Fix the current value of the user language select 2014-05-11 10:40:21 +00:00
Mark Crane f541b5bc54 Add language selection to user account settings 2014-05-11 10:31:36 +00:00
Mark Crane 03afa17319 Set an order by on the domain setting category and subcategory 2014-05-11 10:12:11 +00:00
Mark Crane 92f1b8322b Add language select list for default and domain settings 2014-05-11 10:03:45 +00:00
Mark Crane 86cc9c1cc5 language translations to use button-save array 2014-05-11 09:37:32 +00:00
Mark Crane c65f5ed2a6 Add language select list to advanced -> default settings 2014-05-11 09:19:50 +00:00
Mark Crane 5d9cfea9c0 Fix blind transfer *1 2014-05-11 08:18:03 +00:00
Mark Crane 4fd2f5c72a Update the file permissions after they are copied 2014-05-10 23:44:41 +00:00
Mark Crane 9cd2c50b58 Fix a syntax error on the dialplan class 2014-05-10 21:42:35 +00:00
Mark Crane c2c3ba4f6a Issue 598 switch to the user instead of sip-auth-user and leave the domain then remove the domain column to save some space 2014-05-10 21:35:46 +00:00
Mark Crane 1d13544a76 Remove some of the PHP short tags to for greater capatibility 2014-05-10 20:47:08 +00:00
Mark Crane ee852070ee Fix the dialplan default.xml for the debian package install 2014-05-10 20:20:22 +00:00
Mark Crane 967736676e Fix the copy of the conf directory files during the install 2014-05-09 23:17:30 +00:00
Richard Neese e0a4666130 2014-05-09 14:16:32 +00:00
Mark Crane 6a95c242c5 Change the # to a // comment 2014-05-09 04:29:05 +00:00
Richard Neese fa4d2671a6 disabling phrase cp 2014-05-09 03:35:19 +00:00
Richard Neese 7be62af9ed testing rm on a extra copy 2014-05-09 02:41:13 +00:00
Nate Jones 326263e7cb Group Manager / Permissions: Moved 'Restore Default' button to Group Manager page, instead of under each individual Group Permission page. 2014-05-09 01:33:58 +00:00
Mark Crane fd2ffcc18f Limit the file copy used on the upgrade 2014-05-08 10:10:00 +00:00
Mark Crane ed61ff608f Add an option "-n" --no-clober to the recursive_copy method used in the install 2014-05-08 09:45:05 +00:00
Mark Crane b158804583 Add a Domain select list with a Global option to Accounts -> Devices 2014-05-08 09:22:35 +00:00
Nate Jones afde98a18d Extension Edit: Password changes are now reflected on any Device having the extension assigned to any lines. 2014-05-08 04:46:36 +00:00
Nate Jones abad918df1 Extension Edit: Adding and deleting users and/or device lines on an extension now saves any OTHER changes made to the page. 2014-05-06 20:21:11 +00:00
Mark Crane 31525b060c Fix the domain_uuid in the enhanced template 2014-05-06 18:36:59 +00:00
Nate Jones 83d089e498 Voicemail Greetings: Minor language mods, re-enabled editing of greeting. 2014-05-06 00:03:39 +00:00
Nate Jones 76ef315b28 Fax: language adjustments. 2014-05-05 23:25:01 +00:00
Nate Jones 829b30ed34 Recordings: Fixed delete confirmation. 2014-05-05 23:16:36 +00:00
Nate Jones 67a68d24be Recordings: Removed 'auto' from Description field on file upload. 2014-05-05 23:12:55 +00:00
Nate Jones 0d47a9cfe0 Recordings: Minor tweaks 2014-05-05 23:09:19 +00:00
Mark Crane 47df07db5b Change the enhanced theme to use PHP to write the HTML this fixes a problem that affected my Odroid when using SQLite and multi-tenant result was every page was blank because of an error on every page 2014-05-03 06:00:54 +00:00
Mark Crane fa595c9d04 Fix an issue with domains array used in the template 2014-05-03 01:06:27 +00:00
Mark Crane 1bc88766ab Fix issue 591 where the dialplan xml file was not including the dialplan directory 2014-05-03 00:49:11 +00:00
Mark Crane 7dd9553707 Add mute.lua and unmute.lua files 2014-05-02 09:34:56 +00:00
Mark Crane 651c590740 Change the data type from numeric to text 2014-05-02 09:22:38 +00:00
Mark Crane d648674f65 Add a search for app -> voicemails 2014-05-02 09:11:52 +00:00
Mark Crane 9999b5b9bb Add search to accounts -> devices 2014-05-02 09:01:24 +00:00
Mark Crane 7463474159 Add like to the search to make it more powerful 2014-05-02 08:49:25 +00:00
Mark Crane 1b5e1ef67d More work on the search 2014-05-02 08:32:44 +00:00
Mark Crane cc68c60cdb Add a search to Extensions and Destinations 2014-05-02 08:22:27 +00:00
Mark Crane 509788da94 Add search to dialplan -> destinations and accounts -> extensions 2014-05-02 08:03:16 +00:00
Mark Crane f48b7507eb Fix the French search translation 2014-05-02 07:47:05 +00:00
Nate Jones 3f2dad1a14 Voicemail Edit - Removed blank option from T/F select boxes 2014-05-02 06:10:12 +00:00
Nate Jones 38bfa41595 Fax Edit - User group can only change Email address. 2014-05-02 06:03:09 +00:00
Mark Crane 6e26ce9eb8 Add unmute.lua 2014-05-02 05:56:00 +00:00
Mark Crane a871d6b28c Add conference center mute.lua 2014-05-02 05:45:57 +00:00
Nate Jones b7ed68e03a Extension Copy - Now includes Record value. 2014-05-02 05:24:27 +00:00
Nate Jones db7f6daba9 Extension Edit - Removed ability to assign the same user twice. 2014-05-02 05:07:29 +00:00
Nate Jones 61e40098c2 Fax Edit - Tidy up User List visually 2014-05-02 05:04:03 +00:00
Nate Jones 69a507dec4 Fax Edit - Removed ability to assign the same user twice. 2014-05-02 05:01:32 +00:00
Nate Jones eaf63becf8 Fax Server: Hide Copy button on Add 2014-05-02 04:53:04 +00:00
Mark Crane 06164f42da Add a default timezone for install.php 2014-05-01 23:54:52 +00:00
Mark Crane 5babc55326 Add a missing quote 2014-05-01 05:22:17 +00:00
Mark Crane d6359a8bec Add CDR Statistics to the menu 2014-05-01 05:20:46 +00:00
Mark Crane 5e0eb315f8 Add emergency caller id name to the extension xml and to xml handler. 2014-05-01 04:59:33 +00:00
Mark Crane c56a551d35 Add emergency caller id name when copying an extension 2014-05-01 04:51:21 +00:00
Mark Crane 18cce1c776 Get the emergency caller id name from the database 2014-05-01 04:24:44 +00:00
Mark Crane e81682cc94 Fix the emergency caller id name description 2014-05-01 04:21:49 +00:00
Mark Crane bff3937e26 Add emergency caller id name to accounts -> extensions 2014-05-01 04:18:27 +00:00
Mark Crane 534b6aab14 Try again. Only add the dialplan for dialplan -> destinations of the action is set 2014-05-01 03:48:31 +00:00
Mark Crane 77dae61c43 Only add the dialplan for dialplan -> destinations of the action is set 2014-05-01 03:30:33 +00:00
Nate Jones 5237fc7d00 Extension Copy more complete and includes voicemail. 2014-05-01 02:48:25 +00:00
Mark Crane e1ca4951d3 Remove two includes that are no longer needed 2014-05-01 02:32:54 +00:00
Mark Crane 16efdf2280 Enter the SIP Profile name. 2014-05-01 02:23:55 +00:00
Mark Crane ff5fd5c1fd Fix the copy message for the sip profile page 2014-05-01 02:12:31 +00:00
Mark Crane 83b9d40512 Add a name when copying a sip profile 2014-04-30 22:20:55 +00:00
Mark Crane f0dc0d7183 Add a a check to see if the dial_string is null then add a default dial string 2014-04-30 20:54:30 +00:00
Mark Crane c1d4cfda15 Add the default dial_string to config.lua 2014-04-30 20:44:34 +00:00
Mark Crane 5666962c9d add a way to customize the default dial string for follow me 2014-04-30 09:30:09 +00:00
Mark Crane 36e45c9504 add a way to customize the default dial string for an extension 2014-04-30 09:13:22 +00:00
Mark Crane 60a3b37671 Fix the xml cdr statistics when using a url similar to http://x.x.x.x/fusionpbx 2014-04-30 07:29:35 +00:00
Mark Crane 500b6477cb Fix the fax_success null issue wit fax retry 2014-04-30 05:04:54 +00:00
Mark Crane f58202e625 Change the > to == to fix the ring groups order by 2014-04-29 22:13:14 +00:00
Mark Crane 3326d2bf50 Set the default ring group destination order. Take 2 2014-04-29 19:27:59 +00:00
Mark Crane fafb9a76e7 Move the order by 2014-04-29 19:23:00 +00:00
Mark Crane 208439bce1 Set the default ring group destination order. 2014-04-29 19:17:51 +00:00
Mark Crane 0c01b3fa92 During the install check for /etc/freeswitch/vars.xml before using it 2014-04-29 17:51:29 +00:00
Mark Crane 112b8f6ccc show global devices first step to making device templates 2014-04-29 17:34:55 +00:00
Mark Crane 62fdf9026d show global dialplans 2014-04-29 17:32:50 +00:00
Mark Crane 64110b9bb7 Add /etc/freeswitch as an optional directory for freeswitch conf files 2014-04-28 23:25:33 +00:00
Mark Crane ccfbda3e4c Make the registration_all permission work correctly. 2014-04-28 18:06:16 +00:00
Nate Jones 0cd7afdcbd SIP Profile Settings, Removed blank from Enabled select box 2014-04-27 10:33:39 +00:00
Nate Jones d3a4c09888 Domain Settings, Removed blank from Enabled select box 2014-04-27 10:30:40 +00:00
Nate Jones 7142c5e21b Default Settings, Removed blank from Enabled select box 2014-04-27 10:28:30 +00:00
Nate Jones 16e54820a8 Voicemails, minor language case mods 2014-04-27 10:26:29 +00:00
Nate Jones dcba27e7ac Time Conditions, select box mods. 2014-04-27 10:24:54 +00:00
Nate Jones 08774733f6 Queues, select box mods 2014-04-27 10:20:23 +00:00
Nate Jones aa10f9c47b Select box mods 2014-04-27 10:17:08 +00:00
Nate Jones ebdcd9fd53 Adjusted Contact Add, Type select box width. 2014-04-27 10:04:12 +00:00
Nate Jones ec6687e595 Removed blank Enabled select option, multilinquified. 2014-04-27 10:01:57 +00:00
Nate Jones e017b1a686 Removed empty Enabled select value, minor language mods 2014-04-27 09:56:46 +00:00
Nate Jones 59f47e9576 Select box blank option adjustments, added Port, Transport, Register Expires to Device Edit page with other fields, minor language file adjustment. 2014-04-27 09:53:45 +00:00
Mark Crane 1b651f7f2a Fixed revision 382 sip-presence-on-register to true on the internal sip profile 2014-04-27 09:40:06 +00:00
Nate Jones 3fb96169dc Adjusted select box widths 2014-04-27 09:28:47 +00:00
Nate Jones 5bd68d6041 Order select box selection adjustment 2014-04-27 09:19:03 +00:00
Mark Crane 15ab337ddf Change limit to limit_execute on local_extension 2014-04-27 09:04:46 +00:00
Nate Jones 6e1af41747 Variable form select value mods 2014-04-27 08:55:39 +00:00
Mark Crane 99662e22a4 SIP Status, Get the SIP profile list from the database instead of the file system. 2014-04-27 08:38:12 +00:00
Nate Jones 1f8f2e1b51 Removed blank option from Target select box. 2014-04-27 08:34:35 +00:00
Nate Jones b01fcaa60a Removed blank select box value from Delay and Timeout, and minor language adjustments. 2014-04-27 08:30:38 +00:00
Nate Jones fd2b8a33cc Default select box value mods. 2014-04-27 08:21:35 +00:00
Nate Jones c576e29c88 Fixed Issue 560 - Set Max Failures and Max Timeouts to 0 by default. 2014-04-27 07:43:54 +00:00
Nate Jones c4a8cbedfe Fixed Issue 534 - Replaces space with dash 2014-04-27 07:30:40 +00:00
Nate Jones 394e40a7e1 Fixed Issue 447 - Now can't delete user currently logged in as. 2014-04-27 06:47:05 +00:00
Mark Crane caecc2616b Update Adminer to the latest version 4.1.0 2014-04-27 06:39:48 +00:00
Nate Jones 55de548a70 Fixed Issue 324 and Issue 329 - Assigned extensions now displayed to a User upon initial login. 2014-04-27 06:26:15 +00:00
Nate Jones 566f0a1034 Updated to check voicemail_greeting_upload permission if something happens to get uploaded somehow. 2014-04-27 04:09:16 +00:00
Nate Jones e643729f49 Reversed: Grant Users group recordings_upload by default. 2014-04-27 04:04:45 +00:00
Mark Crane 2343714ad1 Use the voicemail greeting permisisons 2014-04-27 03:59:43 +00:00
Nate Jones bb88e4cdc3 Grant Users group recordings_upload by default. 2014-04-27 03:31:01 +00:00
Nate Jones 0410b2741f Added additional permission checks for Greeting (recording) upload and download 2014-04-27 03:24:41 +00:00
Nate Jones 672645b2b4 Fixed issue with Greeting file upload for languages other than English. 2014-04-27 03:16:54 +00:00
Nate Jones f5a786f5c4 Issue 579 Fix - Okay, now really fixed, I believe. 2014-04-27 02:35:03 +00:00
Nate Jones 64e5634c5b Issue 579 Fix - Removed some (probably) old code that caused legacy versions of IE to display the page incorrectly, break the domain selector, etc. 2014-04-27 02:16:36 +00:00
Nate Jones c5f4d7d2a0 Replaced session variable with local variable instead, on previous Upgrade Schema fix. 2014-04-27 01:04:03 +00:00
Nate Jones f3b56626e9 Fixed issue with menu layout/style and domain select box after running Upgrade Schema. 2014-04-27 01:00:07 +00:00
Nate Jones abf5f72054 Submit button also placed at top; reordered to right margin, too. 2014-04-26 23:56:12 +00:00
Nate Jones fa9e9b2ac4 Submit button also placed at top; reordered to right margin, too. 2014-04-26 23:37:41 +00:00
Nate Jones e64fef05dd Submit button also placed at top; reordered to right margin, too. 2014-04-26 22:50:52 +00:00
Mark Crane 680892d5e5 Change limit to limit_execute 2014-04-26 22:18:33 +00:00
Mark Crane 4bc72943b8 Set MySQL Attribute for UTF8 2014-04-26 18:53:58 +00:00
Mark Crane 62058af4f6 Don't forget to add the gateway_uuid to the SQL Select 2014-04-26 06:05:39 +00:00
Mark Crane 1a08f8446f Update the gateway list for the destination select list 2014-04-26 06:01:57 +00:00
Mark Crane dae33f59c9 Fix the local.lua path 2014-04-26 05:49:46 +00:00
Mark Crane 6a6ed9c03c Fix busy and reject option for call block 2014-04-26 05:22:46 +00:00
Mark Crane 54e918ea75 Fix the dialplan destination delete and reactivate the transaction support 2014-04-25 05:52:00 +00:00
Mark Crane ffe388e5b9 comment out the transaction support for now 2014-04-25 05:36:47 +00:00
Mark Crane 6ef0fd0339 Add the dialplan destination action translation 2014-04-25 05:27:19 +00:00
Mark Crane 8234d8c0bb Change the header Destination Edit to Destination 2014-04-25 05:13:18 +00:00
Mark Crane 012e3e8781 Change Destination Edit to Destination 2014-04-25 03:29:07 +00:00
Mark Crane 8ce4bb165a Add transaction support to the dialplan -> destination delete 2014-04-25 03:04:24 +00:00
Mark Crane 2b99cb286c Call the XML writing function for those that need it. Clear memcache for those using XML on demand 2014-04-25 02:56:41 +00:00
Mark Crane 9feccaa075 Check to see if the dialplan exists on the dialplan destination. 2014-04-25 01:48:20 +00:00
Mark Crane 62443e35ab Dialplan destinations additional changes to the code to so it managers the dialplan better 2014-04-24 13:37:56 +00:00
Mark Crane ab89e180a9 Add an inbound route when adding a dialplan destination. 2014-04-24 11:27:53 +00:00
Mark Crane 2b2d46a408 Show only defined call groups 2014-04-24 10:04:18 +00:00
Mark Crane d479fdfa3e update the comment 2014-04-24 09:39:27 +00:00
Mark Crane fafeedd856 Add a missing semi-colon and improve the tab spacing 2014-04-24 09:35:37 +00:00
Mark Crane 44e286c6ad When the Destination (DID) is deleted then remove the inbound route dialplan 2014-04-24 09:32:36 +00:00
Mark Crane 05c408d8b4 Dialplan -> Destinations initial commit for the destination action. 2014-04-24 09:16:25 +00:00
Mark Crane 8d1fcff558 Change Domain Selector to Domains 2014-04-24 08:42:52 +00:00
Mark Crane 0a4919aaaa When assigning an extension to a device make sure the device template is saved 2014-04-24 07:55:59 +00:00
Mark Crane 79d00cdc21 add copy to the device description when making a copy of a device 2014-04-24 07:16:20 +00:00
Mark Crane b603f72ddc Round the menu bar corner by one more pixel 2014-04-20 02:47:32 +00:00
Mark Crane da2619bd53 When saving changes stay on the extension edit 2014-04-18 21:16:41 +00:00
Mark Crane 366fba4071 change strlen($key) to isset($_REQUEST["key"] to fix login problem affecting one system 2014-04-18 01:22:37 +00:00
Nate Jones 03a6dc012b Added response message (at the top) on phone reboot. 2014-04-16 01:32:03 +00:00
Nate Jones 360941533a Removed 'Parameter' option from Tag select box and language file, adjusted display attribute to fix glitchy select boxes. 2014-04-16 01:06:11 +00:00
Mark Crane f98f7c01b3 Prevent errors in the dial string lua script 2014-04-15 18:54:03 +00:00
Mark Crane c6c9b25cc5 save the file when the context session has a value 2014-04-15 06:55:48 +00:00
Mark Crane f8870d204c Fix the dialplan/default.xml for the debian package install 2014-04-15 06:22:17 +00:00
Nate Jones a1010fecce Dialplan (Inbound) & Ring Group select box adjustments (focus at top, etc) 2014-04-15 01:31:49 +00:00
Nate Jones 5d250eba32 Default select value adjustments 2014-04-15 01:10:21 +00:00
Nate Jones a82095d6eb Language case fix 2014-04-15 00:56:44 +00:00
Nate Jones 2dd2330d9c Fixed default select box values (Extensions) 2014-04-15 00:54:01 +00:00
Nate Jones 365dcae3ab Registrations - Language fix, customizable auto-refresh feature 2014-04-14 21:05:09 +00:00
Mark Crane da179fa1c5 Change the local_extension dialplan bridge to user/@. 2014-04-13 15:54:00 +00:00
Mark Crane ca46dfcbee Fix a nil variable concatentation error on user_status 2014-04-13 06:28:37 +00:00
Mark Crane 22d3edb3f8 Add a missing forward slash on the email subject when sending the email 2014-04-13 06:14:17 +00:00
Mark Crane 6a4dd6687d Finish up the source conf directory for the Debian Package install. 2014-04-13 04:45:05 +00:00
Mark Crane 72a17a64a8 Fix the source file path on XML CDR for the Debian package. 2014-04-12 22:10:22 +00:00
Mark Crane 0d141db086 Adjust the source conf directory to work with the debian package 2014-04-12 20:54:32 +00:00
Mark Crane f41fb95996 Add a new permission to active call center regarding issue 472. 2014-04-12 18:56:47 +00:00
Mark Crane a455b33af5 Make sure the recording directory exists 2014-04-12 17:42:23 +00:00
Mark Crane 4f099ab39f Add trim to the session variable 2014-04-12 16:44:29 +00:00
Mark Crane 223a9bf175 Set the file permissions on for the sqlite database so it will work better with the Debian package 2014-04-09 15:02:25 +00:00
Mark Crane 3732d8798f Fix the conf directory copy used during the install 2014-04-09 14:24:07 +00:00
Mark Crane b1803607c3 If the debian package usr share conf directory exists then use it as the source for the copy. 2014-04-09 05:00:11 +00:00
Mark Crane 62c0b3a206 remove the s 2014-04-09 04:36:17 +00:00
Mark Crane f26267cf36 if the debian package scripts directory exists then use it for the source 2014-04-09 04:33:50 +00:00
Mark Crane cfd6ce9033 Yealink remove some of the trailing white spaces. Fix the power led light for voicemail. 2014-04-08 01:37:47 +00:00
Mark Crane 30154f5e5d During the install copy all FreeSWITCH conf files. 2014-04-07 22:35:05 +00:00
Mark Crane c292635b67 A few minor changes to the yealink templates. 2014-04-07 21:18:35 +00:00
Mark Crane d60c242be5 Check for /etc/fusionpbx/conf if it exists use it for the conf directory. 2014-04-07 14:48:45 +00:00
Mark Crane df1e6c8de4 On the file system check for a more appropriate directory to make sure the application is installed. 2014-04-07 14:41:15 +00:00
Mark Crane 11ee2be8f1 Make the two inbound lua scripts more robust when the domain is not found. 2014-04-05 20:14:55 +00:00
Mark Crane a9bbdd1f28 Check add the option to record the user. 2014-04-04 07:08:00 +00:00
Mark Crane 088bdc9021 Remove redundant check_str that is being done automatically in the PHP class. 2014-04-03 21:00:13 +00:00
Mark Crane 22e1e9dbb6 Forgot to update the app_uuid which needs to be unique for each dialplan. 2014-04-03 20:35:47 +00:00
Mark Crane 8bd0d7358f Add valet park in (*5900) and park out (*5901 - *5999). 2014-04-03 20:28:03 +00:00
Mark Crane a9ff275b7b Add user_record to the xml_handler section: directory 2014-04-03 17:45:10 +00:00
Mark Crane 2b8daa14c4 Add user_record variable to the extension/user XML. 2014-04-03 17:35:18 +00:00
Mark Crane ed91efbfab Add user_record to the extensions table and make it save the value. 2014-04-03 17:32:38 +00:00
Mark Crane 136388aac4 Correct the indentation of some of the lines in user_status lua script. 2014-04-03 15:50:50 +00:00
Mark Crane 59b148a298 Use a sub string rather than requiring the domain at this point. 2014-04-03 06:26:29 +00:00
Mark Crane 2fc2b13eb0 When determining the domain based DID/DDI or DNIS ignore whether the destination number is enabled or not. We need the information to determine the correct domain. 2014-04-03 06:20:59 +00:00
Mark Crane c30bcddcb9 Add a new variable to the Yealink template ($yealink_power_led_on). And change account 6 voice_mail.number.5 = *97 to voice_mail.number.6 = *97. 2014-04-02 09:50:29 +00:00
Mark Crane 923bb2089b Add *97 for the voicemail button for Yealink t42g, t46g, and t48g. 2014-04-02 07:34:44 +00:00
Mark Crane 837081b7a5 Add an option to record calls for an extension. 2014-04-02 06:43:11 +00:00
Mark Crane b791fdf2dd Add translations for the select options for sip force contact and for sip bypass media. 2014-04-02 06:41:16 +00:00
Mark Crane 3ca4192053 Move $db_type to $this->db_type. 2014-04-01 20:20:49 +00:00
Mark Crane d5a1359e7b Update the year on extensions page. 2014-04-01 20:17:04 +00:00
Mark Crane 6519d2e260 Set the extension table voicemail fields as deprecated. 2014-04-01 20:08:24 +00:00
Mark Crane 0521819a63 Add a method to the schema class column_exists, and sqlite_column_exists, and table_info. 2014-04-01 18:52:58 +00:00
Mark Crane 5dca695f6e Add valet_hold_music to the valet park dialplan. 2014-04-01 09:36:33 +00:00
Mark Crane e1da2c4471 Fix the array so that it will work when adding a record. 2014-04-01 09:24:01 +00:00
Mark Crane 605646cc27 Improve the security, simplify the code, and prevent bugs by using the HTTP POST to build a new array. 2014-04-01 09:01:40 +00:00
Mark Crane 3da9544fa9 Only show the Folow Me Call Prompt if the user is in a group that has the follow_me_call_prompt permission. 2014-04-01 03:23:56 +00:00
Mark Crane 8161104b19 Add a new permission for called follow_me_call_prompt. 2014-04-01 03:23:04 +00:00
Mark Crane 53e0394359 Fix the copy for the freeswitch conf directory which is done during the install. 2014-03-31 18:30:55 +00:00
Mark Crane 6c2f428be4 Prevent device duplicates when making a copy of a device. Allow duplicate empty mac address or 000000000000 to be used for templates. 2014-03-30 07:46:50 +00:00
Mark Crane a1c6a9f4d5 Add a new option 'transfer' for outbound routes. 2014-03-29 07:25:52 +00:00
Mark Crane 2d4dbf15d8 Allow dialing bridge statements on follow me for advanced users. Remove unnecessary line feeds. 2014-03-28 10:12:08 +00:00
Mark Crane 4e4029f2aa Fix SIP URI dialing so they can work again. 2014-03-28 08:44:56 +00:00
Mark Crane c98c383c8e Change the directory back to /etc/freeswitch until a bug is fixed in FreeSWITCH for the conf directory startup parameter. 2014-03-27 20:07:45 +00:00
Mark Crane c6ff5d7f7e Change the dir to /etc/freeswitch for now. 2014-03-27 20:03:31 +00:00
Mark Crane e1380888e6 fix the syntax on install.php 2014-03-27 16:32:33 +00:00
Mark Crane a1c630afbd Check to see if the /etc/fusionpbx/conf/freeswitch.xml file already exists and if so do not copy the conf directory. 2014-03-27 04:09:05 +00:00
Mark Crane 34bbfa6031 Change directory detection /etc/freeswitch/dialplan to /etc/fusionpbx/conf. 2014-03-27 03:26:45 +00:00
Mark Crane ec16d3e4fb Change the way the outbound context is used so that domain_name is not needed. 2014-03-27 02:38:15 +00:00
Mark Crane 6f7b005aa0 Fix the register expires on the Yealink T42g, T46g and T48g. 2014-03-26 08:52:16 +00:00
Mark Crane a7dcdb6ca2 Don't allow DHCP override by default. Add a new variable public_mode. 2014-03-26 05:53:18 +00:00
Mark Crane 7ed692a790 Allow auto-answer to the Grandstream gxp21xx/{$mac}.xml template. 2014-03-25 08:51:21 +00:00
Mark Crane c469e283e5 Fix the snom device_vendor detection. 2014-03-24 16:56:38 +00:00
Mark Crane 4e3fc13879 Correct the file path for IVR Menu. 2014-03-23 17:36:15 +00:00
Mark Crane 60e0417068 Fix the voicemail message size, and download link when using mp3 extension. 2014-03-23 11:31:03 +00:00
Mark Crane 0a50c67d97 Skip saving the sip profile xml if the directory is not set. 2014-03-22 02:03:04 +00:00
Mark Crane e0e3d9c5a3 A few minor edits to sip profiles. 2014-03-22 01:49:15 +00:00
Mark Crane a3b526ce8d When the config.php file exists disable the install. This change expands the directories where the config.php can be located. 2014-03-22 01:25:55 +00:00
Mark Crane f6b5bae661 Minor changes to gateways. 2014-03-22 01:15:24 +00:00
Mark Crane 38d0614665 skip saving the gateway xml if the directory is not set. 2014-03-22 01:12:31 +00:00
Mark Crane e1c991d6ea Add code to change switch gateways dir to switch sip_profiles dir. Update the domain settings. 2014-03-22 01:00:46 +00:00
Mark Crane 506fe7df4e Remove the extra line feed at the end of the file. 2014-03-22 00:55:24 +00:00
Mark Crane 8f5f98b090 Change $_SESSION['switch']['gateways'] to $_SESSION['switch']['sip_profiles']. 2014-03-22 00:54:56 +00:00
Mark Crane 705d7fd295 Don't show the path on the gateways page. 2014-03-22 00:54:22 +00:00
Mark Crane 68c735db30 Add the uuid to the SESSion array. 2014-03-21 23:49:26 +00:00
Mark Crane f88625e84c In recordings.lua replace the custom sound file with phrase. 2014-03-21 23:47:40 +00:00
Mark Crane 07ab447a77 Switch $switch_gateways_dir to $switch_sip_profiles_dir. 2014-03-21 23:46:20 +00:00
Mark Crane 531e29a06e Switch $_SESSION['switch']['gateways']['dir'] to $_SESSION['switch']['sip_profiles']['dir']. 2014-03-21 23:45:05 +00:00
Mark Crane d922db1f7b Add snom_time_zone variable to the Snom 300, 320 and 720 templates. 2014-03-21 20:18:25 +00:00
Mark Crane 41b55d8433 After toggling the call flow hangup the call. 2014-03-21 20:02:49 +00:00
Mark Crane 8740e0b29f Adjust the admin_mod_login and password and the admin name and password for the Snom 300, 320, 720. 2014-03-21 18:22:25 +00:00
Mark Crane 155fb25251 Update the snom 320 template. 2014-03-21 18:10:07 +00:00
Mark Crane 3d88853dc0 Update the Snom 300 provisioning template. 2014-03-21 17:57:46 +00:00
Mark Crane 5ebf8c4e93 Add literal tags around the mac and use of { and } in the Snom 720 template. 2014-03-21 17:53:05 +00:00
Mark Crane 7d42728b58 Add a Snom 720 provisioning template. 2014-03-21 17:20:28 +00:00
Mark Crane 7c715cb7db Add a record option to the destination select list. 2014-03-21 06:34:55 +00:00
Mark Crane 571f5b912b Limit the transaction for the menu to SQLite. 2014-03-21 06:29:00 +00:00
Mark Crane 9ba46dfc8a If vm_message_ext is "mp3" then check to see if mod_vlc is running and if it is then use vlc:// as the prefix for streaming the file. 2014-03-20 16:42:04 +00:00
Mark Crane b95e2e2488 Use lame to convert voicemail wav to mp3 files. 2014-03-20 08:47:36 +00:00
Mark Crane 84c07b801c Update the menu to accommodate multi-lingual menu titles that were too wide to fit on the menu background. 2014-03-19 05:48:04 +00:00
Mark Crane 604517b605 Add the SQL transactions back again to speed up install and menu restore. 2014-03-19 05:19:48 +00:00
Mark Crane 0e7b23568f Hide the logo and login info when in the install.php. 2014-03-19 05:01:25 +00:00
Mark Crane abe9cde75e Fix the alignment of the word Theme on the install.php. 2014-03-19 01:09:50 +00:00
Mark Crane af881804d4 Fix the dialplan_number so that it is more accurate. 2014-03-18 09:04:05 +00:00
Mark Crane e588799282 Don't add the ring_group_forward permission by default to the user group. 2014-03-18 08:19:08 +00:00
Mark Crane 4cb64eda4b Check to see if that features app_config.php file exists before adding it to the switch_select_destination list. 2014-03-18 06:39:13 +00:00
Mark Crane 50e289a77c Fix the spanish description for description-comfirm_key. 2014-03-18 00:46:51 +00:00
Nate Jones 841f4ffbf1 Layout mods. 2014-03-17 18:56:33 +00:00
Nate Jones 454681ecab Dialplan Edit layout and style mods
Integrated autosize jquery script for text inputs
Style and functionality mods on domain selector and Enhanced template
2014-03-15 21:35:53 +00:00
Mark Crane 0ec8902eb1 Yealink provisioning if category is not blf then hide the pickup_value. 2014-03-15 13:38:12 +00:00
Mark Crane d2f88742dd Remove extra white spaces and a few other adjustments for the Yealinks phones. 2014-03-15 13:23:21 +00:00
Philippe Rioual e92dc64ae9 modified enhanced template.php to allow users to use it / issue from REV5426 2014-03-14 14:50:26 +00:00
Nate Jones 4954a1a441 Modify Domain Selector filter/search to be case INsensitive. 2014-03-14 05:08:15 +00:00
Nate Jones e39158bdce Moved "FLUSH_INBOUND_REG" buttons to left side of others to be more visually appealing. 2014-03-14 04:44:46 +00:00
Nate Jones cd2faf3521 Changed password_length Default Setting back to current value of 10, instead of 15. 2014-03-13 21:11:43 +00:00
Nate Jones 33bb2d850f Added Default Settings allowing control of system generated password lengths and strengths. Consistified (new word) password generation between Extension add and edit. Layout adjustment of Default Settings list. 2014-03-13 21:09:41 +00:00
Mark Crane 5d199ba3e1 Fix the mac address being added when a new phone is provisioning with HTTP. 2014-03-13 20:32:20 +00:00
Nate Jones 40a13c236e Domain selector drop shadow adjustment. 2014-03-12 20:22:06 +00:00
Nate Jones 9b4d78cde3 Style adjustments. 2014-03-12 20:18:03 +00:00
Nate Jones 73b71d0c87 Streamline password viewing. 2014-03-12 19:57:18 +00:00
Nate Jones 533f641b91 Added "TLS" to "Rewrite Contact Port" in select option label. 2014-03-12 16:28:45 +00:00
Mark Crane 5879a09f46 Remove trailing spaces from t22p. 2014-03-10 16:34:27 +00:00
Mark Crane 3d9d89c7dd Add the following provisioning variables grandstream_gxp_time_zone, grandstream_gxp_date_format, and grandstream_gxp_time_format. 2014-03-08 06:38:19 +00:00
Mark Crane b1f95da562 Add ability to set comma delimited list of pin_numbers. Example set pin_number=111,333,555 in addition to set pin_number=555 which was already possible. 2014-03-07 21:12:16 +00:00
Mark Crane 286f92aec5 Remove the add button because a recording is added with the upload button. 2014-03-07 17:21:10 +00:00
Mark Crane fcc6f82571 Remove the semi-colon from recording edit. 2014-03-07 17:18:37 +00:00
Mark Crane f63b2d0ad9 Remove the semi-colon after the Recording title and remove the location. 2014-03-07 17:12:45 +00:00
Mark Crane 1e84cb0299 Change the voicemai Copy Destinations to Forward Destinations. 2014-03-07 08:35:55 +00:00
Mark Crane 12351013b8 Add a voicemail quota with a variable vm_disk_quota or vm-disk-quota (for compabitibility to FreeSWITCH voicemail) 2014-03-07 05:31:59 +00:00
Nate Jones 0aaf8f8bf3 Streamline password viewing. 2014-03-07 02:59:20 +00:00
Nate Jones b00996a440 Streamline password viewing. 2014-03-07 01:52:44 +00:00
Nate Jones 9040a9ca68 Trying both onfocus and onmouseover to accommodate ease of use on both desktop and mobile devices. 2014-03-07 01:20:26 +00:00
Nate Jones 2aa0bfabbc Changed view action to onfocus, instead of onmouseover, testing... 2014-03-07 01:15:04 +00:00
Nate Jones 55140990f1 Small password input viewing modification. 2014-03-06 23:31:03 +00:00
Nate Jones 2ddfb27d5e Added web interface for voicemail destinations (CC) feature to be added shortly. 2014-03-06 23:06:45 +00:00
Nate Jones c279b50669 Added db table/fields for voicemail destinations (CC) feature to be added shortly. 2014-03-06 20:04:47 +00:00
Mark Crane 8f5f5d5237 Hide the empty select option for the IVR Menu rinback. 2014-03-06 17:18:14 +00:00
Mark Crane e849d747c8 Ring Groups - If music on hold doesn't exist then don't include it as an option for ring back. 2014-03-06 17:16:21 +00:00
Mark Crane cbb18e1ee4 IVR Menu - If music on hold doesn't exist then don't include it as an option for ring back. 2014-03-06 17:12:45 +00:00
Mark Crane 500e5ce10d Add a 1 second sleep before playing the conference greeting. 2014-03-06 04:16:18 +00:00
Mark Crane 460b0853c9 Add greeting to the conference center interface. 2014-03-05 21:16:51 +00:00
Mark Crane d0b82a0487 Put the conference centers in order by name. 2014-03-05 21:16:21 +00:00
Mark Crane b43c1df078 Add a conference center greeting. Move all SQL debug info inside an SQL debug true if statement. Fix the new member count so it says 0 members in the conference for the first person that enters. 2014-03-05 21:10:58 +00:00
Mark Crane 2856c9ef62 Add a web login user and admin password for the Cisco SPA phones. 2014-03-04 16:51:33 +00:00
Mark Crane 30acf917a0 Prevent the class from being redeclared by using class_exists. 2014-03-04 16:48:59 +00:00
Mark Crane 351ce2a7ba Fix the buttons on the nature theme. 2014-03-04 16:36:34 +00:00
Mark Crane bcf105b0c4 Change the number of rows used in the textarea on the sql query page so that it fits better on lower resolutions. 2014-03-04 16:32:51 +00:00
Mark Crane a2109e5759 SPA303 change Proxy from the {$domain_name} to {$server_address_1}. 2014-03-04 06:23:49 +00:00
Mark Crane d88d848f7f Hide Device Provisioning on the extensions page if app/devices is not installed. 2014-03-04 05:59:34 +00:00
Mark Crane 5aff644a70 Do not include the voicemail unless the app/voicemails directory exists. 2014-03-04 05:49:38 +00:00
Mark Crane 6f0631b8c4 Only show music on hold select if app/music_on_hold directory exists. 2014-03-04 05:41:28 +00:00
Mark Crane 1a9f911009 Add account enable and register expires to all accounts across all Yealink phones. Add #features.reset_by_long_press_enable = 0 to the T4x devices. 2014-03-02 06:52:47 +00:00
Nate Jones b6c82d641d Modified menu and response message CSS radius attributes to match the radius of buttons and input fields (3px). 2014-03-01 20:30:34 +00:00
Mark Crane d39862cc41 Add register_expires and network.static_dns_enable to the Yealink T42g and T46g templates. 2014-03-01 10:08:27 +00:00
Mark Crane 7f9149a8b9 Add the Yealink t48g template. 2014-03-01 10:07:08 +00:00
Mark Crane 14ca5aaf34 Fix Yealink T42 and T46 account enable. 2014-02-28 23:37:53 +00:00
Mark Crane a6730e470d Add a member count announcement when joining the for conference room with conference center. 2014-02-28 17:14:15 +00:00
Mark Crane bbea9c2f9e Removed } which caused a problem when pressing *2 to make a recording. 2014-02-28 00:06:19 +00:00
Mark Crane 6c0ccf6faa Yealink templates - Move the wallpaper assignment after its uploaded. 2014-02-27 10:50:36 +00:00
Mark Crane d602280def Set the specific wallpaper and fix the variable syntax. 2014-02-27 05:35:18 +00:00
Mark Crane 2d8570408b Change the wallpaper and screen saver values. ${yealink_xxx_wallpaper} ${yealink_xxx_screen_saver} 2014-02-27 04:11:24 +00:00
Mark Crane d08c6e270d Add the spa_time_zone variable to the Cisco SPA templates. 2014-02-27 02:45:01 +00:00
Nate Jones 016654d211 Update CSS in other themes to accommodate changes required for Enhanced theme. 2014-02-26 07:34:04 +00:00
Nate Jones 08bc110afd Misc CSS tweaks, Domain Selector multilinguified. 2014-02-26 07:23:15 +00:00
Mark Crane 114f0f3e56 Fix the user edit page. 2014-02-26 07:20:07 +00:00
Nate Jones b89b1f5098 Minor layout and style mods. 2014-02-26 06:49:42 +00:00
Nate Jones 8c1d03b362 Unstack list control icons. 2014-02-26 06:32:58 +00:00
Nate Jones 20b93a808a Unstack list control icons. Languages fix. 2014-02-26 06:30:14 +00:00
Nate Jones 5d916bc082 Unstack list control icons. 2014-02-26 06:21:37 +00:00
Nate Jones 17d99a812a Unstack list control icons. 2014-02-26 06:17:36 +00:00
Nate Jones 81073375b7 Unstack list control icons. 2014-02-26 06:15:42 +00:00
Nate Jones b323d8e8d7 Textarea class updates 2014-02-26 06:14:00 +00:00
Nate Jones d513bcf809 Unstack list control icons. Languages fix. 2014-02-26 06:10:56 +00:00
Nate Jones 74b1d79225 Minor layout mods. 2014-02-26 06:07:13 +00:00
Nate Jones 884a35694e Changed class on text input. 2014-02-26 05:56:58 +00:00
Nate Jones 8d6e8c9d86 Unstack list control icons. 2014-02-26 05:53:22 +00:00
Nate Jones 5381f2b74b Unstack list control icons. Minor bug fix in schema_data_edit.php. 2014-02-26 05:49:39 +00:00
Nate Jones 0dddf704c2 Unstack list control icons. Fixed css class on user select box. 2014-02-26 05:39:02 +00:00
Nate Jones d41e4fd39f Unstack list control icons, minor layout mods. 2014-02-26 05:34:58 +00:00
Nate Jones c89345a8e9 Fix redirect on Queue add. 2014-02-26 05:29:23 +00:00
Nate Jones 84a81a46e0 Unstack list control icons. 2014-02-26 05:21:35 +00:00
Nate Jones 7d31bf965f Unstack list control icons. 2014-02-26 05:14:25 +00:00
Nate Jones b534c3bd88 Unstack list control icons. 2014-02-26 05:00:17 +00:00
Nate Jones dde7c3fac9 Adjusted width of Delay and Timeout select boxes. 2014-02-26 04:58:16 +00:00
Nate Jones c7894343d0 Unstack list control icons. 2014-02-26 04:56:09 +00:00
Nate Jones 5d6bc9ce71 Changed class on file input. 2014-02-26 04:54:25 +00:00
Nate Jones ff5b516984 Unstack list control icons, minor layout mods. 2014-02-26 04:47:41 +00:00
Nate Jones bede08923d Unstack list control icons. 2014-02-26 04:27:31 +00:00
Nate Jones 830dc5ee58 Unstack list control icons. 2014-02-26 04:17:21 +00:00
Nate Jones fd35ea4125 Added white space between paging controls and data. 2014-02-26 04:13:23 +00:00
Nate Jones 7b074cbb56 Unstack list control icons. 2014-02-26 04:10:49 +00:00
Nate Jones d44d9bd817 Unstack list control icons. 2014-02-26 04:02:56 +00:00
Nate Jones f4603e02ce Fixed Enabled, wasn't showing options on Call Block Add. 2014-02-26 03:58:55 +00:00
Nate Jones b2449126fb Unstack list control icons. 2014-02-26 03:08:06 +00:00
Nate Jones bd2e249784 Unstack list control icons. 2014-02-26 03:04:33 +00:00
Nate Jones 191656ff57 Fix language file. 2014-02-26 02:58:04 +00:00
Nate Jones 1b56c4c435 Just an undo. Sorry. 2014-02-26 02:57:36 +00:00
Nate Jones b68313ae74 Fix language file. 2014-02-26 02:56:33 +00:00
Nate Jones 450d4ffb8f Unstack list control icons. 2014-02-26 02:52:43 +00:00
Nate Jones 49756dc8ce Unstack list control icons. 2014-02-26 02:47:09 +00:00
Nate Jones 0e5d8ae5fa Fixed class on Search By select box. 2014-02-26 02:40:24 +00:00
Nate Jones af4fd0479a Fixed class on Advanced button. 2014-02-26 02:37:24 +00:00
Nate Jones 1e6adca178 Unstack list control icons. 2014-02-26 02:35:26 +00:00
Nate Jones 1e1c8a80ce Unstack list control icons. 2014-02-26 02:32:56 +00:00
Nate Jones 0d5b1642e7 Unstack list control icons. 2014-02-26 02:30:14 +00:00
Nate Jones 19480c66d1 Unstack list control icons. 2014-02-26 02:27:13 +00:00
Nate Jones 861ff38d4a Unstack list control icons. 2014-02-26 02:25:10 +00:00
Nate Jones 1bb9a2ac79 Unstack list control icons. 2014-02-26 02:20:57 +00:00
Nate Jones b67bc02304 Unstack list control icons. 2014-02-26 02:16:32 +00:00
Nate Jones 621c868cc3 Minor mods. 2014-02-26 02:13:29 +00:00
Nate Jones b5f498ddfe Fixed css class on user select box 2014-02-26 01:52:57 +00:00
Nate Jones ac3a0390ac Updated css, buttons and icons on the Enhanced theme. 2014-02-26 01:51:50 +00:00
Nate Jones 557b319383 New images for coming updated template. 2014-02-26 01:48:18 +00:00
Mark Crane 5f4fb3015e Fix a main item in the es-cl (Spanish) menu. 2014-02-26 00:46:22 +00:00
Nuno Miguel Reis c8740bad49 fixed some translations 2014-02-25 22:49:35 +00:00
Nate Jones a32eded196 Added Domain Description to Domain Selector list. 2014-02-25 20:10:20 +00:00
Nate Jones 00621832be Domains Selector show image. 2014-02-25 19:42:18 +00:00
Mark Crane 65e9f8ec1f Remove device_time_zone from provision the time zone instead should be set in default settings, category: provision 2014-02-25 17:36:56 +00:00
Mark Crane 9ece07dd32 Update the SPA112 template. Add the web login user and admin name and password. 2014-02-25 16:47:47 +00:00
Mark Crane 9923a2a5c9 Improve the Grandstream dialplan and disable stock info on the gxp21xx/{$mac}.xml template. 2014-02-25 15:52:19 +00:00
Mark Crane 2e0a486f22 Only set variables with values not variables. 2014-02-25 09:37:59 +00:00
Mark Crane 7b89ea1c5d Widen the extension device line select list to an acceptable width for Internet Explorer. 2014-02-25 09:01:15 +00:00
Mark Crane 3a36c415c6 Device Key remove select option starts with 1. 2014-02-25 08:34:12 +00:00
Mark Crane 754918f039 Deprecate device_time_zone the better way to do this is set the time zone information in the default, domains or device settings. 2014-02-25 07:46:25 +00:00
Mark Crane 1091745af1 Fix the SIP transport for the Yealink T42g. 2014-02-25 07:10:55 +00:00
Nate Jones 6940a1fee0 On domain change, respect default (or domain) login destination url value. 2014-02-25 06:41:42 +00:00
Nate Jones 4002ad3a64 Integrated search by Domain Description in Domain Selector. 2014-02-25 06:17:35 +00:00
Mark Crane 311938dafb Add domain_description to the same domains array when changing tenants. 2014-02-25 06:01:42 +00:00
Mark Crane 708dea41d5 Add domain_description to the same domains array. 2014-02-25 06:00:40 +00:00
Mark Crane 07032a2a13 Add ring group rollover strategy to the LUA script. 2014-02-25 04:59:02 +00:00
Mark Crane e939f7f3f2 Add ring group rollover strategy. 2014-02-25 04:55:50 +00:00
Nuno Miguel Reis eeed105dff change of some pt_PT translations and fixed some encoding bugs for the new Chile spanish
Conflicts:
	fusionpbx/app/call_center_active/app_languages.php
	fusionpbx/app/calls_active/app_languages.php
	fusionpbx/app/ring_groups/app_languages.php
	fusionpbx/app/schemas/app_languages.php
2014-02-25 03:28:28 +00:00
Nate Jones b29f9991cd An enhanced domain/tenant selector for the Enhanced theme. 2014-02-24 23:36:37 +00:00
Nate Jones fc93a96aff Response message updates. 2014-02-23 10:04:42 +00:00
Mark Crane 10518d5f17 Update the text used when copying the extension. 2014-02-23 09:39:54 +00:00
Nate Jones 80b546406e Response message updates. 2014-02-23 09:39:12 +00:00
Mark Crane 2339334bdc Add device copy to make it faster to add devices for endpoint provisioning. 2014-02-23 09:33:27 +00:00
Nate Jones 1d5987acc4 Response message updates. 2014-02-23 09:26:30 +00:00
Nate Jones fea8da3922 Response message updates. 2014-02-23 09:12:38 +00:00
Nate Jones c131d40627 Response message updates. 2014-02-23 09:07:56 +00:00
Nate Jones 1153e97134 Response message updates. 2014-02-23 09:06:25 +00:00
Nate Jones ad7a165708 Response message updates, language fixes. 2014-02-23 09:03:41 +00:00
Nate Jones 1ff8b747c7 Response message updates. 2014-02-23 08:47:58 +00:00
Nate Jones 6986a230f9 Response message updates. 2014-02-23 08:41:57 +00:00
Nate Jones f4f85dbb0e Response message updates. 2014-02-23 08:38:10 +00:00
Nate Jones 44dce0b110 Response message updates, language fixes. 2014-02-23 08:34:06 +00:00
Nate Jones 77d89fa403 Response message updates, language fixes. 2014-02-23 08:24:56 +00:00
Nate Jones 0bc807a188 Response message updates, language fixes. 2014-02-23 08:07:37 +00:00
Nate Jones 9a385be255 Response message updates. 2014-02-23 07:48:21 +00:00
Nate Jones 8f937d194d Response message updates, minor language patch. 2014-02-23 07:43:37 +00:00
Nate Jones 1c9096008a Response message updates. 2014-02-23 07:39:00 +00:00
Nate Jones 72ec67fdd3 Response message updates, removed language redundancy. 2014-02-23 07:33:53 +00:00
Nate Jones 6050f6a3ce Response message updates. 2014-02-23 07:19:44 +00:00
Nate Jones daf29a4560 Response message updates. 2014-02-23 07:15:37 +00:00
Mark Crane e4c196e238 Remove the dashes on the MAC address. 2014-02-23 07:15:03 +00:00
Nate Jones 7858f89055 Response message updates. 2014-02-23 07:10:19 +00:00
Nate Jones 1800b056fa Response message updates, minor language patch. 2014-02-23 06:55:16 +00:00
Nate Jones 68fd46a818 Response message updates. 2014-02-23 06:46:10 +00:00
Mark Crane 392111d825 Time for a major improvement to LUA XML handler efficiency. 2014-02-23 06:34:56 +00:00
Nate Jones 56b7f7d63b Language file fix. 2014-02-23 06:33:25 +00:00
Mark Crane 4a954451f9 Correct the field name in the SQL query from enabled to var_enabled. 2014-02-23 06:20:09 +00:00
Nate Jones 11c518aada Response message updates. 2014-02-23 06:06:34 +00:00
Nate Jones ddb0a77fd8 Response message updates. 2014-02-23 05:48:33 +00:00
Nate Jones e204a8a180 Response message updates. 2014-02-23 05:36:11 +00:00
Nate Jones 85c4583b3b Response message updates. 2014-02-23 05:33:13 +00:00
Nate Jones 5a4ac81cf3 Response message updates. 2014-02-23 05:23:08 +00:00
Mark Crane 2d99efc796 Prevent inserting the a new device if the domain does not exist. 2014-02-23 00:20:29 +00:00
Mark Crane a8d2177a5e Update the extension template list. 2014-02-22 23:38:14 +00:00
Mark Crane 7f4257883d Add get_template_dir to the PHP class. 2014-02-22 23:20:55 +00:00
Mark Crane 66ae6eb47b Fix a problem with inbound calls and improve the dialplan lua script. 2014-02-22 18:06:30 +00:00
Mark Crane 78c231a646 Add the call block lua script to app/dialplan so that it will work on all inbound calls. 2014-02-21 22:58:01 +00:00
Mark Crane 3fc48c2d0c Update the provisioning directory list for the provision editor. 2014-02-21 17:20:35 +00:00
Mark Crane c6e5aae050 Fix the provision directory path for those not using /etc/fusionpbx template directory. 2014-02-21 16:47:23 +00:00
Nate Jones 3692128c26 Response message updates... from Pizza Hut!!! 2014-02-21 05:06:46 +00:00
Nate Jones 47d45a06d7 Protected domain information from being overwritten. 2014-02-21 04:22:25 +00:00
Nate Jones 034e2971c5 Response message updates, language fixes. 2014-02-21 03:56:30 +00:00
Nate Jones 2e148255ab Response message updates. 2014-02-21 03:02:55 +00:00
Nate Jones 4f7c3a03ce Mis-key fix. 2014-02-21 02:49:17 +00:00
Nate Jones ad1d964821 Response message updates. 2014-02-21 02:27:42 +00:00
Nate Jones ef34cab279 Response message updates. 2014-02-21 02:23:40 +00:00
Nate Jones c23b49f3ad Response message updates, permission fix. 2014-02-21 02:13:06 +00:00
Nate Jones 81d5ea95e1 Response message updates. 2014-02-21 02:03:22 +00:00
Nate Jones dcad688f3f Integrated some jQuery goodness into the SIP Status page. 2014-02-21 01:19:36 +00:00
Nate Jones f6354a5785 Streamlined response message for: Default Settings, SIP Status 2014-02-21 00:17:28 +00:00
Nate Jones f7641fe457 Streamlined response message, implement JQuery into templates by default. 2014-02-20 23:57:50 +00:00
Mark Crane 1b6221768a Update the redirect for dialplan_delete.php 2014-02-20 23:57:42 +00:00
Mark Crane 93092bb0e0 Update the redirect for dialplan_detail_delete.php 2014-02-20 23:56:45 +00:00
Mark Crane df3dd784b5 Add a optional provision template directory in /etc/fusionpbx/templates/provision for Linux and /usr/local/etc/fusionpbx/templates/provision for FreeBSD. 2014-02-20 17:54:02 +00:00
Mark Crane 1bdf5cbc3d Ring group improvements designed improve usability. 2014-02-20 07:20:55 +00:00
Mark Crane 450af306cb Try again on the message. 2014-02-20 02:53:43 +00:00
Mark Crane 8eb97e7048 Fix the update message for ring groups. 2014-02-20 02:42:41 +00:00
Mark Crane 436cf40595 Remove ORIGINATOR_CANCEL from the ring group lua script to fix ring group intercept. 2014-02-19 22:48:00 +00:00
Mark Crane 0311bd7320 Fix the translation. 2014-02-19 09:51:38 +00:00
Mark Crane c254ade8f6 Add a Spanish translation to IVR Menu - Message 2014-02-19 09:40:26 +00:00
Mark Crane ff7cb66863 Improve the Stop Broadcast message. 2014-02-19 09:37:58 +00:00
Mark Crane 4830df1cae Change the 'Cancel' button to 'Stop Broadcast' 2014-02-19 08:50:36 +00:00
Mark Crane 37c58aa15c Add a button to Call Broadcast to Cancel the calls. 2014-02-19 08:20:15 +00:00
Mark Crane 042ac2356a Use the broadcast uuid so we can use it to del the scheduled calls. 2014-02-19 06:47:51 +00:00
Mark Crane 9bcd215306 Remove the spaces in the fax email address. 2014-02-19 06:17:38 +00:00
Mark Crane 6ec053708f Fix the white space and tabs issues with fax_retry.lua. 2014-02-19 06:15:53 +00:00
Mark Crane 6733521ac4 When using multiple email addresses with faxing commas are used between email addresses. The commas must be escaped this change automatically does the escaping so the end user doesn't have to do it. 2014-02-19 03:11:42 +00:00
Mark Crane c981e783f1 Remove origination_caller_id_name from ring groups lua script. 2014-02-18 18:43:14 +00:00
Mark Crane 1064a22166 Re-organize call broadcast to use the class method. 2014-02-18 11:19:23 +00:00
Mark Crane cbd8e52bd9 Add outbound_routes method to the dialplan class. 2014-02-18 11:08:35 +00:00
Mark Crane 398696d6b0 Update eavesdrop.lua change the sounds used to get the pin number to the default freeswitch sound files. 2014-02-18 01:10:15 +00:00
Mark Crane 6f4a84458f Fix upgrade schema so it evaluate char and char(30) as a char. 2014-02-17 17:12:33 +00:00
Mark Crane 3eb49d0041 Fix a syntax problem with the translation file for outbound routes. Thanks esammy for reporting the issue. 2014-02-17 17:06:26 +00:00
Mark Crane e465f25492 Remove a line feed. 2014-02-17 17:01:26 +00:00
Mark Crane 12c2989581 The proper way to fix the problem is not to remove the permission checks. Restoring the permissions. 2014-02-17 14:57:19 +00:00
Richard Neese 7b5a87b4ba fixes user portal so folow-me and call forward works for users 2014-02-17 14:44:07 +00:00
Mark Crane 1cb1f0feb4 Add a missing double quote to app_languages.php for the Fax translation. 2014-02-17 14:40:46 +00:00
Mark Crane 984ca4faad Comment out the transaction support for the menu. 2014-02-16 09:04:52 +00:00
Mark Crane 1c3a261b5c Complete the Spanish, French and Portuguese translations for Devices for those that natively speak one or more of these languages please report improvements. 2014-02-16 07:19:13 +00:00
Mark Crane c688431748 Disable the please hold dialplan forerly in context: features. 2014-02-16 01:59:48 +00:00
Mark Crane 024885b178 Change the double quote to a single quote to fix the xml cdr translation. 2014-02-15 20:26:31 +00:00
Mark Crane b430b508ea Add more translations to Devices. 2014-02-15 00:33:47 +00:00
Mark Crane 93ea8637b2 Prevent duplicates when adding a device. 2014-02-14 23:25:46 +00:00
Mark Crane 0f9cf0e79f Finish the Spanish es-cl integration. 2014-02-14 18:37:58 +00:00
Mark Crane f513b95c6d Add a new Spanish translation donated by José Manuel Calquin Heinsohn. 2014-02-14 07:03:12 +00:00
Mark Crane 2e14c7e154 Fix the call_direction. 2014-02-14 01:01:51 +00:00
Mark Crane a6b2dd512d Add a new Spanish translation donated by José Manuel Calquin Heinsohn. 'es-cl'. This completes the menu Spanish translation. 2014-02-13 20:15:59 +00:00
Mark Crane 12a3426de6 Add a new Spanish translation donated by José Manuel Calquin Heinsohn. 'es-cl' for Spanish from Chile he says he tried to translate in a way that would be generic enough to work for most Spanish dialects. This commit covers just fusionpbx/core still need to integrate the translations for all features in fusionpbx/app directory. 2014-02-13 18:09:45 +00:00
Mark Crane 864613f199 Add features.reset_by_long_press_enable although will be ignored by 70 firmware and remove some trailing spaces. 2014-02-13 15:32:11 +00:00
Mark Crane fdfe07a787 Add the Apps menu to core/apps/app_config.php 2014-02-13 04:51:03 +00:00
Mark Crane b4df5264e1 Move the 'Apps' menu to a different directory. 2014-02-13 04:31:33 +00:00
Mark Crane d41e849d59 Only perform these actions if the directory exists during the install. 2014-02-13 00:24:49 +00:00
Mark Crane abb1097e02 Only install class copy methods only add if the directory exists. 2014-02-13 00:23:00 +00:00
Mark Crane 60b7f7cb2a Add reboot into the app_languages.php 2014-02-12 01:19:57 +00:00
Mark Crane 614e62b306 Add the live dial pad option to the one yealink template that did not have it. 2014-02-11 04:40:33 +00:00
Mark Crane b8f5e54032 Make the sql statements a little more efficient. 2014-02-11 02:04:38 +00:00
Mark Crane 2c60ccde4c Comment out the device_username and device_password this is defined instead via default settings. 2014-02-11 01:54:53 +00:00
Mark Crane 0d35f10582 Set the dev branch version to 3.5 release candidate 1. 2014-02-11 01:53:46 +00:00
Mark Crane 50d4731df6 Simplify the approach used to add the global inbound route that calls the dialplan.lua script. 2014-02-11 01:50:39 +00:00
Mark Crane ac8d4bd9f1 Change the context for the local_extension bind_meta_app *1, *3, and *4. 2014-02-10 21:20:40 +00:00
Mark Crane 2e086a8f31 Remove the dialplan_features app. 2014-02-10 21:16:03 +00:00
Mark Crane 49a9664487 Move the features context into the regular dialplan context. 2014-02-10 21:13:17 +00:00
Mark Crane f1e39d497f Change the context using the variable ${context} 2014-02-10 21:09:49 +00:00
Mark Crane 95f64f8d99 Add MWI-Voice-Message to show the message count. 2014-02-09 09:43:47 +00:00
Mark Crane ecd8616fa1 Return the primary key uuid when adding a new record. 2014-02-09 09:24:41 +00:00
Mark Crane 247f625744 A minor change to directory.lua 2014-02-09 09:12:05 +00:00
Mark Crane 1fa31bca61 Fix the ring group caller id prefix. 2014-02-08 18:42:35 +00:00
Mark Crane d07506fbf6 Update the seesion every 8 hours isntead of every 30 minutes. 2014-02-08 09:38:44 +00:00
Mark Crane 0a3af3791f Add the admin_name, admin_password, user_name, and user_password variables to the Yealink w52p. 2014-02-08 09:24:08 +00:00
Mark Crane 32e3dd5045 Add new Yealink time zone variables and update existing ones adding 'yealink_' as a prefix. 2014-02-08 08:58:28 +00:00
Mark Crane b68f35d4b6 Add sip port, transport, and expires to the Yealink w52p. 2014-02-08 06:59:42 +00:00
Mark Crane 53c79fba0c Device Keys - remove empty rows. 2014-02-08 03:47:42 +00:00
Mark Crane 9e2f71b1cf Conference center remove a redundant dbh:release(); which is not needed because its being done in the hangup hook. Turn off sql debug. 2014-02-07 19:09:32 +00:00
Mark Crane 52c6e1e735 Set the keys to numerical order. Add more keys to the key select list. 2014-02-07 12:26:20 +00:00
Mark Crane 40a3d264e1 Device list order by the MAC address. 2014-02-07 11:46:46 +00:00
Mark Crane 9e35256a81 Thanks Christopher Hennessy for donating the new templates and improvements to the existing ones. 2014-02-07 11:13:50 +00:00
Mark Crane 5101a6495c Change the template directory name to lower case to match the other templates. 2014-02-07 11:05:05 +00:00
Mark Crane 1743f309c8 Change the template directory name to lower case to match the other templates. 2014-02-07 11:04:45 +00:00
Mark Crane 4f5d206812 Change the template directory name to lower case to match the other templates. 2014-02-07 11:04:26 +00:00
Mark Crane ad176155dd Change the template directory name to lower case to match the other templates. 2014-02-07 11:04:06 +00:00
Mark Crane 7bff7ea25a Add the Yealink w52p. 2014-02-07 11:02:22 +00:00
Mark Crane 8b5c6d67f8 Grandstream GXP2200 remove the trailing white spaces and fix one of the variables. 2014-02-07 08:38:39 +00:00
Mark Crane b7dc9d39ac Add domain_uuid to the dialplan_detail array. 2014-02-06 10:13:57 +00:00
Mark Crane 6db8a2c8f1 Update the tab spacing on dialplan/dialplan_detail_delete.php. 2014-02-06 07:39:38 +00:00
Mark Crane 5f38d69264 Fix the column sorting on the fax list. 2014-02-06 05:45:36 +00:00
Mark Crane 298676bf5b Default the conference room profile to 'default' 2014-02-06 04:01:22 +00:00
Mark Crane 5b55418197 Update the provision PHP class to normalize the Mac Address before checking if it exists in the devices table in the database. 2014-02-05 14:13:02 +00:00
Mark Crane 910332318f Add new lua application user_status to be used to login and logout of call center by toggling the user status. 2014-02-04 23:23:17 +00:00
Mark Crane dd6e7542d1 Add a new dialplan entry for changing the user status useful especially for call center. 2014-02-04 23:19:31 +00:00
Mark Crane 0cc3b53f07 Add 'check voicemail' option to the destination select list and move info, hangup and answer to advanced which only users in the superadmin group can see. 2014-02-04 08:36:18 +00:00
Mark Crane 25807f4e7c If authentication is set for unique global username then don't remove the @domain from the username. 2014-02-04 04:53:42 +00:00
Mark Crane 382b293f8a Remove the \$ and replace with $ the \ escape is not needed. 2014-02-04 00:49:16 +00:00
Mark Crane 7c586ecd77 Fix the Type for Cisco SPA series phones. 2014-02-03 21:43:38 +00:00
Mark Crane 2b3894f55a No longer need the classes/domains include. 2014-02-03 20:54:06 +00:00
Mark Crane 830ec1bc5a Fix General memory key 5 in the Grandstream gxp21xx template. 2014-02-01 09:11:52 +00:00
Mark Crane 9498e274fe Add the date format for the gxp21xx. 2014-02-01 05:28:22 +00:00
Mark Crane b5b89224fa Update the firmware path for the gxp21xx. 2014-02-01 05:14:17 +00:00
Mark Crane 26028fc49e Add sip transport for gxp21xx. 2014-02-01 03:43:29 +00:00
Mark Crane bd5892fc80 One more adjustment to get the domain_name for the provisioning. 2014-01-31 19:36:11 +00:00
Mark Crane 5b458626b4 Make sure that the domain_name is correct when rendering the provisioning template. 2014-01-31 19:02:05 +00:00
Mark Crane 40729b9247 Grandstream translate the name to to the number required to set the mode. 2014-01-31 12:52:08 +00:00
Mark Crane 0ec5a4d11f Add the labels to the device edit. 2014-01-31 11:13:37 +00:00
Mark Crane 2856045f5f Add additional language labels used in the select list on device_edit.php. 2014-01-31 10:27:15 +00:00
Mark Crane 8c567bdb76 Update the line key assignment for the Cisco SPA series phones. 2014-01-30 08:33:26 +00:00
Mark Crane 29a5301d08 Add a provisioning template for the Cisco 7960 template. 2014-01-30 00:23:38 +00:00
Mark Crane 6b0492961d Add quotes around the name. 2014-01-30 00:17:44 +00:00
Mark Crane 399b26947f Empty tftp_cfg_dir variable in the 7940 template 2014-01-29 23:03:29 +00:00
Mark Crane b7ec8013a8 Uncomment the provision_write include 2014-01-29 21:34:24 +00:00
Mark Crane d09f04272a Uncomment the provision_write include 2014-01-29 21:34:01 +00:00
Mark Crane bc266b0c8a Add a provision write method to the provision function and use it to write the provisioning files for tftp/ftp provisioning. 2014-01-29 10:18:25 +00:00
Mark Crane 74e0552a1d Fix a syntax problem with the Yealink vp530 provisioning template. 2014-01-29 09:21:58 +00:00
Mark Crane dc588b5113 Fix a syntax problem on the Grandstream GXP2200 provisioning template. 2014-01-29 09:18:47 +00:00
Mark Crane cb6ecd26bf Change the include for smarty template engine to a require_once 2014-01-29 09:13:56 +00:00
Mark Crane 95b60d1817 Move the provisionin code into the new provision class. 2014-01-29 04:50:50 +00:00
Mark Crane 4012d9d9bb Get rid of the names in the Grandstream select type (mode) because the modes to actions are not consistent. 2014-01-28 11:35:57 +00:00
Mark Crane 94014cb935 Show only the correct vendor on the device edit page. 2014-01-28 11:03:05 +00:00
Mark Crane 35d0d4eb27 Fix the grandstream select values in the device edit page. 2014-01-28 10:44:56 +00:00
Mark Crane aaa7cb702a Key to line assignment for the Grandstream GXP21xx. 2014-01-28 10:42:00 +00:00
Mark Crane 829e08c44c Configure the multi-purpose keys in the Grandstream gxp21xx template. 2014-01-28 10:08:02 +00:00
Mark Crane 403a89a5ca Add line and extension variables to the on demand provisioning. 2014-01-28 10:02:15 +00:00
Mark Crane 4bedac5c92 Add grandstream options to device edit. 2014-01-28 07:56:03 +00:00
Mark Crane 6f186aa5c7 Fix the line key assignment on the SPA303, add voicemail *97 option, and time zone settings. 2014-01-26 14:03:32 +00:00
Mark Crane addcf3ca8c Remove the back slash from ivr_menu.lua. http://jira.freeswitch.org/browse/FS-6059 thanks Travis for the bug fix. 2014-01-26 13:25:50 +00:00
Mark Crane 8c3ca87527 Add Company Directory to the dialplan select destination. 2014-01-26 13:18:41 +00:00
Richard Neese 7c1c559852 changed the link from v_active_conferences.php to active_conferences.php
this fixes the old conference tool
2014-01-24 21:51:01 +00:00
Mark Crane aff65a0add Yealink, Add the time zone variables. 2014-01-24 08:44:22 +00:00
Mark Crane c3cf4a19df Configure the wallpaper option to the yealink templates. 2014-01-24 08:08:04 +00:00
Mark Crane 7e0dd48dc9 Change random seconds from 3.5 to 3 seconds. 2014-01-24 08:07:15 +00:00
Mark Crane da06236b72 Add an images directory this is where the phone wall papers should go if using on demand http/https provisioning. 2014-01-24 07:53:14 +00:00
Nuno Miguel Reis 10514b4603 added meta update block again, since was causing issues like duplicate ivr_menus, one per each option added. (let it be this way until Mark decides how the new pattern will work) 2014-01-24 06:38:46 +00:00
Nuno Miguel Reis e45b5c85a1 fixed ivr_menu_option details being passed to ivr_menu class 2014-01-24 06:38:38 +00:00
Mark Crane 180cf3e244 Add http authentication to provisioning. 2014-01-24 05:53:32 +00:00
Mark Crane 89865a64a4 Fix the device settings on the on demand provisioning. 2014-01-24 03:01:08 +00:00
Mark Crane 6c8c9becd8 Change the provisioning variables slightly this change affects. 2014-01-23 21:43:44 +00:00
Philippe Rioual 72b80314e2 fixed some french translations issues 2014-01-23 21:15:49 +00:00
Mark Crane d11ebf2e2d Add admin_password and user_password to all of the grandstream phones. 2014-01-23 05:26:53 +00:00
Nuno Miguel Reis 8f1f5d4130 registrations panel reboot options (extended) 2014-01-22 21:39:27 +00:00
Mark Crane bf831a7bf5 Fix a bug with fax_success in a few places it was set to numeric 0 but used in an IF statement as a string. Fax retry worked in many situations but this bug prevented it from working all the time. 2014-01-21 21:55:38 +00:00
Nuno Miguel Reis 25b6b34f41 pt-ring 2014-01-21 18:03:05 +00:00
Mark Crane 64b391c145 Set provisioning variables use device_key_type as a prefix if it was provided. 2014-01-21 14:57:10 +00:00
Nuno Miguel Reis 2c234068d4 call_block app fixed 2014-01-21 05:40:01 +00:00
Nuno Miguel Reis fefc71617e fixed to be used like this: lua/luarun app.lua call_block C 2014-01-21 05:12:57 +00:00
Nuno Miguel Reis b581096c2f added missing references 2014-01-21 04:33:54 +00:00
Nuno Miguel Reis e932053c14 fixed dialplan copy 2014-01-21 04:22:10 +00:00
Nuno Miguel Reis f686dc4de8 fixed bug with file handle 2014-01-21 04:22:02 +00:00
Nuno Miguel Reis 25f5868a4f removed utf8encode not needed after all (local bug was causing the issues elsewhere) 2014-01-21 03:25:56 +00:00
Nuno Miguel Reis d359c048f6 added new log function 2014-01-20 21:55:36 +00:00
Nuno Miguel Reis bd06d75b4a added protection by encoding in utf8 2014-01-20 21:22:24 +00:00
Mark Crane eeb1097fd5 add message to devices app_languages.php 2014-01-20 20:04:24 +00:00
Mark Crane 004ee3e990 Make the device edit page one form. Adding a new record or editing anything and then press save will save everything. 2014-01-20 18:00:45 +00:00
Mark Crane 730a26a13d Add provision/resources/classes directory 2014-01-20 17:56:19 +00:00
Mark Crane 06f5662134 Setup a way variable for an altnerative template directory. Set the variable in advanced -> default settings, category: provision, subcategory: template_directory, type: text, value: /var/lib/fusionpbx/templates/provision
The appropriate path to the alternate provisioning directory is dependent on the operating system. The one given in this example is correct for debian and ubuntu server.
2014-01-20 11:43:19 +00:00
Mark Crane 116bd38720 Add admin_name, admin_password, user_name, user_password, var_name, and var_password variables to the yealink common config file. 2014-01-20 11:21:42 +00:00
Mark Crane 6ab865958c Device Edit, Use the new ORM for the database access, adjus the column width of some of the form elements, structure the POST into a two dimensional array, remove the submit from the array. Move the database requests before the content rather than inside the content. 2014-01-20 09:34:04 +00:00
Mark Crane be442661c9 Add a new object relational model class and make the dialplan edit use for add and edit. 2014-01-19 13:09:17 +00:00
Mark Crane 1316745483 Database class change $this->name to $this->db_name 2014-01-19 13:06:27 +00:00
Mark Crane e37e71484f Remove a redundant include. 2014-01-19 03:15:16 +00:00
Mark Crane 7a84d342ec Add a PHP class autoloader spl_autoload_register. 2014-01-19 01:30:10 +00:00
Mark Crane 31a386b81d Truncate the default settings value in the list view so the page width is reasonable. 2014-01-17 19:42:14 +00:00
Mark Crane edea6d0772 Fix a bug created by another developer cannot set dial string to user/1001 when the extension that was called is user/1001. 2014-01-17 18:33:11 +00:00
Mark Crane 2c347a2e91 Fix the dialplan delete atomic transaction. 2014-01-17 03:04:26 +00:00
Nuno Miguel Reis 975d1bd561 menu fixing utf8 and ring groups pt-ring option 2014-01-16 23:30:56 +00:00
Richard Neese e247c7f8a2 fix cisco 504g template 2014-01-16 22:55:50 +00:00
Mark Crane be8bd9ea24 Add lines between the translations to sip status. 2014-01-16 20:23:46 +00:00
Mark Crane 9b48890f2b Add spacing between the translations. 2014-01-16 20:14:33 +00:00
Mark Crane b411597473 Change the 'Dialplan Add' to 'Dialplan' 2014-01-16 19:59:26 +00:00
Mark Crane f4b6e939f8 Change the 'Dialplan Add' title to 'Dialplan' 2014-01-16 19:52:04 +00:00
Mark Crane edcaf540b2 When adding an dialplan default it to order number 200. 2014-01-16 19:41:06 +00:00
Mark Crane 5c6c87c93a Set the outbound routes default order to 100. 2014-01-16 19:31:08 +00:00
Mark Crane a2e534cac2 Set inbound routes default order to 100, and time conditions to 300. 2014-01-16 19:20:48 +00:00
Mark Crane 5632a79dff Fix the api key label. 2014-01-16 18:44:22 +00:00
Mark Crane 0fa3dcba3a Update Cisco SPA provisioning templates to get the key assignment working. 2014-01-15 23:53:25 +00:00
Mark Crane 8d7b646ada Fix the domain name for provisioning. 2014-01-15 22:07:40 +00:00
Mark Crane 1479d157ca Add static to the device method to get rid of strict message. 2014-01-14 01:50:19 +00:00
Mark Crane 3cf0a25f7d Add app/dialplan/ to the dialplan class path. 2014-01-13 14:34:13 +00:00
Mark Crane 7661cf907a Move the dialplan class to the dialplan/resources/classes directory. 2014-01-13 14:21:27 +00:00
Mark Crane bcee9b0fef Add dialplan/resources/classes directory. 2014-01-13 14:19:50 +00:00
Mark Crane 04b0b895d4 Change the dialplan order number for global to 000. 2014-01-12 07:51:06 +00:00
Mark Crane 01ae20a0c3 Add the translation for the Message header when saving the dialplan. 2014-01-12 07:18:15 +00:00
Mark Crane 978195f8eb Add a save button to the top of the ivr menu edit. 2014-01-12 07:12:29 +00:00
Mark Crane 6304400000 Add a save button to ring group edit. 2014-01-12 07:12:08 +00:00
Mark Crane bf3687bd68 Set the default order number for Queues. 2014-01-12 07:03:13 +00:00
Mark Crane 80a1fb3284 Add a 'save' button to the top of the device edit page. 2014-01-12 06:38:28 +00:00
Mark Crane 587849eb38 Adjust the width so it looks better in google chrome. 2014-01-12 01:01:28 +00:00
Mark Crane 187b52ebef Update dialplan/dialplan_edit.php adjust the widths of the fields, change a few to input type text, make the add fields visible by default. 2014-01-11 22:55:54 +00:00
Mark Crane 60e735d51c Move save before copy in dialplan/dialplan_edit.php, 2014-01-11 06:12:55 +00:00
Mark Crane 0e0ba91c09 Add the profile to the sip registrations. 2014-01-11 06:07:24 +00:00
Mark Crane 554402fddf Add a refresh button for status -> registrations. 2014-01-11 06:00:59 +00:00
Mark Crane 0a991081bf Add a save button to the top of the Dialplan edit. 2014-01-11 05:52:26 +00:00
Mark Crane 2861c94c58 Improve the dialplan manager so that it looks nicer and is faster to make changes. This change effects the dialplan manager, inbound routes, outbound routes, time conditions, and queues. 2014-01-10 23:58:42 +00:00
Mark Crane 4937c19503 Rename another one of the php files to fit the naming convention. 2014-01-10 23:52:15 +00:00
Mark Crane 07e51b5500 Rename one of the php files to fit the naming convention. 2014-01-10 23:51:44 +00:00
Mark Crane fded4c3057 Make the destination number required for time conditions. 2014-01-10 05:23:46 +00:00
Mark Crane 8de1e8b28e Correct the method used to get the domain name from the HTTP Host. Fix the method to get the Mac address from the HTTP_USER_AGENT needed to make the Yealink common file work. 2014-01-09 22:17:09 +00:00
Mark Crane 39c78973ed Uppercase some of the SQL statements, and fix the $mac address. 2014-01-09 07:36:11 +00:00
Mark Crane 95666c93e6 Set the Yealink -> live dialpad option to enabled in the common config. 2014-01-09 03:39:22 +00:00
Mark Crane bce688667d Update the app.lua script. 2014-01-09 03:04:28 +00:00
Mark Crane a13703544b Fix TLS option for the sip transport. 2014-01-09 02:35:29 +00:00
Mark Crane e820c30b73 Force the sip transport to lower case. 2014-01-09 02:02:03 +00:00
Mark Crane 1a1d6bef06 Change the default setting to another method. 2014-01-09 01:28:21 +00:00
Mark Crane 1929894376 Refer to the device class and set change the sip port default. 2014-01-09 01:24:36 +00:00
Mark Crane 19c30f3614 Improve the method to determine a default sip port number. 2014-01-09 01:07:57 +00:00
Mark Crane 9709c9f1c4 When editing a device return to the edit page rather than the list. 2014-01-08 20:07:02 +00:00
Mark Crane bf69ce48a9 Fix the back button on the device key edit page. And fix disabled select option. 2014-01-08 19:54:33 +00:00
Mark Crane 4a1b43c818 Add event_notify lua script. 2014-01-08 09:15:35 +00:00
Mark Crane 86995075c3 Add a new option to reboot phones via registrations over sip notify. 2014-01-08 09:08:48 +00:00
Mark Crane 748c6baef7 Update a few more things. 2014-01-08 01:34:15 +00:00
Mark Crane f8b504ebf6 Change the old provisioning syntax to the new syntax. 2014-01-08 01:30:30 +00:00
Mark Crane 4dbae6ee5d Fix ring groups for originate_disposition add 'failure' 2014-01-07 06:25:16 +00:00
Mark Crane 888b9fba15 Add 0 option to the select list for line number on the device edit page. 2014-01-05 10:42:11 +00:00
Mark Crane 3fbcc7580d Add 0 option to the select list for line number on the device edit page. 2014-01-05 10:39:40 +00:00
Mark Crane a93bd4c55d Order the device by line number in the accounts -> extensions page. 2014-01-05 10:32:09 +00:00
Mark Crane c43505cc20 When adding a device add the auth_id. 2014-01-05 10:24:01 +00:00
Mark Crane ceb4ce58e5 Add yealink t42g, and t46g templates. 2014-01-05 10:17:42 +00:00
Mark Crane 763e13abee Update yealink auth_name 2014-01-05 10:16:40 +00:00
Mark Crane 4642de0439 Correct the common config file name for yealink vp530. 2014-01-05 07:21:36 +00:00
Mark Crane ebcfac2af2 Add the p to the template name. 2014-01-05 07:04:05 +00:00
Mark Crane b6da7f446c Add the p to the template name. 2014-01-05 07:03:45 +00:00
Mark Crane e8e4c563f2 Add the p to the template name. 2014-01-05 07:02:53 +00:00
Mark Crane 17496d89df Add the p to the template name. 2014-01-05 07:02:30 +00:00
Mark Crane edd612377f Update the yealink common file for the t28p 2014-01-05 06:56:05 +00:00
Mark Crane 97a18e1273 Update the yealink common file for the t26p 2014-01-05 06:54:51 +00:00
Mark Crane 3e9e13bc82 Update the yealink common file. 2014-01-05 06:53:59 +00:00
Mark Crane 70650741c3 2014-01-05 06:52:17 +00:00
Mark Crane fb2f57aeb2 Fix permissions checks that were missed in ring_groups.php 2014-01-04 07:45:06 +00:00
Mark Crane 975367a491 Add ring groups menu permission for users in the admin group. 2014-01-04 07:16:05 +00:00
Mark Crane 1f93326188 Add the missing {/if} 2014-01-04 05:58:22 +00:00
Mark Crane ad697b610e Fix the yealink memory keys 2014-01-04 05:50:41 +00:00
Mark Crane a3c935228f Add device key extensions to the device keys table. 2014-01-04 04:40:40 +00:00
Mark Crane 020178a21b Update the yealink templates for key line and extension options. 2014-01-04 01:48:58 +00:00
Mark Crane 287abfe573 Dev Branch: Conference center fix the domain_uuid. 2014-01-04 00:11:09 +00:00
Mark Crane d92e0211a9 Add device key extension for yealink. Add a device class. 2014-01-03 23:11:42 +00:00
Mark Crane 857d81b148 Change log messages from [conference] to [conference center] 2014-01-03 21:04:37 +00:00
Mark Crane 46a068e660 Dev branch, Fix conference center by adjusting the database connection. 2014-01-03 21:02:21 +00:00
Mark Crane 786242e24d Use the correct database connection object. 2014-01-03 20:07:36 +00:00
Mark Crane 08c772cde4 Add device_key_line 2014-01-03 08:05:46 +00:00
Mark Crane 88ce88cb26 Update the provisioning key assignment so that it will work for yealink phones. 2014-01-03 02:55:16 +00:00
Mark Crane ef641b96ee Order the keys by the key number so they appear in logical order in the template. 2014-01-03 01:23:55 +00:00
Mark Crane b85e1e673c Fix register expires on spa508g. 2014-01-02 23:32:34 +00:00
Mark Crane a5a56a95a6 Add an order by to the devices page so that the position doesn't move around. 2014-01-02 23:20:15 +00:00
Mark Crane ea6bdc7285 Update Cisco SPA sip_transport, sip_port, and register_expires. 2014-01-02 23:06:25 +00:00
Mark Crane b3d8e3402e SPA provisioning set Resync_Periodic to 0 for linksys devices. 2014-01-02 21:01:55 +00:00
Mark Crane d4942f5236 SPA provisioning set Resync_Periodic to 0. 2014-01-02 20:59:24 +00:00
Mark Crane 4db67e3553 Remove -c client_min_messages=NOTICE for maximum compatibility. 2014-01-02 18:59:40 +00:00
Mark Crane 3149cd2665 Add a select list for all yealink types. 2014-01-02 01:14:43 +00:00
Mark Crane 2ef175f015 Add the key assignment to the yealink templates. 2014-01-01 08:54:03 +00:00
Mark Crane 97b05be66c Make the device keys array available to the template. 2014-01-01 06:50:15 +00:00
Mark Crane 1d20ccd032 Don't add new users to the 'user' group. 2014-01-01 06:49:14 +00:00
Mark Crane 8ced624a30 Update the key references for ring groups. 2013-12-31 10:40:38 +00:00
Mark Crane 20145d39d1 Add an include to ensure the domains class exists. 2013-12-30 16:03:29 +00:00
Mark Crane ca7d7244f3 Fix the insert for the new field. 2013-12-29 06:55:39 +00:00
Mark Crane ad17a3e5dc Add the missing column to device edit. 2013-12-29 06:49:28 +00:00
Mark Crane 2d889a0e8d Add Device Key Category. 2013-12-29 06:47:25 +00:00
Mark Crane 5d01e8f176 Add the license to the device keys. 2013-12-29 05:20:51 +00:00
Mark Crane 477f10b0dd Remove test code on the device key edit. 2013-12-29 05:00:56 +00:00
Mark Crane d9f7333eed Provisioning, Only check the CIDR if its provided. 2013-12-28 22:02:57 +00:00
Mark Crane 9f2f19ea16 Require the device_setting_add permission to see the settings on the devices page. Require the device_key_add or device_key_edit permission to see the the key information on the devices page. 2013-12-27 20:52:38 +00:00
Mark Crane a70942180d Add an option for the user accounts to be globally unique. 2013-12-27 18:24:57 +00:00
Mark Crane 343e1ed3a5 If user is set to be globally unique then hide the auto generate user option as it won't be unique per domain. 2013-12-27 18:18:50 +00:00
Mark Crane 721c5c058e Change msgerror to msg. 2013-12-27 18:09:42 +00:00
Mark Crane ce37b50d54 Fix this error: [ERR] freeswitch_lua.cpp:374 DBH NOT Connected. Caused by releasing DBH which is done in the parent script. 2013-12-24 16:25:16 +00:00
Mark Crane 0d20da4410 Provision, Check to see if the IP Address is in the CIDR range.
category: provision, subcategory: cidr, type: text, enbaled: true, value: could be a single ip address or a range. 
Example: 
10.8.0.1/32 (single ip)
10.8.0.0/24 (allow all the IP addresses from 10.8.0.0-255 in the 10.8.0 subnet. 
0.0.0.0/0 (allow all ip addresses)
2013-12-23 21:28:04 +00:00
Mark Crane 71e20182b6 Check if provisioning has been enabled. It can needs to be enabled globally in advanced -> default settings or per domain in advanced -> domains.
category: provision
subcategory: enabled
type: text
value: true
enabled: true
2013-12-23 21:13:45 +00:00
luis daniel lucio quiroz 1c27162779 previous changes reverted, agreed with mcrane 2013-12-23 20:21:25 +00:00
James Rose 96557e673a changed context to domain_name for single tenant. Would come back as default and parked as park@1.2.3.4 2013-12-23 18:14:14 +00:00
luis daniel lucio quiroz fc126bcea3 database_host nil prevention 2013-12-23 00:39:02 +00:00
luis daniel lucio quiroz 0652016ad7 dialed_extension assigned before showing 2013-12-23 00:34:34 +00:00
luis daniel lucio quiroz 7e0b913dc1 fix a dbh sintax that fails in some servers, seems old sintax is not supported 2013-12-23 00:29:54 +00:00
luis daniel lucio quiroz aa69e59b0c dialed_extensions was nil when coming from ringing group 2013-12-22 19:06:00 +00:00
Mark Crane d69e4983f9 Correct the variables in the Cisco SPA122 template. 2013-12-22 07:33:03 +00:00
Mark Crane 171f1adbf2 Update the Yealink t20, and t22 provisioning files and add the t32g, t38g, and vp530. 2013-12-22 07:07:33 +00:00
Mark Crane 9176d08ba1 Provisioning - Add key assignment, fix vertical spacing on some of the templates, trailing spaces, fix the dialplan and disable Group_Paging_Script tag which uses extension 800. 2013-12-21 20:24:17 +00:00
Mark Crane a8c3cf908a Update the Cisco spa504g provisoning template. It is now the first to use the key assignment. 2013-12-21 16:49:01 +00:00
Mark Crane fc9bb3b0e6 Time to make the key assignment work for provisioning. 2013-12-21 16:44:42 +00:00
Mark Crane eb8b59ddb6 Accounts -> Devices, adjust the width of the lines, keys, and settings. 2013-12-21 16:41:44 +00:00
Mark Crane a177f2bc71 Remove the log line that isn't needed anymore. 2013-12-21 16:18:54 +00:00
Mark Crane 6b7df75377 Conference Center. Fix a permissions and change the profile to a text box for more flexibility. 2013-12-21 16:14:42 +00:00
Mark Crane 3c34cebcac Change the valet timeout to 90 seconds. 2013-12-21 01:48:19 +00:00
Mark Crane a4a130092d Move it a little more. 2013-12-20 23:31:36 +00:00
Mark Crane e9d27f5927 Move the copyright notice a little farther down the page. 2013-12-20 23:15:18 +00:00
Mark Crane 12a3d26e28 Move the copyright notice farther down the page. 2013-12-20 23:12:28 +00:00
James Rose fd0bf88d47 fixed var name referred_by_user 2013-12-20 22:41:55 +00:00
Mark Crane 6a0ca57fdc Update valet park. 1. Set the orbit extension to return the call to the original extension that referred it if the call is not answered before the timeout. 2. If the parking lot is occupied return the call to the extension that tried to park it. Team effort by Gill, James, and Mark. 2013-12-20 22:15:18 +00:00
Mark Crane b0c6deb3fd Fax list move the name before the extension. 2013-12-20 05:58:25 +00:00
Mark Crane 74419e9335 Fix the order of the fax list. 2013-12-20 05:52:51 +00:00
Mark Crane 7b125bbbc5 Fix provisioning device line edit account for sip expire and port fields are numeric. 2013-12-19 21:55:45 +00:00
Mark Crane 7fcf88cabf Fixed accounts -> extensions device model and description in the select list. 2013-12-19 21:20:04 +00:00
Mark Crane 1a6d4e9740 Fix duplicate items in the menu that occur when saving an item in the menu. 2013-12-19 19:15:26 +00:00
Mark Crane 721c5d944b Fix the update to the call center dialplan. 2013-12-19 10:04:37 +00:00
Mark Crane b08017bbc3 Update the enhanced and nature themes so that the 'Message' looks better for the IVR Menu and other features in the future. 2013-12-19 09:26:22 +00:00
Mark Crane 5a1c249134 Add vertical spacing to app_languages.php to make it more readable and add message translations. 2013-12-19 09:20:55 +00:00
Mark Crane eeb560dbf6 When adding an extension allow the voicemail password to be defined. If it is left empty then a random voicemail password is created. 2013-12-19 08:29:36 +00:00
Mark Crane 9f85e932d3 IVR Menu change make sure to update the dialplan xml file after an update. 2013-12-18 23:20:14 +00:00
Mark Crane e8dbf586f5 Fix the table header order links so they maintain the app_uuid in the link. Remove the <strong> tag as it should be handled with the title CSS class. 2013-12-18 08:54:03 +00:00
Mark Crane 836c2be884 Add Trim the ivr menu option digits to prevent spaces in the ivr menu options causing problems with the IVR Menu. (Apply to the dev branch) 2013-12-18 06:37:06 +00:00
luis daniel lucio quiroz 5e75926f34 follow me and forward now have balancing support 2013-12-18 02:04:32 +00:00
Mark Crane 342a3fc202 Remove "feature code" text from the description on IVR Menu direct dial. 2013-12-18 00:51:43 +00:00
Mark Crane afa8fe1e98 Add Cisco spa508g template. 2013-12-17 22:42:20 +00:00
Mark Crane 3bfcf41eac Add Cisco spa514g template. 2013-12-17 20:03:40 +00:00
Mark Crane 399a43804d Add a new table v_device_keys which is used to assign the buttons to lines, blf, park and more. Also add sip port, sip transport and register expires to device lines. 2013-12-17 16:19:54 +00:00
Mark Crane cd67df8706 Default Extension enabled to true for those that don't have the new extension_enabled permission. 2013-12-16 21:56:19 +00:00
Mark Crane 33f65c3b93 Translate the gateway uuid into the name and domain name on the SIP Status page. 2013-12-16 19:37:06 +00:00
Mark Crane 8d6ac2709e Add a new permission to control whether a user is allowed to enable or disable an extension. 2013-12-14 00:50:57 +00:00
Mark Crane cc51673863 Add and update sip port, transport and sip expires on spa112 and spa504g 2013-12-10 22:56:49 +00:00
Mark Crane 07751e8a4e Fix the delete button on domain setting delete link by removing the 's'. 2013-12-10 18:26:24 +00:00
Mark Crane 1756c8928b Fix the domain setting back button by removing the 's'. 2013-12-10 18:22:12 +00:00
Mark Crane dedfa5a8ad Add port and transport to the SPA112 template. 2013-12-10 18:06:07 +00:00
Mark Crane 1b74c8ec05 Fix the provision password. 2013-12-10 16:22:00 +00:00
Mark Crane 80663a7f52 Add device settings to the dynamic provisioning. Remove the code referring to the device extensions. Update some of the indentation. 2013-12-10 16:06:14 +00:00
Mark Crane 5b2a187bc7 Move device settings into device edit simplify the interface and make it faster to setup provisioning. 2013-12-10 15:05:16 +00:00
Mark Crane b5c09c7934 After adding or editing a device setting redirect back to device_edit.php. 2013-12-10 14:00:54 +00:00
Mark Crane 5e794bd6b8 Correct the name of the device setting edit php file. 2013-12-10 13:56:48 +00:00
Mark Crane 89758bce16 Correct the name of the device setting delete php file. 2013-12-10 13:56:10 +00:00
Mark Crane 134f93ae0c Remove provisioning_list from extension copy. 2013-12-09 18:39:57 +00:00
Mark Crane 729261dac6 Remove the deprecated voicemail fields from the copy extension. 2013-12-09 16:33:19 +00:00
Mark Crane f90de3b6ed Thought of a better way... use the arrow next to the device select list to change the select to an input box. 2013-12-08 09:00:33 +00:00
Mark Crane 4ad0806c7f Add device mac address select with an option to define provide the mac address with 'other'. 2013-12-08 08:30:16 +00:00
Mark Crane 3fc22fe724 Add the rest of the Grandstream provisioning files. 2013-12-07 03:06:02 +00:00
Mark Crane a643c72b62 Change the RTP packet size <RTP_Packet_Size group="SIP/RTP_Parameters">0.020</RTP_Packet_Size> 2013-12-07 01:30:19 +00:00
Mark Crane d97804c6b3 Change the default seconds for call center queue option tier rule wait second. 2013-12-06 19:20:44 +00:00
Mark Crane 9419994a60 Fix that code that writes the gateway xml to the file system so that it will use the gateway uuid for the filename and gateway name. Benefit of using the XML is that it is a major step closer to renaming tenants, or changing the gateway name without hurting the outbound routes. 2013-12-06 12:36:52 +00:00
Mark Crane e7386519ce Change the gateway name to gateway_uuid in the XML handler. 2013-12-06 08:26:55 +00:00
Mark Crane e6f87a8d51 Change gateway name to gateway uuid. 2013-12-06 08:12:48 +00:00
Mark Crane 54076707b0 Status -> SIP status change the gateway name and link it back to Accounts -> Gateway -> Edit. 2013-12-06 05:56:24 +00:00
Mark Crane 9ac83876d8 Get rid of a trailing white space in voicemail/index.lua 2013-12-04 18:15:34 +00:00
Mark Crane c923044e1a Remove a trailing space from dial_string.lua 2013-12-04 18:06:07 +00:00
Mark Crane 7338cbc9af Adjust the voicemail_authorized if statement. 2013-12-04 17:24:44 +00:00
Mark Crane 2a7d819f64 Add voicemail_authorized variable as an option set it up to work with for *97 and *4000. When you check voicemail then press * it prompts for the password or if *98 is dialed it asks for the password. 2013-12-04 17:07:34 +00:00
Mark Crane 44766475bf Add per leg ring group domain name control. Contributed by Daniel Lucio.
dest1:  100
dest2:  999@otherdomain
dest3: 555
2013-12-04 08:14:40 +00:00
Mark Crane f954b37334 Remove a file_exists where it didn't belong. 2013-12-01 07:17:28 +00:00
Mark Crane bdb3d644bf Fix the scripts to copy missing freeswitch scripts again. 2013-12-01 06:56:55 +00:00
Mark Crane c873301912 Add app.lua dialplan to the global dialplan and set call direction to disabled. 2013-12-01 05:22:25 +00:00
Mark Crane e427602f92 Change the order to 245_page.xml to 250_page.xml. 2013-12-01 05:10:29 +00:00
Mark Crane 500b1bef21 250_global.xml to 100_global.xml 2013-12-01 05:09:12 +00:00
Mark Crane 37a1a08390 rename 100_call-direction.xml to 110_call-direction.xml 2013-12-01 05:08:25 +00:00
Mark Crane 99dad4afa8 Add the dialed_extension to ring groups. 2013-12-01 03:59:06 +00:00
Mark Crane 669c1a390a Add scripts/app/dialplan accessible with action: lua data: app.lua dialplan 2013-12-01 03:46:04 +00:00
Mark Crane 336acc33bc Fix sip status -> rescan, start, stop, restart and flush inbound registrations. 2013-11-29 19:32:09 +00:00
Mark Crane 2997c0a8f1 Fix the gateway cache add the hostname and increase the security. 2013-11-27 16:47:06 +00:00
Mark Crane 4227ae1199 Add device and device line data to the database from accounts -> extensions. 2013-11-26 20:16:21 +00:00
Mark Crane 9ea4002831 Provisioning fix some spelling errors, a few other minor modifications. 2013-11-26 20:09:56 +00:00
Mark Crane 5a41db99c7 Fix a minor bug in ring groups. 2013-11-26 19:59:46 +00:00
Mark Crane 1a0ec3ad02 Fix the call center extension list.
Reported as https://code.google.com/p/fusionpbx/issues/detail?id=510&start=100
2013-11-26 17:04:00 +00:00
Mark Crane 5f02276930 Remove provision device_extensions table in favor of the device_lines table. Set the mac address, line, and template from extensio edit php file. 2013-11-26 10:14:38 +00:00
Mark Crane 03104413fa Yealink t22 and t38g set account.1.transport = 1 for TCP. 2013-11-26 07:57:40 +00:00
Mark Crane 546a694367 Fix the label for conferences pt-pt which caused a problem for en-us. 2013-11-25 23:25:08 +00:00
Mark Crane 8696e82b8c Remove dbh:release(); from directory.lua because its done in the parent script after this script completes. 2013-11-25 20:56:27 +00:00
Mark Crane 202042fa38 Change menu class method restore2 to restore_all. Remove group permissions from restore (Restore Default) and leave in restore_all (Restore All) 2013-11-24 01:35:37 +00:00
Mark Crane e3e79f9807 Add PDO::FETCH_ASSOC to the fetchAll in the voicemail class. 2013-11-24 01:09:10 +00:00
Mark Crane baaec45d10 Provisioning fix device_setting_category and device_setting_subcategory schema definitions. 2013-11-24 00:35:02 +00:00
Mark Crane 32df6f40d9 Improve the efficiency of the Menu PHP class by removing redundant code in the restore method of the PHP class and add PDO transactions. Improve the menu language for better multi-lingual support, escape the menu item title to so it will work correctly for French and other languages. 2013-11-24 00:15:02 +00:00
Mark Crane 1c2303b01f Add Grandstream GXP140x and GXP1450 templates. 2013-11-23 06:07:02 +00:00
Mark Crane 9d523e1708 Add templates for the Cisco spa122, spa501g, and spa509g. Thanks Keng for providing these templates. 2013-11-23 06:04:55 +00:00
Mark Crane 725479e4c0 Add templates for the Cisco spa301, spa502g, and spa512g. 2013-11-23 05:43:11 +00:00
Mark Crane e64b57fa34 Fix a few more voicemail gui issues: make sure the back button returns to the correct page, fix the redirect after deleting a voicemail. Fix the voicemail delete mp3 files or other sounds files other than wav or mp3. 2013-11-23 04:19:37 +00:00
Mark Crane 6743cc2ce1 Refactor voicemail messages. 2013-11-22 15:26:10 +00:00
Mark Crane de432c8077 Provisioning add Granstream gxp21xx, ht701, and a minor update to dp715. 2013-11-21 00:45:17 +00:00
Mark Crane 29199f2555 If the voicemails page is shown to users own show them voicemail boxes that are assigned to them. 2013-11-20 22:27:56 +00:00
Mark Crane aaa7d86331 On the voicemail messages page hide the greetings and settings buttons if the user doesn't have the correct view permission. 2013-11-20 20:24:50 +00:00
Mark Crane a4bdce99ea Add a missing if statement: if (conference_hostname ~= local_hostname) then
Contributed by Luis Daniel Lucio
2013-11-20 07:35:38 +00:00
Mark Crane 888a9470ce Check the hostname for conference center. 2013-11-20 06:14:18 +00:00
Mark Crane fd9c4ffada config.php can be located in /etc/fusionpbx this change makes it use that location during install if it exists. Thanks Richard Neese who reported this error and the solution. 2013-11-19 16:15:00 +00:00
Mark Crane 849f2d05e3 Edge case fix ring group when an extension is not registered. 2013-11-19 05:59:47 +00:00
Mark Crane f642264999 Change the data type for sip_profile_hostname to char. 2013-11-18 17:16:38 +00:00
Mark Crane c5c8eabf5f Add a additional debug information and fix some problems in directory.lua. 2013-11-17 11:44:02 +00:00
Mark Crane 2d9905cc93 Fix the template dp715 so it will work with the template engine changes. 2013-11-16 23:56:40 +00:00
Mark Crane f6a035b4f0 Rename the provisioning file so that it is valid for the template engine. 2013-11-16 23:46:01 +00:00
Mark Crane 4dd561150f Fix the case sensitivity of the fax file extension. Applied to the dev branch.
http://code.google.com/p/fusionpbx/issues/detail?id=503&start=100
2013-11-16 17:10:27 +00:00
James Rose b1755ea39e Add provisioning template for the Grandstream DP715 Dect phone. 2013-11-15 21:10:30 +00:00
Mark Crane 1a766efaf3 Hide the gateway copy button when adding a gateway. 2013-11-15 04:20:56 +00:00
Mark Crane 9893121db5 Set retry_seconds default to 30 instead of 60. 2013-11-15 04:05:34 +00:00
Mark Crane b3070125f3 Gateway edit set a default register value of true. 2013-11-15 03:49:18 +00:00
Mark Crane 6e9a5eb3d1 Add a bridge option to the destination select list. 2013-11-14 09:38:17 +00:00
Matt Putnam 8a86537b7a 2013-11-14 02:16:11 +00:00
Matt Putnam 04a76589ce Added device_settings.php, device_settings_delete.php, and device_settings_edit.php as well as modified app_config.php and app_languages.php to include the new labels and permissions. 2013-11-14 01:48:37 +00:00
Mark Crane a9f39f7930 If there the hostname is an empty string set the value to null. 2013-11-13 18:34:11 +00:00
Mark Crane ad1303db5a Added contributor name that provided hostname. 2013-11-13 18:05:13 +00:00
Mark Crane a66daa3451 Fix alignment on the add button for the sip profile list. 2013-11-13 08:28:35 +00:00
Mark Crane ab5279ee3c Make sofia.conf.lua hostname backwards compatible. 2013-11-13 08:26:18 +00:00
Mark Crane ee456b8a16 Move sip profile hostname to the v_sip_profiles table. 2013-11-13 07:54:05 +00:00
Mark Crane 67202ddb6e Adjust the memcache variable used for sip profiles. 2013-11-12 23:43:45 +00:00
Mark Crane 316ac96b7e Dialplan increment the colspan number. 2013-11-12 19:37:17 +00:00
Mark Crane df635df21e Add context to the list of dialplans. 2013-11-12 19:32:15 +00:00
Mark Crane 38c48cf07b Set the database type to text for Postgres. 2013-11-12 19:28:45 +00:00
Mark Crane 8ba965ff31 Add hostname to sofia.conf.lua 2013-11-12 16:09:07 +00:00
Mark Crane 31f2d565bf Add hostname to sip profiles. 2013-11-12 15:56:26 +00:00
Mark Crane 55691db77d Add reverse-auth-lookup to the xml handler script. 2013-11-12 08:44:32 +00:00
Mark Crane 95c2bb17e3 Check the local hostname in the xml handler. 2013-11-12 08:43:13 +00:00
Mark Crane 6b47cfff03 Set the default provisiong engine. 2013-11-12 04:53:15 +00:00
Mark Crane 1501d78a1b Add the uppercase Twig to the template class. 2013-11-12 04:39:54 +00:00
Mark Crane d74c60e5c1 Rename twig to Twig to get it working. 2013-11-12 04:37:38 +00:00
Mark Crane 72944f1976 Fix the path for raintpl and remove some trailing spaces and extra tabs. 2013-11-11 20:17:50 +00:00
Matt Putnam e0639901fa added code to stop raintpl from eating \r on new lines for yealink and similar phones. 2013-11-11 06:53:51 +00:00
Matt Putnam c56b335cfb updated $view to use the new init function. 2013-11-10 16:55:43 +00:00
Matt Putnam 275b387641 2013-11-10 16:54:18 +00:00
Matt Putnam 84024f689c 2013-11-10 16:51:48 +00:00
Mark Crane b1599f7046 Adjust the provisioning for the new filename {$mac} syntax. 2013-11-10 07:26:18 +00:00
Mark Crane eec49f72a4 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:20:27 +00:00
Mark Crane 96ff030ad7 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:19:50 +00:00
Mark Crane 2ed1eae7da Change the file name {v_mac} variable to {$mac} 2013-11-10 07:19:11 +00:00
Mark Crane e0863cd6b9 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:18:41 +00:00
Mark Crane 37cbaf16d0 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:18:02 +00:00
Mark Crane 61e5187b1c Change the file name {v_mac} variable to {$mac} 2013-11-10 07:17:09 +00:00
Mark Crane 2e177a8fba Change the file name {v_mac} variable to {$mac} 2013-11-10 07:16:39 +00:00
Mark Crane d23f90c66f Change the file name {v_mac} variable to {$mac} 2013-11-10 07:16:03 +00:00
Mark Crane 4f618cd5ac Change the file name {v_mac} variable to {$mac} 2013-11-10 07:15:12 +00:00
Mark Crane 8dd5aab008 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:14:44 +00:00
Mark Crane 4d515633bd Change the file name {v_mac} variable to {$mac} 2013-11-10 07:14:03 +00:00
Mark Crane 7a3e612290 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:13:25 +00:00
Mark Crane 8018707875 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:12:55 +00:00
Mark Crane 6dd5faccc7 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:10:43 +00:00
Mark Crane fd5e7371e8 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:10:06 +00:00
Mark Crane 7c37d10f12 Change the file name {v_mac} variable to {$mac} 2013-11-10 07:09:36 +00:00
Mark Crane 6cee6669ad Change the file name {v_mac} variable to {$mac} 2013-11-10 07:08:29 +00:00
Mark Crane 60782a0eba Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:07:33 +00:00
Mark Crane 73caa8c1bb Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:07:06 +00:00
Mark Crane 3e48847069 Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:06:35 +00:00
Mark Crane d3feaaa49a Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:06:08 +00:00
Mark Crane 473f183abd Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:05:39 +00:00
Mark Crane 4f535d3eb5 Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:04:47 +00:00
Mark Crane dd1ed9bd0e Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:04:05 +00:00
Mark Crane bcbcbe2ebc Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:03:37 +00:00
Mark Crane f435c573b0 Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:03:01 +00:00
Mark Crane 209dd56b30 Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:02:03 +00:00
Mark Crane 523a728047 Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:01:29 +00:00
Mark Crane 7eaecce9d9 Change the file name ${v_mac} variable to {$mac} 2013-11-10 07:00:33 +00:00
Mark Crane 82ff468297 Fix the file paths in the template engine. 2013-11-10 06:55:00 +00:00
Mark Crane 334c6e9d08 Update the dynamic provisioning to use the new template class. 2013-11-10 06:53:33 +00:00
Mark Crane 1e827beeed Add the template class. 2013-11-09 20:37:46 +00:00
Mark Crane 9cc94dc643 move raintpl into templates/engine 2013-11-09 20:08:02 +00:00
Mark Crane 5d232e0b38 Add smarty template engine. 2013-11-09 20:02:56 +00:00
Mark Crane be3b695670 Lower case for consistency to match the commands. 2013-11-09 07:24:55 +00:00
Mark Crane 73a44c4645 Add memcache flush and improve indentation. 2013-11-09 07:09:33 +00:00
James Rose 5833d83ae7 fixed sending exten num to outbound calleees. Fixed presence bug (set presence for non-extension). Correct caller id num will show for internally generated calls and externally generated calls (inbound). Can also view presence ringing for devices set to follow to only an external (mobile) number. 2013-11-08 21:04:28 +00:00
Matt Putnam 9f4365ccfb updated variable {$server_name_line} to {$server_address_line} 2013-11-08 15:43:27 +00:00
Mark Crane ab54d3d068 Add new and old message count to the mwi event to the dev branch. 2013-11-07 23:49:09 +00:00
Mark Crane 429e6cc8b1 Hide destination caller_id_name and caller_id_number if outbound_caller_id_select permission is not set. 2013-11-06 15:50:57 +00:00
Mark Crane 9fdb33e40c Set the faxing dialplan back to single quotes. 2013-11-05 21:57:14 +00:00
Mark Crane 556e72d7e2 Add "NO_USER_RESPONSE" for ring groups. 2013-11-05 18:17:44 +00:00
Matt Putnam e30fc1c1b9 removed leading F 2013-11-05 16:55:28 +00:00
Matt Putnam 31211b0a59 2013-11-05 16:45:19 +00:00
Matt Putnam 7f9deea2f7 Added SIPDefault.cnf to Cisco/7940 config templates 2013-11-04 21:56:55 +00:00
Matt Putnam 71d4e1b246 2013-11-04 21:42:55 +00:00
Mark Crane dadaa196ac Fix the call center music on hold selected feature in the select list. 2013-11-04 21:28:40 +00:00
Mark Crane fcc40cd91d Fix the download for music on hold so it will show the file name as expected. 2013-11-04 18:47:10 +00:00
Mark Crane 20fbca15d0 Add line spacing between the translations for music on hold. 2013-11-04 18:44:24 +00:00
Matt Putnam c2d69d9057 Updated variables to use new RAINtpl defaults. 2013-11-04 18:40:55 +00:00
Matt Putnam 63d44912ec Updated Variables to the new RAINtpl standard 2013-11-04 18:38:53 +00:00
Mark Crane 1451dda549 Add call center ring tone music on hold options. 2013-11-04 18:18:10 +00:00
Mark Crane 5f89f149d2 Update translations for call center and fix a bug where the caller id prefix was used the pt-pt translation instead of en-us. 2013-11-04 16:09:11 +00:00
Matt Putnam e24700c02f Updated all variables to comply with raintpl. 2013-11-03 21:22:17 +00:00
Matt Putnam 59c772229d 2013-11-03 20:58:59 +00:00
Matt Putnam 16afd0cb7b 2013-11-03 20:58:24 +00:00
Matt Putnam 29e6e6893b Added raintpl class 2013-11-03 20:35:06 +00:00
Matt Putnam b13c2dd1f9 Updated to use raintpl instead of str_replace.
added include for raintpl
Replaced all instances of $file_contents = str_replace with $template->assign
set raintpl to output contents as string to $file_contents for header processing.
2013-11-03 20:31:42 +00:00
Mark Crane 5d0e30a632 Missed one. 2013-11-03 05:36:53 +00:00
Mark Crane 34e0f0f790 Remove 'Add' and 'Edit' no point in stating restating the obvious. 2013-11-03 05:35:05 +00:00
Mark Crane 9555a30608 Fix the regular expression for the outbound route for North America and International. 2013-11-03 05:20:08 +00:00
Mark Crane 21fc62cd55 Workaround for a MySQL bug with ring group destinations. 2013-11-02 06:45:30 +00:00
Mark Crane f51ad7f225 Add Yealink t38g provisioning template and then add line 2 to the the t22. 2013-11-01 23:17:30 +00:00
Mark Crane 39da29301e Fix a small bug with provisioning device_vendor make sure it is set to lower case. 2013-11-01 18:51:52 +00:00
Mark Crane 10881ae724 Fix an error that occurs on a few systems when adding a domain. 2013-11-01 15:50:49 +00:00
Mark Crane 5cde63191f Add line spaces between the different translations and add button-copy. 2013-10-31 17:52:56 +00:00
Mark Crane 7bdb8a3140 Fix the description on sip force expires. And change the page header from Extension Edit to Extension. 2013-10-31 17:10:49 +00:00
Mark Crane 70850538d8 Fix the fax server paging. 2013-10-31 03:48:08 +00:00
Mark Crane 8c8d447562 Fix a problem where the if the last phone ringing is not registered then the call ends with error user not registered. Fixed a problem where the last person rejects the call it would send a busy back to the caller rather than sending to the timeout action. 2013-10-31 01:08:45 +00:00
Mark Crane 964431d735 Update faxing dialplan entry to fix php_bin and use double quotes. 2013-10-30 18:41:43 +00:00
James Rose cd993de6e4 Debug Extension_UUID was crashing script (nil) 2013-10-30 15:15:55 +00:00
Mark Crane af8d5523cd Fix the pin number used in the dial string and switch session:execute for api:execute. Thanks soapee01 for reporting and helping with the bug. 2013-10-29 23:15:20 +00:00
James Rose 05ce025546 wrong directory 2013-10-29 22:47:50 +00:00
Mark Crane 4c6d3fc26a If there are no ring group destinations fix the timeout destination. 2013-10-29 22:20:36 +00:00
Mark Crane c364028d43 Fix the forward to extension option 8 in voicemail. 2013-10-29 20:54:54 +00:00
Mark Crane 00e4e9c7ac Fix the MAC address formatting for the Polycom provisioning files. 2013-10-23 21:20:07 +00:00
Mark Crane 25d9c9d164 Fix the line 2 password on the spa525g template. 2013-10-22 22:40:35 +00:00
Mark Crane 01f6858091 Fix a problem in xml_cdr for displaying a user's calls. 2013-10-22 15:30:00 +00:00
Mark Crane bb76e36387 If the $db_type variable has no value then don't write the config.lua script. 2013-10-22 03:18:28 +00:00
Nuno Miguel Reis 8d81f349f5 added html <strong> tag where missing 2013-10-17 22:07:25 +00:00
Nuno Miguel Reis a76f3c050d cleanup 2013-10-17 22:07:17 +00:00
Nuno Miguel Reis 54934396ad language translations for pt-pt and some other minor fixes and updates 2013-10-17 22:06:53 +00:00
Nuno Miguel Reis 24dabf4a1c language translations for pt-pt and some other minor fixes and updates 2013-10-17 22:06:01 +00:00
Mark Crane 7dbca26bfe Fix the North American to International outbound route regex. 2013-10-14 20:30:28 +00:00
Mark Crane f4fd32687f Comment out the voicemail fields in the xml handler. 2013-10-08 22:26:25 +00:00
Mark Crane bf8d154914 Add the voicemail_greeting_number variable to set the greeting_id. Adjust skip_instructions so that it used. 2013-10-04 00:05:24 +00:00
Mark Crane 081ecb1f8a When uploading a greeting make sure the directory exists. 2013-10-02 23:19:39 +00:00
Mark Crane 2716442697 Fix a bug that affected adding a hot desking extension. 2013-10-02 05:53:58 +00:00
Mark Crane fc66f5b18a Advanced -> SQL Query fix the null handling for the SQL inserts statements. 2013-10-02 05:10:43 +00:00
Mark Crane 9452774459 Fix a problem when adding an IVR Menu. 2013-10-02 04:19:38 +00:00
Mark Crane 7342b145c2 Escape the $ used in the double quotes. 2013-10-02 01:29:43 +00:00
Mark Crane 5577ecbada Hot Desking update the code so the unique id and pin number are updated. 2013-10-02 01:08:11 +00:00
Mark Crane 0529dabd04 Change the double quoted "csv" to 'csv' 2013-10-01 19:40:22 +00:00
Mark Crane f104e50c42 Add a nature theme that was the original enhanced theme before the backgrounds were removed. 2013-10-01 19:17:15 +00:00
Mark Crane d0f1a0b4b2 Remove the backgrounds on the enhanced theme. 2013-10-01 19:08:11 +00:00
Nuno Miguel Reis a6c3c71441 Merge and clean 2013-10-01 12:26:41 +00:00
Nuno Miguel Reis 184ec05020 changed single quote to double quotes everywhere 2013-10-01 11:35:07 +00:00
Philippe Rioual efb7a01783 corrected french words misspelled and grammar errors 2013-10-01 11:13:32 +00:00
Mark Crane a43c8f892d Correct the tabbing by replacing the spaces with tabs. Replace some of the single quotes with double qoutes and keep the fr-ca translations. 2013-09-30 16:21:08 +00:00
Mark Crane 0955da65ba Fix a few things in app_config.php leaving fr-ca and changing some of the single quotes to double quotes. 2013-09-30 16:16:32 +00:00
Philippe Rioual f0489b418f repaired previous errors inserted in r4614 : reinserted 'de-de' instead 'de' and correct files. keeps fr-ca to report in app_config.php files 2013-09-30 15:22:35 +00:00
Philippe Rioual 9ce5b02701 added missing french translations and changed fr to fr-fr in all app_languages.php and app_config.php files. 2013-09-30 13:19:40 +00:00
Mark Crane 46d0c45c01 Additional monitoring of a busy server showed that it was the cache only that needed to be removed. 2013-09-29 10:08:27 +00:00
Mark Crane bf63091a0e Remove this code from the xml handler which made it unable to find some extensions that existed. 2013-09-29 09:22:16 +00:00
Mark Crane 5dc2a19220 Get the voicemail data to display on the extension page from the voicemail table. 2013-09-29 08:06:54 +00:00
Mark Crane dbc8f7e437 FusionPBX 3.4 official release. 2013-09-28 21:08:56 +00:00
Mark Crane 18b50e4eec Fix the call prefix label. 2013-09-28 21:07:23 +00:00
Mark Crane c96ad9c168 To speed up the install and upgrade schema only copy files that don't exist in the destination directory. 2013-09-28 21:06:16 +00:00
Mark Crane 73e55e95b7 Clear the cache correctly on a few additional features. 2013-09-28 20:57:57 +00:00
Mark Crane 87c8d71288 Voicemail information should only be saved in the voicemail table. 2013-09-28 20:55:25 +00:00
Mark Crane 3f57a83129 Fix the dial_string.lua so that it uses the voicemail password from v_voicemails table, and have it clear the cached extension from memcache. 2013-09-28 20:39:06 +00:00
Mark Crane 0ab4dfe1c1 If updating the voicemail password from hot desking update password in the voicemail table. Update a few of the comments. 2013-09-28 20:06:11 +00:00
Mark Crane 20a20c104e Add dialplan context to the dialplan, improve some of the formatting add page and fix memcache flush. 2013-09-28 19:40:34 +00:00
Mark Crane f07d062c0b Queues a.k.a. fifo fix the back button, fix memcache, the title of the page, and remove the redundant files. 2013-09-28 19:11:04 +00:00
Mark Crane 16ada164ee Get rid of commented out code. 2013-09-28 17:41:41 +00:00
Mark Crane 5536838e3d Improve the outbound route regular expressions international 12 to 20 digits. Add North America 10-11 digits regular expression and North America international. 2013-09-28 17:24:50 +00:00
Mark Crane ab688a979a When adding a gateway default it to enabled. 2013-09-28 16:42:07 +00:00
Mark Crane 6d17ac2265 Update the variable edit page and fix the permissions. 2013-09-27 18:44:11 +00:00
Mark Crane 2c5a380e0e Rename the fields in call_block to conform with the database naming convention and to match the table name. 2013-09-27 10:21:43 +00:00
Mark Crane eb4fb5573f Put the group names in ascending order in Group Manager. 2013-09-27 09:54:07 +00:00
Mark Crane d3122cd83a Change group_unchanged to group_protected to be consistent with the rest of the project and the name used in the gui. 2013-09-27 09:37:59 +00:00
Mark Crane 1ebe3cd1f9 Move the call block scripts to the install/scripts/app directory for now. 2013-09-27 09:06:28 +00:00
Mark Crane 0335d952a7 Fixed custom menus. When adding an item in the menu add the title to the menu languages table. 2013-09-27 07:38:35 +00:00
Mark Crane 5ff597ffc9 Cleanup the menu class fixup the white space problems. 2013-09-27 04:15:43 +00:00
Mark Crane f6e3222873 Get rid of the trailing spaces. 2013-09-27 03:34:23 +00:00
Mark Crane 53bad9d442 Security enhancement for the content manager. 2013-09-27 03:24:09 +00:00
Mark Crane f09b1a1d97 Correct the name of another file for domain settings. 2013-09-27 02:44:31 +00:00
Mark Crane 77cc0fd0c3 Correct the name for domain settings. 2013-09-27 02:43:34 +00:00
Mark Crane c34a75792a Vars, add $y = 0; to correct the group array. 2013-09-26 18:52:00 +00:00
Mark Crane 187bc9dbeb Add permissions for every table (view, add, edit, and delete). Important change to increase security on the REST API and will be beneficial for more detailed control of permissions. 2013-09-25 20:23:10 +00:00
Nuno Miguel Reis ca26a0ec46 more appropriate naming 2013-09-25 20:14:33 +00:00
Mark Crane ba370c5ce5 Call center music on hold default add local_stream:// 2013-09-25 02:16:21 +00:00
Mark Crane de88c69b84 Set the default music on hold correctly for call center. 2013-09-25 01:29:43 +00:00
Nuno Miguel Reis a57262f8be added new important fields to gateways(codec preferences and how many SIP channels will be available on a gw) 2013-09-24 17:26:48 +00:00
Mark Crane d4b5e926db Remove the mkdir from call center dialplan. 2013-09-23 19:58:03 +00:00
Mark Crane 894b7c5a28 Use the voicemail directory. 2013-09-23 19:57:07 +00:00
Mark Crane a4bf9ead8e Set the storage and voicemail directory variables in config.lua. 2013-09-23 19:37:19 +00:00
Mark Crane e3fb29f198 Dump an extra tab. 2013-09-23 19:36:17 +00:00
Mark Crane 84a4918a97 SIP Profiles, correct the file names used in the PHP code. 2013-09-23 17:04:30 +00:00
Mark Crane 3e231fa0e1 Update the reference to sip_profile_edit.php 2013-09-23 17:03:26 +00:00
Mark Crane 50183182d9 Correct the file name. 2013-09-23 16:16:23 +00:00
Mark Crane b80586f90f Correct the file name. 2013-09-23 16:15:54 +00:00
Mark Crane bd6c848608 Correct the file name. 2013-09-23 16:14:38 +00:00
Mark Crane 2f9e2b0143 Correct the file name. 2013-09-23 16:11:27 +00:00
Mark Crane f90ef1026a Update the app_config.php to correct the permissions for contacts. 2013-09-22 07:37:55 +00:00
Mark Crane 92bca174a6 For each contact sub tables adding add, view, edit and delete permission. 2013-09-21 23:14:00 +00:00
Mark Crane ca2783a285 Shorten some of the names so Conference Rooms list fits on the page better. 2013-09-21 23:03:51 +00:00
Mark Crane bd07e97064 Fix the call flows feature. 2013-09-21 22:46:32 +00:00
Mark Crane d7523d99a6 Fix the references to the file names for contacts. 2013-09-21 22:38:45 +00:00
Mark Crane 978d604a47 Correct the file name. 2013-09-21 22:37:33 +00:00
Mark Crane b51f8e478e Correct the file name. 2013-09-21 22:36:35 +00:00
Mark Crane ba2b2d5bf5 Correct the file name. 2013-09-21 22:32:08 +00:00
Mark Crane 762b9c8bf7 Correct the file name. 2013-09-21 22:31:46 +00:00
Mark Crane 16d5161212 Correct the file name. 2013-09-21 22:30:57 +00:00
Mark Crane bf917a9d3e Correct the file name. 2013-09-21 22:30:25 +00:00
Mark Crane b7e91865f5 Correct the file name. 2013-09-21 22:29:58 +00:00
Mark Crane eba279bab5 Correct the file name. 2013-09-21 22:29:32 +00:00
Mark Crane ef02c7beb0 Correct the file name. 2013-09-21 22:28:11 +00:00
Mark Crane 9e0f5a9d6f Correct the file name. 2013-09-21 22:27:50 +00:00
Mark Crane a3a1064763 Correct the file name. 2013-09-21 22:26:58 +00:00
Mark Crane d6c84e63e0 Add the title css class to the profile edit for XMPP. 2013-09-21 22:16:01 +00:00
Mark Crane 4cc92b94f9 Remove one of the line breaks between the Gateway description and the content. 2013-09-21 22:13:23 +00:00
Mark Crane ab4294ebb0 Remove the . from the css class name. 2013-09-21 22:11:50 +00:00
Mark Crane 4cfd7e4fa2 Fix the Gateway Edit page title. 2013-09-21 22:10:39 +00:00
Mark Crane 19af7d8cbc Change the system variables to switch variables which is more accurate. 2013-09-21 22:08:24 +00:00
Mark Crane 5f25e63a9c Correct the file name. 2013-09-21 22:05:21 +00:00
Mark Crane ef0b3b85c0 Change Module List to 'Modules' 2013-09-21 22:04:08 +00:00
Mark Crane 9884903ddb Correct the file name. 2013-09-21 22:02:41 +00:00
Mark Crane 1da15f110c Correct the file name. 2013-09-21 22:02:20 +00:00
Mark Crane 74fc299694 Update the registration permissions. 2013-09-21 21:57:42 +00:00
Mark Crane 041a375b62 Audited the permissions names. Permissions names are to be non plural. 2013-09-21 21:45:35 +00:00
Mark Crane bf52a675a0 Convert all remaining app_config.php files to UTF-8 without BOM. 2013-09-21 16:00:28 +00:00
Mark Crane 9b0c91491c Update the file types for the the app_languages.php that were not the correct type. Set the file type to UTF-8 without BOM. 2013-09-21 08:40:50 +00:00
Mark Crane e599bf434c A little more work to enable the api key. 2013-09-21 07:58:29 +00:00
Mark Crane 3d545fc617 Minor change to group_permissions.php 2013-09-21 04:40:46 +00:00
Mark Crane b3523f341d Add the api_key to user update 2013-09-21 04:38:26 +00:00
Mark Crane fceee338dd Add the api key english translation to app_languages.php 2013-09-21 04:36:47 +00:00
Mark Crane fcf012a28f Remove trailing white spaces. 2013-09-21 04:28:09 +00:00
Mark Crane a925e70717 Add the api key to app_config.php 2013-09-21 04:25:01 +00:00
Mark Crane d6ddfc70ce Add a $key option for the REST API. 2013-09-21 02:55:02 +00:00
Nuno Miguel Reis cb8ac4e3b3 changed query before building modules.conf 2013-09-20 21:43:24 +00:00
Mark Crane b2aa049ca8 Fix inbound route details back button, add, edit, and delete so that each redirects back to inbound routes. 2013-09-20 21:36:28 +00:00
Mark Crane c8a6f036db Fix the foreign key definition for the contacts table. 2013-09-20 20:13:19 +00:00
Mark Crane 3c927dcdf2 Fix a problem when a user is disabled under accounts -> user accounts the user details would no longer show correctly. 2013-09-20 19:24:43 +00:00
Mark Crane f8eb24d3a0 Ring groups, page results with 150 per page. 2013-09-19 18:02:06 +00:00
Mark Crane ae96b67d79 Fix the log viewer by removing an extra htmlentities. 2013-09-19 16:24:42 +00:00
Mark Crane 7c89922109 Get rid of duplicate columns in ring groups and change some of the wording for 2 comments. 2013-09-19 12:06:29 +00:00
Mark Crane 49dce9c104 Fix a syntax error I created earlier in the day for fax viewer. 2013-09-19 12:05:25 +00:00
Mark Crane 2edafee9d8 Fix the css on the voicemail greetings file. 2013-09-19 11:58:23 +00:00
Mark Crane 46eba34e68 Fix the Music on Hold header and update 'location' 2013-09-19 11:53:55 +00:00
Mark Crane e8e5fa3c36 Add a new contact field to the table and a new contact groups table. Fix the class for the title on the contact main page. 2013-09-19 11:47:09 +00:00
Mark Crane 0d775c50e5 Add additional line feeds to the enhanced theme. 2013-09-19 11:29:59 +00:00
Mark Crane 8ceffbda86 Fix the login for the updated theme. 2013-09-19 11:08:23 +00:00
Mark Crane 8639161951 Add a sound background to the enhanced theme. 2013-09-19 10:26:34 +00:00
Mark Crane 0e1802c411 Remove the old yellowstone_1.jpg and replace with a new modified background. 2013-09-19 10:17:02 +00:00
Mark Crane ecf11d9e8d Update the enhanced theme. 2013-09-19 04:14:07 +00:00
Mark Crane 337c16358f Add the title class. 2013-09-18 22:13:53 +00:00
Mark Crane d5e00c7553 Add the new class title to several features. 2013-09-18 21:48:15 +00:00
Mark Crane ac142ca408 Add translation for inbox and sent. 2013-09-18 21:42:52 +00:00
Mark Crane fa9eb56acf Change table to title. 2013-09-18 19:55:43 +00:00
Mark Crane fb59aad228 Fix the dialplan detail edit class table and vertical spacing. 2013-09-18 19:53:41 +00:00
Mark Crane 0d4d95a8e1 Add the class title class to dialplan edit. 2013-09-18 19:48:38 +00:00
Mark Crane 3d2b354beb Update the enhanced theme remove the dark background from the table header. 2013-09-18 17:14:27 +00:00
Mark Crane ec5912f6b2 Conference Center: increase the space between the title and the content. 2013-09-18 15:49:17 +00:00
Mark Crane 307923d6e4 Increase the space between the Conference Rooms title and the table. 2013-09-18 15:42:26 +00:00
Mark Crane 73f0d072b4 Fix the confirm dial string for follow me. 2013-09-18 04:06:59 +00:00
Mark Crane 686dc160be Fix the opening quote on ivr menu delete. 2013-09-18 01:19:18 +00:00
Mark Crane 69b8a6aa4f Add ivr-accept_reject.wav both 8 and 16khz. 2013-09-17 22:52:21 +00:00
Mark Crane 1b7b963da6 Fax to email attachment if the PDF exists attach it to the email however if only the TIF file exists then send it instead of the PDF. 2013-09-17 21:02:23 +00:00
Mark Crane a22a3258e8 Remove option 3 for ring group confirm its not used. 2013-09-17 20:32:34 +00:00
Mark Crane 850ff7b0db Change fr to fr-fr and de to de-de. 2013-09-17 20:02:19 +00:00
Nuno Miguel Reis 43df944353 fixed old $mac variable usage 2013-09-17 19:07:11 +00:00
Nuno Miguel Reis cfc37a8910 new changes to group_permissions/menu logic 2013-09-17 19:06:44 +00:00
Nuno Miguel Reis 72dfb07364 Added the new copy feature to the group_permissions app.
Conflicts:
	fusionpbx/core/users/group_permissions.php
	fusionpbx/core/users/permissions_copy.php
2013-09-17 17:55:10 +00:00
Mark Crane 4141dd437b Fix the ring group confirm so that timeout is unscheduled. 2013-09-17 17:27:55 +00:00
Nuno Miguel Reis 1ef7fb3706 fixed some typos
Conflicts:
	fusionpbx/app/adminer/app_config.php
	fusionpbx/app/gateways/app_languages.php
	fusionpbx/app/ring_groups/app_languages.php
	fusionpbx/app/voicemails/app_languages.php
	fusionpbx/core/user_settings/app_languages.php
2013-09-17 16:48:23 +00:00
Mark Crane 18cd29749d Make it so that if a call is parked to an occupied parking lot it is returned to sender. 2013-09-16 21:35:37 +00:00
Mark Crane 60f5e5ff1e Update the base menu for better defaults. 2013-09-15 05:30:16 +00:00
Mark Crane 605866bec6 Only include the elements that are installed. 2013-09-15 05:06:34 +00:00
Mark Crane e508707bc8 If the content manager is not installed don't require it. 2013-09-15 05:02:00 +00:00
Mark Crane d47fda1798 Create a new variable for cidlookup.conf.xml and lcr.conf.xml to use to connect to FusionPBX's database aka the system database. 2013-09-14 20:43:51 +00:00
Mark Crane 0a978c8000 Convert the files to utf-8. 2013-09-13 22:54:20 +00:00
Mark Crane 0f8c91e577 Convert the files to utf-8 and change some of the quotes. 2013-09-13 22:53:31 +00:00
Mark Crane 12cbd3abfc Fix the quotes. 2013-09-13 22:22:24 +00:00
Mark Crane 3df5d3029a Fix the quotes. 2013-09-13 22:20:41 +00:00
Mark Crane bd727dd44f Call Flows fixed the quotes. 2013-09-13 22:17:26 +00:00
Mark Crane 82807926d8 Remove extra characters from the call flow app_languages. 2013-09-13 22:10:38 +00:00
Mark Crane 2c354f23d2 Change to double quotes for call center. 2013-09-13 22:08:03 +00:00
Mark Crane 46d52d0b71 Fix the quotes for call_broadcast/app_config.php. 2013-09-13 22:03:33 +00:00
Mark Crane f077840883 Move the French translations into the development branch.
Translation work done thanks to by bhouba for his work on the translations.
2013-09-13 21:04:53 +00:00
Mark Crane 962fc99515 Fix the database app_config array on several of teh app_config file array. 2013-09-13 09:39:57 +00:00
Mark Crane 385242bf06 Add the basic fields to use in the App Manager. 2013-09-13 07:52:25 +00:00
Mark Crane e311c5a35f Cleanup the themes directory. 2013-09-13 07:42:38 +00:00
Mark Crane eab4f0399e Associate the ivr_menu_view permission to its related item in the menu. 2013-09-13 07:40:56 +00:00
Mark Crane e0840a22d2 Fix the app_config.php schema for extensions correct the key type and set as a foreign key. Thanks Willem for reporting this and NYSolutions for reminding me. 2013-09-13 00:57:38 +00:00
Mark Crane 6a72593b59 Correct the call center permissions. 2013-09-12 18:09:19 +00:00
Mark Crane 01c6d580dd Remove the call_block primary key. 2013-09-12 17:20:50 +00:00
Mark Crane f92eb8e28e Update the enhanced theme add the message. 2013-09-12 17:19:11 +00:00
Mark Crane f609811069 Update the IVR menu change how the way the add, update and delete message is presented and get rid of the meta redirect. Will use the IVR menu as a pattern for things to come. 2013-09-12 17:03:44 +00:00
Mark Crane 4f8ee891af Call Block: Fix the references to foreign keys and rename blocked_caller_uuid to call_block_uuid to conform to the naming convention. 2013-09-12 07:58:56 +00:00
Mark Crane 8750caae30 Fix the dialplan text variables for queues. 2013-09-11 22:13:01 +00:00
Mark Crane 8cae34483c Simplify the dialplan back button. 2013-09-11 20:02:29 +00:00
Mark Crane 01eafc518e Account for fifo title, header and description. 2013-09-11 19:56:37 +00:00
Mark Crane 7ec7dd01ea Update fifo dialplan details. 2013-09-11 19:56:09 +00:00
Mark Crane 9dd93319bc Adjust the path in the menu for fifo. 2013-09-11 19:32:38 +00:00
Mark Crane 50f7f0f22b Add FIFO Queues to use the same code as the dialplan. 2013-09-11 19:31:40 +00:00
Mark Crane 64c5bf0b29 FIFO - use dialplan groups when adding to the dialplan. 2013-09-11 18:50:53 +00:00
Mark Crane fb03bbba77 Minor code change to be more consistent across the code base. 2013-09-11 18:50:15 +00:00
Mark Crane 15610917f0 Update the wording again. 2013-09-11 18:10:24 +00:00
Mark Crane d1b614ea56 Update the working for the menu item edit. 2013-09-11 18:03:07 +00:00
Mark Crane 86b2d9f2f5 Rename the php class file from switch_ivr_menu.php to ivr_menu.php. It should be the same names as the app. 2013-09-11 13:09:02 +00:00
Mark Crane 3286a25fb3 Rename switch_ivr_menu to ivr_menu in the code. 2013-09-11 13:06:14 +00:00
Mark Crane 3becb42223 Add account code option to outbound routes. 2013-09-11 03:49:58 +00:00
Mark Crane 057e630f25 Set the min-dtmf-duration to 640 as recommended by flowroute.
http://code.google.com/p/fusionpbx/issues/detail?id=456&start=100
2013-09-11 02:55:32 +00:00
Mark Crane 651673af34 Ring groups set origination_uuid only when using 'prompt'. 2013-09-11 02:37:57 +00:00
Mark Crane ca0b5a60b9 Fix ring group lua script so that if each extension is not registered and never has been that it still goes to the timeout destination. 2013-09-11 02:12:18 +00:00
Mark Crane ea4e824fd5 Added ['type'] so that it is applied as $field['key']['type'] so that it is uniform across all app_config.php files. 2013-09-10 23:06:41 +00:00
Mark Crane 35da60e22f Add ['type'] back to $field['key']['type'] as its used in many app_config.php files. 2013-09-10 21:30:17 +00:00
Mark Crane 9cc32caff6 Remove some trailing white spaces from the ring groups index.lua. 2013-09-09 23:57:10 +00:00
Mark Crane 19986a8143 Order by the delay first the destination for ring groups. 2013-09-08 05:14:02 +00:00
Mark Crane 02823b0d20 Fix call_block/index.lua by removing a section of code that is performed by app.lua. 2013-09-07 22:50:48 +00:00
Mark Crane cdf54c6267 Fix the primary key on the dev branch. 2013-09-07 16:25:35 +00:00
Mark Crane e56ee666cf Ring groups add a work around for Freeswitch's native voicemail. 2013-09-05 17:32:53 +00:00
Mark Crane d20779bcc0 Change default-mod-wait conference profile to mod-wait to match the conference lua script. 2013-09-04 20:46:08 +00:00
Mark Crane 26f4586791 Change conference profile name of wait_mod to wait-mod in the conference lua script. 2013-09-04 20:44:09 +00:00
Mark Crane 0a08f39ab7 Remove the hard coded conference profile name. 2013-09-04 20:30:38 +00:00
Nuno Miguel Reis 35bbb56162 fixed variable name(changed $mac to $device_mac_address where needed) 2013-09-04 16:13:07 +00:00
Mark Crane 94e9304dbb Prefix variable names in the header.php to prevent naming conflicts and unset a few more values. 2013-09-02 15:22:13 +00:00
Rüdiger Hahn e18f601790 Fix: typo in xml template 2013-09-01 07:20:06 +00:00
Mark Crane 4b832702e8 Add the password.php to check_auth.php 2013-09-01 06:40:28 +00:00
Mark Crane 7417d26a8d Add resources/functions/password.php from https://github.com/ircmaxell/password_compat. This will provide compatibility for the functions available in 5.5. This library requires PHP >= 5.3.7. PHP prior to 5.3.7 contains a security issue with its BCRYPT. 2013-09-01 06:05:59 +00:00
Rüdiger Hahn f878e5a55e Add inital config template for snom m3 2013-08-31 22:11:17 +00:00
Rüdiger Hahn 013e865d3c Differentiate between phones which are able to hande utf-8 and those which are not. 2013-08-31 22:10:30 +00:00
Rüdiger Hahn fbe9e5e69a Add Linksys SPA-921 and snom m3 2013-08-31 09:51:02 +00:00
Rüdiger Hahn 8f717cf1e8 Add rewrite rule from snom m3 2013-08-31 09:13:06 +00:00
Mark Crane a32f0fa14e Provisioning, Add panasonic to the mac address vendor list and synchronize the lists. 2013-08-30 00:47:58 +00:00
Mark Crane 1ecf45210f Add provisioning templates for panasonic ut113, ut123, ut133, ut136 phones. 2013-08-30 00:38:00 +00:00
Mark Crane e0d07e45ac Update yealink provisionig for t22 to work with the latest firmware. 2013-08-30 00:34:07 +00:00
Rüdiger Hahn 2b7aabe159 Add provisioning template for Linksys SPA-921 2013-08-29 21:14:49 +00:00
Rüdiger Hahn 5dc2d007a5 Add initial template for snom 360 phones 2013-08-29 20:58:45 +00:00
Rüdiger Hahn 495dda1670 Do not encode to utf for a second time. 2013-08-29 20:52:11 +00:00
Rüdiger Hahn 54684cf65f Add entry for snom 360 2013-08-29 20:30:04 +00:00
Mark Crane d8aec93c7a Call Center handle spaces in queue name by replacing them with a dash. 2013-08-29 17:46:12 +00:00
Mark Crane 78768afaea Ring Groups: Fix a problem where the domain_uuid was null for multi-tenant and for originate_disposition add NO_ANSWER for the timeout. 2013-08-29 16:57:36 +00:00
Mark Crane 3aafe94b7c Fix the inbound route save button. 2013-08-28 06:00:28 +00:00
Mark Crane 092bb008a8 Fix the array index on inbound routes permissions. 2013-08-28 05:21:46 +00:00
Mark Crane 8626ea8406 Fix auto writing auto provisioning files so that it will write configuration files for all devices. 2013-08-28 05:05:07 +00:00
Mark Crane 433c8806a1 Fix the select destinations tool. Get the voicemail list from the voicemail table instead of the extensions table. 2013-08-28 01:03:44 +00:00
Mark Crane 173956740a Remove i386 causes problems for mod_shout and mpg123 2013-08-27 05:35:24 +00:00
Mark Crane 92c043fafe remove i386 2013-08-27 05:34:03 +00:00
Mark Crane 5a6f516b86 Move the index.lua inside scripts/app/call_block/index.lua accessed by freeswitch with:
app.lua call_block
2013-08-27 03:24:59 +00:00
Mark Crane a451699b27 Rename call_block.lua to index.lua 2013-08-27 03:20:23 +00:00
Mark Crane 2edc6009b2 Add the sub directory structure for call_block 2013-08-27 03:18:37 +00:00
Mark Crane 711fc32a52 Change call_block scripts to resources 2013-08-27 03:16:17 +00:00
Mark Crane 072a844d3f Add permission: inbound_route_advanced 2013-08-26 23:28:11 +00:00
Mark Crane 805a33dba0 Improve the security on when adding inbound dialplans. 2013-08-26 23:18:01 +00:00
Mark Crane b5cbb3e538 Custom variables belong under the global dialplan or global (meaning global per tenant) could be renamed to variables. Would be better to set under system -> variables -> transfer_ringback. 2013-08-26 22:40:25 +00:00
Mark Crane 37560e56e7 Remove these dialplan entries that were added by another developer. Note to that default feature codes must be prefixed with a *. 2013-08-26 22:37:32 +00:00
Mark Crane 60cb664bf1 Give admin default permissions to view, add and delete inbound routes. 2013-08-26 21:53:42 +00:00
Mark Crane be0afee9e6 dialplan_features: Move conf into switch directory. 2013-08-26 20:55:56 +00:00
Mark Crane 961ccaffa3 Add a switch directory. 2013-08-26 20:55:04 +00:00
Mark Crane c7671fe952 Change xml to conf 2013-08-26 20:52:00 +00:00
Mark Crane de02a2fe88 Move hot desking conf/dialplan into the switch directory. 2013-08-26 20:46:43 +00:00
Mark Crane 0dd4fdeaf8 Add switch and conf directories to hot desking. 2013-08-26 20:45:52 +00:00
Mark Crane 9add268308 Update the path used in app_defaults.php to switch/conf/dialplan. 2013-08-26 20:42:59 +00:00
Mark Crane d6ecba828b 2013-08-26 20:40:10 +00:00
Mark Crane a610a5f15e Move the new conf dir into the switch directory. 2013-08-26 20:39:11 +00:00
Mark Crane 8ab9b1c445 Change xml to conf and add a switch directory. 2013-08-26 20:36:43 +00:00
Mark Crane 1f1b73999d Remove the debug code. 2013-08-26 19:45:30 +00:00
Mark Crane c7a7f0b7ef Correct the function that updates the lua scripts make sure it correctly updates scripts except for database_handle.lua. 2013-08-26 19:45:01 +00:00
Mark Crane e7271794da Only overwrite lua scripts and add database_handle.lua as an exception. 2013-08-26 18:50:43 +00:00
Mark Crane 73375214cd Update the installed lua scripts when running upgrade.php or advanced -> upgrade schema. 2013-08-26 17:56:03 +00:00
Mark Crane d6f6a3e518 Simplify the ivr menu options. 2013-08-25 02:00:58 +00:00
Mark Crane a4913b9e9a Fix switch_select_destination so that it works with the changes to ivr menu. 2013-08-25 02:00:18 +00:00
Mark Crane 1572ab3b17 Move call_block so that it is available to people in a default install. Thanks gerritv for providing this feature. 2013-08-23 08:14:51 +00:00
Mark Crane d90205dc1a IVR Menu add multiple options at one time. 2013-08-23 08:04:25 +00:00
Mark Crane 8775c50afd Revmove save_hunt_groups_xml function from switch.php. 2013-08-22 16:05:17 +00:00
Mark Crane 1e795c875f Disable Parking slots which use park.lua in favor of valet_park which uses mod_valet. 2013-08-22 15:48:16 +00:00
Mark Crane dd6840a875 Update the ivr menu so that options show inline with the main ivr menu edit gui. 2013-08-22 06:01:36 +00:00
Mark Crane 83d9ef4a3b Remove one extra htmlentities to fix the color formatting of the log viewer. 2013-08-21 18:34:01 +00:00
Mark Crane 26742ae7c5 Add number alias so that it will work with the xml handler. 2013-08-21 17:53:17 +00:00
Mark Crane e2ecc27d64 Simplify the upgrade process by automatically moving includes/config.php to the resources/config.php. As includes directory has been deprecated. 2013-08-21 15:49:38 +00:00
Mark Crane f6b20aae60 Re-enabled uuid_display found the real problem to the dtmf detection lag was caused by uuid_display with an incorrect rtp packet size (aka ptime) set wrong on the SPA504g. It was set to 0.030 but needs to be set to 0.020. 2013-08-20 23:54:46 +00:00
Mark Crane cabc71d163 Remove old huntgroup_originate.lua. 2013-08-20 18:59:51 +00:00
Mark Crane c081916609 Domain Settings is now setup to add the timezone option to the global dialplan entry. 2013-08-20 10:43:59 +00:00
Mark Crane b3b53d6a9f Fix the references to the file name changes. 2013-08-20 07:50:48 +00:00
Mark Crane 854f199523 Fix the file name so that it uses the correct naming convention. 2013-08-20 07:45:51 +00:00
Mark Crane a370bbd4f9 Fix the file name so that it matches the file naming convention domains_delete.php changed to domain_delete.php since it is only deleting one domain. 2013-08-20 07:45:14 +00:00
Mark Crane 90424fb4ac Fix and elseif statement, the domain time_zone, and indentation on a few lines. 2013-08-20 07:37:39 +00:00
Mark Crane cd10dc07ac Remove an unconventional memory leak hash with an different name every time and value will take up more and more memory. It was used to do intercept or eavesdrop by I found a better way to get the uuid on demand. Also remove call debug I saw it only as an example that isn't used and can learned from the freeswitch wiki. 2013-08-20 07:21:17 +00:00
Mark Crane f9eecd23e5 Deprecate hunt groups since ring groups now have equivalent features. However keep hunt groups code around in case someone wants to revive it in the future. 2013-08-20 07:13:23 +00:00
Mark Crane e491929a29 Update the invoices link that is only visible if that modules is installed. 2013-08-16 23:36:30 +00:00
Mark Crane 66d7e5dd75 Minor modification to Ring Groups interface increased the delay and timeout seconds in the select list. 2013-08-16 23:32:44 +00:00
Mark Crane 604abc39a1 Update the ring group lua script. 2013-08-16 20:36:52 +00:00
Mark Crane 3d36fdb9bd Add ring group call forward to the user dashboard. 2013-08-16 06:38:35 +00:00
Mark Crane 3d7c406b8a Rename userlist.php to users.php. 2013-08-16 06:28:39 +00:00
Mark Crane 67ec2c49db Fix code that was designed to block non-superadmins from changing users in the superadmin group. Hide superadmin accounts from users that are not in the superadmin group. 2013-08-16 06:27:06 +00:00
Mark Crane eab5c1ca45 Enable the ring group assigned users to call forward the ring groups. Add ring_group_forward, and ring_group_pompt permissions. 2013-08-16 04:50:30 +00:00
Mark Crane c93bc5fc3e Add pt-pt to app/ring_groups/app_languages.php. Also add label-user_list, and description-user_list. 2013-08-16 01:07:39 +00:00
Mark Crane f846d149d8 When adding a ring group re-enable the ability to add the first destination at the same time. 2013-08-15 23:30:35 +00:00
Mark Crane c05bcaaec1 Add ring group call forwarding. Remove the memcache entry in case the ring group extension number is changed. Make sure the ring group dialplan entry gets updated. 2013-08-15 19:16:03 +00:00
Mark Crane 87841bdce2 Add ring group forward destination and forward enabled to the database. 2013-08-15 15:04:20 +00:00
Mark Crane e55589f623 Faxing if the from_address is null then use the email_address. 2013-08-14 23:07:35 +00:00
Mark Crane 540ae1c8f7 Comment out uuid_display. It caused the call to switch codecs, interrupt the audio and added a dtmf delay to voicemail after pressing 1 for new messages or 2 for old messages. Also added a lua copy function. 2013-08-13 06:09:45 +00:00
Mark Crane d1aad16157 Fix the ring group timeout when the prompt is not set to confirm. 2013-07-31 03:41:13 +00:00
Mark Crane 2bc9fcde25 Fix the dnd on the call center agent status. 2013-07-30 20:58:39 +00:00
Mark Crane 011f359ddd Fix the status select on the active calls page. 2013-07-30 20:11:42 +00:00
Mark Crane 84d986e115 Adjust the changed to the dnd class. 2013-07-29 23:23:12 +00:00
Mark Crane 7953ad63cf Remove the carriage return at the end of the file. 2013-07-29 23:21:51 +00:00
Mark Crane 46fa3a465d Add an additional = to fix the syntax. 2013-07-29 23:18:42 +00:00
Mark Crane 746cf31373 Fix problem viewing status -> agent status on single tenant systems. 2013-07-29 22:52:11 +00:00
Nuno Miguel Reis 0d0e105a29 logger class (very usefull for debugging) 2013-07-29 20:26:00 +00:00
Mark Crane d872af2666 Change the menu back asc order. 2013-07-29 19:40:48 +00:00
Nuno Miguel Reis e939b9e0d2 added db menu build and permissions block 2013-07-29 18:55:51 +00:00
Mark Crane 4cc4c285f9 Remove the images directory that has been moved into each individual theme. 2013-07-29 18:21:27 +00:00
Nuno Miguel Reis 9c8dfa5439 using themes the right way 2013-07-29 17:22:48 +00:00
Nuno Miguel Reis c9c4ec7361 bug fix on module category listings and new email_validate function 2013-07-29 17:22:43 +00:00
Nuno Miguel Reis 2fed568403 missing stuff dealing with group permissions 2013-07-29 17:22:40 +00:00
Nuno Miguel Reis 28d41d3e35 added restore all option in menu manager 2013-07-29 17:22:34 +00:00
Nuno Miguel Reis beb7331bbf more support on phone provisioning 2013-07-29 17:22:30 +00:00
Nuno Miguel Reis fd5999a445 fixed buf using translations 2013-07-29 17:22:25 +00:00
Nuno Miguel Reis f60bfbbb69 changed batch to at (it simply works like this) 2013-07-29 17:22:21 +00:00
Nuno Miguel Reis 7b29f575bd added mod_cdr_pg 2013-07-29 17:22:17 +00:00
Nuno Miguel Reis a34a85be20 support new phones 2013-07-29 17:22:11 +00:00
Nuno Miguel Reis 326c4dfdb2 new default dialplans added to dialplan manager 2013-07-29 17:22:06 +00:00
Nuno Miguel Reis b664fbc4ec fixed themes and images usage 2013-07-29 17:20:40 +00:00
Mark Crane 923828681a Add one ring group label that should have been kept. 2013-07-27 21:26:08 +00:00
Mark Crane ac0c8734d3 Remove the deprecated v_ring_group_extensions table and the related translation variables. 2013-07-27 21:21:37 +00:00
Mark Crane 34312fad32 Fixed the delay when using the new confirm feature for ring groups. 2013-07-27 21:05:38 +00:00
Mark Crane 9eaa4d4a11 Additional adjustments to the destinations edit adding timeout and delay selects. 2013-07-27 17:59:06 +00:00
Mark Crane 1418ca55b3 Remove the style from the prompt select so that the class takes effect. 2013-07-27 17:33:57 +00:00
Mark Crane e6cdc034ff Take two, Change the ring group prompt into a select box. 2013-07-27 17:30:09 +00:00
Mark Crane eacc01c8b4 Change the ring group prompt into a select box. 2013-07-27 17:28:12 +00:00
Mark Crane 0089ab5e0f Change html_select to adminer_html_select. 2013-07-27 15:52:25 +00:00
Mark Crane cb8be9294b Update Adminer in the dev branch to Adminer 3.7.1. 2013-07-27 15:43:34 +00:00
Mark Crane bece0abd28 Fixed a bug with IVR Menu where it reached the max failures +1 before moving onto the timeout action. 2013-07-25 18:25:52 +00:00
Mark Crane f453ddb19f Fix a bug that broke do not disturb in the gui. 2013-07-25 16:02:17 +00:00
Mark Crane c4f8a4c9af Add htmlentities back to log viewer so that xml and other special characters will show in the log viewer. 2013-07-25 06:17:33 +00:00
Mark Crane ea34375fdf Add xml handler fixed sip call forward. 2013-07-25 06:04:15 +00:00
Mark Crane 40df388751 Add a new confirm.lua file specifically for ring groups. 2013-07-24 20:08:06 +00:00
Mark Crane df643d8e98 Remove the old lua script file. 2013-07-24 19:54:57 +00:00
Mark Crane e8ffa2f12e Add the new ring group lua scripts. 2013-07-24 19:54:17 +00:00
Mark Crane 22314bbd3f Fix the links to the renamed files and remove some references to the old ring group extensions table. 2013-07-24 19:52:41 +00:00
Mark Crane 42180ec13b Rename the ring groups edit php file to conform to naming standards. 2013-07-24 19:41:08 +00:00
Mark Crane 9f38a56d68 Rename the ring groups delete php file to conform to naming standards. 2013-07-24 19:40:01 +00:00
Mark Crane ab929caeb6 Add a new version of ring groups. Added ability to confirm the call, call external destinations, and support for using a SIP URI in the destination. This change requires exporting the extenions defined in v_ring_group_extentions to v_ring_group_destinations. 2013-07-24 19:37:59 +00:00
Mark Crane 91d0a5ac63 Deprecate install/dialplan/default.xml. 2013-07-19 00:54:44 +00:00
Mark Crane 5fe1ebd56e Remove the install/lang/en directory now deprecated. 2013-07-19 00:48:23 +00:00
Mark Crane 7636780212 Move the wakeup from install to resources/templates/conf/lang/en directory. 2013-07-19 00:47:05 +00:00
Mark Crane 6dc170f5e7 Delete the install/autoload_configs directory that is no longer needed. 2013-07-19 00:42:02 +00:00
Mark Crane 11bad68c1d Move cdr_csv.conf.xml to dev/apps/cdr as a backup for a non maintained app in apps/cdr. 2013-07-19 00:39:52 +00:00
Mark Crane b8b995a9e7 On Debian or Ubuntu the /etc/init.d seems to require /etc/freeswitch this causes a problem source compiled systems changing the directory to detect if its a package install to /etc/freeswitch/dialplan. 2013-07-18 23:50:39 +00:00
Mark Crane 223505d347 Remove a file that is not needed. 2013-07-16 01:29:14 +00:00
Mark Crane 4077a4e143 Add 32000 and 48000 to us/callie/custom directory. 2013-07-16 00:47:45 +00:00
Mark Crane ad27dc407d Replace php short tags as they are as portable as standard <?php. In other words in the php.ini short tags is off by default. 2013-07-15 22:32:43 +00:00
Mark Crane 3eddead2a0 Move direct dial code outside of the loop. Next user_exists replace context with domain_name so that it works with single tenant systems. 2013-07-15 21:47:22 +00:00
Mark Crane 0b2078a009 Change Destination to Timeout Destination. 2013-07-15 19:26:45 +00:00
Mark Crane 32b8bb803d Remove a variable that is not being used. 2013-07-13 22:53:26 +00:00
Mark Crane 5524737ac3 Fix the database class connection info so it can be provided on demand. 2013-07-13 18:33:30 +00:00
Mark Crane 18eb122fee Remove $_POST['submit'] == "Upload" if the button is translated then it won't say "Upload". Remove an unused variable. 2013-07-12 05:29:56 +00:00
Mark Crane 16d97275eb Remove some commented code. 2013-07-11 22:15:49 +00:00
Mark Crane 80c1c9076c Add a general copy function for lua and use it with voicemail forward. 2013-07-11 19:50:09 +00:00
Mark Crane b895946be8 Copy voicemail to another extension added single quotes to the copy string to help with paths with spaces. 2013-07-11 17:13:15 +00:00
Mark Crane 95f86e6723 Change links from includes to the resources directory. 2013-07-10 23:41:12 +00:00
Mark Crane 4e578b6bf7 Voicemail message playback press 4 for rewind and 6 for fast forward. 2013-07-10 22:59:17 +00:00
Mark Crane 5728927af7 Make the contact search case insensitive. 2013-07-09 23:44:44 +00:00
Mark Crane d1b6caabb7 Case insensitive searches for the schema views 2013-07-09 20:34:44 +00:00
Mark Crane 89f7c5f76c Move group confirm key and file to per leg. 2013-07-09 00:16:42 +00:00
Mark Crane adf677f63c Change the follow me methods to add and update remove the follow_me_ prefix. 2013-07-09 00:07:59 +00:00
Mark Crane 56fe969fe4 Remove the switch_ prefix from the file name. 2013-07-08 23:33:11 +00:00
Mark Crane 71ab95deda Remove the switch_ prefix from the file name. 2013-07-08 23:32:48 +00:00
Mark Crane 436ffbd82c Remove the switch_ prefix from the file name. 2013-07-08 23:32:17 +00:00
Mark Crane 896397caf5 Remove the switch_ prefix off the php class file names. 2013-07-08 23:30:45 +00:00
Mark Crane c864e21226 Add PROJECT_PATH to the extension class path. 2013-07-08 22:55:28 +00:00
Mark Crane 89c719e3b8 Remove the / in the path to the qr code 2013-07-08 21:47:16 +00:00
Mark Crane 1440dd8d0c Fix the path to the extension class. 2013-07-08 21:43:15 +00:00
Mark Crane 7bc2c4843a Remove lan_sip_profile function which is no longer being used. 2013-07-06 17:03:23 +00:00
Mark Crane fcf9ade166 A little code house cleaning. 2013-07-06 17:01:35 +00:00
Mark Crane a082a84b28 Update the redirect on the user_dashboard.php file. 2013-07-06 08:15:16 +00:00
Mark Crane b42d2c7122 Set the include path to use with config.php inside the database.php class. 2013-07-06 08:06:03 +00:00
Mark Crane d3d4292c37 Fix the path for config.php for both index.php and login.php. 2013-07-06 08:03:14 +00:00
Mark Crane a1964b2f75 Update the reference to includes/require.php to point to the resources directory. 2013-07-06 07:40:48 +00:00
Mark Crane dfd52f9478 Adjust the login and index.php pages to use the check the new path for the config.php file. 2013-07-06 07:38:14 +00:00
Mark Crane 438d4d7007 Remove the includes directory. 2013-07-06 07:19:52 +00:00
Mark Crane 263e893fc1 Remove the includes/classes directory. 2013-07-06 07:19:14 +00:00
Mark Crane d575121231 Remove install.php it has been moved already to resources/classes. 2013-07-06 07:18:42 +00:00
Mark Crane 93adbba412 Move the class files from includes to the resources directory. 2013-07-06 07:16:58 +00:00
Mark Crane 2834e8475d Rename switch_dialplan.php to dialplan.php. 2013-07-06 07:15:16 +00:00
Mark Crane 08111104f6 Rename switch_directory.php to directory.php. 2013-07-06 07:14:48 +00:00
Mark Crane 7e0a93d56c Rename switch_fax.php to fax.php. 2013-07-06 07:14:17 +00:00
Mark Crane 13dabc3d3b Move references to php classes in includes/classes to resource/classes. 2013-07-06 07:13:36 +00:00
Mark Crane fc7bc1877f Rename switch_modules.php to modules.php. 2013-07-06 07:12:09 +00:00
Mark Crane 05335fd1cc Update a few more references to files that have been move to the resources directory. 2013-07-06 07:01:14 +00:00
Mark Crane 62015490eb Remove root.php which is no longer needed in this directory. 2013-07-06 06:56:54 +00:00
Mark Crane 76e1e38c3d Move switch.php to the resources directory. 2013-07-06 06:56:21 +00:00
Mark Crane 2077b82c0e Rename the lib_switch.php file to switch.php. 2013-07-06 06:55:55 +00:00
Mark Crane b5f82f6ce4 Move php.php to the resources directory. 2013-07-06 06:54:10 +00:00
Mark Crane 4f4258f110 Rename lib_php.php to php.php. 2013-07-06 06:53:44 +00:00
Mark Crane 15dd919505 Move schema.php to the resources directory. 2013-07-06 06:51:48 +00:00
Mark Crane 17a368b503 Rename schema.php to lib_schema.php. 2013-07-06 06:51:21 +00:00
Mark Crane 403cea91eb Move pdo.php to the resources directory. 2013-07-06 06:49:36 +00:00
Mark Crane 2f486fb1de Move pdo_vm.php file to the resources directory. 2013-07-06 06:47:14 +00:00
Mark Crane ed8d898ba6 Rename lib_pdo_vm.php file to do_vm.php. 2013-07-06 06:46:41 +00:00
Mark Crane 329e4afd52 Rename lib_pdo_vm.php to pdo_vm.php and lib_functions.php to functions.php and move to the resources directory. 2013-07-06 06:46:07 +00:00
Mark Crane 94137ca96c Rename lib_pdo.php to pdo.php. 2013-07-06 06:38:59 +00:00
Mark Crane 6206f95440 Move functions.php to the resources directory. 2013-07-06 06:38:23 +00:00
Mark Crane 4048df535b Rename lib_functions.php to functions.php. 2013-07-06 06:37:57 +00:00
Mark Crane 0ace233dfb Move lib_cdr to the dev/apps/cdr directory. 2013-07-06 06:34:38 +00:00
Mark Crane 6da2c3734c Update the references for header.php and footer.php files to point the resources directory. 2013-07-06 06:29:50 +00:00
Mark Crane 08090fd1db Move header.php and footer.php files to the resources directory. 2013-07-06 06:28:29 +00:00
Mark Crane 502ff0b6c3 Move paging.php to the resources directory. 2013-07-06 06:26:16 +00:00
Mark Crane 08c4ac4ceb Change the references of persistform.php to resources/persist_form.php 2013-07-06 06:24:11 +00:00
Mark Crane 1a0308d05b Move persist_form.php to the resources directory. 2013-07-06 06:23:12 +00:00
Mark Crane 68df13b365 Rename persistform.php to persist_form.php. 2013-07-06 06:22:46 +00:00
Mark Crane 52628c713c Rename and move persistformvar.php to the resources directory. 2013-07-06 06:21:12 +00:00
Mark Crane 06f0668d52 Move persist_form_var.php to the resources directory. 2013-07-06 06:20:17 +00:00
Mark Crane 1d519e3c8a Rename persistformvar.php to persist_form_var.php for consistency. 2013-07-06 06:19:47 +00:00
Mark Crane cc443e251f Move the javascript calendar files to the resources directory. 2013-07-06 06:16:42 +00:00
Mark Crane 4afaddd3ca Remove source.xml 2013-07-06 06:08:45 +00:00
Mark Crane 52fd8a25ab Move menu.php to the resources directory. 2013-07-06 06:06:59 +00:00
Mark Crane ffffea0710 Change the path for includes/require.php to the resources directory. 2013-07-06 06:03:27 +00:00
Mark Crane 5308383441 Move require.php to the resources directory. 2013-07-06 05:56:50 +00:00
Mark Crane 9de79de256 Move check_auth.php to the resources directory. 2013-07-06 05:55:41 +00:00
Mark Crane eaec70679d Rename checkauth.php to check_auth.php. 2013-07-06 05:55:01 +00:00
Mark Crane a6e289ed5d Change includes/checkauth.php to resources/check_auth.php. 2013-07-06 05:50:55 +00:00
Mark Crane 7bce8527db Remove check_string its not being used anymore. 2013-07-06 05:43:53 +00:00
Mark Crane c288efc270 Move includes cmd to the resources directory. 2013-07-06 05:31:37 +00:00
Mark Crane 3f9087435f Remove upload.php file 2013-07-06 05:26:59 +00:00
Mark Crane 3bb44b58a4 move the file 2013-07-06 05:23:01 +00:00
Mark Crane e75f8922cb Move recaptchalib.php to the resources directory. 2013-07-06 05:21:34 +00:00
Mark Crane 9258b8aaf6 Move includes download.php to the resources directory. 2013-07-06 05:17:34 +00:00
Mark Crane a6ecd6411b Adjust the file name and path. 2013-07-06 05:16:55 +00:00
Mark Crane a7143e4278 Move email_address_validator.php to the resources directory. 2013-07-06 05:13:08 +00:00
Mark Crane d98ecbfcc5 Change a link to secure_download.php 2013-07-06 05:08:22 +00:00
Mark Crane 6c70561bf2 securedownload.php rename the file to secure_download.php 2013-07-06 05:06:21 +00:00
Mark Crane 0049d5d7bd Change the links referring to class_vcard.php. 2013-07-06 04:58:52 +00:00
Mark Crane bcd2602ac2 Rename class_vcard.php to vcard.php. 2013-07-06 04:53:29 +00:00
Mark Crane 11e506fe46 Move class_vcard.php to resources/classes directory. 2013-07-06 04:50:24 +00:00
Mark Crane 6005ce087f Add caller id number prefix to follow me. 2013-07-06 04:48:23 +00:00
Mark Crane 1b692179e9 Change the links to the wysiwyg.php file. 2013-07-06 04:47:10 +00:00
Mark Crane cd6a2928b2 move wysiwyg.php into the resources directory. 2013-07-06 04:44:42 +00:00
Mark Crane 30972c435d Add UUID to the log file lines for each call in the log. 2013-07-06 03:40:00 +00:00
Mark Crane cf0922ddb7 Add uuid filter for the log viewer. Thanks to soapee01. 2013-07-05 03:48:40 +00:00
James Rose 4d884015db Bug Fixes. Script errors due to nil value channel variables, and now sends email on busy fax. Better statistics reporting, busy/failure retries work as expected so it will now retry the same ecm/t38 type after a busy. 2013-07-01 20:08:08 +00:00
Mark Crane 9529d73fac Correct a variable name from _id to _uuid. 2013-06-28 00:14:14 +00:00
Mark Crane 4a57bc3f99 IVR Menu only allow direct dial calls to existing extensions. 2013-06-24 18:51:03 +00:00
Mark Crane 6b245369fa Fix a bug that made the the IVR Menu not play the long greeting when the short greeting was not provided. 2013-06-21 16:09:31 +00:00
Nate Jones 2c50b240bf Multilinguified Schemas 2013-06-21 16:02:05 +00:00
Nate Jones 5a94de2769 Multilinguified Active Queues 2013-06-21 13:46:47 +00:00
Mark Crane aa3ff50c7e Change the regex delimiter from | to ~ for ivr_menu.lua. 2013-06-21 07:04:48 +00:00
Mark Crane 06cccee647 Fix the sql query backup tool so that it will work for mysql. 2013-06-16 00:24:16 +00:00
Mark Crane 7949e3849e Remove cache that was too broad and caused "can't find user" errors under certain circumstances. 2013-06-15 06:59:07 +00:00
Mark Crane 0911eb1d16 Fix the sql query tool for mysql. 2013-06-15 03:35:15 +00:00
Mark Crane 6abe5e3cc6 Fix the menu titles for additional menus. The titles are provided by v_menu_languages table. Previous approach deleted languages for other menus which were needed for the menu titles to be displayed. 2013-06-11 19:04:40 +00:00
luis daniel lucio quiroz 8e551f64f7 a harmless dot 2013-06-11 03:48:58 +00:00
Mark Crane 9e1d856ec4 Change the paging results from 10 to 150 on devices. Remove the duplicate template select on devices. 2013-06-10 16:39:09 +00:00
Mark Crane f3bfc8527b Add the device line information for provisioning. 2013-06-09 21:39:18 +00:00
Mark Crane 673739d6e3 Allow lines to be added when a device is created. 2013-06-09 21:06:12 +00:00
Mark Crane cd207440a3 Update devices to provide customizable line information. 2013-06-09 20:46:14 +00:00
Nate Jones 10b852cdbc Multilinguified Queues (FIFO). Fixed permission issue in fifo_detail_delete.php. Fixed JS issue in fifo_detail_edit.php. 2013-06-09 05:44:19 +00:00
Mark Crane 3723001194 Move the references to includes/templates to resources/templates. 2013-06-09 05:05:17 +00:00
Mark Crane e02ac39270 Move includes/templates to resources/templates. 2013-06-09 05:03:13 +00:00
Mark Crane fcc76be714 Move includes/javascript to resources/javascript. 2013-06-09 04:54:33 +00:00
Mark Crane cf6bd84be7 Update the reference to captcha. 2013-06-09 04:52:46 +00:00
Mark Crane d55490a532 Move includes/qr to resources/qr. 2013-06-09 04:50:51 +00:00
Mark Crane 5df0b10ca2 Change the reference to includes/qr directory. 2013-06-09 04:50:19 +00:00
Mark Crane bde3e64e4b Move the references to jquery from includes/jquery to resources/jquery. 2013-06-09 04:45:18 +00:00
Mark Crane d49fe039a7 Move includes/captcha to resources/captcha. 2013-06-09 04:44:52 +00:00
Mark Crane 71177d2723 Move includes/jquery to resources/jquery. 2013-06-09 04:44:20 +00:00
Mark Crane d3b3448c3d Move the references to edit_area from includes/edit_area to resources/edit_area. 2013-06-09 04:42:20 +00:00
Mark Crane c8d81c40ba Move includes/edit_area to resources/edit_area. 2013-06-09 04:41:15 +00:00
Mark Crane d2b20d420b Move pop3 to the resources directory. 2013-06-09 04:35:27 +00:00
Mark Crane 35cd4d5081 Move the reference for includes/pop3 to resources/pop3. 2013-06-09 04:34:08 +00:00
Nate Jones 6712ce0c20 Multilinguified User Manager & Group Manager 2013-06-09 04:32:24 +00:00
Mark Crane c7ded21be4 move fpdf from the includes directory to resources. 2013-06-09 02:55:57 +00:00
Mark Crane e37449ce1e Change the path in the php files from includes/install to resources/install dir. 2013-06-09 02:52:13 +00:00
Mark Crane 567e554cb7 Move the includes/install to resources/install 2013-06-09 02:42:36 +00:00
Mark Crane c14ca04304 move the install class to the resources classes directory. 2013-06-09 02:37:28 +00:00
Mark Crane 646db16bc4 move install.php back to the resources directory. 2013-06-09 02:35:45 +00:00
Mark Crane 9789d60701 Move the install class to the resources directory. 2013-06-09 02:34:00 +00:00
Mark Crane 4cf60228cc create a classes directory in resources. 2013-06-09 02:33:24 +00:00
Mark Crane 4c8d3cd049 Fix the database class when a non standard path was used with the sqlite database. 2013-06-08 05:58:07 +00:00
Mark Crane ecb37a1f85 Run unbind_meta_app to fix checking voicemail from an external number. 2013-06-07 22:32:15 +00:00
Nate Jones 128081d9b1 Multilinguified SQL Query. Added Manage button on Select Database page to link to Databases app. Fixed bug in CSV download file extension. 2013-06-07 00:11:52 +00:00
Nate Jones 857002490e Multilinguified Upgrade Schema 2013-06-06 23:09:07 +00:00
Nate Jones 6436f0e9a1 Minor semantic change to page description: "Login into" > "Log in to" 2013-06-06 21:44:28 +00:00
Mark Crane 76b161afe8 Fix menu restore default duplicate bug for mysql. 2013-06-06 21:33:16 +00:00
Nate Jones a6a04c3bb2 Multilinguified Hot Desking, fixed bug where editing an existing Extension detected its own Unique ID and prevented the update. 2013-06-06 21:31:19 +00:00
Nate Jones 0976891947 Multilinguified SIP Profiles 2013-06-06 20:34:18 +00:00
Mark Crane a75c5317c8 Fix a problem with click to call. 2013-06-03 17:56:40 +00:00
Mark Crane ab367b3061 Apply gerrit308 revision to the dev branch. 2013-06-03 16:32:02 +00:00
James Rose e6dd9256eb escape special chars on fax file name before sending to fax_retry.lua 2013-06-03 16:20:32 +00:00
Mark Crane fcd64a1eaa Remove the spaces from the 'Voicemail Mail To' addresses. 2013-06-03 14:26:50 +00:00
Mark Crane cc34b69e64 Fix a bug with xml handler directory message count dofile. 2013-06-01 06:08:38 +00:00
Mark Crane 72abb83ca0 Fix the conference center member type so that it can mute participants when it is set to true. 2013-05-31 20:53:16 +00:00
Nate Jones 9a2cfc9e3f Multilinguified Hunt Groups. Fixed Copy functionality, and added JS extension prompt on Copy. 2013-05-30 00:51:49 +00:00
Nate Jones 29ad53b019 Multilinguified Copy button prompt. 2013-05-30 00:41:30 +00:00
Nate Jones 0c92a9691e Multilinguified Variables. 2013-05-29 22:27:04 +00:00
Nate Jones 3fa4cbb720 Mutlilinguified Modules 2013-05-29 21:46:48 +00:00
Nate Jones 71998eff7b Forgot to svn add app_languages.php files. Doh! 2013-05-29 21:16:24 +00:00
Nate Jones 6df44201f3 Multilinguified Call Center and Active Call Center. 2013-05-29 21:14:36 +00:00
Nate Jones 2179b9ebd1 Multilinguified IVR Menus 2013-05-29 17:20:50 +00:00
Nate Jones 9fbab08a53 Language var consistency correction - "dial_plan" to "dialplan". 2013-05-29 04:43:43 +00:00
Nate Jones 5599b5a076 Multilinguified Dialplan Manager, tweaked Inbound and Outbound Routes 2013-05-29 04:34:28 +00:00
Mark Crane 92e1d985e0 Fixed a problem when debug params is set to true and reloadxml command is used it threw an error about nil params on some things. 2013-05-28 19:01:18 +00:00
Mark Crane 98009bfd2f Ring group set CID prefix remove required so its not set to bold. Fix the translation problem for add so it will say add complete. 2013-05-28 17:53:21 +00:00
Mark Crane ece076ed98 Add session_start(); to app/edit before using the sessions. 2013-05-28 05:16:40 +00:00
Mark Crane 583f68cff5 Update the permissions to app/edit. 2013-05-28 00:53:28 +00:00
Mark Crane 4a2e4d15cd Fix the file provisioning. 2013-05-27 22:35:35 +00:00
Mark Crane 027a28b299 Remove the recordings_dir from the recordings dialplan it is no longer needed. 2013-05-27 18:57:23 +00:00
Mark Crane a11a32e606 Remove the need to define the recordings_dir to set variable in the *732 dialplan but leave it as an optional so it is backwards compatible and remains customizable. 2013-05-27 18:55:59 +00:00
Mark Crane 66ef3c181a Caller id prefix prevent error if caller_id_name is not provided. 2013-05-27 15:37:22 +00:00
Mark Crane 2680155022 Add a default delimiter for ring groups. 2013-05-27 15:08:54 +00:00
Mark Crane bacc8f5551 Add capability to the editor to work with grammar, script, php, xml, and provsion directories. 2013-05-25 16:19:40 +00:00
Mark Crane f00cde21df Remove all editors and replace same functionality with one code base in edit. 2013-05-25 16:11:52 +00:00
Mark Crane ef2e7aaad7 Remove xml_edit functionality is being replaced by edit. 2013-05-25 16:07:13 +00:00
Mark Crane 0f197cddbf Rename the script editor to edit. 2013-05-25 16:06:21 +00:00
Mark Crane 9c2284c12b Use the domain_name to find the domain_uuid for http/https provsioning. 2013-05-24 10:49:18 +00:00
Nate Jones 43da265762 Replaced domain_name with context in confirm.lua. 2013-05-24 07:47:10 +00:00
Mark Crane d08e4725b9 Fix a spelling problem. 2013-05-24 06:37:33 +00:00
Mark Crane 234cd80c4b Add a missing ). This fixes a problem with eavesdrop.lua reported at http://code.google.com/p/fusionpbx/issues/detail?id=426 2013-05-23 16:09:38 +00:00
Mark Crane df48067467 Add the translation framework to devices and add ability to show which extensions are assigned to a device. 2013-05-23 08:18:12 +00:00
Mark Crane 92e048b405 Fixed a syntax problem with click to call. 2013-05-22 19:33:47 +00:00
Mark Crane d8709267ea Fix a regression for click to call regarding auto-answer 2013-05-22 19:08:58 +00:00
Mark Crane 1e47d48313 Update the ring group change origination_disposition: ALLOTTED_TIMEOUT. 2013-05-22 17:07:02 +00:00
Mark Crane d534a2b0e7 Hide digits_dialed and dsn variable from the CDR table as a security enhancement. 2013-05-22 01:07:59 +00:00
Mark Crane d6bfe478af Fix an illegal offset error message when adding a domain. 2013-05-22 01:02:11 +00:00
Mark Crane b52c848d2e Show the conference center selection for conference rooms. 2013-05-22 00:58:29 +00:00
Mark Crane 5e82f74005 This fixes a problem where non-existent domains could cause the lua script to fail which would then leave the database connection open and eventually lead to denial of service when the database runs out of connections. Everyone using xml handler needs this update. 2013-05-20 11:38:58 +00:00
Nate Jones 1c17a78b12 Minor language updates to Ring Groups for clarity and consistency. 2013-05-18 23:43:11 +00:00
Nate Jones a038d5f300 Time Conditions, default value for Continue set to 'true' instead of false. 2013-05-18 22:12:56 +00:00
Nate Jones be11f452bb Multilinguified Menu Manager 2013-05-18 22:07:59 +00:00
Mark Crane ee7495206a Move the provisioning file into the gxp2200 directory. 2013-05-16 23:13:54 +00:00
Mark Crane c92bfd44b5 Add the gxp2200 provisioning directory. 2013-05-16 23:12:56 +00:00
Mark Crane feaeceea99 Add GXP2200 provisioning xml file. 2013-05-16 23:08:57 +00:00
Nate Jones 913c5a35b9 Multilinguified core/databases. Fixed permissions. 2013-05-15 03:02:52 +00:00
Nate Jones 6c26d16e58 Multilinquified core/apps. App Edit and Delete buttons hidden (for now, at least). 2013-05-15 02:19:44 +00:00
Nate Jones 2a3949e206 Fixed loading of user's Time Zone on edit. 2013-05-14 16:38:26 +00:00
Nate Jones 4cada4b382 Multilinguified Call Flows. 2013-05-14 15:09:15 +00:00
Nate Jones 8ab35186bb Removed dev artifacts ("# ") from Domain Settings app_languages.php. 2013-05-14 05:35:59 +00:00
Nate Jones a96ceb5d84 Mutlilinguified Default Settings and Domain Settings. 2013-05-14 05:34:04 +00:00
Mark Crane 189ae6f377 Copy the translations French and Spanish translations into the dev branch. 2013-05-13 00:50:43 +00:00
Mark Crane 9b8d55318f Fix the path used in the domains_edit.php file. 2013-05-12 19:14:04 +00:00
Mark Crane 456ab6fe24 Change the themes defined charset to UTF-8 for better multi-lingual support. 2013-05-11 17:03:38 +00:00
Mark Crane 74fb158cc7 Remove pre_answer from dialplan -> local extension. 2013-05-11 17:00:52 +00:00
Mark Crane baebf4377f Remove a redundant domain_uuid. 2013-05-11 15:40:06 +00:00
Mark Crane acc4e45791 Fix problem with domain class being redeclared. 2013-05-11 04:54:45 +00:00
Mark Crane 08abe0d708 Add a few more mac addresses for the auto provisioning and define more the of the Cisco SPA series phones. 2013-05-10 16:41:36 +00:00
Mark Crane 201fa05186 Remove the s from destinations_edit.php and destinations_delete.php. 2013-05-10 03:51:24 +00:00
Nate Jones 2e0a4be627 Multilinquified Contacts app (sans <select> options). Hid QR Code and vCard buttons on Contact Add page. 2013-05-10 00:40:24 +00:00
Mark Crane e2e8ffa527 Add ( and ) 2013-05-09 21:25:53 +00:00
Mark Crane 1a825be613 Mark the destinations that haven't been used in bold. 2013-05-09 21:00:15 +00:00
Mark Crane 2a8a08deae Fix the URL that the call broadcast directs to after sending calls. 2013-05-09 20:15:08 +00:00
Mark Crane 4b87cc7a86 When adding the inbound route add the dialplan_uuid to the matching destination_uuid 2013-05-09 19:56:16 +00:00
Mark Crane 7778956007 correct the file name. 2013-05-09 19:43:35 +00:00
Mark Crane ab4551a7a9 correct the file name. 2013-05-09 19:43:16 +00:00
Mark Crane ed4697f805 Conference center bug fix. 2013-05-08 10:35:23 +00:00
Nate Jones c951615a97 Multilinguified. 2013-05-08 01:17:52 +00:00
Nate Jones 92634e8acb Multilinquified and permissions fixed. 2013-05-07 23:38:12 +00:00
Nate Jones a5aa905bc8 Corrected browser title to display properly for Extension Edit and Add. 2013-05-07 23:11:37 +00:00
Mark Crane 7ecefc5185 Fix a syntax problem in intercept.lua 2013-05-07 21:41:33 +00:00
Mark Crane 24d4ab5163 It was my intent with the introduction of dialplan -> destinations to allow non numeric destination numbers this change enables non numeric destination numbers to be used with inbound routes. 2013-05-06 20:30:51 +00:00
Mark Crane 3c8c7525f3 Finish review of app_languages.php for advanced -> command. 2013-05-04 16:54:09 +00:00
Nate Jones fb678b5893 Multilinguified (SVG excluded). 2013-05-04 02:53:37 +00:00
Nate Jones 88b7c36793 Copy now writes XML file. Edit modified to check is_writable instead of is_readable. 2013-05-04 02:23:32 +00:00
Nate Jones 1c36af7e7e Modified to allow multilingual html <title> support, if set appropriately in app_languages.php. 2013-05-04 00:39:58 +00:00
Nate Jones b4d8c82055 Multilingualified the Extensions app. Added ability to preset the new extension when the Copy button is clicked. 2013-05-04 00:35:21 +00:00
Nate Jones 7f4e192a64 Minor fix in the Type select box, when editing a schema. Was "number", changed to "numeric". 2013-05-03 18:50:43 +00:00
Mark Crane 5e8f39c61d Same order number as the ivr menu lua script and the timeout can lead to cases where the timeout destination is sometimes called first. Fix the order number to clear up the problem. 2013-05-03 06:58:13 +00:00
Mark Crane 97cacc08a1 Change the version to FusionPBX 3.3. 2013-05-02 03:27:02 +00:00
Mark Crane f420efe32d Fix the Call detail records download and play ob_clean(); seems to have done the trick. 2013-05-02 03:19:38 +00:00
Mark Crane f422662176 Changes to the config.lua script where it is saved and how local.lua is included. 2013-05-02 02:16:49 +00:00
Mark Crane 37f4a88535 Make the lua scripts that use config.lua to use the new config function. 2013-05-02 01:10:45 +00:00
Mark Crane c86845fbf2 Add functions/config.lua to find the correct config.lua. 2013-05-02 00:57:17 +00:00
Mark Crane 38caa3d059 Change paths for linux package installs /var/lib/fusionpbx to /var/lib/fusionpbx/db and scripts directory to /var/lib/fusionpbx/scripts if that directory exists. 2013-05-02 00:50:11 +00:00
Mark Crane 9e8f02288d Add the context to valet park. 2013-05-01 19:37:06 +00:00
Mark Crane dcfb4c8cf2 Fix account code for call forward and Park slots to disabled by default. 2013-05-01 18:14:13 +00:00
Mark Crane 7ab8007ec7 Add valet park that uses mod_valet. 2013-05-01 17:59:14 +00:00
Mark Crane 1e6656b5cd Disable park_slots by default. 2013-05-01 17:58:31 +00:00
Mark Crane 928c03f347 Uncomment and fix the follow me caller id prefix but only show it for people with the follow_me_cid_name_prefix. Add follow me to the app menu. 2013-05-01 17:05:53 +00:00
Mark Crane 9b9c0429a6 Fix a little more indentation on the xml cdr. 2013-04-30 16:44:51 +00:00
Mark Crane 79d8736bca Increase the indention to improve code consistency. 2013-04-30 15:50:46 +00:00
Mark Crane 979388198a Fix the path in v_xml_cdr_import.php change from mod to app. 2013-04-30 10:05:34 +00:00
Mark Crane 5a19ea285b Fix the config.php directory path in the install.php. 2013-04-30 09:31:17 +00:00
Mark Crane 564898e01f Secure xml cdr with http_enabled set to false if the url param is not found in the xml_cdr.conf.xml 2013-04-30 09:30:44 +00:00
Mark Crane 48ac0e4efc The db_path should already exist. 2013-04-30 08:22:10 +00:00
Mark Crane dfb682d010 Only include section: configuration for the lua scripts that exist. 2013-04-30 07:17:47 +00:00
Mark Crane ec49f3d6b0 Update the method to connect to the database with lua. 2013-04-29 23:29:46 +00:00
Mark Crane 3d2f72d2d4 If VM local after email is set to false and email address is not provided still save the voicemail message and send the mwi. 2013-04-29 17:30:13 +00:00
Mark Crane f2d57875e5 Change fetchAll to fetch. 2013-04-29 15:09:05 +00:00
Mark Crane 36779b6118 Add option to for domain based provisioning template directory.
Example: provision/domain_name
2013-04-29 14:45:25 +00:00
Mark Crane 96749aa89b When using the install or upgrade save vars.xml file. 2013-04-28 07:28:04 +00:00
Mark Crane 134a16a925 Make the provisioning use device extension table. 2013-04-28 07:24:41 +00:00
Mark Crane 6122bf5820 Fix the gateway copy. 2013-04-28 04:36:30 +00:00
Mark Crane 7dda6d817a Add confirm-copy translate 2013-04-28 04:09:35 +00:00
Mark Crane aa5c7e83c6 Change the translation gateway copy tag and the reference to gateway_copy.php. 2013-04-28 03:51:39 +00:00
Mark Crane 34cb4d81e6 Unix friendly changes. 2013-04-27 06:40:44 +00:00
Mark Crane 7e3c3f76fc Remove test code. 2013-04-25 20:08:08 +00:00
Mark Crane f154e24111 Add a little more security to the contact search and improve the search functionality. 2013-04-25 19:33:15 +00:00
Mark Crane 1cf5f6e455 Fix caller id name prefix for hunt groups don't use # delimiter when there is no prefix. 2013-04-25 01:30:11 +00:00
Mark Crane c4c9973395 Fix the code that makes sure the moderator and participant pin numbers are unique. 2013-04-24 22:25:44 +00:00
Mark Crane 788cee45a2 Wrap the recordings upload with the correct permission as recommended here.
http://code.google.com/p/fusionpbx/issues/detail?id=400
2013-04-24 18:29:46 +00:00
Mark Crane 7031d84594 change ;loops= to {loops= 2013-04-24 17:18:00 +00:00
Nate Jones 44e31ac1b7 Fixed translation on script editor file options. 2013-04-24 03:28:57 +00:00
Nate Jones a01ef34bb5 Fixed permissions 2013-04-24 02:57:16 +00:00
Nate Jones 8cef572e78 Fix permissions 2013-04-24 02:47:37 +00:00
Mark Crane 8ea0b2a95d Hunt Groups - Change the link for the menu after changing the path. 2013-04-23 01:49:03 +00:00
Mark Crane eb468ea63f Rename the hunt_group directory to hunt_groups 2013-04-23 01:47:41 +00:00
Mark Crane b64bb17073 Add a few references to the alias. 2013-04-22 23:15:36 +00:00
Mark Crane a153858ff3 Little more cleanup on conference center after removing v_meeting_pins. 2013-04-22 23:05:08 +00:00
Mark Crane ee96cfe4bd Fix a conference center room bug that prevented the page from working correctly. 2013-04-22 22:47:03 +00:00
Mark Crane 9baec9e974 Make it possible to use # and * in the IVR Menu. 2013-04-21 01:58:41 +00:00
Mark Crane 18d1f17807 Add the new XML handler. 2013-04-20 23:28:45 +00:00
Mark Crane a084cd421b htmlentities used to show < and > in the log viewer 2013-04-20 00:16:36 +00:00
Mark Crane 7141b05e4a Add park+ to the features.cf for the vvx phones to support call park using mod_valet. 2013-04-18 22:48:01 +00:00
Mark Crane 4b935556a4 Change Group List to Groups. 2013-04-18 17:23:51 +00:00
Mark Crane 8cdc4c7748 Fix a little the schema field list display so it looks correct. 2013-04-18 16:54:01 +00:00
Mark Crane 8ac6976f63 Thanks NYSolutions for donating a new provisioning template for the Polycom VVX phones. 2013-04-18 16:43:02 +00:00
Mark Crane 2f56bc0b56 Security improvement dial_string.lua 2013-04-18 07:30:55 +00:00
Mark Crane 538d634a6f Update the table structure required for conference center. 2013-04-16 17:11:05 +00:00
Mark Crane 6e503468ab Additional cleanup in the conference rooms including getting rid of deprecated code. 2013-04-16 08:30:06 +00:00
Mark Crane d1fed3b7f4 Fix the queries that check the pin number. 2013-04-16 07:39:31 +00:00
Mark Crane 24a7b5f77d Fix the conference room search tool and add nowrap to the pin number table headers. 2013-04-16 07:11:41 +00:00
Mark Crane 8f23f59aa8 Simplify the pin management for conference center. 2013-04-16 07:03:17 +00:00
Mark Crane 69ca8d88d5 Update the the conference center lua script pin management. 2013-04-16 06:57:42 +00:00
Mark Crane d0d7424447 Check to see if the prep_statement is true. 2013-04-16 01:53:05 +00:00
Mark Crane f14500a40a Fix a voicemail greeting delete problem as described here.
http://code.google.com/p/fusionpbx/issues/detail?id=404
2013-04-15 15:49:42 +00:00
Mark Crane c85623f662 MWI improvements for voicemail. 2013-04-13 08:19:19 +00:00
Mark Crane 102d368aac Fixed the following issue 396: ring_group.lua aborts when ring group is empty. 2013-04-13 07:34:31 +00:00
Mark Crane 31793cf030 Enhance the extension class to include voicemail database management. 2013-04-12 23:30:48 +00:00
Mark Crane cccc4dd9d9 Remove the changes of the previous commit. 2013-04-12 19:08:22 +00:00
Mark Crane ee9a3ce840 Make sure the voicemail directory exists. 2013-04-12 18:58:53 +00:00
Mark Crane 90711f34bc Update the lua scripts to use the new mkdir function. 2013-04-12 18:46:02 +00:00
Mark Crane d747bc4542 Add a mkdir function that is compatible to both unix and windows. 2013-04-12 18:27:56 +00:00
Mark Crane cc0f4b1f61 Use call_timeout in the dial string. 2013-04-12 09:33:34 +00:00
Mark Crane 3ea3ba1162 Remove the commented out call_timeout. 2013-04-12 09:30:59 +00:00
Mark Crane fb0c3ba57d Fix one of the file names and change a description. 2013-04-11 17:19:17 +00:00
Mark Crane a5b183fd88 Change a variable name. 2013-04-11 17:12:29 +00:00
Mark Crane f49414b477 Change the tables to schemas. 2013-04-11 16:56:30 +00:00
Mark Crane 212b9a8d78 Fix a bug that affected dialplan entries for ring groups when using MySQL. Add additional exception handling. 2013-04-11 10:20:50 +00:00
Mark Crane 4fc776ddd4 Ensure that the follow me data is added to the db correctly. 2013-04-11 08:15:44 +00:00
Mark Crane 94adaa61a6 Fix domain_uuid for directory.lua. 2013-04-10 07:52:17 +00:00
Mark Crane dd14687991 Correct the permission for device delete. 2013-04-09 23:26:20 +00:00
Mark Crane cac9c03279 Update the delete link. 2013-04-09 22:51:36 +00:00
Mark Crane eacb503fab Changes the names from hardwware_phones and phones to devices. 2013-04-09 22:33:42 +00:00
Mark Crane 9374f6ba4b Change hardware phones to devices in the provision index.php file. 2013-04-09 22:27:02 +00:00
Mark Crane 761ed0f891 Get rid of trailing whitespace. 2013-04-09 21:46:23 +00:00
Mark Crane 8e94683576 Change to the freeswich variable for context. 2013-04-09 19:21:20 +00:00
Mark Crane 4b8a4ca8a1 Remove config.js 2013-04-09 19:20:36 +00:00
Mark Crane b22db7a3f7 Remove a deprecated file that is no longer needed. It was replaced by directory.lua. 2013-04-09 19:20:15 +00:00
Mark Crane fc5714ec3d Dump scripts that are no longer used. 2013-04-09 18:19:19 +00:00
Mark Crane fc6865456e Fix a spelling mistake 2013-04-09 17:04:19 +00:00
Mark Crane 74092ed4a6 Remove call_timeout from the extension xml will put it in a better location. 2013-04-05 23:22:04 +00:00
Mark Crane 9d8c13f43a Remove call_timeout from the script have a better place to put it. 2013-04-05 23:21:13 +00:00
Mark Crane 7005e120c5 Replace \ with / before writing it to config.lua. 2013-04-05 01:03:45 +00:00
Mark Crane 09bb1a1cc1 Prevent errors when someone abandons a call to conference center before providing a pin number. 2013-04-03 07:38:29 +00:00
Mark Crane 8266953887 Prevent an error from being displayed when someone abandons leaving a voicemail during the greeting. 2013-04-03 07:26:01 +00:00
Mark Crane a43845a5c8 Fix call prompt for follow me so that when its disabled that it doesn't prompt to accept the call. 2013-04-02 23:02:43 +00:00
Mark Crane ff19f6d64a Fix the new call timeout. 2013-04-02 22:58:09 +00:00
Mark Crane f3a49c39c1 Add call_timeout to the xml handler. 2013-04-02 07:38:52 +00:00
Mark Crane feda5b3fcf Add call_timeout to extensions. 2013-04-02 07:36:28 +00:00
Mark Crane da3beb71b3 Make the call timeout adjustable per extension. 2013-04-02 07:35:56 +00:00
Mark Crane e4448fe4d6 Move the referred_by into the 'if statement' 2013-04-02 05:44:51 +00:00
Mark Crane 0ffbda23db Pass the database object. 2013-04-02 04:39:42 +00:00
Mark Crane 03f5952c17 Move the semi-colons to the correct spot. 2013-04-01 22:05:39 +00:00
Mark Crane 616bb45333 Fix a Ring group issue for a missing dialplan this affected people using MySQL. 2013-04-01 21:33:50 +00:00
Mark Crane 900d581c0d Change tables to schema in the virtual tables. 2013-04-01 20:25:40 +00:00
Mark Crane 9009f98a7e Blind transfer to an extension that doesn't have voicemail if it timesout send the call back. 2013-03-31 08:22:58 +00:00
Mark Crane 4930d592e1 Adjust the LUA database connection to accommodate native PostgreSQL support and the recent change to the database connection syntax. 2013-03-31 08:18:41 +00:00
Mark Crane 0e9c9c5753 Fix the delete link for xmpp. Thanks _trine for reporting the issue. 2013-03-30 16:33:12 +00:00
Mark Crane 3e3715ab76 Release the database connection before sending the caller into the conference. 2013-03-27 07:07:00 +00:00
Mark Crane cff505e565 Fix a few bugs caused by changes to provisioning on the dev branch. 2013-03-26 23:51:22 +00:00
Mark Crane 60e5957c73 Rename the file. 2013-03-26 23:14:25 +00:00
Mark Crane b045aa2450 Rename the file. 2013-03-26 23:14:07 +00:00
Mark Crane 1b16d3277f Rename the file. 2013-03-26 23:13:48 +00:00
Mark Crane c1173c4af1 Rename the file. 2013-03-26 23:13:26 +00:00
Mark Crane 8353b032dc Rename the file. 2013-03-26 23:13:07 +00:00
Mark Crane 6cd27652c7 Rename the file. 2013-03-26 23:12:51 +00:00
Mark Crane 11c72f8996 Rename the file. 2013-03-26 23:12:31 +00:00
Mark Crane fc00dcd20e Rename the file. 2013-03-26 23:12:12 +00:00
Mark Crane d0458936bd Rename the file. 2013-03-26 23:11:50 +00:00
Mark Crane 9455ba8f78 Rename the file. 2013-03-26 23:11:33 +00:00
Mark Crane c3b75ffa08 Rename the file. 2013-03-26 23:10:34 +00:00
Mark Crane 939427aa39 Rename files removing table and replace with schema. 2013-03-26 23:09:51 +00:00
Mark Crane 37c77d22d9 Rename files removing table and replace with schema. 2013-03-26 23:09:16 +00:00
Mark Crane e344379ba8 Change tables to schemas to be a little more concise. 2013-03-26 23:07:35 +00:00
Mark Crane 2017704bf5 Change the active conference links into buttons. 2013-03-26 19:32:38 +00:00
Mark Crane ccbb93266d A few minor changes to install.php. 2013-03-26 19:00:09 +00:00
Mark Crane 0fc7641f61 Remove the set for db_path variable which replaced the variable in config.php. 2013-03-26 18:35:19 +00:00
Mark Crane 307d82bb1f Add ability to rename tables. 2013-03-26 06:17:35 +00:00
Mark Crane f2a159b735 Change local_stream://moh to local_stream://default. 2013-03-25 21:23:31 +00:00
Mark Crane bb30011c2a Remove virtual name from the virtual tables tool to make it more generic. 2013-03-25 19:15:27 +00:00
Mark Crane 5742787a57 Remove effective_ from the caller id on the hunt group. 2013-03-25 17:02:02 +00:00
Mark Crane c5bc219836 Update the service add link. 2013-03-25 16:12:11 +00:00
Mark Crane 16dafaab81 Rename virtual_table_data_view.php to table_data_view.php. 2013-03-21 01:22:13 +00:00
Mark Crane 2ab5020e50 Rename virtual_table_data_types_name_value_edit.php to table_name_value_edit.php. 2013-03-21 01:20:22 +00:00
Mark Crane 0742e6c64c Rename virtual_table_data_types_name_value_delete.php to table_name_value.php. 2013-03-21 01:17:20 +00:00
Mark Crane a6f1ac9904 virtual_table_data_types_name_value.php to table_name_values.php. 2013-03-21 01:15:19 +00:00
Mark Crane 7dbb26b988 Rename virtual_table_fields_delete.php to table_field_delete.php. 2013-03-21 01:06:56 +00:00
Mark Crane ddeb4dea6e Rename virtual_table_fields_edit.php to table_field_edit.php. 2013-03-21 01:05:10 +00:00
Mark Crane 5cbff153be Rename virtual_tables_import.php to table_import.php. 2013-03-21 01:03:34 +00:00
Mark Crane 83705cc4dd Rename virtual_tables_edit.php to table_edit.php 2013-03-21 01:02:00 +00:00
Mark Crane 457d9cd01f virtual_tables_delete.php to table_delete.php 2013-03-21 01:00:17 +00:00
Mark Crane a5b444d239 Rename virtual_tables.php to tables.php. 2013-03-21 00:57:11 +00:00
Mark Crane 5b3c531054 rename virtual_table_fields.php to table_fields.php 2013-03-21 00:55:49 +00:00
Mark Crane 6171cfa069 rename the file 2013-03-21 00:54:49 +00:00
Mark Crane e21292cf07 rename the file 2013-03-21 00:53:00 +00:00
Mark Crane f21461dc85 Rename the virtual tables directory to just tables. 2013-03-21 00:38:55 +00:00
Mark Crane e12cc0f05e Fix the recordings directory. 2013-03-20 17:38:19 +00:00
Mark Crane 648ef006cc Rename the hardware phones to devices. 2013-03-20 16:53:37 +00:00
Mark Crane 3ce7d717ca Rename the file to devices.php. 2013-03-20 16:22:44 +00:00
Mark Crane db3e007a12 hardware_phone_edit.php renamed to device_edit.php 2013-03-20 16:21:24 +00:00
Mark Crane 439902d3eb Rename the file. 2013-03-20 16:20:52 +00:00
Mark Crane 7c7c475a16 Rename hardward_phones to devices 2013-03-20 16:20:15 +00:00
Mark Crane 8a4ba2566e Adjust the install path implementation. 2013-03-20 16:06:28 +00:00
Mark Crane 0e2551ed09 Fix the restore default for redirect URL for those using the web root/fusionpbx dir. 2013-03-20 14:25:23 +00:00
Mark Crane c62a7ec9f9 Add install paths to match the Debian packages that rneese is working on. 2013-03-20 13:38:54 +00:00
Mark Crane 04d1c667cb Fix the registrations link on the SIP Status page. 2013-03-16 20:11:29 +00:00
Mark Crane f19970b92e Add a new xml cdr permission to allow normal users to see all cdr records for a domain.
permission: xml_cdr_domain
2013-03-16 15:14:36 +00:00
Mark Crane 9c896e0e23 Change kick and kick all to uuid_kill so that the participant's call is logged to the database. Fix recordings and the announce that the call is being recorded for the first person to join the conference. Add a permission to control the conference session 'details' column in the conference sessions so CDR link can be hidden from the user. Don't allow a conference moderator and participant to use the same pin number. 2013-03-15 17:12:13 +00:00
Mark Crane 9324381578 Fix caller id prefix for hunt groups. 2013-03-15 14:20:28 +00:00
Mark Crane b6731071a4 Improve the default.xml sip profile template. 2013-03-15 04:43:18 +00:00
Mark Crane 75a2b9250e Remove trailing white spaces from mwi.lua. 2013-03-14 03:04:47 +00:00
Mark Crane c899d4a62d Moved the extension xml function into the extension class point this code to it. 2013-03-14 02:54:06 +00:00
Mark Crane 1c00040a96 Add an optional mwi script to ensure the message waiting light is on for all models of phones. 2013-03-14 02:52:57 +00:00
Mark Crane baf3907be4 Don't require music on hold for call center. 2013-03-13 16:45:17 +00:00
Mark Crane d5c71694a2 Fix the files path for the provision editor. 2013-03-13 14:33:37 +00:00
Mark Crane b23cf69a81 Add sqlite:// to the lua scripts to match the new syntax. Add debian package files produced by rneese. 2013-03-13 14:25:39 +00:00
Mark Crane 6929af625b Fix a few a few settings that are required to add extension_uuid to xml cdr. 2013-03-13 05:57:41 +00:00
Mark Crane 7af82a6ece Move save_extension_xml to the extension->xml class method. 2013-03-10 05:53:18 +00:00
Mark Crane 1abc8fc935 Add extension_uuid to xml cdr. 2013-03-10 05:39:45 +00:00
Mark Crane bea0c82e2d Remove the % wild card for the xml cdr search. This allows the user to specify it to meet there needs. For example show all calls that start with a 1 do the following 1%. If you want to find a call containing a number %208%. 2013-03-07 19:42:40 +00:00
Mark Crane 7ae8685a87 Fix the link for download and play on the call detail records. 2013-03-01 18:37:42 +00:00
Mark Crane 8e8149a684 Add recordings to the ring back list. 2013-03-01 07:28:40 +00:00
Mark Crane c06ccfd33e Conference, announce that the conference is being recorded for active conferences when its changed in the gui. Add a pin search tool for conference rooms. Finish conference center templates. 2013-02-28 18:55:36 +00:00
Mark Crane c9748225ea Move the conference center templates to the resources directory. 2013-02-28 18:20:01 +00:00
Mark Crane 41d4ece529 Add the resources directory for scripts/app/conferences 2013-02-28 18:19:21 +00:00
Mark Crane 2d1ff5dc42 When the conference call is record is selected then play an announcement for an active call.
Add a permission for showing the active conference video column.
2013-02-27 11:06:44 +00:00
Mark Crane 14f41e4752 Add conference recording play and download. Change the dialplan from lua conference_center.lua to lua 'app.lua conference_center'. Add a few more conference center permissions. 2013-02-27 10:10:24 +00:00
Mark Crane eb3059fdc9 Move the conference center lua scripts to freeswitch/scripts/app/conference_center directory. 2013-02-27 09:50:57 +00:00
Mark Crane d74400fc80 Remove the apply settings message. 2013-02-24 06:48:31 +00:00
Mark Crane 7e8d8ab717 Fix the sql query backup tool. Tested with postgres and sqlite. 2013-02-23 02:54:41 +00:00
Mark Crane 6125670757 Put the ring groups in order based on the delay and extension number. 2013-02-23 01:46:52 +00:00
Mark Crane 5abd0f871c Fix the ring group sequence select option. 2013-02-22 21:57:18 +00:00
Mark Crane 15323f8f51 Fixed the following bug. When dialing *99 it produces this error.
2013-02-21 18:39:28.016638 [ERR] mod_lua.cpp:198 ...app/voicemail/resources/functions/record_message.lua:39: bad argument #1 to 'len' (string expected, got nil)
2013-02-22 20:50:44 +00:00
Mark Crane 78f2cbe010 Work on a problem with http_user_agent() that affects a limited number of systems. 2013-02-20 11:48:19 +00:00
Mark Crane 09bafd825c Replace ${dsn} with $${dsn} 2013-02-19 22:15:29 +00:00
Mark Crane 80dac680ce Fix the ring group timeout action so that is not executed when a call is parked using the approach used by hunt groups. 2013-02-19 20:25:50 +00:00
Mark Crane ac2eac17db Add pre_answer to local_extension dialplan. 2013-02-14 07:40:41 +00:00
Mark Crane 96a4ab0146 Add pre_answer to ring groups. 2013-02-14 07:20:52 +00:00
Mark Crane d558d2da16 Set http_host to HTTP_HOST. 2013-02-13 07:17:24 +00:00
Mark Crane cbe7849de8 Fix a problem with the multi-domain login and make it easier to understand. 2013-02-13 06:51:09 +00:00
Mark Crane 2bd04da04b Add ivr menu cid prefix. 2013-02-12 11:19:52 +00:00
Mark Crane 05c274e9c5 Add the ring group leg delay and timeout to ring_group.lua. 2013-02-12 02:56:46 +00:00
Mark Crane 2f3cf8ec05 Update ring groups add enterprise originate as an option along with leg delay and leg timeout. 2013-02-12 02:49:49 +00:00
Mark Crane cb165c9128 Add a little additional formating for the index.php. 2013-02-11 15:11:51 +00:00
Mark Crane 9deaed2fa0 Clear additional values from the Session array when switching domains. 2013-02-11 14:47:40 +00:00
Mark Crane 363bebafb2 Only add the user account if the ldap authentication was successful. 2013-02-11 14:46:41 +00:00
Mark Crane c5387fb459 Add PROJECT_PATH for the follow me autocomplete. 2013-02-10 08:25:42 +00:00
Mark Crane 59b369e7e9 Add ability to customize login.php and index.php. 2013-02-10 02:12:23 +00:00
Mark Crane 3036f64d4e Fix a menu regression which was caused by multi-lingual changes. This reenables customized menu titles that are protected is set to true. 2013-02-09 20:30:36 +00:00
Mark Crane d9e45ea941 Remove ignore_early_media variable for the hunt group it caused calls to fail for external calls. 2013-02-09 02:24:39 +00:00
Mark Crane 77b3acd6f0 Add contact_category, phone_description, and address_description to the contacts tool. 2013-02-07 09:57:03 +00:00
Mark Crane ac71623bfd Add transfer_ringback to system -> variables. 2013-02-06 13:59:43 +00:00
Mark Crane 71be36fce3 Fix a bug in the new voicemail for single tenant systems where the domain_uuid shows as nil. 2013-02-06 05:20:59 +00:00
Mark Crane fc4e00380a Update the schema update sql code. 2013-02-03 15:25:05 +00:00
Mark Crane f192adef45 After adding ringback to the dialplan add the loopback to call forward and follow me. Doing this resolves issue with outbound caller id, multiple conditions on outbound routes, fail over and more. 2013-02-03 06:47:19 +00:00
Mark Crane 875e161526 Add a missing comma to fix a bug where the install only adds two variables. To fix existing systems with this problem update the code to get thix fix then run addvanced -> upgrade schema. 2013-02-02 23:09:09 +00:00
Mark Crane 5d1a7374cb Improve some of the text in conference center. Toggle mute all with unmute all. A few other minor adjustments. 2013-02-02 09:54:20 +00:00
Mark Crane c1c611adb6 After logout redirect back to the login. 2013-02-02 06:53:35 +00:00
Mark Crane d590571c6e Add title to 'Mute All' so that however displays 'Mute all but moderator'. Fix the lock button label on the active conferences. 2013-02-02 06:32:40 +00:00
Mark Crane 09747e76dd Add mute all and end conference to active conferences. 2013-02-01 15:49:37 +00:00
Mark Crane bbfbcf7729 Enable the sounds true/false for conference_center.lua 2013-02-01 12:27:57 +00:00
Mark Crane 409386a9b4 Add sounds true/false to conference rooms. 2013-02-01 12:23:39 +00:00
Mark Crane 6f1d725258 Correct the redirect path after save the call center queue. 2013-02-01 12:09:43 +00:00
Mark Crane d7f68194b9 Check variables correctly to see if ringback is already set. 2013-02-01 04:40:54 +00:00
Mark Crane c62a03b6ce Add ringback and domain_uuid to the variables. 2013-02-01 04:29:48 +00:00
Mark Crane 1d71b3dfde Fix ringback for call forward and followme. 2013-02-01 01:28:53 +00:00
Mark Crane ee2eefd2fc Remove domain_name variable from the extension which hurts single tenant systems. 2013-01-31 22:07:01 +00:00
Mark Crane cfdd1b597d Add two variables to extensions domain_name and domain_uuid. 2013-01-31 07:10:40 +00:00
Mark Crane fa42fa983d Change the voicemail recording max length from 30 seconds to 300 seconds. 2013-01-30 23:08:47 +00:00
Mark Crane a7d817f1b2 Change external_sip_ip and external_rtp_ip from auto-nat to $${local_ip_v4}. This will work better when the system is outside of nat and better for systems that is completely inside the network. 'auto-nat' only works for those using firewalls with UPnP and PMP enabled on their firewall. The number of firewalls that have this enabled doesn't seem to be a large enough to justify using it as the default. 2013-01-30 07:37:26 +00:00
Mark Crane 707ed29702 Comment out dbh:release for now until certain that is works 100%. 2013-01-30 06:19:25 +00:00
Mark Crane a0498d61ff If the extension_uuid is not found then set continue to false. 2013-01-30 02:29:59 +00:00
Mark Crane c25139f312 Prevent an error when voicemail box does not exist. 2013-01-29 21:24:48 +00:00
Mark Crane 9761a3ef0e Fix an error with trim on the xm handler. 2013-01-29 21:02:15 +00:00
Mark Crane fa280e433a Send not found xml response when an extension does not exist. 2013-01-29 19:42:38 +00:00
Mark Crane 832c0e3ca0 More work on the sqlite upgrade schema bug. 2013-01-29 09:13:18 +00:00
Mark Crane 37f31eb280 Fix a sqlite upgrade schema bug. 2013-01-29 02:15:12 +00:00
Mark Crane 990835e9bc Enable the IVR Menu Direct Dial. Remove * from the direct dial for security to prevent calls to feature codes. 2013-01-27 07:28:19 +00:00
Mark Crane 96ad21eddc Fix ringback on directory.lua. 2013-01-27 03:33:34 +00:00
Mark Crane 807d71299a Fix ringback on directory.lua. 2013-01-26 22:15:41 +00:00
Mark Crane f07b5a8970 Follow Me, and Call Forward fix the ringback, and replace loopback with bridge to gateway for external calls. 2013-01-25 21:57:39 +00:00
Mark Crane db56ab8962 Add a missing comma for the list of fields in conference center. 2013-01-25 17:06:43 +00:00
Mark Crane 1a2e661391 Update active conference add a column to identifier the moderator. 2013-01-25 15:42:52 +00:00
Mark Crane f6825bb786 Add a new conference center class. Add moderator and participant pins to the conference rooms. 2013-01-25 09:02:15 +00:00
Mark Crane d3f4dcc204 Adjust the app -> voicemail show 150 results per page instead of 10. 2013-01-24 23:01:09 +00:00
Mark Crane 398e4c6e9a Adjust the path to permission class. 2013-01-23 19:44:52 +00:00
Mark Crane c818d78a6d Fix the reference to the new permission class. 2013-01-23 18:57:25 +00:00
Mark Crane b712498d62 If you customize the permissions and restore the menu it puts the permissions back to default. Therefore I'm removing the restore permissions on the menu class and moving it to the a button on the group permissions page. 2013-01-23 15:56:00 +00:00
Mark Crane 1e48b1d49a Rename grouplist.php to groups.php to conform to the naming convention. 2013-01-23 15:50:07 +00:00
Mark Crane bfcdc90db9 Add restore default permissions to the permissions page. 2013-01-23 15:49:02 +00:00
Mark Crane bba1e4c644 Change the label from 'Conference Tools' to 'Tools' 2013-01-23 14:54:14 +00:00
Mark Crane f8e5bc9602 Record the conference call using the option from conference center. 2013-01-23 14:48:47 +00:00
Mark Crane e711cd0bfc Remove trailing white space and update the comments. 2013-01-23 13:49:51 +00:00
Mark Crane 9947fe2c31 When adding an inbound route escape the + with \+. 2013-01-21 22:49:34 +00:00
Mark Crane 6b7b697d41 Fix a bug with destinations when a fax destination was not selected it prevented update from working. 2013-01-21 18:19:13 +00:00
Mark Crane 2a9feb5277 Fix the install.php reference to logout.php. 2013-01-21 03:40:38 +00:00
Mark Crane ce7fc92eb0 A few changes from the merge. 2013-01-20 01:13:19 +00:00
Mark Crane dd70941a22 Update the version to FusionPBX 3.2. 2013-01-19 20:10:54 +00:00
Mark Crane c008aacc85 Adjust conference center user group permission. 2013-01-19 19:54:05 +00:00
Mark Crane 6cf3dff26c Remove the commented line. 2013-01-19 19:51:16 +00:00
Mark Crane 91b96c3a41 Adjust the voicemail permissions for better security. 2013-01-19 19:47:21 +00:00
Mark Crane d01ec750bb Voicemail set the password field from text to password. 2013-01-19 19:06:45 +00:00
Mark Crane 7153e5b75c On call forward if the extension exists use sofia_contact and set the presence_id. 2013-01-19 17:11:04 +00:00
Mark Crane 6317c6ec63 If the extension does not exist send "not found" xml. 2013-01-19 16:44:56 +00:00
Mark Crane d6ece94578 Add conference center to the destination select list. Hide the older conferences if there are no conferences in the database. 2013-01-19 06:55:13 +00:00
Mark Crane 80d49d2c77 Add the start of the app_languages.php file for ivr menu. 2013-01-19 06:43:05 +00:00
Mark Crane 5c11ed0654 Fix the destination delete. 2013-01-19 06:27:18 +00:00
Mark Crane 31b0d87fd2 After saving the call forward, follow me redirect it back to the user dashboard. 2013-01-19 02:44:52 +00:00
Mark Crane 7d9bf27975 Fix all remaining alignment issues for IE with a small adjustment to the style sheet. 2013-01-19 02:36:51 +00:00
Mark Crane 3e5f32aee8 Fix alignment issues for IE. 2013-01-19 02:24:18 +00:00
Mark Crane 360b45bac6 Make the install and upgrade of the scripts directory included directories, sub directories and files. 2013-01-19 02:15:08 +00:00
Mark Crane 966b16c1cf Adjust the dialplan entries for the new voicemail. 2013-01-19 00:19:42 +00:00
Mark Crane 60aed98919 Add voicemail with multi-lingual voicemail to email templates. Voicemail.lua has been broken down to individual files and a few additional directories to make it easier to manage in the long run. 2013-01-19 00:16:01 +00:00
Mark Crane 0dd2e848b4 Add missed calls to CDR and CDR statistics. 2013-01-17 18:32:16 +00:00
Mark Crane ce1c49d909 Fix a bug with follow me where disabling it didn't clear the dial string. 2013-01-17 06:14:31 +00:00
Mark Crane 54614de30f Adjust the permissions of app -> destinations. 2013-01-17 04:27:28 +00:00
Mark Crane d8b7206eee Conference Center: Fix the selected value for wait for moderator. 2013-01-17 04:08:22 +00:00
Mark Crane 167c632ad1 Voicemail - When reviewing voicemail the menu 0 goes to the main menu. When a voicemail is being left use 0 will send the call to the operator. When 9 is pressed fix the emailed notification. 2013-01-17 02:09:45 +00:00
Mark Crane 1d675d5b81 Add a short delay after answering the company directory to ensure the audio is ready. Also if you don't select any of the entries of the search provide an opportunity to search again. 2013-01-17 01:11:43 +00:00
Mark Crane 6cfac578bc Update the the file type with utf-8 format without the BOM. 2013-01-16 18:50:53 +00:00
Mark Crane 58e00e580b Fix a notice error on the menu. 2013-01-16 06:38:45 +00:00
Mark Crane 6019c49f41 Fix caller id prefix for hunt groups. 2013-01-16 01:41:07 +00:00
Mark Crane 751b1c721c Clear memcache as needed. 2013-01-16 00:26:48 +00:00
Mark Crane 6cc270827f Clear memcache for extensions. 2013-01-15 23:19:07 +00:00
Mark Crane 3156c9e73e Remove test code from follow me. 2013-01-15 23:06:59 +00:00
Mark Crane 583b68415d Clear memcache for call forward follow me and dnd. 2013-01-15 22:56:40 +00:00
Mark Crane 313036be9c Fixed the folllowing problem: When switching from call forward to follow me. The follow me had to be saved twice for the changes to apply to the extension. 2013-01-15 21:55:10 +00:00
Mark Crane 4a18a37617 Record greeting and name both have option 1 to replay the message. For this reason playing the greeting seems redundant. 2013-01-15 19:00:49 +00:00
Mark Crane b574877335 A few voicemail.lua optimizations. Such as on_dtmf add = to > to make >=. Declare the set set api for freeswitch's api access at the top of the code. Change the position of a comment in on_dtmf. 2013-01-15 18:28:50 +00:00
Mark Crane 4d7a3b66cd Fix the voicemail delete. Add option to replay, save, and delete for the record greeting and name. 2013-01-15 12:10:50 +00:00
Mark Crane 0c9a039a82 If the name was recorded for a voicemail box use it the company directory. Change the extension number from pronounced to iterated. 2013-01-14 19:37:50 +00:00
Mark Crane 5038ea893d Move destinations from apps to dialplans. 2013-01-13 12:48:49 +00:00
Mark Crane 6c0e721db7 Improve Fax Detection. Add a 3 second sleep. 2013-01-13 12:45:53 +00:00
Mark Crane f6af14551c Move logout.php to the root directory. 2013-01-13 12:23:03 +00:00
Mark Crane b06d0d9e3f For convenience move logout.php back to the root directory. 2013-01-13 12:22:19 +00:00
Mark Crane f13ffe0c99 Turn off debug info. 2013-01-13 10:46:37 +00:00
Mark Crane 78c5883e91 Change the direct dial max digits to 4 on voicemail.lua it is recommended the park_slots dialplan be prefixed with a * on pre-existing installs. 2013-01-13 10:39:38 +00:00
Mark Crane 1df679cbb5 To increase security and conform to other feature codes prefix the call park extensions with a '*'. 2013-01-13 10:36:54 +00:00
Mark Crane 059c72dcb6 Add * to check voicemail remotely. Add direct dial option to voicemail when leaving a voicemail message. For security numbers prefixed by * are not allowed and number of digits are limited. 2013-01-13 10:19:19 +00:00
Mark Crane 96972c5529 Add playback_terminators to voicemail.lua 2013-01-13 07:54:55 +00:00
Mark Crane cad5927150 Fix the voicemail download from the gui. Add message delete to the voicemail PHP class. 2013-01-13 06:47:28 +00:00
Mark Crane abb71e45e8 Fix a few bugs with voicmeail.lua. Add ability to use voicemail.lua from command line for sending message waiting events. 2013-01-13 06:45:50 +00:00
Mark Crane f14515827e Add single quotes to the record to make it inside directories with a spaces in the path. 2013-01-13 01:55:06 +00:00
Mark Crane 2c4e86821e Improve the variable naming convention used for memcache. Add memcache support for call groups. 2013-01-12 19:57:54 +00:00
Mark Crane 2a7274d50a Add ability to delete the email attachment after sending it. 2013-01-12 02:13:30 +00:00
Mark Crane 8746d26a82 Take Two: Fix bug: An email is not sent if the Mailbox has “Local After Email” = FALSE 2013-01-12 02:12:34 +00:00
Mark Crane 65d94c9f4d Replace start_epoch with created_epoch to fix the message in the voicemail to email. Use voicemail_id with the message_waiting function to fix MWI. Add a few more commands for logging to the console. 2013-01-12 00:30:47 +00:00
Mark Crane a8598e9281 Fix bug: An email is not sent if the Mailbox has “Local After Email” = FALSE 2013-01-11 22:16:15 +00:00
Mark Crane 49f8bbf782 Fix the pin number length when adding or editing a conference room. 2013-01-11 20:57:15 +00:00
Mark Crane f3d5ecccf3 Add <option value=''></option> for dialplan_detail_group. 2013-01-11 09:38:46 +00:00
Mark Crane 5083a3a96e Several update to voicemail including ability to set the message file type with the same variable used for mod_voicemail which is vm_message_ext. Add several timeouts to the voicemail menus that repeat themselves. Fix forwarding a message to another extension. 2013-01-11 08:45:21 +00:00
Mark Crane 58dda416cd Fix file attachment for email.lua. 2013-01-11 08:34:50 +00:00
Mark Crane b78bf21574 Make voicemail.lua use the new email.lua. 2013-01-10 21:59:59 +00:00
Mark Crane e1ba85dcea Add a way to return escaped &#39, and &#34 back to single and double quotes. 2013-01-10 21:58:42 +00:00
Mark Crane a6dc082460 Remove commented out code that is no longer needed. 2013-01-10 20:17:43 +00:00
Mark Crane 13aa6f49ba Add an email.lua script. 2013-01-10 20:14:39 +00:00
Mark Crane 0104470603 Change DTMF handling to make it more responsive. Add maximum number of tries for voicemail id and password for added security. 2013-01-10 10:52:10 +00:00
James Rose 924eb693e1 add var to make fax relay work with fax_to_email (send correct email response). 2013-01-09 00:52:21 +00:00
James Rose 06d7e8100a assign a more meaningful variable name. 2013-01-09 00:37:52 +00:00
James Rose 30672d27a5 forgot . 2013-01-09 00:31:01 +00:00
Mark Crane 8c8cd1daea Add message-count place holder to the xml_handler.lua 2013-01-08 22:46:37 +00:00
Mark Crane 104662df74 Get the pin length from the database. 2013-01-08 21:09:18 +00:00
Mark Crane 5df5af7e39 Add additional permissions to conference rooms to make it more customizable. Also default values for the settings and setup the pin numbers so they can be automatically generated. 2013-01-08 20:58:49 +00:00
James Rose 376b72b24c made fax relay compatible with new fax_retry.lua 2013-01-08 20:39:27 +00:00
Mark Crane 7a5992de1b Update the path to for the domain select tool to domain_settings. 2013-01-08 04:12:21 +00:00
Mark Crane bbbfc2b0a5 Add voicemail skip_instructions, and skip_greetings they both work the same as FreeSWITCH's mod_voicemail. Fix a problem session:ready check was preventing the voicemail from being saved and emailed. 2013-01-08 03:34:51 +00:00
Mark Crane 98ae72f8cf Add group call capability to the xml handler this enables it to work with call groups. 2013-01-07 19:49:01 +00:00
Mark Crane b6e029258a Add max_digits to the macro function calls. Wrap 'if session:ready around most actions so that if the call ends that it doesn't throw unnecessary errors simply because the call ended. 2013-01-06 07:43:24 +00:00
Mark Crane 72e6c2608a Change the domain settings link. Change a few titles to edit pages. 2013-01-05 21:33:49 +00:00
Mark Crane 844fc977c6 Change directory in core/domains to core/domain_settings. 2013-01-05 21:25:31 +00:00
Mark Crane 26ab3b2f22 Add a separate pin for moderator and participant. 2013-01-05 13:03:00 +00:00
Mark Crane e1e05be45a In Conference Center change the default to wait for the moderator. 2013-01-05 11:51:51 +00:00
Mark Crane e77fbf2fdd Conference center mute only participants. 2013-01-05 11:50:26 +00:00
Mark Crane ba6e3873a7 Remove enter_sound from conference center manager it in the conference profile instead. 2013-01-05 11:38:10 +00:00
Mark Crane 3ecfacf38d In voicemail.lua change "en" to use the default_language variable. 2013-01-05 11:23:47 +00:00
Mark Crane f84926ebb5 Add ${dsn} variable to the freeswitch/conf files. 2013-01-05 11:14:50 +00:00
Mark Crane 6d6edca0bf Make the login.php use the correct app_languages.php file. Reason to do this is because login.php in the root is put in a position as being part of the core so I wanted the translations to be part of the core as well. And user settings is related to the user login. App/login is in the app directory to make the login and logout as an optional part of the menu since they could be incorporated in the theme. 2013-01-05 10:06:32 +00:00
Mark Crane 02028551f9 Remove the app_languages.php add its data to core/user_settings/app_languages.php file. 2013-01-05 10:02:15 +00:00
Mark Crane 9d3a58c26e Remove change $content_user to $text to be more consistent with the other app_languages.php files. 2013-01-05 09:59:27 +00:00
Mark Crane e8b63afa5a Because the login can be incorpoarted into the them decision was made to make the an app rather than part of core. 2013-01-05 09:52:52 +00:00
Mark Crane d20b26073e Move the redirect before the require.php include. 2013-01-05 09:48:19 +00:00
Mark Crane a4c541aa1b If config.php does not exist then redirect to the install.php. 2013-01-05 09:44:18 +00:00
Mark Crane 9951deb10b Update the login menu link. 2013-01-05 09:38:47 +00:00
Mark Crane b8f35ca672 To prevent inconvenience on the upgrade 2013-01-05 09:35:41 +00:00
Mark Crane a9cbba31ad Add the app_languages.php for the core/login and apply it to login.php 2013-01-05 09:33:49 +00:00
Mark Crane 0798935139 Add the core/login/app_languages.php file. 2013-01-05 09:28:33 +00:00
Mark Crane 965f4a8d85 Move login.php to core to allow for the app_languages.php file to be defined in its application directory. 2013-01-05 09:20:07 +00:00
Mark Crane 8ef2deb62c Add core/login/app_config.php. 2013-01-05 09:18:13 +00:00
Mark Crane 8146fdd653 Remove login and logout from the core/users/app_config.php and put it in core/login/app_config.php 2013-01-05 09:16:46 +00:00
Mark Crane bd6ff6873b Change the link to logout.php. 2013-01-05 09:15:41 +00:00
Mark Crane 98018bae27 Move logout.php to the fusionpbx/resources directory. 2013-01-05 09:09:30 +00:00
Mark Crane 5ec9819ec4 Send the logout.php to the root of fusionpbx on the web server. 2013-01-05 09:08:19 +00:00
Mark Crane 8a260c5cfe Add root.php file to the /resources directory 2013-01-05 08:38:14 +00:00
Mark Crane 808af30ef7 Move /install.php to the /resources/install.php directory. 2013-01-05 08:02:56 +00:00
Mark Crane b7d4350c7a Move the install.php from the root directory and put it into the resources directory. 2013-01-05 08:00:53 +00:00
Mark Crane d5694bdde6 Remove the app_languages.php file from the root directory. Never should have app_languages.php file in the root directory. It was there to support index2.php which to cleanup the root directory both needed to be moved. 2013-01-05 07:53:38 +00:00
Mark Crane 53cefe184b Fix the link in user_settings, and fix some of the variable names used in the app_languages.php. 2013-01-05 07:44:54 +00:00
Mark Crane dd10c5a407 change app/user_settings to core/user_settings 2013-01-05 07:15:23 +00:00
Mark Crane 33608a7486 change app/user_settings to core/user_settings 2013-01-05 07:07:36 +00:00
Mark Crane 860d4bb5cc Move user_settings to the core directory. 2013-01-05 07:02:03 +00:00
Mark Crane 05d98abd70 Rename the app/user to user_settings. 2013-01-05 07:00:18 +00:00
Mark Crane 5f138a5f52 Change app/user to app/user_settings. 2013-01-05 06:58:14 +00:00
Mark Crane 3307967d9c Fix the main menu system -> /app/user/user_dashboard. Rename v_exec.php to exec.php. 2013-01-05 06:10:00 +00:00
Mark Crane d941c849c9 Update the login to use user_dashboard as the default destination after login. 2013-01-05 05:59:09 +00:00
Mark Crane f2d5f424ed Add the language translations to the app/users. 2013-01-05 05:51:29 +00:00
Mark Crane 743469a551 Rename index2.php to user_dashboard.php 2013-01-05 05:44:55 +00:00
Mark Crane b4300e2d32 Move index2.php to app user directory. 2013-01-05 05:42:36 +00:00
Mark Crane 3c01f43191 Rename app/users to reflect that this app is for editing for the current logged in user. 2013-01-05 05:40:44 +00:00
Mark Crane 1585c1d1cb Rename the file to reflect current file naming convention 2013-01-05 05:38:11 +00:00
Mark Crane 4b4c1cd8dc Update the user update link. 2013-01-05 05:37:11 +00:00
Mark Crane fba6edd55a Change the name of userupdate.php to user_edit.php in the code. 2013-01-05 05:35:26 +00:00
Mark Crane e805aff9d8 Update the login.php page. 2013-01-05 04:34:45 +00:00
Mark Crane f624cd1d09 Change the fax_uuid from primary key to a foreign key in the destinations table. 2013-01-05 00:28:08 +00:00
Mark Crane 4ae6cb0553 For new installs for the older conferences tool don't assign any groups to it. Then the server admin can assign groups to it if they want to use it. 2013-01-05 00:20:39 +00:00
Mark Crane 157f36432e Going with a different approach. 2013-01-05 00:17:37 +00:00
Mark Crane ccc9ed36a7 Move the old conferences to the optional apps directory. 2013-01-05 00:14:54 +00:00
Mark Crane 7df652778c Remove a redundant v_meeting_users from the app_config.php file. Remove a few trailing spaces on upgrade_domains.php. 2013-01-04 22:02:31 +00:00
Mark Crane 9b94413626 Add an elseif. 2013-01-04 21:21:45 +00:00
Mark Crane 45a2f4d420 Disable mod_lcr, mod_valet_parking, mod_voicemail, and mod_voicemail_ivr by default. Enable mod_memcache by default. 2013-01-04 20:42:40 +00:00
Mark Crane b3d42c8c24 Remove line feeds after ?>. Remove mod_valet fusionpbx has a different park system. Minor adjustment to default permissions. 2013-01-04 19:53:32 +00:00
Mark Crane 675cfb385c Require the message to be 3 seconds or longer to save the recording. Remove a session:ready from the send_email function to fix voicemail to email. 2013-01-04 06:14:52 +00:00
Mark Crane 00e0f9c5b8 Hide some of the errors when you hangup from a call with voicemail.lua. 2013-01-04 02:23:53 +00:00
Mark Crane cc3abcb8df When voicemail settings are changed on an extension update the voicemail settings in v_voicemails. 2013-01-03 22:36:07 +00:00
Mark Crane 674483a7da A few minor changes to voicemail. 2013-01-03 19:54:29 +00:00
Mark Crane e3458daa71 Update the voicemail script and add the ability to send an email on demand for the voicemail message and then add ability to forward the message to another extension. 2013-01-03 14:05:45 +00:00
Mark Crane d1456dcb29 When changing the voicemail password announce the 'Has been changed to' followed by the new password. 2013-01-03 08:10:08 +00:00
Mark Crane eb4453d3f4 Many improvements to voicemail when exiting the voicemail ivr say good bye, notify when the message is below the minimum length, record message menu 1 to listen to the recording, 2 to save the recording and 3 to re-record, and other enhancements. 2013-01-03 07:58:13 +00:00
Mark Crane d5d91dfb35 Update the destination select list to use the new voicemail. 2013-01-03 00:08:44 +00:00
Mark Crane ce8c561b26 Default the voicemail local after email, enabled, and voicemail attach to true. 2013-01-02 23:42:33 +00:00
Mark Crane 89d5534ff4 When calling *98 and it requests the voicemail ID if it isn't entered fast enough request the voicemail ID again. 2013-01-02 23:05:30 +00:00
Mark Crane 068e1d2a72 Improve the date and time and format the seconds to 00:00:00 for voicemail to email. 2013-01-02 22:23:01 +00:00
Mark Crane 590a92c99a Voicemail messages show the table header and links when there is no voicemails. 2013-01-02 19:31:49 +00:00
Mark Crane cad3b941af Make an adjustment to the xml_handler.lua file. 2013-01-02 11:17:02 +00:00
Mark Crane ba4eff5f45 Minor adjustments to the themes. 2013-01-02 07:17:11 +00:00
Mark Crane b5cabc6af0 Add a little more verticle spacing to the top of 'Music on Hold' 2013-01-02 02:00:34 +00:00
Mark Crane 63e91c29bc Adjust the spacing for status -> sip status. 2013-01-02 01:54:09 +00:00
Mark Crane 16da52b189 Add i.menu_item_parent_uuid to the select from for the menu. 2013-01-02 00:38:41 +00:00
Mark Crane 62e5a81d22 Add isset to the themes. 2013-01-02 00:21:02 +00:00
Mark Crane 586215751a Update the voicemail link that you see just after logging in. 2013-01-02 00:02:38 +00:00
Mark Crane 0a5537b912 Move the old voicemail messages to the dev/apps directory. 2013-01-01 23:51:36 +00:00
Mark Crane 31655253f1 Update the new native voicemail code. 2013-01-01 23:22:07 +00:00
Mark Crane 04f3f3ad86 Add mkdir to ensure the directory structure is in place. Fix a bug with *98. 2013-01-01 00:47:46 +00:00
Mark Crane 04bad20975 Show new messages in bold. 2012-12-31 19:38:52 +00:00
Mark Crane 08f4f92366 Use the standard voicemail greeting if the greeting_id is not provided. 2012-12-31 16:47:49 +00:00
Mark Crane fa26e5ae55 Enable the ability to clear the greeting id 2012-12-31 16:38:45 +00:00
Mark Crane 1104c62232 Move the voicemail status that uses mod_voicemail to the optional apps directory. 2012-12-31 16:20:26 +00:00
Mark Crane 6c51cfead1 Remove voicemail messages add and edit permissions. 2012-12-31 16:16:32 +00:00
Mark Crane 444d88fdc9 When the voicemail message is deleted then delete the recording. 2012-12-31 16:12:27 +00:00
Mark Crane 38f7b8f89b Add voicemail download, size and link to greetings. 2012-12-30 08:55:33 +00:00
Mark Crane 9cb3211ea0 Update voicemail greetings so that it uses the new fusionpbx voicemail. 2012-12-30 05:42:41 +00:00
Mark Crane 47bb6e4de9 Fix the multi-lingual framework for voicemail messages, and add a link to it. 2012-12-30 00:58:17 +00:00
Mark Crane 0c9168f853 Use the new greeting id option when leaving a voicemail and add an option to transfer to 0 for the operator, add * for exit instead of #. 2012-12-29 11:33:16 +00:00
Mark Crane e80aa77efe Add ability to make a recording of the persons name to the voicemail.lua 2012-12-29 11:11:34 +00:00
Mark Crane d791cf7c0a Update the voicemail related dialplan entries. 2012-12-29 10:45:22 +00:00
Mark Crane 2f5e198ff9 In the new voicemail change en to en-us. 2012-12-29 09:28:29 +00:00
Mark Crane 0cb041552e Add the initial gui for the voicemail front end. 2012-12-29 09:17:12 +00:00
Mark Crane 9d3753d690 Update the database fields for the voicemails table. 2012-12-29 09:15:38 +00:00
Mark Crane 3921dc26f0 Record and select the greeting for voicemail. 2012-12-29 09:13:15 +00:00
Mark Crane f5ceb2c3a9 Remove hot desked variable extension which would make hot desked extensions unable to register. 2012-12-29 01:03:38 +00:00
Mark Crane e657fd7468 Add the voicemail beep when leaving a voicemail. 2012-12-28 21:32:45 +00:00
Mark Crane 54ee755134 Add voicemail to email, whether to save the save the voicemail locally and whether to attach the voicemail to the email. 2012-12-28 21:02:27 +00:00
Mark Crane dba0fd3f76 Add ability to check voicemail messages in voicemail.lua, add the advanced menu and many other improvements. 2012-12-28 03:09:27 +00:00
Mark Crane 2299fe1d1c Remove the empty select option from the dialplan detail group. 2012-12-26 21:21:31 +00:00
Mark Crane 870ec26ca9 Fix voicemail greetings so that the text shows up correctly after adding the multi-lingual framework. 2012-12-26 16:46:56 +00:00
Mark Crane cb6a601d3c Fix a recent bug caused by adding the multi-lingual framework to gateways late last week. 2012-12-26 16:26:20 +00:00
Mark Crane 12926519b1 Put the gateways in ascending order by the gateway name. 2012-12-26 16:24:23 +00:00
Mark Crane b85407b1d8 Add fax detection for inbound destinations that have a fax extension selected. 2012-12-23 10:17:29 +00:00
Mark Crane 1dcec7514c Add the new gateway app/gateways/app_languages.php file. 2012-12-23 08:27:02 +00:00
Mark Crane e1ee40d3b2 Add multi-lingual support to gateways. 2012-12-23 08:18:15 +00:00
Mark Crane 0a18758dec Added deprecated to the old field name. 2012-12-22 20:18:23 +00:00
Mark Crane caf134a6bb Change table name from v_virtual_table_data_types_name_value to v_virtual_table_name_value.
Change field name from virtual_table_data_types_name_value_uuid to virtual_table_name_value_uuid.
2012-12-22 20:13:08 +00:00
Mark Crane d37f8e2af2 Add hours, start_stamp, and stop_stamp to the cdr statistics csv file. 2012-12-22 00:45:06 +00:00
Mark Crane b55e13bbb2 Fix use-rtp-timer so that the value can be set to true and false as expected. 2012-12-21 19:03:35 +00:00
Mark Crane 93464fcbaa Adding voicemail.lua which is the beginning of a native voicemail feature for FusionPBX. 2012-12-21 08:23:47 +00:00
Mark Crane 14179a3fcd Change the default settings names. 2012-12-19 21:03:14 +00:00
Mark Crane 4fbd84febf Remove a redundant check and change from text to boolean. 2012-12-19 21:02:22 +00:00
Mark Crane d92ba11967 Add an option to set an array of domains for the login page. 2012-12-18 14:57:44 +00:00
Mark Crane eb2a6c9039 Remove caller id prefix from follow me. 2012-12-18 14:15:38 +00:00
Mark Crane e092f8ba41 More work on follow me with cid_name_prefix and call_prompt. 2012-12-18 07:13:49 +00:00
Mark Crane 7cdb9f92de Add cid_name_prefix and call_prompt to the follow me class. 2012-12-18 06:15:22 +00:00
Mark Crane 5d28788358 Add cid_name_prefix and call_prompt to follow me. 2012-12-18 06:04:03 +00:00
Mark Crane 0928bd8321 In ring groups change the multi-lingual label from cid to cid-prefix. Add spacing between phrases in app_languages.php. 2012-12-18 01:28:13 +00:00
Mark Crane 2d1c194f35 Add call forward all and call forward busy fields to the database. 2012-12-17 22:19:04 +00:00
Mark Crane ddf9a5a70f Update call forward to use the dial string. Make call forward, dnd and follow me work better together. 2012-12-17 21:30:49 +00:00
Mark Crane 16517b8214 A few more adjustments to domain_uuid. 2012-12-16 07:41:15 +00:00
Mark Crane 95f885d0ef Work on the new call forward. 2012-12-16 07:39:03 +00:00
Mark Crane a1211c9ba2 Add bind_meta_app to the ring groups to allow in call transfer, and recordings. 2012-12-16 00:54:47 +00:00
Mark Crane 2ba4cf1228 Adjust the domain_name, and domain_uuid. Then add the dialplan_uuid to the order by to prevent duplicate dialplan names from creating invalid xml. 2012-12-16 00:53:12 +00:00
Mark Crane 202f847cc2 On domain and default settings changes name to type. 2012-12-14 23:03:46 +00:00
Mark Crane 949c298027 Add an array type for default and domain settings. 2012-12-14 22:58:20 +00:00
Mark Crane 3993ff0c28 LDAP authentication adjust the username remove the @ domain_name as part of the username. 2012-12-14 21:57:29 +00:00
Mark Crane a956e9ae1d When importing the data trim white spaces from the values. 2012-12-14 21:12:34 +00:00
Mark Crane 7c14342c7e Add a missing field to the virtual table data import. 2012-12-14 21:01:40 +00:00
Mark Crane e8f455134d Add voicemail database structure which will be used as a native voicemail tool for FusionPBX. 2012-12-14 19:29:44 +00:00
Mark Crane 152934ca17 Add virtual_field_search_by to the virtual table import tool. 2012-12-14 08:13:11 +00:00
Mark Crane 53593466d6 Add ldap authentication as an option. 2012-12-12 02:38:34 +00:00
Mark Crane 9e9ba6d02b debug xml file change from directory.xml to the extension@domain.com 2012-12-10 20:41:59 +00:00
Mark Crane 6406425927 Increment the value of the z variable. 2012-12-09 05:12:38 +00:00
Mark Crane 8f091c6a3c Add a contact extension number. 2012-12-09 05:09:22 +00:00
Mark Crane c10023156c Add follow me autocomplete. 2012-12-09 04:58:05 +00:00
Mark Crane b6bf970020 Move from jquery 1.7.2 to version 1.8.3. 2012-12-09 00:09:57 +00:00
Mark Crane 4fe1d3bf02 Add jquery 1.8.3 and jquery ui. 2012-12-09 00:06:42 +00:00
Mark Crane 02d5ef3dcb Drop the v_ on the link. 2012-12-08 07:02:43 +00:00
Mark Crane cbd617a01b Fix the interactive conference links. 2012-12-07 22:53:13 +00:00
Mark Crane 0bfaab669a Set autocomplete to off for gateway edit for username and password. 2012-12-07 18:57:36 +00:00
Mark Crane b950838175 Set autocomplete to off for xmpp profile editor. 2012-12-07 18:55:07 +00:00
Mark Crane 4910905b1b Fix the multi-lingual support on the active extensions page. 2012-12-05 09:23:53 +00:00
Mark Crane 97b813e58a Account for single tenant on the intercept.lua 2012-12-05 09:08:36 +00:00
Mark Crane 9b32ac9d73 Limit the global intercept to the correct tenant domain. 2012-12-05 08:48:43 +00:00
Mark Crane 8a3292a975 Add invalid entry announcement to the ivr_menu.lua. 2012-12-05 07:21:59 +00:00
Mark Crane a64be39334 Fix bugs with the ivr_menu.lua 2012-12-05 06:52:03 +00:00
Mark Crane a8e52e0adc Additional work on ivr_menu.lua 2012-12-04 23:00:27 +00:00
Mark Crane 4a9041ba1d Add the following == "true" to fix the if statement. 2012-12-04 20:09:57 +00:00
Mark Crane b2e44340b6 Fix a bug in the new ivr_menu.lua script. 2012-12-04 19:51:46 +00:00
Mark Crane 018a20b91f Move the call forward, follow me and do not disturb. 2012-12-04 09:14:15 +00:00
Mark Crane 3a7c4d3100 Add the resources and classes directories. 2012-12-04 09:11:03 +00:00
Mark Crane 92dbc493bb Add select options to add ring back tones to hunt groups. 2012-12-04 02:39:49 +00:00
Mark Crane 97f0879742 Delete the old phpmailer files and point fax to email and mailto to it. 2012-12-04 00:32:26 +00:00
Mark Crane 2f45fc2247 Move licenses.php to the new resources directory. 2012-12-04 00:22:15 +00:00
Mark Crane 0c945711d8 Add a new version of phpmailer version 5.2.2. 2012-12-04 00:20:30 +00:00
Mark Crane 186585494d Add a resources directory a preferred a replacement for the includes directory. 2012-12-04 00:14:49 +00:00
Mark Crane d73e31a17f Change the link to PHP Mailer in the licenses.php file. 2012-12-04 00:13:59 +00:00
Mark Crane 2be182e4f8 Add confirm.lua which is used with follow me. 2012-12-02 17:46:50 +00:00
Mark Crane 50a0e79ba7 Update the intercept dialplans to use the intercept.lua script. 2012-12-02 08:48:22 +00:00
Mark Crane 24e83a3f6c Add global intercept capability to intercept.lua, fix a problem with ivr_menu.lua, and white space problem in wakeup.lua. 2012-12-02 08:38:24 +00:00
Mark Crane 8098056fce Lua freeswitch.IVRMenu object was crashed FreeSWITCH on 1.2.3 so it has been replaced by a database driven Lua solution. This actually adds a lot more flexibility that will be used in the future. It still supports stacking options and regex. 2012-11-30 10:44:58 +00:00
Mark Crane ef25f25e48 Move the line of code that starts with pos up two lines. And change one word in a comment. 2012-11-30 10:37:39 +00:00
Mark Crane c961648083 The back slash should only be for the cache. 2012-11-30 05:08:58 +00:00
Mark Crane 2254b8d30a Improve the backslash escaping. 2012-11-29 23:05:34 +00:00
Mark Crane 3464e732c7 Remove the call to the save_ivr_menu_xml function. 2012-11-29 22:39:09 +00:00
Mark Crane f422074c13 Remove the call to the save_ivr_menu_xml function. 2012-11-29 22:22:23 +00:00
Mark Crane c071b5551d Replace the &#39 with a single quote after getting it from the cache. And escape the back slashes. 2012-11-29 22:16:16 +00:00
Mark Crane 5c99b758da Fix a few php notices. 2012-11-29 08:24:53 +00:00
Mark Crane 48ba0cd4dc Remove v_ from the link to voicemail greetings. 2012-11-29 08:23:22 +00:00
Mark Crane b054b6bf64 Adjust the php file references to hunt groups. 2012-11-29 07:18:22 +00:00
Mark Crane 0ea8bdef09 Rename v_calls_active_extensions.php to calls_active_extensions.php. 2012-11-29 05:34:13 +00:00
Mark Crane 6c6f07c16d Adjust the time out and remove the to do list. 2012-11-29 03:55:46 +00:00
Mark Crane d2e53cd125 Add gateways and sip profiles to the xml handler. 2012-11-29 03:43:58 +00:00
James Rose 87f639002e forgot \n on messages. 2012-11-28 23:10:53 +00:00
James Rose f6b0243546 Added log lines for Statistics gathering. group your logs for FAX_RETRY_STATS to keep track on what methods work best with the gateway used. Fixed minor error that did not affect use. 2012-11-28 23:03:05 +00:00
Mark Crane 518d495970 Change reference from vars_edit.php and vars_delete.php to var_edit.php and var_delete.php. 2012-11-28 19:27:35 +00:00
Mark Crane 1c76d5c51a Remove v_ from the Accounts link in the menu. 2012-11-28 05:19:19 +00:00
Mark Crane ff0def8eb8 Update the link to the system -> modules page to remove the 'v_'. 2012-11-26 17:12:06 +00:00
Mark Crane db9b95e145 Make the path more friendly in the IVR Menu. 2012-11-25 07:39:59 +00:00
Mark Crane 1bf42197d4 Make the ivr_menu.lua file multi-lingual capable. 2012-11-25 07:13:14 +00:00
Mark Crane 664294518c Fix a php notice on IVR Menu. 2012-11-25 06:02:53 +00:00
Mark Crane 1a6af8b07f Fix a few more files names in ivr_menu/ivr_menu_options.php 2012-11-25 05:09:52 +00:00
Mark Crane b7a5ae3526 Remove the ivr menu function from lib_switch.php. 2012-11-25 05:08:04 +00:00
Mark Crane 458d3b29c3 Set the ivr menu uuid 2012-11-25 04:21:31 +00:00
Mark Crane 3ffb0a6c54 Fix the include to the ivr menu class. 2012-11-25 03:24:15 +00:00
Rinor Hoxha fe1619b6e0 Multi lang, missed true/false 2012-11-24 23:45:15 +00:00
James Rose a51583e455 music on hold, added preliminary support for translations. 2012-11-24 23:23:20 +00:00
Rinor Hoxha 925a8337ba Dialplan Inbound - Multi lang rev.02 - Missed "access denied" 2012-11-24 23:14:28 +00:00
Rinor Hoxha 84cf232360 Dialplan Inbound Multi lang rev.01 2012-11-24 22:59:08 +00:00
James Rose ad8654b5df click to call, added preliminary support for translations. 2012-11-24 22:51:28 +00:00
James Rose 0e63fb9bee log viewer, added preliminary support for translations. 2012-11-24 22:06:11 +00:00
Mark Crane cb00a45b77 Update the ivr menu adding database support through ivr_menu.lua. 2012-11-24 22:01:55 +00:00
James Rose 0f623f8256 app->exec, added preliminary support for translations. 2012-11-24 21:40:43 +00:00
Mark Crane ff7b6b33bd Move switch_ivr_menu.php into the ivr_menu/resources/classes directory. 2012-11-24 21:35:49 +00:00
Mark Crane dd68863afc Add the classes directory to ivr menu. 2012-11-24 21:28:20 +00:00
James Rose e992af1a96 Outbound Dialplan add/edit, added preliminary support for translations. 2012-11-24 21:25:22 +00:00
Mark Crane 704715e70a Add ivr_menu_xml.php 2012-11-24 21:25:12 +00:00
Mark Crane d2576d583b Add resources and functions directories. 2012-11-24 21:19:03 +00:00
5377 changed files with 230157 additions and 1150044 deletions
-12
View File
@@ -1,12 +0,0 @@
.project
.vscode
/phpinfo.php
resources/config.php
secure/mailto.bat
secure/*.db
secure/*.sqlite
.DS_Store
*.php~
app/yealink/resources/firmware/*
+16 -39
View File
@@ -1,49 +1,26 @@
RewriteEngine On
RewriteEngine On
#REST api
RewriteRule ^(.*)/api/(.*)$ $1/api/index.php?rewrite_uri=$2 [QSA]
# $mac or $mac.cfg/xml
RewriteRule ^.*([A-Fa-f0-9]{12})(?:\.xml|\.cfg)?$ app/provision/index.php?mac=$1 [QSA]
# $m:a:c or $m:a:c.cfg/xml
RewriteRule ^.*((?:[A-Fa-f0-9]{2}[:-]){5}[A-Fa-f0-9]{2})(?:\.xml|\.cfg)?$ app/provision/index.php?mac=$1 [QSA]
# kt*-$mac.xml
RewriteRule ^kt.*?-([A-Fa-f0-9]{12})\.xml$ app/provision/index.php?mac=$1 [QSA]
# cfg-$mac.xml
RewriteRule ^.*cfg([A-Fa-f0-9]{12})\.xml$ app/provision/index.php?mac=$1 [QSA]
RewriteRule ^([A-Fa-f0-9]{12})(\.(xml|cfg))?$ app/provision/index.php?mac=$1 [QSA]
RewriteRule ^([A-Fa-f0-9]{2}[:-][A-Fa-f0-9]{2}[:-][A-Fa-f0-9]{2}[:-][A-Fa-f0-9]{2}[:-][A-Fa-f0-9]{2}[:-][A-Fa-f0-9]{2}[:-])(\.(xml|cfg))?$ app/provision/index.php?mac=$1 [QSA]
RewriteRule ^(kt.*?-)([A-Fa-f0-9]{12})(\.(xml))$ app/provision/index.php?mac=$2 [QSA]
RewriteRule ^(cfg)([A-Fa-f0-9]{12})(\.(xml))$ app/provision/index.php?mac=$2 [QSA]
#Snom m3
RewriteRule ^m3/settings/([A-Fa-f0-9]{12})(?:\.cfg)?$ app/provision/index.php?mac=$1 [QSA]
RewriteRule ^(m3/settings/)([A-Fa-f0-9]{12})(\.(cfg))?$ app/provision/index.php?mac=$2 [QSA]
#Grandstream
RewriteRule ^.*/cfg([A-Fa-f0-9]{12})(?:\.xml|\.cfg)?$ app/provision/?mac=$1 [QSA]
RewriteRule ^.*/provision/cfg([A-Fa-f0-9]{12})(\.(xml|cfg))?$ app/provision/?mac=$1 [QSA]
#Yealink and Polycom
RewriteRule ^.*/([A-Fa-f0-9]{12})(?:\.xml|\.cfg)?$ app/provision/index.php?mac=$1 [QSA]
#Yealink
RewriteRule ^.*/provision/([A-Fa-f0-9]{12})(\.(xml|cfg))?$ app/provision/index.php?mac=$1 [QSA]
#Polycom
RewriteRule ^provision/000000000000.cfg$ app/provision/?mac=$1&file={$mac}.cfg [QSA]
RewriteRule ^provision/features.cfg$ app/provision/?mac=$1&file=features.cfg [QSA]
RewriteRule ^provision/([A-Fa-f0-9]{12})-sip.cfg$ app/provision/?mac=$1&file=sip.cfg [QSA]
RewriteRule ^provision/([A-Fa-f0-9]{12})-phone.cfg$ app/provision/?mac=$1 [QSA]
RewriteRule ^provision/([A-Fa-f0-9]{12})-registration.cfg$ app/provision/?mac=$1&file={$mac}-registration.cfg [QSA]
RewriteRule ^provision/([A-Fa-f0-9]{12})-site.cfg$ app/provision/?mac=$1&file=site.cfg [QSA]
RewriteRule ^provision/([A-Fa-f0-9]{12})-web.cfg$ app/provision/?mac=$1&file=web.cfg [QSA]
RewriteRule ^provision/([A-Fa-f0-9]{12})-directory.xml$ app/provision/?mac=$1&file=directory.xml [QSA]
#Escene
RewriteRule ^.*/([0-9]{1,11})_Extern.xml$ app/provision/?ext=$1&file={$mac}_extern.xml [QSA]
RewriteRule ^.*/([0-9]{1,11})_Phonebook.xml$ app/provision/?ext=$1&file={$mac}_phonebook.xml [QSA]
#Aastra
RewriteRule ^provision/aastra.cfg$ app/provision/index.php?file=aastra.cfg [QSA]
RewriteRule ^.*/provision/000000000000.cfg$ app/provison/?mac=$1&file={$mac}.cfg [QSA]
RewriteRule ^.*/provision/features.cfg$ app/provision/?mac=$1&file=features.cfg [QSA]
RewriteRule ^.*/provision/([A-Fa-f0-9]{12})-sip.cfg$ app/provision/?mac=$1&file=sip.cfg [QSA]
RewriteRule ^.*/provision/([A-Fa-f0-9]{12})-phone.cfg$ app/provision/?mac=$1 [QSA]
RewriteRule ^.*/provision/([A-Fa-f0-9]{12})-registration.cfg$ app/provision/?mac=$1&file={$mac}-registration.cfg [QSA]
RewriteRule ^.*/provision/([A-Fa-f0-9]{12})-site.cfg$ app/provision/?mac=$1&file=site.cfg [QSA]
RewriteRule ^.*/provision/([A-Fa-f0-9]{12})-web.cfg$ app/provision/?mac=$1&file=web.cfg [QSA]
Options -Indexes
#PHP settings
php_value upload_max_filesize 25M
php_value post_max_size 35M
php_value memory_limit 512M
-11
View File
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>fusionbpx</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
+92
View File
@@ -0,0 +1,92 @@
What is [FusionPBX](http://fusionpbx.com/)?
--------------------------------------
[FusionPBX](http://fusionpbx.com/) is a flexible, customizable administration web GUI that takes [FreeSwitch](http://freeswitch.org) and converts it into a single- or multi-tenant gateway or PBX system out of the box.
It can be run on any operating system and x86-based hardware of your choice.
It provides the functionality your business needs and brings corporate-level phone system features to small, medium, and large businesses. Read more at [FusionPBX](http://fusionpbx.com/).
In addition to providing all of the usual PBX functionality, FusionPBX allows you to configure:
- Multi-Tenancy
- Unlimited Extensions
- Voicemail-to-Email
- Music on Hold
- Call Parking
- Automatic Call Distribution
- Interactive Voice Response
- Ring Groups
- Find Me / Follow Me
- Dialplan Features that can be endlessly combined for your preferences
- [Many other Features](http://wiki.fusionpbx.com/index.php?title=Features)
Free Support
--------------------------------------
We provide several avenues for you to get your system up and running on your own and learn the basics of the system.
1. [Current Documentation](http://wiki.fusionpbx.com/index.php?title=Main_Page)
2. [New Documentation](http://fusionpbx-docs.readthedocs.org/en/latest/) COMING SOON
3. [How to Contribute](http://fusionpbx.com) COMING SOON
4. [IRC](http://webchat.freenode.net/) in the fusionpbx channel
Commercial Support
--------------------------------------
These options support the project and cover any kind of help you might need from architecture, installation, best practices, troubleshooting, custom feature programming, and training.
1. [Commercial Paid Support](http://fusionpbx.com/support.php)
2. [Custom Feature Development](http://fusionpbx.com/support.php)
3. [Admin Training](http://fusionpbx.com)
4. [Advanced Training](http://fusionpbx.com)
5. [Developer Training](http://fusionpbx.com)
Software Requirements
--------------------------------------
- [Debian Jessie](http://cdimage.debian.org/debian-cd/8.1.0/amd64/iso-cd/debian-8.1.0-amd64-netinst.iso) - Recommended
This is the distribution recommended by the FreeSwitch team
- Fusion will also install on Debian Wheezy, Ubuntu 10.10 LTS and is known to work on FreeBSD
- [FusionPBX Installer](http://fusionpbx.com)
Community
--------------------------------------
We have a pretty thriving community if you know how to get to us:
- [IRC](http://webchat.freenode.net/) in the fusionpbx channel
- [Twitter](http://twitter.com/fusionpbx)
- [Website](http://fusionpbx.com)
Contributing
---------------------------------------
###Requirements
It's easy to contribute to FusionPBX the only thing we ask before accepting your pull request is that you sign a Contributor License Agreement.
We ask that you sign the Contributor License Agreement for the following reasons:
1. It protects FusionPBX by you gauranteeing that your contributions are yours to contribute and not the property of an employer or something found on the web.
2. It protects you from using code that belongs to others that is subject unfriendly licensing.
### How to Contribute
* [The Quick Way](https://github.com/Fusionpbx/opensource/blob/master/sign-cla.md) - Step by step instructions to contribute to FusionPBX with links to our CLA and how to submit pull requests.
* [The FusionPBX Contribution Site](https://github.com/Fusionpbx/opensource) - The full repo with more information for the curious.
How to Install FusionPBX
----------------------------
* As root do the following:
```bash
cd /usr/src
```
```bash
apt-get install wget
```
```bash
wget https://raw.githubusercontent.com/fusionpbx/fusionpbx-scripts/master/install/ubuntu/install_fusionpbx.sh
```
```bash
chmod 755 install_fusionpbx.sh
```
```bash
./install_fusionpbx.sh install-both user
```
Installation Questions:
- During the install it will ask you to press continue after verifying that the command ran successfully. This is usually the case, so you can simply tell it to continue. The install also asks several questions.
- Unless you have a reason to choose otherwise, PostgreSQL and Nginx is probably your best path and is recommended by the developers of FusionPBX
-91
View File
@@ -1,91 +0,0 @@
<?php
//application details
$apps[$x]['name'] = "Aastra";
$apps[$x]['uuid'] = "c3b13bbc-3015-4c09-87e8-416749b29f66";
$apps[$x]['category'] = "Vendor";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.0";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "";
$apps[$x]['description']['en-gb'] = "";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['es-cl'] = "";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['fr-fr'] = "";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "";
$apps[$x]['description']['pt-pt'] = "";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
//default settings
$y=0;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "c471163a-12fa-11e8-b642-0ed5f89f718b";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "aastra_gmt_offset";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Aastra timezone offset in minutes (e.g. 300 = GMT-5 = Eastern Standard Time)";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "c47117a2-12fa-11e8-b642-0ed5f89f718b";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "aastra_time_format";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Aastra clock format";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "c47119aa-12fa-11e8-b642-0ed5f89f718b";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "aastra_date_format";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Aastra date format";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "b31b1423-a04c-4b4a-9c55-a0b3791642c3";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "aastra_ptime";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "20";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Set Aastra ptime";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "8b676397-2cf7-45de-a7ec-f3ceb7d529e3";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "aastra_silence_suppression";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Enable Aastra codec silence suppression (on / off)";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "1455b1b0-68ec-400d-be84-1d1132aea72f";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "aastra_zone_minutes";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Offset in minutes from GMT, 300 = GMT-5 = Eastern Standard Time, -120 = GMT+2 = Eastern European Time";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "c90e804a-d2bb-431a-ace8-5c69e140c539";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "aastra_sip_silence_suppression";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Aastra SIP silence suppression - silence suppression: deactivated (0), activated (1); enabled on G.711 with CN(RFC3389) or G.729AB";
$y++;
?>
@@ -0,0 +1,38 @@
<?php
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('access_control_delete')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
require_once "app_languages.php";
foreach($text as $key => $value) {
$text[$key] = $value[$_SESSION['domain']['language']['code']];
}
//get the id
if (count($_GET)>0) {
$id = check_str($_GET["id"]);
}
if (strlen($id)>0) {
//delete access_control
$sql = "delete from v_access_controls ";
$sql .= "where access_control_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
unset($sql);
}
//redirect the user
$_SESSION['message'] = $text['message-delete'];
header('Location: access_controls.php');
?>
+141 -353
View File
@@ -1,303 +1,148 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2018 - 2020
the Initial Developer. All Rights Reserved.
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('access_control_add') || permission_exists('access_control_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('access_control_add') || permission_exists('access_control_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
require_once "app_languages.php";
foreach($text as $key => $value) {
$text[$key] = $value[$_SESSION['domain']['language']['code']];
}
//action add or update
if (is_uuid($_REQUEST["id"])) {
if (isset($_REQUEST["id"])) {
$action = "update";
$access_control_uuid = $_REQUEST["id"];
$id = $_REQUEST["id"];
$access_control_uuid = check_str($_REQUEST["id"]);
}
else {
$action = "add";
}
//get http post variables and set them to php variables
if (is_array($_POST) && @sizeof($_POST) != 0) {
$access_control_name = $_POST["access_control_name"];
$access_control_default = $_POST["access_control_default"];
$access_control_nodes = $_POST["access_control_nodes"];
$access_control_description = $_POST["access_control_description"];
if (count($_POST)>0) {
$access_control_name = check_str($_POST["access_control_name"]);
$access_control_default = check_str($_POST["access_control_default"]);
$access_control_description = check_str($_POST["access_control_description"]);
}
//process the user data and save it to the database
if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
$msg = '';
if ($action == "update") {
$access_control_uuid = check_str($_POST["access_control_uuid"]);
}
//check for all required data
if (strlen($access_control_name) == 0) { $msg .= $text['message-required']." ".$text['label-access_control_name']."<br>\n"; }
if (strlen($access_control_default) == 0) { $msg .= $text['message-required']." ".$text['label-access_control_default']."<br>\n"; }
//if (strlen($access_control_description) == 0) { $msg .= $text['message-required']." ".$text['label-access_control_description']."<br>\n"; }
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
require_once "resources/header.php";
require_once "resources/persist_form_var.php";
echo "<div align='center'>\n";
echo "<table><tr><td>\n";
echo $msg."<br />";
echo "</td></tr></table>\n";
persistformvar($_POST);
echo "</div>\n";
require_once "resources/footer.php";
return;
}
//add or update the database
if ($_POST["persistformvar"] != "true") {
if ($action == "add" && permission_exists('access_control_add')) {
$sql = "insert into v_access_controls ";
$sql .= "(";
$sql .= "access_control_uuid, ";
$sql .= "access_control_name, ";
$sql .= "access_control_default, ";
$sql .= "access_control_description ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'".uuid()."', ";
$sql .= "'$access_control_name', ";
$sql .= "'$access_control_default', ";
$sql .= "'$access_control_description' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
$_SESSION['message'] = $text['message-add'];
header('Location: access_controls.php');
exit;
}
//process the http post data by submitted action
if ($_POST['action'] != '' && strlen($_POST['action']) > 0) {
//prepare the array(s)
$x = 0;
foreach ($_POST['access_control_nodes'] as $row) {
if (is_uuid($row['access_control_uuid']) && $row['checked'] === 'true') {
$array['access_controls'][$x]['checked'] = $row['checked'];
$array['access_controls'][$x]['access_control_nodes'][]['access_control_node_uuid'] = $row['access_control_node_uuid'];
$x++;
}
}
//send the array to the database class
switch ($_POST['action']) {
case 'copy':
if (permission_exists('access_control_add')) {
$obj = new database;
$obj->copy($array);
}
break;
case 'delete':
if (permission_exists('access_control_delete')) {
$obj = new database;
$obj->delete($array);
}
break;
case 'toggle':
if (permission_exists('access_control_update')) {
$obj = new database;
$obj->toggle($array);
}
break;
}
//clear the cache, reloadacl and redirect the user
if (in_array($_POST['action'], array('copy', 'delete', 'toggle'))) {
//clear the cache
$cache = new cache;
$cache->delete("configuration:acl.conf");
//create the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
event_socket_request($fp, "api reloadacl");
}
//redirect the user
header('Location: access_control_edit.php?id='.$id);
exit;
}
}
//check for all required data
$msg = '';
if (strlen($access_control_name) == 0) { $msg .= $text['message-required']." ".$text['label-access_control_name']."<br>\n"; }
if (strlen($access_control_default) == 0) { $msg .= $text['message-required']." ".$text['label-access_control_default']."<br>\n"; }
//if (strlen($access_control_nodes) == 0) { $msg .= $text['message-required']." ".$text['label-access_control_nodes']."<br>\n"; }
//if (strlen($access_control_description) == 0) { $msg .= $text['message-required']." ".$text['label-access_control_description']."<br>\n"; }
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
require_once "resources/header.php";
require_once "resources/persist_form_var.php";
echo "<div align='center'>\n";
echo "<table><tr><td>\n";
echo $msg."<br />";
echo "</td></tr></table>\n";
persistformvar($_POST);
echo "</div>\n";
require_once "resources/footer.php";
return;
}
//add the access_control_uuid
if (!is_uuid($_POST["access_control_uuid"])) {
$access_control_uuid = uuid();
}
} //if ($action == "add")
//prepare the array
$array['access_controls'][0]['access_control_uuid'] = $access_control_uuid;
$array['access_controls'][0]['access_control_name'] = $access_control_name;
$array['access_controls'][0]['access_control_default'] = $access_control_default;
$array['access_controls'][0]['access_control_description'] = $access_control_description;
$y = 0;
if (is_array($access_control_nodes)) {
foreach ($access_control_nodes as $row) {
if (strlen($row['node_type']) > 0) {
$array['access_controls'][0]['access_control_nodes'][$y]['access_control_node_uuid'] = $row["access_control_node_uuid"];
$array['access_controls'][0]['access_control_nodes'][$y]['node_type'] = $row["node_type"];
$array['access_controls'][0]['access_control_nodes'][$y]['node_cidr'] = $row["node_cidr"];
$array['access_controls'][0]['access_control_nodes'][$y]['node_domain'] = $row["node_domain"];
$array['access_controls'][0]['access_control_nodes'][$y]['node_description'] = $row["node_description"];
$y++;
}
}
}
if ($action == "update" && permission_exists('access_control_edit')) {
$sql = "update v_access_controls set ";
$sql .= "access_control_name = '$access_control_name', ";
$sql .= "access_control_default = '$access_control_default', ";
$sql .= "access_control_description = '$access_control_description' ";
$sql .= "where access_control_uuid = '$access_control_uuid'";
$db->exec(check_sql($sql));
unset($sql);
//save the data
$database = new database;
$database->app_name = 'access controls';
$database->app_uuid = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
$database->save($array);
//clear the cache
$cache = new cache;
$cache->delete("configuration:acl.conf");
//create the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
event_socket_request($fp, "api reloadacl");
}
//redirect the user
if (isset($action)) {
if ($action == "add") {
$_SESSION["message"] = $text['message-add'];
}
if ($action == "update") {
$_SESSION["message"] = $text['message-update'];
}
//header('Location: access_controls.php');
header('Location: access_control_edit.php?id='.urlencode($access_control_uuid));
$_SESSION['message'] = $text['message-update'];
header('Location: access_controls.php');
return;
}
}
} //if ($action == "update")
} //if ($_POST["persistformvar"] != "true")
} //(count($_POST)>0 && strlen($_POST["persistformvar"]) == 0)
//pre-populate the form
if (is_array($_GET) && $_POST["persistformvar"] != "true") {
if (count($_GET)>0 && $_POST["persistformvar"] != "true") {
$access_control_uuid = check_str($_GET["id"]);
$sql = "select * from v_access_controls ";
$sql .= "where access_control_uuid = :access_control_uuid ";
$parameters['access_control_uuid'] = $access_control_uuid;
$database = new database;
$row = $database->select($sql, $parameters, 'row');
if (is_array($row) && @sizeof($row) != 0) {
$sql .= "where access_control_uuid = '$access_control_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$access_control_name = $row["access_control_name"];
$access_control_default = $row["access_control_default"];
$access_control_description = $row["access_control_description"];
break; //limit to 1 row
}
unset($sql, $parameters, $row);
unset ($prep_statement);
}
//get the child data
if (is_uuid($access_control_uuid)) {
$sql = "select * from v_access_control_nodes ";
$sql .= "where access_control_uuid = :access_control_uuid ";
$sql .= "order by node_cidr asc";
$parameters['access_control_uuid'] = $access_control_uuid;
$database = new database;
$access_control_nodes = $database->select($sql, $parameters, 'all');
unset ($sql, $parameters);
}
//add the $access_control_node_uuid
if (!is_uuid($access_control_node_uuid)) {
$access_control_node_uuid = uuid();
}
//add an empty row
if (is_array($access_control_nodes) && @sizeof($access_control_nodes) != 0) {
$x = count($access_control_nodes);
}
else {
$access_control_nodes = array();
$x = 0;
}
$access_control_nodes[$x]['access_control_uuid'] = $access_control_uuid;
$access_control_nodes[$x]['access_control_node_uuid'] = uuid();
$access_control_nodes[$x]['node_type'] = '';
$access_control_nodes[$x]['node_cidr'] = '';
$access_control_nodes[$x]['node_domain'] = '';
$access_control_nodes[$x]['node_description'] = '';
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//show the header
$document['title'] = $text['title-access_control'];
require_once "resources/header.php";
//show the content
echo "<form name='frm' id='frm' method='post'>\n";
echo "<input class='formfld' type='hidden' name='access_control_uuid' value='".escape($access_control_uuid)."'>\n";
echo "<div align='center'>";
echo "<table width='100%' border='0' cellpadding='0' cellspacing=''>\n";
echo "<tr class='border'>\n";
echo " <td align=\"left\">\n";
echo " <br>";
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-access_control']."</b></div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','collapse'=>'hide-xs','style'=>'margin-right: 15px;','link'=>'access_controls.php']);
if ($action == 'update') {
if (permission_exists('access_control_node_add')) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
}
if (permission_exists('access_control_node_delete')) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none; margin-right: 15px;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
}
echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','collapse'=>'hide-xs']);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo $text['title_description-access_controls']."\n";
echo "<br /><br />\n";
if ($action == 'update') {
if (permission_exists('access_control_add')) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'copy','onclick'=>"modal_close();"])]);
}
if (permission_exists('access_control_delete')) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]);
}
}
if ($action == 'update') {
if (permission_exists('access_control_add')) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'copy','onclick'=>"modal_close();"])]);
}
if (permission_exists('access_control_delete')) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]);
}
}
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<form method='post' name='frm' action=''>\n";
echo "<div align='center'>\n";
echo "<table width='100%' border='0' cellpadding='6' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td align='left' width='30%' nowrap='nowrap'><b>".$text['title-access_control']."</b></td>\n";
echo "<td width='70%' align='right'>\n";
echo " <input type='button' class='btn' name='' alt='".$text['button-back']."' onclick=\"window.location='access_controls.php'\" value='".$text['button-back']."'>";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-save']."'>";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-access_control_name']."\n";
echo "</td>\n";
echo "<td class='vtable' style='position: relative;' align='left'>\n";
echo " <input class='formfld' type='text' name='access_control_name' maxlength='255' value='".escape($access_control_name)."'>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='access_control_name' maxlength='255' value=\"$access_control_name\">\n";
echo "<br />\n";
echo $text['description-access_control_name']."\n";
echo "</td>\n";
@@ -307,114 +152,57 @@
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-access_control_default']."\n";
echo "</td>\n";
echo "<td class='vtable' style='position: relative;' align='left'>\n";
echo " <select class='formfld' name='access_control_default'>\n";
echo " <option value=''></option>\n";
if ($access_control_default == "allow") {
echo " <option value='allow' selected='selected'>".$text['label-allow']."</option>\n";
}
else {
echo " <option value='allow'>".$text['label-allow']."</option>\n";
}
if ($access_control_default == "deny") {
echo " <option value='deny' selected='selected'>".$text['label-deny']."</option>\n";
}
else {
echo " <option value='deny'>".$text['label-deny']."</option>\n";
}
echo " </select>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='access_control_default'>\n";
echo " <option value=''></option>\n";
if ($access_control_default == "allow") {
echo " <option value='allow' selected='selected'>".$text['label-allow']."</option>\n";
}
else {
echo " <option value='allow'>".$text['label-allow']."</option>\n";
}
if ($access_control_default == "deny") {
echo " <option value='deny' selected='selected'>".$text['label-deny']."</option>\n";
}
else {
echo " <option value='deny'>".$text['label-deny']."</option>\n";
}
echo " </select>\n";
echo "<br />\n";
echo $text['description-access_control_default']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-access_control_nodes']."\n";
echo "</td>\n";
echo "<td class='vtable' style='position: relative;' align='left'>\n";
echo " <table>\n";
echo " <tr>\n";
echo " <th class='vtablereq'>".$text['label-node_type']."</th>\n";
echo " <td class='vtable'>".$text['label-node_cidr']."</td>\n";
echo " <td class='vtable'>".$text['label-node_domain']."</td>\n";
echo " <td class='vtable'>".$text['label-node_description']."</td>\n";
if (is_array($access_control_nodes) && @sizeof($access_control_nodes) > 1 && permission_exists('access_control_node_delete')) {
echo " <td class='vtable edit_delete_checkbox_all' onmouseover=\"swap_display('delete_label_details', 'delete_toggle_details');\" onmouseout=\"swap_display('delete_label_details', 'delete_toggle_details');\">\n";
echo " <span id='delete_label_details'>".$text['label-action']."</span>\n";
echo " <span id='delete_toggle_details'><input type='checkbox' id='checkbox_all_details' name='checkbox_all' onclick=\"edit_all_toggle('details'); checkbox_on_change(this);\"></span>\n";
echo " </td>\n";
}
echo " </tr>\n";
$x = 0;
foreach($access_control_nodes as $row) {
echo " <tr>\n";
echo " <input type='hidden' name='access_control_nodes[$x][access_control_uuid]' value=\"".escape($row["access_control_uuid"])."\">\n";
echo " <input type='hidden' name='access_control_nodes[$x][access_control_node_uuid]' value=\"".escape($row["access_control_node_uuid"])."\">\n";
echo " <td class='formfld'>\n";
echo " <select class='formfld' name='access_control_nodes[$x][node_type]'>\n";
echo " <option value=''></option>\n";
if ($row['node_type'] == "allow") {
echo " <option value='allow' selected='selected'>".$text['label-allow']."</option>\n";
}
else {
echo " <option value='allow'>".$text['label-allow']."</option>\n";
}
if ($row['node_type'] == "deny") {
echo " <option value='deny' selected='selected'>".$text['label-deny']."</option>\n";
}
else {
echo " <option value='deny'>".$text['label-deny']."</option>\n";
}
echo " </select>\n";
echo " </td>\n";
echo " <td class='formfld'>\n";
echo " <input class='formfld' type='text' name='access_control_nodes[$x][node_cidr]' maxlength='255' value=\"".escape($row["node_cidr"])."\">\n";
echo " </td>\n";
echo " <td class='formfld'>\n";
echo " <input class='formfld' type='text' name='access_control_nodes[$x][node_domain]' maxlength='255' value=\"".escape($row["node_domain"])."\">\n";
echo " </td>\n";
echo " <td class='formfld'>\n";
echo " <input class='formfld' type='text' name='access_control_nodes[$x][node_description]' maxlength='255' value=\"".escape($row["node_description"])."\">\n";
echo " </td>\n";
if (is_array($access_control_nodes) && @sizeof($access_control_nodes) > 1 && permission_exists('access_control_node_delete')) {
if (is_uuid($row['access_control_node_uuid'])) {
echo " <td class='vtable' style='text-align: center; padding-bottom: 3px;'>\n";
echo " <input type='checkbox' name='access_control_nodes[".$x."][checked]' value='true' class='chk_delete checkbox_details' onclick=\"checkbox_on_change(this);\">\n";
echo " </td>\n";
}
else {
echo " <td></td>\n";
}
}
echo " </tr>\n";
$x++;
}
echo " </table>\n";
echo "<br />\n";
echo $text['description-node_description']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-access_control_description']."\n";
echo "</td>\n";
echo "<td class='vtable' style='position: relative;' align='left'>\n";
echo " <input class='formfld' type='text' name='access_control_description' maxlength='255' value='".escape($access_control_description)."'>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='access_control_description' maxlength='255' value=\"$access_control_description\">\n";
echo "<br />\n";
echo $text['description-access_control_description']."\n";
echo "</td>\n";
echo "</tr>\n";
echo " <tr>\n";
echo " <td colspan='2' align='right'>\n";
if ($action == "update") {
echo " <input type='hidden' name='access_control_uuid' value='$access_control_uuid'>\n";
}
echo " <input type='submit' name='submit' class='btn' value='".$text['button-save']."'>\n";
echo " </td>\n";
echo " </tr>";
echo "</table>";
echo "<br /><br />";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>";
if ($action == "update") {
require "access_control_nodes.php";
}
echo " </td>";
echo " </tr>";
echo "</table>";
echo "</div>";
//include the footer
require_once "resources/footer.php";
?>
?>
@@ -0,0 +1,39 @@
<?php
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('access_control_node_delete')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
require_once "app_languages.php";
foreach($text as $key => $value) {
$text[$key] = $value[$_SESSION['domain']['language']['code']];
}
//get the id
if (count($_GET)>0) {
$id = check_str($_GET["id"]);
$access_control_uuid = check_str($_GET["access_control_uuid"]);
}
if (strlen($id)>0) {
//delete access_control_node
$sql = "delete from v_access_control_nodes ";
$sql .= "where access_control_node_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
unset($sql);
}
//redirect the user
$_SESSION['message'] = $text['message-delete'];
header('Location: access_control_node_edit.php?id='.$access_control_uuid);
?>
@@ -0,0 +1,230 @@
<?php
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('access_control_node_add') || permission_exists('access_control_node_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
require_once "app_languages.php";
foreach($text as $key => $value) {
$text[$key] = $value[$_SESSION['domain']['language']['code']];
}
//action add or update
if (isset($_REQUEST["id"])) {
$action = "update";
$access_control_node_uuid = check_str($_REQUEST["id"]);
}
else {
$action = "add";
}
//set the parent uuid
if (strlen($_GET["access_control_uuid"]) > 0) {
$access_control_uuid = check_str($_GET["access_control_uuid"]);
}
//get http post variables and set them to php variables
if (count($_POST)>0) {
$node_type = check_str($_POST["node_type"]);
$node_cidr = check_str($_POST["node_cidr"]);
$node_domain = check_str($_POST["node_domain"]);
$node_description = check_str($_POST["node_description"]);
}
if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
$msg = '';
if ($action == "update") {
$access_control_node_uuid = check_str($_POST["access_control_node_uuid"]);
}
//check for all required data
if (strlen($node_type) == 0) { $msg .= $text['message-required']." ".$text['label-node_type']."<br>\n"; }
//if (strlen($node_cidr) == 0) { $msg .= $text['message-required']." ".$text['label-node_cidr']."<br>\n"; }
//if (strlen($node_domain) == 0) { $msg .= $text['message-required']." ".$text['label-node_domain']."<br>\n"; }
//if (strlen($node_description) == 0) { $msg .= $text['message-required']." ".$text['label-node_description']."<br>\n"; }
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
require_once "resources/header.php";
require_once "resources/persist_form_var.php";
echo "<div align='center'>\n";
echo "<table><tr><td>\n";
echo $msg."<br />";
echo "</td></tr></table>\n";
persistformvar($_POST);
echo "</div>\n";
require_once "resources/footer.php";
return;
}
//add or update the database
if ($_POST["persistformvar"] != "true") {
if ($action == "add" && permission_exists('access_control_node_add')) {
$sql = "insert into v_access_control_nodes ";
$sql .= "(";
$sql .= "access_control_node_uuid, ";
$sql .= "access_control_uuid, ";
$sql .= "node_type, ";
$sql .= "node_cidr, ";
$sql .= "node_domain, ";
$sql .= "node_description ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'".uuid()."', ";
$sql .= "'$access_control_uuid', ";
$sql .= "'$node_type', ";
$sql .= "'$node_cidr', ";
$sql .= "'$node_domain', ";
$sql .= "'$node_description' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
$_SESSION['message'] = $text['message-add'];
header('Location: access_control_edit.php?id='.$access_control_uuid);
return;
} //if ($action == "add")
if ($action == "update" && permission_exists('access_control_node_edit')) {
$sql = "update v_access_control_nodes set ";
$sql .= "access_control_uuid = '$access_control_uuid', ";
$sql .= "node_type = '$node_type', ";
$sql .= "node_cidr = '$node_cidr', ";
$sql .= "node_domain = '$node_domain', ";
$sql .= "node_description = '$node_description' ";
$sql .= "where access_control_node_uuid = '$access_control_node_uuid'";
$db->exec(check_sql($sql));
unset($sql);
$_SESSION['message'] = $text['message-update'];
header('Location: access_control_edit.php?id='.$access_control_uuid);
return;
} //if ($action == "update")
} //if ($_POST["persistformvar"] != "true")
} //(count($_POST)>0 && strlen($_POST["persistformvar"]) == 0)
//pre-populate the form
if (count($_GET)>0 && $_POST["persistformvar"] != "true") {
$access_control_node_uuid = check_str($_GET["id"]);
$sql = "select * from v_access_control_nodes ";
$sql .= "where access_control_node_uuid = '$access_control_node_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$node_type = $row["node_type"];
$node_cidr = $row["node_cidr"];
$node_domain = $row["node_domain"];
$node_description = $row["node_description"];
break; //limit to 1 row
}
unset ($prep_statement);
}
//show the header
require_once "resources/header.php";
//show the content
echo "<div align='center'>";
echo "<table width='100%' border='0' cellpadding='0' cellspacing=''>\n";
echo "<tr class='border'>\n";
echo " <td align=\"left\">\n";
echo " <br>";
echo "<form method='post' name='frm' action=''>\n";
echo "<div align='center'>\n";
echo "<table width='100%' border='0' cellpadding='6' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td align='left' width='30%' nowrap='nowrap'><b>".$text['title-access_control_node']."</b></td>\n";
echo "<td width='70%' align='right'>\n";
echo " <input type='button' class='btn' name='' alt='".$text['button-back']."' onclick=\"window.location='access_control_edit.php?id=$access_control_uuid'\" value='".$text['button-back']."'>";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-save']."'>";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-node_type']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='node_type'>\n";
echo " <option value=''></option>\n";
if ($node_type == "allow") {
echo " <option value='allow' selected='selected'>".$text['label-allow']."</option>\n";
}
else {
echo " <option value='allow'>".$text['label-allow']."</option>\n";
}
if ($node_type == "deny") {
echo " <option value='deny' selected='selected'>".$text['label-deny']."</option>\n";
}
else {
echo " <option value='deny'>".$text['label-deny']."</option>\n";
}
echo " </select>\n";
echo "<br />\n";
echo $text['description-node_type']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-node_cidr']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='node_cidr' maxlength='255' value=\"$node_cidr\">\n";
echo "<br />\n";
echo $text['description-node_cidr']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-node_domain']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='node_domain' maxlength='255' value=\"$node_domain\">\n";
echo "<br />\n";
echo $text['description-node_domain']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-node_description']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='node_description' maxlength='255' value=\"$node_description\">\n";
echo "<br />\n";
echo $text['description-node_description']."\n";
echo "</td>\n";
echo "</tr>\n";
echo " <tr>\n";
echo " <td colspan='2' align='right'>\n";
echo " <input type='hidden' name='access_control_uuid' value='$access_control_uuid'>\n";
if ($action == "update") {
echo " <input type='hidden' name='access_control_node_uuid' value='$access_control_node_uuid'>\n";
}
echo " <input type='submit' name='submit' class='btn' value='".$text['button-save']."'>\n";
echo " </td>\n";
echo " </tr>";
echo "</table>";
echo "</form>";
echo " </td>";
echo " </tr>";
echo "</table>";
echo "</div>";
//include the footer
require_once "resources/footer.php";
?>
@@ -0,0 +1,146 @@
<?php
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('access_control_node_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//get variables used to control the order
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//additional includes
require_once "resources/header.php";
require_once "resources/paging.php";
//show the content
echo "<div align='center'>";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='2'>\n";
echo "<tr class='border'>\n";
echo " <td align=\"center\">\n";
echo " <br />";
echo "<table width='100%' border='0'>\n";
echo " <tr>\n";
echo " <td width='50%' align='left' nowrap='nowrap'><b>".$text['title-access_control_nodes']."</b></td>\n";
echo " <td width='50%' align='right'>&nbsp;</td>\n";
echo " </tr>\n";
echo "</table>\n";
//prepare to page the results
$sql = "select count(*) as num_rows from v_access_control_nodes ";
$sql .= "where access_control_uuid = '$access_control_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] > 0) {
$num_rows = $row['num_rows'];
}
else {
$num_rows = '0';
}
}
//prepare to page the results
$rows_per_page = 10;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page, $var3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
//get the list
$sql = "select * from v_access_control_nodes ";
$sql .= "where access_control_uuid = '$access_control_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$sql .= "limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
unset ($prep_statement, $sql);
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
echo "<div align='center'>\n";
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo th_order_by('node_type', $text['label-node_type'], $order_by, $order);
echo th_order_by('node_cidr', $text['label-node_cidr'], $order_by, $order);
echo th_order_by('node_domain', $text['label-node_domain'], $order_by, $order);
echo th_order_by('node_description', $text['label-node_description'], $order_by, $order);
echo "<td class='list_control_icons'>";
if (permission_exists('access_control_node_add')) {
echo "<a href='access_control_node_edit.php?access_control_uuid=".$_GET['id']."' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
else {
echo "&nbsp;\n";
}
echo "</td>\n";
echo "<tr>\n";
if ($result_count > 0) {
foreach($result as $row) {
if (permission_exists('access_control_node_edit')) {
$tr_link = "href='access_control_node_edit.php?access_control_uuid=".$row['access_control_uuid']."&id=".$row['access_control_node_uuid']."'";
}
echo "<tr ".$tr_link.">\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['node_type']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['node_cidr']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['node_domain']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['node_description']."&nbsp;</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('access_control_node_edit')) {
echo "<a href='access_control_node_edit.php?access_control_uuid=".$row['access_control_uuid']."&id=".$row['access_control_node_uuid']."' alt='".$text['button-edit']."'>$v_link_label_edit</a>";
}
if (permission_exists('access_control_node_delete')) {
echo "<a href='access_control_node_delete.php?access_control_uuid=".$row['access_control_uuid']."&id=".$row['access_control_node_uuid']."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete']."')\">$v_link_label_delete</a>";
}
echo " </td>\n";
echo "</tr>\n";
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "<tr>\n";
echo "<td colspan='5' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap='nowrap'>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap='nowrap'>$paging_controls</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('access_control_node_add')) {
echo "<a href='access_control_node_edit.php?access_control_uuid=".$_GET['id']."' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
else {
echo "&nbsp;";
}
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>";
echo "</div>";
echo "<br /><br />";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</div>";
echo "<br /><br />";
//include the footer
require_once "resources/footer.php";
?>
+128 -225
View File
@@ -1,249 +1,152 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2018 - 2020
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('access_control_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('access_control_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the http post data
if (is_array($_POST['access_controls'])) {
$action = $_POST['action'];
$search = $_POST['search'];
$access_controls = $_POST['access_controls'];
require_once "app_languages.php";
foreach($text as $key => $value) {
$text[$key] = $value[$_SESSION['domain']['language']['code']];
}
//process the http post data by action
if ($action != '' && is_array($access_controls) && @sizeof($access_controls) != 0) {
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: access_controls.php');
exit;
}
//prepare the array
foreach($access_controls as $row) {
$array['access_controls'][$x]['checked'] = $row['checked'];
$array['access_controls'][$x]['access_control_uuid'] = $row['access_control_uuid'];
$x++;
}
//prepare the database object
$database = new database;
$database->app_name = 'access_controls';
$database->app_uuid = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
//send the array to the database class
switch ($action) {
case 'copy':
if (permission_exists('access_control_add')) {
$database->copy($array);
}
break;
case 'toggle':
if (permission_exists('access_control_edit')) {
$database->toggle($array);
}
break;
case 'delete':
if (permission_exists('access_control_delete')) {
$database->delete($array);
}
break;
}
//redirect the user
header('Location: access_controls.php'.($search != '' ? '?search='.urlencode($search) : null));
exit;
}
//get order and order by
//get variables used to control the order
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search
if (isset($_GET["search"])) {
$search = strtolower($_GET["search"]);
$parameters['search'] = '%'.$search.'%';
}
//get the count
$sql = "select count(access_control_uuid) ";
$sql .= "from v_access_controls ";
if (isset($_GET["search"])) {
$sql .= "where (";
$sql .= " lower(access_control_name) like :search ";
$sql .= " or lower(access_control_default) like :search ";
$sql .= " or lower(access_control_description) like :search ";
$sql .= ") ";
}
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
//get the list
$sql = "select ";
$sql .= "access_control_uuid, ";
$sql .= "access_control_name, ";
$sql .= "access_control_default, ";
$sql .= "access_control_description ";
$sql .= "from v_access_controls ";
if (isset($_GET["search"])) {
$sql .= "where (";
$sql .= " lower(access_control_name) like :search ";
$sql .= " or lower(access_control_default) like :search ";
$sql .= " or lower(access_control_description) like :search ";
$sql .= ") ";
}
$sql .= order_by($order_by, $order, 'access_control_name', 'asc');
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$access_controls = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//additional includes
$document['title'] = $text['title-access_controls'];
require_once "resources/header.php";
require_once "resources/paging.php";
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-access_controls']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
if (permission_exists('access_control_add')) {
echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','name'=>'btn_add','link'=>'access_control_edit.php']);
}
if (permission_exists('access_control_add') && $access_controls) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display:none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
}
if (permission_exists('access_control_delete') && $access_controls) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display:none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo "<form id='form_search' class='inline' method='get'>\n";
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search']);
//echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'access_controls.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>\n";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo "<div align='center'>";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='2'>\n";
echo "<tr class='border'>\n";
echo " <td align=\"center\">\n";
echo " <br />";
if (permission_exists('access_control_add') && $access_controls) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]);
}
if (permission_exists('access_control_delete') && $access_controls) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
echo "<table width='100%' border='0'>\n";
echo " <tr>\n";
echo " <td width='50%' align='left' nowrap='nowrap'><b>".$text['title-access_controls']."</b></td>\n";
echo " <td width='50%' align='right'>&nbsp;</td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td align='left' colspan='2'>\n";
echo " ".$text['description-access_control']."<br /><br />\n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
echo $text['title_description-access_controls']."\n";
echo "<br /><br />\n";
echo "<form id='form_list' method='post'>\n";
echo "<input type='hidden' id='action' name='action' value=''>\n";
echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
if (permission_exists('access_control_add') || permission_exists('access_control_edit') || permission_exists('access_control_delete')) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".($access_controls ?: "style='visibility: hidden;'").">\n";
echo " </th>\n";
}
echo th_order_by('access_control_name', $text['label-access_control_name'], $order_by, $order);
echo th_order_by('access_control_default', $text['label-access_control_default'], $order_by, $order);
echo " <th class='hide-sm-dn'>".$text['label-access_control_description']."</th>\n";
if (permission_exists('access_control_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>&nbsp;</td>\n";
}
echo "</tr>\n";
if (is_array($access_controls) && @sizeof($access_controls) != 0) {
$x = 0;
foreach ($access_controls as $row) {
if (permission_exists('access_control_edit')) {
$list_row_url = "access_control_edit.php?id=".urlencode($row['access_control_uuid']);
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
if (permission_exists('access_control_add') || permission_exists('access_control_edit') || permission_exists('access_control_delete')) {
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='access_controls[$x][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
echo " <input type='hidden' name='access_controls[$x][access_control_uuid]' value='".escape($row['access_control_uuid'])."' />\n";
echo " </td>\n";
}
echo " <td>\n";
if (permission_exists('access_control_edit')) {
echo " <a href='".$list_row_url."' title=\"".$text['button-edit']."\">".escape($row['access_control_name'])."</a>\n";
//prepare to page the results
$sql = "select count(*) as num_rows from v_access_controls ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] > 0) {
$num_rows = $row['num_rows'];
}
else {
echo " ".escape($row['access_control_name']);
$num_rows = '0';
}
}
//prepare to page the results
$rows_per_page = 10;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page, $var3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
//get the list
$sql = "select * from v_access_controls ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$sql .= "limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
unset ($prep_statement, $sql);
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
echo "<div align='center'>\n";
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo th_order_by('access_control_name', $text['label-access_control_name'], $order_by, $order);
echo th_order_by('access_control_default', $text['label-access_control_default'], $order_by, $order);
echo th_order_by('access_control_description', $text['label-access_control_description'], $order_by, $order);
echo "<td class='list_control_icons'>";
if (permission_exists('access_control_add')) {
echo "<a href='access_control_edit.php' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
else {
echo "&nbsp;\n";
}
echo "</td>\n";
echo "<tr>\n";
if ($result_count > 0) {
foreach($result as $row) {
if (permission_exists('access_control_edit')) {
$tr_link = "href='access_control_edit.php?id=".$row['access_control_uuid']."'";
}
echo "<tr ".$tr_link.">\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['access_control_name']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['access_control_default']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['access_control_description']."&nbsp;</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('access_control_edit')) {
echo "<a href='access_control_edit.php?id=".$row['access_control_uuid']."' alt='".$text['button-edit']."'>$v_link_label_edit</a>";
}
if (permission_exists('access_control_delete')) {
echo "<a href='access_control_delete.php?id=".$row['access_control_uuid']."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete']."')\">$v_link_label_delete</a>";
}
echo " </td>\n";
echo " <td>".escape($row['access_control_default'])."</td>\n";
echo " <td class='description overflow hide-sm-dn'>".escape($row['access_control_description'])."</td>\n";
if (permission_exists('access_control_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>\n";
echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
echo " </td>\n";
}
echo "</tr>\n";
$x++;
}
unset($access_controls);
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "<tr>\n";
echo "<td colspan='4' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap='nowrap'>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap='nowrap'>$paging_controls</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('access_control_add')) {
echo "<a href='access_control_edit.php' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
else {
echo "&nbsp;";
}
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "</table>";
echo "</div>";
echo "<br /><br />";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</div>";
echo "<br /><br />";
//include the footer
require_once "resources/footer.php";
?>
?>
+99 -99
View File
@@ -1,122 +1,122 @@
<?php
//application details
$apps[$x]['name'] = "Access Controls";
$apps[$x]['uuid'] = "1416a250-f6e1-4edc-91a6-5c9b883638fd";
$apps[$x]['category'] = "";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.0";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Manage access control lists";
$apps[$x]['description']['en-gb'] = "Manage access control lists";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "Zugriffssteuerungslisten verwalten";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "Zugriffssteuerungslisten verwalten";
$apps[$x]['description']['es-cl'] = "";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "Gérer les listes de contrôle d'accès";
$apps[$x]['description']['fr-fr'] = "Gérer les listes de contrôle d'accès";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "Beheer toegangs controle lijsten";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "";
$apps[$x]['description']['pt-pt'] = "";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
$apps[$x]['name'] = 'Access Controls';
$apps[$x]['uuid'] = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
$apps[$x]['category'] = '';
$apps[$x]['subcategory'] = '';
$apps[$x]['version'] = '';
$apps[$x]['license'] = 'Mozilla Public License 1.1';
$apps[$x]['url'] = 'http://www.fusionpbx.com';
$apps[$x]['description']['en-us'] = '';
//permission details
$y=0;
$apps[$x]['permissions'][$y]['name'] = "access_control_view";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y = 0;
$apps[$x]['permissions'][$y]['name'] = 'access_control_view';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'user';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_add";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = 'access_control_add';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_edit";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = 'access_control_edit';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
//$apps[$x]['permissions'][$y]['groups'][] = 'user';
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_delete";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = 'access_control_delete';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_node_view";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = 'access_control_node_view';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'user';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_node_add";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = 'access_control_node_add';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_node_edit";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = 'access_control_node_edit';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
//$apps[$x]['permissions'][$y]['groups'][] = 'user';
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_node_delete";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = 'access_control_node_delete';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
//cache details
$apps[$x]['cache']['key'] = "configuration.acl.conf";
//schema details
$y=0;
$apps[$x]['db'][$y]['table']['name'] = "v_access_controls";
$apps[$x]['db'][$y]['table']['parent'] = "";
$z=0;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "primary";
$y = 0; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = 'v_access_controls';
//$apps[$x]['db'][$y]['fields'][$z]['name'] = 'domain_uuid';
//$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
//$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
//$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
//$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'foreign';
//$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = 'v_domains';
//$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = 'domain_uuid';
//$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'access_control_uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'primary';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the name.";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'access_control_name';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the name.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_default";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the default type.";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'access_control_default';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Select the default type.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_description";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the description";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'access_control_description';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the description';
$y++;
$apps[$x]['db'][$y]['table']['name'] = "v_access_control_nodes";
$apps[$x]['db'][$y]['table']['parent'] = "v_access_controls";
$z=0;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_node_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "primary";
$y = 1; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = 'v_access_control_nodes';
//$apps[$x]['db'][$y]['fields'][$z]['name'] = 'domain_uuid';
//$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
//$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
//$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
//$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'foreign';
//$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = 'v_domains';
//$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = 'domain_uuid';
//$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'access_control_node_uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'primary';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_access_controls";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "access_control_uuid";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'access_control_uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'foreign';
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = 'v_access_control';
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = 'access_control_uuid';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "node_type";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the type.";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'node_type';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Select the type.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "node_cidr";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the IP CIDR range.";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'node_cidr';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the IP CIDR range.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "node_domain";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the domain.";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'node_domain';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the domain.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "node_description";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the description.";
?>
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'node_description';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the description.';
$z++;
?>
+87 -101
View File
@@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2016 - 2022
Portions created by the Initial Developer are Copyright (C) 2015
the Initial Developer. All Rights Reserved.
Contributor(s):
@@ -28,108 +28,94 @@
if ($domains_processed == 1) {
//add the access control list to the database
$sql = "select count(*) from v_access_controls ";
$database = new database;
$num_rows = $database->select($sql, null, 'column');
if ($num_rows == 0) {
//set the directory
$xml_dir = $_SESSION["switch"]["conf"]["dir"].'/autoload_configs';
$xml_file = $xml_dir."/acl.conf.xml";
$xml_file_alt = $_SERVER["DOCUMENT_ROOT"].'/'.PROJECT_PATH.'/resources/templates/conf/autoload_configs/acl.conf';
//load the xml and save it into an array
if (file_exists($xml_file)) {
$sql = "select count(*) as num_rows from v_access_controls ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] == 0) {
//find the file
if (file_exists('/usr/share/examples/fusionpbx/resources/templates/conf/autoload_configs')) {
$xml_file = '/usr/share/examples/fusionpbx/resources/templates/conf/autload_configs/acl.conf.xml';
}
elseif (file_exists('/usr/local/share/fusionpbx/resources/templates/conf/autoload_configs')) {
$xml_file = '/usr/local/share/fusionpbx/resources/templates/conf/autoload_configs/acl.conf.xml';
}
else {
$xml_file = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/templates/conf/autoload_configs/acl.conf.xml';
}
//load the xml and save it into an array
$xml_string = file_get_contents($xml_file);
$xml_object = simplexml_load_string($xml_string);
$json = json_encode($xml_object);
$conf_array = json_decode($json, true);
//process the array
foreach($conf_array['network-lists']['list'] as $list) {
//get the attributes
$access_control_name = $list['@attributes']['name'];
$access_control_default = $list['@attributes']['default'];
//insert the name, description
$access_control_uuid = uuid();
$sql = "insert into v_access_controls ";
$sql .= "(";
$sql .= "access_control_uuid, ";
$sql .= "access_control_name, ";
$sql .= "access_control_default ";
$sql .= ") ";
$sql .= "values ";
$sql .= "( ";
$sql .= "'".$access_control_uuid."', ";
$sql .= "'".check_str($access_control_name)."', ";
$sql .= "'".check_str($access_control_default)."' ";
$sql .= ")";
//echo $sql."\n";
$db->exec(check_sql($sql));
unset($sql);
//normalize the array - needed because the array is inconsistent when there is only one row vs multiple
if (strlen($list['node']['@attributes']['type']) > 0) {
$list['node'][]['@attributes'] = $list['node']['@attributes'];
unset($list['node']['@attributes']);
}
//add the nodes
foreach ($list['node'] as $row) {
//get the name and value pair
$node_type = $row['@attributes']['type'];
$node_cidr = $row['@attributes']['cidr'];
$node_domain = $row['@attributes']['domain'];
//replace $${domain}
if (strlen($node_domain) > 0) {
$node_domain = str_replace("\$\${domain}", $domain_name, $node_domain);
}
//add the profile settings into the database
$access_control_node_uuid = uuid();
$sql = "insert into v_access_control_nodes ";
$sql .= "(";
$sql .= "access_control_node_uuid, ";
$sql .= "access_control_uuid, ";
$sql .= "node_type, ";
$sql .= "node_cidr, ";
$sql .= "node_domain ";
$sql .= ") ";
$sql .= "values ";
$sql .= "( ";
$sql .= "'".$access_control_node_uuid."', ";
$sql .= "'".$access_control_uuid."', ";
$sql .= "'".$node_type."', ";
$sql .= "'".$node_cidr."', ";
$sql .= "'".$node_domain."' ";
$sql .= ")";
//echo $sql."\n";
$db->exec(check_sql($sql));
}
}
elseif (file_exists($xml_file_alt)) {
$xml_string = file_get_contents(xml_file_alt);
}
else {
$xml_string = "<configuration name=\"acl.conf\" description=\"Network Lists\">\n";
$xml_string .= " <network-lists>\n";
$xml_string .= " <list name=\"rfc1918\" default=\"allow\">\n";
$xml_string .= " <node type=\"allow\" cidr=\"10.0.0.0/8\"/>\n";
$xml_string .= " <node type=\"allow\" cidr=\"172.16.0.0/12\"/>\n";
$xml_string .= " <node type=\"allow\" cidr=\"192.168.0.0/16\"/>\n";
$xml_string .= " </list>\n";
$xml_string .= " <list name=\"domains\" default=\"deny\">\n";
$xml_string .= " <node type=\"allow\" domain=\"".$_SESSION['domain_name']."\"/>\n";
$xml_string .= " </list>\n";
$xml_string .= " </network-lists>\n";
$xml_string .= "</configuration>\n";
}
$xml_object = simplexml_load_string($xml_string);
$json = json_encode($xml_object);
$conf_array = json_decode($json, true);
//process the array
foreach($conf_array['network-lists']['list'] as $list) {
//get the attributes
$access_control_name = $list['@attributes']['name'];
$access_control_default = $list['@attributes']['default'];
//insert the name, description
$access_control_uuid = uuid();
$array['access_controls'][0]['access_control_uuid'] = $access_control_uuid;
$array['access_controls'][0]['access_control_name'] = $access_control_name;
$array['access_controls'][0]['access_control_default'] = $access_control_default;
$p = new permissions;
$p->add('access_control_add', 'temp');
$database = new database;
$database->app_name = 'access_controls';
$database->app_uuid = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
$database->save($array, false);
unset($array);
$p->delete('access_control_add', 'temp');
//normalize the array - needed because the array is inconsistent when there is only one row vs multiple
if (strlen($list['node']['@attributes']['type']) > 0) {
$list['node'][]['@attributes'] = $list['node']['@attributes'];
unset($list['node']['@attributes']);
}
//add the nodes
foreach ($list['node'] as $row) {
//get the name and value pair
$node_type = $row['@attributes']['type'];
$node_cidr = $row['@attributes']['cidr'];
$node_domain = $row['@attributes']['domain'];
$node_description = $row['@attributes']['description'];
//replace $${domain}
if (strlen($node_domain) > 0) {
$node_domain = str_replace("\$\${domain}", $domain_name, $node_domain);
}
//add the profile settings into the database
$access_control_node_uuid = uuid();
$array['access_control_nodes'][0]['access_control_node_uuid'] = $access_control_node_uuid;
$array['access_control_nodes'][0]['access_control_uuid'] = $access_control_uuid;
$array['access_control_nodes'][0]['node_type'] = $node_type;
$array['access_control_nodes'][0]['node_cidr'] = $node_cidr;
$array['access_control_nodes'][0]['node_domain'] = $node_domain;
$array['access_control_nodes'][0]['node_description'] = $node_description;
$p = new permissions;
$p->add('access_control_node_add', 'temp');
$database = new database;
$database->app_name = 'access_controls';
$database->app_uuid = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
$database->save($array, false);
unset($array);
$p->delete('access_control_node_add', 'temp');
}
}
//rename the file
if (file_exists($xml_dir.'/acl.conf.xml')) {
rename($xml_dir.'/acl.conf.xml', $xml_dir.'/acl.conf');
}
unset($prep_statement);
}
}
unset($sql, $num_rows);
}
?>
?>
+361 -369
View File
@@ -1,466 +1,458 @@
<?php
#This file was last reorganized on 19th of September 2017 08:54:24 AM UTC
$text['title-access_controls']['en-us'] = "Access Controls";
$text['title-access_controls']['en-gb'] = "Access Controls";
$text['title-access_controls']['ar-eg'] = "عناصر التحكم في الوصول";
$text['title-access_controls']['de-at'] = " Zugriffskontrolle"; //copied from de-de
$text['title-access_controls']['de-ch'] = " Zugriffskontrolle"; //copied from de-de
$text['title-access_controls']['de-de'] = " Zugriffskontrolle";
$text['title-access_controls']['es-cl'] = "Controles de acceso";
$text['title-access_controls']['es-mx'] = "Controles de acceso"; //copied from es-cl
$text['title-access_controls']['fr-ca'] = "Contrôle d'accès"; //copied from fr-fr
$text['title-access_controls']['fr-fr'] = "Contrôle d'accès";
$text['title-access_controls']['he-il'] = "בקרת גישה";
$text['title-access_controls']['it-it'] = "Controllo Accessi";
$text['title-access_controls']['nl-nl'] = "Toegangs Controle";
$text['title-access_controls']['pl-pl'] = "Kontrola dostępu";
$text['title-access_controls']['pt-br'] = "Controles de Acesso"; //copied from pt-pt
$text['title-access_controls']['pt-pt'] = "Controles de Acesso";
$text['title-access_controls']['ro-ro'] = "Controale de acces";
$text['title-access_controls']['ru-ru'] = "Контроль доступа";
$text['title-access_controls']['fr-fr'] = "Contrôle d'accès";
$text['title-access_controls']['pt-br'] = "Controles de Acesso";
$text['title-access_controls']['he'] = "בקרת גישה";
$text['title-access_controls']['de-at'] = " Zugriffskontrolle";
$text['title-access_controls']['pl'] = "Kontrola dostępu";
$text['title-access_controls']['ro'] = "Controale de acces";
$text['title-access_controls']['uk'] = "контроль доступу";
$text['title-access_controls']['sv-se'] = "Åtkomstkontroll";
$text['title-access_controls']['uk-ua'] = "контроль доступу";
$text['title-access_controls']['ar-eg'] = "عناصر التحكم في الوصول";
$text['title-access_control_nodes']['en-us'] = "Nodes";
$text['title-access_control_nodes']['en-gb'] = "Nodes";
$text['title-access_control_nodes']['ar-eg'] = "العقد";
$text['title-access_control_nodes']['de-at'] = "Knoten"; //copied from de-de
$text['title-access_control_nodes']['de-ch'] = "Knoten"; //copied from de-de
$text['title-access_control_nodes']['de-de'] = "Knoten";
$text['title-access_control_nodes']['es-cl'] = "Nodos";
$text['title-access_control_nodes']['es-mx'] = "Nodos"; //copied from es-cl
$text['title-access_control_nodes']['fr-ca'] = " nœuds"; //copied from fr-fr
$text['title-access_control_nodes']['fr-fr'] = " nœuds";
$text['title-access_control_nodes']['he-il'] = "בלוטות";
$text['title-access_control_nodes']['it-it'] = "Nodi";
$text['title-access_control_nodes']['nl-nl'] = "Knooppunten";
$text['title-access_control_nodes']['pl-pl'] = "węzły";
$text['title-access_control_nodes']['pt-br'] = "Nodes";
$text['title-access_control_nodes']['pt-pt'] = " Nodes";
$text['title-access_control_nodes']['ro-ro'] = "Noduri";
$text['title-access_control_nodes']['ru-ru'] = "Узлы";
$text['title-access_control_nodes']['fr-fr'] = " nœuds";
$text['title-access_control_nodes']['pt-br'] = "Nodes";
$text['title-access_control_nodes']['he'] = "בלוטות";
$text['title-access_control_nodes']['de-at'] = "Knoten";
$text['title-access_control_nodes']['pl'] = "węzły";
$text['title-access_control_nodes']['ro'] = "Noduri";
$text['title-access_control_nodes']['uk'] = "вузли";
$text['title-access_control_nodes']['sv-se'] = "Noder";
$text['title-access_control_nodes']['uk-ua'] = "вузли";
$text['title-access_control_nodes']['ar-eg'] = "العقد";
$text['title-access_control_node']['en-us'] = "Node";
$text['title-access_control_node']['en-gb'] = "Node";
$text['title-access_control_node']['ar-eg'] = "العقدة";
$text['title-access_control_node']['de-at'] = "Netzknoten"; //copied from de-de
$text['title-access_control_node']['de-ch'] = "Netzknoten"; //copied from de-de
$text['title-access_control_node']['de-de'] = "Netzknoten";
$text['title-access_control_node']['es-cl'] = "Nodo";
$text['title-access_control_node']['es-mx'] = "Nodo"; //copied from es-cl
$text['title-access_control_node']['fr-ca'] = " noeud"; //copied from fr-fr
$text['title-access_control_node']['fr-fr'] = " noeud";
$text['title-access_control_node']['he-il'] = "צומת";
$text['title-access_control_node']['it-it'] = "Nodo";
$text['title-access_control_node']['nl-nl'] = "Knooppunt";
$text['title-access_control_node']['pl-pl'] = "węzeł";
$text['title-access_control_node']['pt-br'] = "Nó"; //copied from pt-pt
$text['title-access_control_node']['pt-pt'] = "Nó";
$text['title-access_control_node']['ro-ro'] = "Nod";
$text['title-access_control_node']['ru-ru'] = "Узел";
$text['title-access_control_node']['fr-fr'] = " noeud";
$text['title-access_control_node']['pt-br'] = "Nó";
$text['title-access_control_node']['he'] = "צומת";
$text['title-access_control_node']['de-at'] = "Netzknoten";
$text['title-access_control_node']['pl'] = "węzeł";
$text['title-access_control_node']['ro'] = "Nod";
$text['title-access_control_node']['uk'] = "вузол";
$text['title-access_control_node']['sv-se'] = "Nod";
$text['title-access_control_node']['uk-ua'] = "вузол";
$text['title-access_control_node']['ar-eg'] = "العقدة";
$text['title-access_control']['en-us'] = "Access Control";
$text['title-access_control']['en-gb'] = "Access Control";
$text['title-access_control']['ar-eg'] = "التحكم في الوصول";
$text['title-access_control']['de-at'] = " Zugangskontrolle"; //copied from de-de
$text['title-access_control']['de-ch'] = " Zugangskontrolle"; //copied from de-de
$text['title-access_control']['de-de'] = " Zugangskontrolle";
$text['title-access_control']['es-cl'] = "Control de acceso";
$text['title-access_control']['es-mx'] = "Control de acceso"; //copied from es-cl
$text['title-access_control']['fr-ca'] = "Contrôle d'accès"; //copied from fr-fr
$text['title-access_control']['fr-fr'] = "Contrôle d'accès";
$text['title-access_control']['he-il'] = "בקרת גישה";
$text['title-access_control']['it-it'] = "Controllo Accesso";
$text['title-access_control']['nl-nl'] = "Toegangs Controle";
$text['title-access_control']['pl-pl'] = "Kontrola dostępu";
$text['title-access_control']['pt-br'] = "Controle de acesso"; //copied from pt-pt
$text['title-access_control']['pt-pt'] = "Controle de acesso";
$text['title-access_control']['ro-ro'] = "Controlul accesului";
$text['title-access_control']['ru-ru'] = "Управление доступом";
$text['title-access_control']['fr-fr'] = "Contrôle d'accès";
$text['title-access_control']['pt-br'] = "Controle de acesso";
$text['title-access_control']['he'] = "בקרת גישה";
$text['title-access_control']['de-at'] = " Zugangskontrolle";
$text['title-access_control']['pl'] = "Kontrola dostępu";
$text['title-access_control']['ro'] = "Controlul accesului";
$text['title-access_control']['uk'] = "Управління доступом";
$text['title-access_control']['sv-se'] = "Åtkomstkontroll";
$text['title-access_control']['uk-ua'] = "Управління доступом";
$text['title-access_control']['ar-eg'] = "التحكم في الوصول";
$text['title_description-access_controls']['en-us'] = "Access control list can allow or deny ranges of IP addresses.";
$text['title_description-access_controls']['en-gb'] = "Access control list can allow or deny ranges of IP addresses.";
$text['title_description-access_controls']['ar-eg'] = "قائمة التحكم بالوصول يمكن السماح أو الرفض نطاقات العناوين.";
$text['title_description-access_controls']['de-at'] = " Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen."; //copied from de-de
$text['title_description-access_controls']['de-ch'] = " Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen."; //copied from de-de
$text['title_description-access_controls']['de-de'] = " Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen.";
$text['title_description-access_controls']['es-cl'] = " Lista de control de acceso puede permitir o denegar los rangos de direcciones IP.";
$text['title_description-access_controls']['es-mx'] = " Lista de control de acceso puede permitir o denegar los rangos de direcciones IP."; //copied from es-cl
$text['title_description-access_controls']['fr-ca'] = " Liste de contrôle d'accès peut autoriser ou refuser des plages d'adresses IP."; //copied from fr-fr
$text['title_description-access_controls']['fr-fr'] = " Liste de contrôle d'accès peut autoriser ou refuser des plages d'adresses IP.";
$text['title_description-access_controls']['he-il'] = " רשימת בקרת גישה יכולה לאפשר או למנוע טווחים של כתובות IP.";
$text['title_description-access_controls']['it-it'] = "Le liste per il controllo di accesso permettono o negano l'accesso a range di IP.";
$text['title_description-access_controls']['nl-nl'] = "Toegang Controle lijst kan IP adres reeks toestaan of verbieden.";
$text['title_description-access_controls']['pl-pl'] = "Lista kontroli dostępu może umożliwić lub zablokować zakresy adresów IP.";
$text['title_description-access_controls']['pt-br'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP."; //copied from pt-pt
$text['title_description-access_controls']['pt-pt'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP.";
$text['title_description-access_controls']['ro-ro'] = "Lista de control al accesului poate permite sau refuza intervale de adrese IP.";
$text['title_description-access_controls']['ru-ru'] = "Контроль доступа может разрешить или запретить диапазоны IP адресов.";
$text['title_description-access_controls']['sv-se'] = "Åtkomstkontrollista kan tillåta eller neka intervall av IP-adresser.";
$text['title_description-access_controls']['uk-ua'] = "Список контролю доступу може дозволити або заборонити діапазони IP-адрес.";
$text['message-update']['en-us'] = "Update Completed";
$text['message-update']['es-cl'] = "Actualización Completada";
$text['message-update']['pt-pt'] = "Actualização Efectuada";
$text['message-update']['fr-fr'] = "Mis à jour";
$text['message-update']['pt-br'] = "Atualização Efetuada";
$text['message-update']['he'] = "עידכון הושלם";
$text['message-update']['de-at'] = "Aktualisierung durchgeführt";
$text['message-update']['pl'] = "Zaktualizowano poprawnie";
$text['message-update']['ro'] = "Actualizare completă";
$text['message-update']['uk'] = "Оновлення завершено";
$text['message-update']['sv-se'] = "Uppdatering Klar";
$text['message-update']['ar-eg'] = "تحديث مكتمل";
$text['message-required']['en-us'] = "Please provide: ";
$text['message-required']['es-cl'] = "Por favor indique:";
$text['message-required']['pt-pt'] = "Por favor indique:";
$text['message-required']['fr-fr'] = "Merci d'indiquer:";
$text['message-required']['pt-br'] = "Por favor Indique:";
$text['message-required']['he'] = " אנא ספק";
$text['message-required']['de-at'] = "Bitte geben Sie folgendes an:";
$text['message-required']['pl'] = "Wpisz:";
$text['message-required']['ro'] = "Vă rugăm să oferiți";
$text['message-required']['uk'] = "Будь ласка, вкажіть:";
$text['message-required']['sv-se'] = "Var god uppge:";
$text['message-required']['ar-eg'] = "يرجى تقديم:";
$text['message-delete']['en-us'] = "Delete Completed";
$text['message-delete']['es-cl'] = "Eliminación Completada";
$text['message-delete']['pt-pt'] = "Remoção Efectuada";
$text['message-delete']['fr-fr'] = "Supprimé";
$text['message-delete']['pt-br'] = "Remoção Efetuada";
$text['message-delete']['he'] = "מחיקה הושלמה";
$text['message-delete']['de-at'] = "Erfolgreich gelöscht";
$text['message-delete']['pl'] = "Usunięto poprawnie";
$text['message-delete']['ro'] = "Ștergere completă";
$text['message-delete']['uk'] = "Видалено";
$text['message-delete']['sv-se'] = "Borttagning Klar";
$text['message-delete']['ar-eg'] = "تم المسح";
$text['message-add']['en-us'] = "Add Completed";
$text['message-add']['es-cl'] = "Agregar Completado";
$text['message-add']['pt-pt'] = "Adição Efectuada";
$text['message-add']['fr-fr'] = "Ajouté";
$text['message-add']['pt-br'] = "Criação Efetuada";
$text['message-add']['he'] = "הוספה הושלמה";
$text['message-add']['de-at'] = "Completed";
$text['message-add']['pl'] = "Dodano poprawnie";
$text['message-add']['ro'] = "Adăugare completă";
$text['message-add']['uk'] = "Додано";
$text['message-add']['sv-se'] = "Tillagd";
$text['message-add']['ar-eg'] = "تمت الأضافة";
$text['label-true']['en-us'] = "true";
$text['label-true']['es-cl'] = "Verdadero";
$text['label-true']['pt-pt'] = "Sim";
$text['label-true']['fr-fr'] = "Oui";
$text['label-true']['pt-br'] = "Sim";
$text['label-true']['he'] = "חיובי";
$text['label-true']['de-at'] = "Ein";
$text['label-true']['pl'] = "Tak";
$text['label-true']['ro'] = "Adevărat";
$text['label-true']['uk'] = "Так";
$text['label-true']['sv-se'] = "Sann";
$text['label-true']['ar-eg'] = "صحيح";
$text['label-node_type']['en-us'] = "Type";
$text['label-node_type']['en-gb'] = "Type";
$text['label-node_type']['ar-eg'] = "اكتب";
$text['label-node_type']['de-at'] = "Art"; //copied from de-de
$text['label-node_type']['de-ch'] = "Art"; //copied from de-de
$text['label-node_type']['de-de'] = "Art";
$text['label-node_type']['es-cl'] = "Escribe";
$text['label-node_type']['es-mx'] = "Escribe"; //copied from es-cl
$text['label-node_type']['fr-ca'] = "Type"; //copied from fr-fr
$text['label-node_type']['fr-fr'] = "Type";
$text['label-node_type']['he-il'] = "סוג";
$text['label-node_type']['it-it'] = "Tipo";
$text['label-node_type']['nl-nl'] = "Type";
$text['label-node_type']['pl-pl'] = "typ";
$text['label-node_type']['pt-br'] = "Tipo"; //copied from pt-pt
$text['label-node_type']['pt-pt'] = "Tipo";
$text['label-node_type']['ro-ro'] = "Tip";
$text['label-node_type']['ru-ru'] = "Тип";
$text['label-node_type']['fr-fr'] = "Type";
$text['label-node_type']['pt-br'] = "Tipo";
$text['label-node_type']['he'] = "סוג";
$text['label-node_type']['de-at'] = "Art";
$text['label-node_type']['pl'] = "typ";
$text['label-node_type']['ro'] = "Tip";
$text['label-node_type']['uk'] = "Тип";
$text['label-node_type']['sv-se'] = "Typ";
$text['label-node_type']['uk-ua'] = "Тип";
$text['label-node_type']['ar-eg'] = "اكتب";
$text['label-node_domain']['en-us'] = "Domain";
$text['label-node_domain']['en-gb'] = "Domain";
$text['label-node_domain']['ar-eg'] = "مجال";
$text['label-node_domain']['de-at'] = " Domäne"; //copied from de-de
$text['label-node_domain']['de-ch'] = " Domäne"; //copied from de-de
$text['label-node_domain']['de-de'] = " Domäne";
$text['label-node_domain']['es-cl'] = "Dominio";
$text['label-node_domain']['es-mx'] = "Dominio"; //copied from es-cl
$text['label-node_domain']['fr-ca'] = "Domaine"; //copied from fr-fr
$text['label-node_domain']['fr-fr'] = "Domaine";
$text['label-node_domain']['he-il'] = "תחום";
$text['label-node_domain']['it-it'] = "Dominio";
$text['label-node_domain']['nl-nl'] = "Domein";
$text['label-node_domain']['pl-pl'] = "domeny";
$text['label-node_domain']['pt-br'] = "Domínio"; //copied from pt-pt
$text['label-node_domain']['pt-pt'] = "Domínio";
$text['label-node_domain']['ro-ro'] = "Domeniu";
$text['label-node_domain']['ru-ru'] = "Домен";
$text['label-node_domain']['fr-fr'] = "Domaine";
$text['label-node_domain']['pt-br'] = "Domínio";
$text['label-node_domain']['he'] = "תחום";
$text['label-node_domain']['de-at'] = " Domäne";
$text['label-node_domain']['pl'] = "domeny";
$text['label-node_domain']['ro'] = "Domeniu";
$text['label-node_domain']['uk'] = "домен";
$text['label-node_domain']['sv-se'] = "Domän";
$text['label-node_domain']['uk-ua'] = "домен";
$text['label-node_domain']['ar-eg'] = "مجال";
$text['label-node_description']['en-us'] = "Description";
$text['label-node_description']['en-gb'] = "Description";
$text['label-node_description']['ar-eg'] = "وصف";
$text['label-node_description']['de-at'] = "Beschreibung"; //copied from de-de
$text['label-node_description']['de-ch'] = "Beschreibung"; //copied from de-de
$text['label-node_description']['de-de'] = "Beschreibung";
$text['label-node_description']['es-cl'] = "Descripción";
$text['label-node_description']['es-mx'] = "Descripción"; //copied from es-cl
$text['label-node_description']['fr-ca'] = "Description"; //copied from fr-fr
$text['label-node_description']['fr-fr'] = "Description";
$text['label-node_description']['he-il'] = "תיאור";
$text['label-node_description']['it-it'] = "Descrizione";
$text['label-node_description']['nl-nl'] = "Beschrijving";
$text['label-node_description']['pl-pl'] = "opis";
$text['label-node_description']['pt-br'] = "Descrição"; //copied from pt-pt
$text['label-node_description']['pt-pt'] = "Descrição";
$text['label-node_description']['ro-ro'] = "Descriere";
$text['label-node_description']['ru-ru'] = "Описание";
$text['label-node_description']['fr-fr'] = "Description";
$text['label-node_description']['pt-br'] = "Descrição";
$text['label-node_description']['he'] = "תיאור";
$text['label-node_description']['de-at'] = "Beschreibung";
$text['label-node_description']['pl'] = "opis";
$text['label-node_description']['ro'] = "Descriere";
$text['label-node_description']['uk'] = "опис";
$text['label-node_description']['sv-se'] = "Beskrivning";
$text['label-node_description']['uk-ua'] = "опис";
$text['label-node_description']['ar-eg'] = "وصف";
$text['label-node_cidr']['en-us'] = "CIDR";
$text['label-node_cidr']['en-gb'] = "CIDR";
$text['label-node_cidr']['ar-eg'] = "CIDR";
$text['label-node_cidr']['de-at'] = "CIDR"; //copied from de-de
$text['label-node_cidr']['de-ch'] = "CIDR"; //copied from de-de
$text['label-node_cidr']['de-de'] = "CIDR";
$text['label-node_cidr']['es-cl'] = "CIDR";
$text['label-node_cidr']['es-mx'] = "CIDR"; //copied from es-cl
$text['label-node_cidr']['fr-ca'] = "CIDR"; //copied from fr-fr
$text['label-node_cidr']['fr-fr'] = "CIDR";
$text['label-node_cidr']['he-il'] = "CIDR";
$text['label-node_cidr']['it-it'] = "CIDR";
$text['label-node_cidr']['nl-nl'] = "CIDR";
$text['label-node_cidr']['pl-pl'] = "CIDR";
$text['label-node_cidr']['pt-br'] = "CIDR"; //copied from pt-pt
$text['label-node_cidr']['pt-pt'] = "CIDR";
$text['label-node_cidr']['ro-ro'] = "CIDR";
$text['label-node_cidr']['ru-ru'] = "CIDR";
$text['label-node_cidr']['fr-fr'] = "CIDR";
$text['label-node_cidr']['pt-br'] = "CIDR";
$text['label-node_cidr']['he'] = "CIDR";
$text['label-node_cidr']['de-at'] = "CIDR";
$text['label-node_cidr']['pl'] = "CIDR";
$text['label-node_cidr']['ro'] = "CIDR";
$text['label-node_cidr']['uk'] = "CIDR";
$text['label-node_cidr']['sv-se'] = "CIDR";
$text['label-node_cidr']['uk-ua'] = "CIDR";
$text['label-node_cidr']['ar-eg'] = "CIDR";
$text['label-false']['en-us'] = "false";
$text['label-false']['es-cl'] = "Falso";
$text['label-false']['pt-pt'] = "falso";
$text['label-false']['fr-fr'] = "falso";
$text['label-false']['pt-br'] = "Não";
$text['label-false']['he'] = "לא חוקי";
$text['label-false']['de-at'] = "Aus";
$text['label-false']['pl'] = "Nie";
$text['label-false']['ro'] = "Fals";
$text['label-false']['uk'] = "помилковий";
$text['label-false']['sv-se'] = "Falsk";
$text['label-false']['ar-eg'] = "خاطئة";
$text['label-deny']['en-us'] = "deny";
$text['label-deny']['en-gb'] = "deny";
$text['label-deny']['ar-eg'] = "تنكر";
$text['label-deny']['de-at'] = " verbieten"; //copied from de-de
$text['label-deny']['de-ch'] = " verbieten"; //copied from de-de
$text['label-deny']['de-de'] = " verbieten";
$text['label-deny']['es-cl'] = "Negar";
$text['label-deny']['es-mx'] = "Negar"; //copied from es-cl
$text['label-deny']['fr-ca'] = " nier"; //copied from fr-fr
$text['label-deny']['fr-fr'] = " nier";
$text['label-deny']['he-il'] = "להכחיש";
$text['label-deny']['it-it'] = "nega";
$text['label-deny']['nl-nl'] = "verbieden";
$text['label-deny']['pl-pl'] = "odrzuć";
$text['label-deny']['pt-br'] = "negar"; //copied from pt-pt
$text['label-deny']['pt-pt'] = "negar";
$text['label-deny']['ro-ro'] = "Nega";
$text['label-deny']['ru-ru'] = "запретить";
$text['label-deny']['fr-fr'] = " nier";
$text['label-deny']['pt-br'] = "Negar";
$text['label-deny']['he'] = "להכחיש";
$text['label-deny']['de-at'] = " leugnen";
$text['label-deny']['pl'] = "zaprzeczać";
$text['label-deny']['ro'] = "Nega";
$text['label-deny']['uk'] = "правда";
$text['label-deny']['sv-se'] = "förneka";
$text['label-deny']['uk-ua'] = "правда";
$text['label-deny']['ar-eg'] = "تنكر";
$text['label-allow']['en-us'] = "allow";
$text['label-allow']['en-gb'] = "allow";
$text['label-allow']['ar-eg'] = "السماح";
$text['label-allow']['de-at'] = "erlauben"; //copied from de-de
$text['label-allow']['de-ch'] = "erlauben"; //copied from de-de
$text['label-allow']['de-de'] = "erlauben";
$text['label-allow']['es-cl'] = "Permitir";
$text['label-allow']['es-mx'] = "Permitir"; //copied from es-cl
$text['label-allow']['fr-ca'] = " permettre"; //copied from fr-fr
$text['label-allow']['fr-fr'] = " permettre";
$text['label-allow']['he-il'] = "לאפשר";
$text['label-allow']['it-it'] = "permetti";
$text['label-allow']['nl-nl'] = "toestaan";
$text['label-allow']['pl-pl'] = "zezwól";
$text['label-allow']['pt-br'] = "permitir"; //copied from pt-pt
$text['label-allow']['pt-pt'] = "permitir";
$text['label-allow']['ro-ro'] = "Permite";
$text['label-allow']['ru-ru'] = "разрешить";
$text['label-allow']['fr-fr'] = " permettre";
$text['label-allow']['pt-br'] = "permitir";
$text['label-allow']['he'] = "לאפשר";
$text['label-allow']['de-at'] = "erlauben";
$text['label-allow']['pl'] = "dopuszczać";
$text['label-allow']['ro'] = "Permite";
$text['label-allow']['uk'] = "дозволяти";
$text['label-allow']['sv-se'] = "tillåta";
$text['label-allow']['uk-ua'] = "дозволяти";
$text['label-allow']['ar-eg'] = "السماح";
$text['label-access_control_name']['en-us'] = "Name";
$text['label-access_control_name']['en-gb'] = "Name";
$text['label-access_control_name']['ar-eg'] = "اسم";
$text['label-access_control_name']['de-at'] = "Name"; //copied from de-de
$text['label-access_control_name']['de-ch'] = "Name"; //copied from de-de
$text['label-access_control_name']['de-de'] = "Name";
$text['label-access_control_name']['es-cl'] = "Nombre";
$text['label-access_control_name']['es-mx'] = "Nombre"; //copied from es-cl
$text['label-access_control_name']['fr-ca'] = "Nom"; //copied from fr-fr
$text['label-access_control_name']['fr-fr'] = "Nom";
$text['label-access_control_name']['he-il'] = "שם";
$text['label-access_control_name']['it-it'] = "Nome";
$text['label-access_control_name']['nl-nl'] = "Naam";
$text['label-access_control_name']['pl-pl'] = " Imię";
$text['label-access_control_name']['pt-br'] = "Nome"; //copied from pt-pt
$text['label-access_control_name']['pt-pt'] = "Nome";
$text['label-access_control_name']['ro-ro'] = "Nume";
$text['label-access_control_name']['ru-ru'] = "Имя";
$text['label-access_control_name']['fr-fr'] = "Nom";
$text['label-access_control_name']['pt-br'] = "Nome";
$text['label-access_control_name']['he'] = "שם";
$text['label-access_control_name']['de-at'] = "Name";
$text['label-access_control_name']['pl'] = " Imię";
$text['label-access_control_name']['ro'] = "Nume";
$text['label-access_control_name']['uk'] = "ім'я";
$text['label-access_control_name']['sv-se'] = "namn";
$text['label-access_control_name']['uk-ua'] = "ім'я";
$text['label-access_control_default']['en-us'] = "Default";
$text['label-access_control_default']['en-gb'] = "Default";
$text['label-access_control_default']['ar-eg'] = "افتراضي";
$text['label-access_control_default']['de-at'] = "Standard"; //copied from de-de
$text['label-access_control_default']['de-ch'] = "Standard"; //copied from de-de
$text['label-access_control_default']['de-de'] = "Standard";
$text['label-access_control_default']['es-cl'] = "Defecto";
$text['label-access_control_default']['es-mx'] = "Defecto"; //copied from es-cl
$text['label-access_control_default']['fr-ca'] = "Par défaut"; //copied from fr-fr
$text['label-access_control_default']['fr-fr'] = "Par défaut";
$text['label-access_control_default']['he-il'] = " ברירת מחדל";
$text['label-access_control_default']['it-it'] = "Predefinito";
$text['label-access_control_default']['nl-nl'] = "Standaard";
$text['label-access_control_default']['pl-pl'] = "Domyślnie";
$text['label-access_control_default']['pt-br'] = "Padrão"; //copied from pt-pt
$text['label-access_control_default']['pt-pt'] = "Padrão";
$text['label-access_control_default']['ro-ro'] = "Implicit";
$text['label-access_control_default']['ru-ru'] = "По умолчанию";
$text['label-access_control_default']['sv-se'] = "Standard";
$text['label-access_control_default']['uk-ua'] = "дефолт";
$text['label-access_control_nodes']['en-us'] = "Nodes";
$text['label-access_control_nodes']['en-gb'] = "Nodes";
$text['label-access_control_nodes']['ar-eg'] = "العقد";
$text['label-access_control_nodes']['de-at'] = "Knoten"; //copied from de-de
$text['label-access_control_nodes']['de-ch'] = "Knoten"; //copied from de-de
$text['label-access_control_nodes']['de-de'] = "Knoten";
$text['label-access_control_nodes']['es-cl'] = "Nodos";
$text['label-access_control_nodes']['es-mx'] = "Nodos"; //copied from es-cl
$text['label-access_control_nodes']['fr-ca'] = " nœuds"; //copied from fr-fr
$text['label-access_control_nodes']['fr-fr'] = " nœuds";
$text['label-access_control_nodes']['he-il'] = "בלוטות";
$text['label-access_control_nodes']['it-it'] = "Nodi";
$text['label-access_control_nodes']['nl-nl'] = "Knooppunten";
$text['label-access_control_nodes']['pl-pl'] = "węzły";
$text['label-access_control_nodes']['pt-br'] = "Nodes";
$text['label-access_control_nodes']['pt-pt'] = " Nodes";
$text['label-access_control_nodes']['ro-ro'] = "Noduri";
$text['label-access_control_nodes']['ru-ru'] = "Узлы";
$text['label-access_control_nodes']['sv-se'] = "Noder";
$text['label-access_control_nodes']['uk-ua'] = "вузли";
$text['label-access_control_name']['ar-eg'] = "اسم";
$text['label-access_control_description']['en-us'] = "Description";
$text['label-access_control_description']['en-gb'] = "Description";
$text['label-access_control_description']['ar-eg'] = "وصف";
$text['label-access_control_description']['de-at'] = "Beschreibung"; //copied from de-de
$text['label-access_control_description']['de-ch'] = "Beschreibung"; //copied from de-de
$text['label-access_control_description']['de-de'] = "Beschreibung";
$text['label-access_control_description']['es-cl'] = "Descripción";
$text['label-access_control_description']['es-mx'] = "Descripción"; //copied from es-cl
$text['label-access_control_description']['fr-ca'] = "Description"; //copied from fr-fr
$text['label-access_control_description']['fr-fr'] = "Description";
$text['label-access_control_description']['he-il'] = "תיאור";
$text['label-access_control_description']['it-it'] = "Descrizione";
$text['label-access_control_description']['nl-nl'] = "Omschrijving";
$text['label-access_control_description']['pl-pl'] = "opis";
$text['label-access_control_description']['pt-br'] = "Descrição"; //copied from pt-pt
$text['label-access_control_description']['pt-pt'] = "Descrição";
$text['label-access_control_description']['ro-ro'] = "Descriere";
$text['label-access_control_description']['ru-ru'] = "Описание";
$text['label-access_control_description']['fr-fr'] = "Description";
$text['label-access_control_description']['pt-br'] = "Descrição";
$text['label-access_control_description']['he'] = "תיאור";
$text['label-access_control_description']['de-at'] = "Beschreibung";
$text['label-access_control_description']['pl'] = "opis";
$text['label-access_control_description']['ro'] = "Descriere";
$text['label-access_control_description']['uk'] = "опис";
$text['label-access_control_description']['sv-se'] = "Beskrivning";
$text['label-access_control_description']['uk-ua'] = "опис";
$text['label-access_control_description']['ar-eg'] = "وصف";
$text['label-access_control_default']['en-us'] = "Default";
$text['label-access_control_default']['es-cl'] = "Defecto";
$text['label-access_control_default']['pt-pt'] = "Padrão";
$text['label-access_control_default']['fr-fr'] = "Par défaut";
$text['label-access_control_default']['pt-br'] = "Padrão";
$text['label-access_control_default']['he'] = " ברירת מחדל";
$text['label-access_control_default']['de-at'] = "Standard";
$text['label-access_control_default']['pl'] = "Domyślnie";
$text['label-access_control_default']['ro'] = "Implicit";
$text['label-access_control_default']['uk'] = "дефолт";
$text['label-access_control_default']['sv-se'] = "Standard";
$text['label-access_control_default']['ar-eg'] = "افتراضي";
$text['description-node_type']['en-us'] = "Select the type.";
$text['description-node_type']['en-gb'] = "Select the type.";
$text['description-node_type']['ar-eg'] = "حدد نوع.";
$text['description-node_type']['de-at'] = " Wählen Sie den Typ."; //copied from de-de
$text['description-node_type']['de-ch'] = " Wählen Sie den Typ."; //copied from de-de
$text['description-node_type']['de-de'] = " Wählen Sie den Typ.";
$text['description-node_type']['es-cl'] = "Seleccione el tipo.";
$text['description-node_type']['es-mx'] = "Seleccione el tipo."; //copied from es-cl
$text['description-node_type']['fr-ca'] = " Sélectionnez le type"; //copied from fr-fr
$text['description-node_type']['fr-fr'] = " Sélectionnez le type";
$text['description-node_type']['he-il'] = " בחר את הסוג.";
$text['description-node_type']['it-it'] = "Seleziona il tipo.";
$text['description-node_type']['nl-nl'] = "Selecteer het type.";
$text['description-node_type']['pl-pl'] = "Wybierz rodzaj.";
$text['description-node_type']['pt-br'] = "Selecione o tipo."; //copied from pt-pt
$text['description-node_type']['pt-pt'] = "Selecione o tipo.";
$text['description-node_type']['ro-ro'] = "Selectați tipul.";
$text['description-node_type']['ru-ru'] = "Выберите тип.";
$text['description-node_type']['fr-fr'] = " Sélectionnez le type";
$text['description-node_type']['pt-br'] = "Selecione o tipo.";
$text['description-node_type']['he'] = " בחר את הסוג.";
$text['description-node_type']['de-at'] = " Wählen Sie den Typ.";
$text['description-node_type']['pl'] = "Wybierz rodzaj.";
$text['description-node_type']['ro'] = "Selectați tipul.";
$text['description-node_type']['uk'] = "Виберіть тип.";
$text['description-node_type']['sv-se'] = "Välj typ.";
$text['description-node_type']['uk-ua'] = "Виберіть тип.";
$text['description-node_type']['ar-eg'] = "حدد نوع.";
$text['description-node_domain']['en-us'] = "Enter the domain name.";
$text['description-node_domain']['en-gb'] = "Enter the domain name.";
$text['description-node_domain']['ar-eg'] = "أدخل اسم المجال.";
$text['description-node_domain']['de-at'] = "Geben Sie den Domain-Namen."; //copied from de-de
$text['description-node_domain']['de-ch'] = "Geben Sie den Domain-Namen."; //copied from de-de
$text['description-node_domain']['de-de'] = "Geben Sie den Domain-Namen.";
$text['description-node_domain']['es-cl'] = "Introduzca el nombre de dominio.";
$text['description-node_domain']['es-mx'] = "Introduzca el nombre de dominio."; //copied from es-cl
$text['description-node_domain']['fr-ca'] = "Entrez le nom de domaine."; //copied from fr-fr
$text['description-node_domain']['fr-fr'] = "Entrez le nom de domaine.";
$text['description-node_domain']['he-il'] = " הזן את שם הדומיין.";
$text['description-node_domain']['it-it'] = "Inserisci il dominio.";
$text['description-node_domain']['nl-nl'] = "Voer de domeinnaam in.";
$text['description-node_domain']['pl-pl'] = " Wprowadź nazwę domeny.";
$text['description-node_domain']['pt-br'] = "Digite o nome de domínio."; //copied from pt-pt
$text['description-node_domain']['pt-pt'] = "Digite o nome de domínio.";
$text['description-node_domain']['ro-ro'] = "Introduceți numele de domeniu.";
$text['description-node_domain']['ru-ru'] = "Введите имя домена.";
$text['description-node_domain']['fr-fr'] = "Entrez le nom de domaine.";
$text['description-node_domain']['pt-br'] = "Digite o nome de domínio.";
$text['description-node_domain']['he'] = " הזן את שם הדומיין.";
$text['description-node_domain']['de-at'] = "Geben Sie den Domain-Namen.";
$text['description-node_domain']['pl'] = " Wprowadź nazwę domeny.";
$text['description-node_domain']['ro'] = "Introduceți numele de domeniu.";
$text['description-node_domain']['uk'] = "Введіть ім'я домену.";
$text['description-node_domain']['sv-se'] = "Ange domännamnet.";
$text['description-node_domain']['uk-ua'] = "Введіть ім'я домену.";
$text['description-node_domain']['ar-eg'] = "أدخل اسم المجال.";
$text['description-node_description']['en-us'] = "Enter the description.";
$text['description-node_description']['en-gb'] = "Enter the description.";
$text['description-node_description']['ar-eg'] = "أدخل الوصف.";
$text['description-node_description']['de-at'] = "Geben Sie die Beschreibung ein."; //copied from de-de
$text['description-node_description']['de-ch'] = "Geben Sie die Beschreibung ein."; //copied from de-de
$text['description-node_description']['de-de'] = "Geben Sie die Beschreibung ein.";
$text['description-node_description']['es-cl'] = " Introduzca la descripción.";
$text['description-node_description']['es-mx'] = " Introduzca la descripción."; //copied from es-cl
$text['description-node_description']['fr-ca'] = "Entrez la description."; //copied from fr-fr
$text['description-node_description']['fr-fr'] = "Entrez la description.";
$text['description-node_description']['he-il'] = " הזן את התיאור.";
$text['description-node_description']['it-it'] = "Inserisci la descrizione.";
$text['description-node_description']['nl-nl'] = "Voer de beschrijving in.";
$text['description-node_description']['pl-pl'] = " Wprowadź opis.";
$text['description-node_description']['pt-br'] = "Digite a descrição.";
$text['description-node_description']['pt-pt'] = " Digite a descrição.";
$text['description-node_description']['ro-ro'] = "Introduceți descrierea.";
$text['description-node_description']['ru-ru'] = "Введите описание.";
$text['description-node_description']['fr-fr'] = "Entrez la description.";
$text['description-node_description']['pt-br'] = "Digite a descrição.";
$text['description-node_description']['he'] = " הזן את התיאור.";
$text['description-node_description']['de-at'] = "Geben Sie die Beschreibung.";
$text['description-node_description']['pl'] = " Wprowadź opis.";
$text['description-node_description']['ro'] = "Introduceți descrierea.";
$text['description-node_description']['uk'] = "Введіть опис.";
$text['description-node_description']['sv-se'] = "Ange beskrivningen.";
$text['description-node_description']['uk-ua'] = "Введіть опис.";
$text['description-node_description']['ar-eg'] = "أدخل الوصف.";
$text['description-node_cidr']['en-us'] = "Enter the IP CIDR range.";
$text['description-node_cidr']['en-gb'] = "Enter the IP CIDR range.";
$text['description-node_cidr']['ar-eg'] = "أدخل نطاق IP CIDR.";
$text['description-node_cidr']['de-at'] = " Geben Sie die IP CIDR-Bereich an."; //copied from de-de
$text['description-node_cidr']['de-ch'] = " Geben Sie die IP CIDR-Bereich an."; //copied from de-de
$text['description-node_cidr']['de-de'] = " Geben Sie die IP CIDR-Bereich an.";
$text['description-node_cidr']['es-cl'] = " Introduzca el rango de direcciones IP CIDR.";
$text['description-node_cidr']['es-mx'] = " Introduzca el rango de direcciones IP CIDR."; //copied from es-cl
$text['description-node_cidr']['fr-ca'] = "Entrez la plage IP CIDR."; //copied from fr-fr
$text['description-node_cidr']['fr-fr'] = "Entrez la plage IP CIDR.";
$text['description-node_cidr']['he-il'] = " הזן את טווח ה- IP CIDR.";
$text['description-node_cidr']['it-it'] = "Inserisci il range IP CIDR.";
$text['description-node_cidr']['nl-nl'] = "Voer het IP CIDR reeks in.";
$text['description-node_cidr']['pl-pl'] = "Wprowadź zakres IP CIDR.";
$text['description-node_cidr']['pt-br'] = "Digite o intervalo IP CIDR."; //copied from pt-pt
$text['description-node_cidr']['pt-pt'] = "Digite o intervalo IP CIDR.";
$text['description-node_cidr']['ro-ro'] = "Introduceți intervalul de IP CIDR.";
$text['description-node_cidr']['ru-ru'] = "Введите диапазон IP CIDR.";
$text['description-node_cidr']['fr-fr'] = "Entrez la plage IP CIDR.";
$text['description-node_cidr']['pt-br'] = "Digite o intervalo IP CIDR.";
$text['description-node_cidr']['he'] = " הזן את טווח ה- IP CIDR.";
$text['description-node_cidr']['de-at'] = " Geben Sie die IP CIDR-Bereich.";
$text['description-node_cidr']['pl'] = "Wprowadź zakres IP CIDR.";
$text['description-node_cidr']['ro'] = "Introduceți intervalul de IP CIDR.";
$text['description-node_cidr']['uk'] = "Введіть діапазон IP-CIDR.";
$text['description-node_cidr']['sv-se'] = "Ange IP CIDR sortimentet.";
$text['description-node_cidr']['uk-ua'] = "Введіть діапазон IP-CIDR.";
$text['description-node_cidr']['ar-eg'] = "أدخل نطاق IP CIDR.";
$text['description-access_control_node']['en-us'] = "";
$text['description-access_control_node']['es-cl'] = "";
$text['description-access_control_node']['pt-pt'] = "";
$text['description-access_control_node']['fr-fr'] = "";
$text['description-access_control_node']['pt-br'] = "";
$text['description-access_control_node']['he'] = "";
$text['description-access_control_node']['de-at'] = "";
$text['description-access_control_node']['pl'] = "";
$text['description-access_control_node']['ro'] = "";
$text['description-access_control_node']['uk'] = "";
$text['description-access_control_node']['sv-se'] = "";
$text['description-access_control_node']['ar-eg'] = "";
$text['description-access_control_name']['en-us'] = "Enter the name.";
$text['description-access_control_name']['en-gb'] = "Enter the name.";
$text['description-access_control_name']['ar-eg'] = "أدخل اسم.";
$text['description-access_control_name']['de-at'] = "Namen eingeben."; //copied from de-de
$text['description-access_control_name']['de-ch'] = "Namen eingeben."; //copied from de-de
$text['description-access_control_name']['de-de'] = "Namen eingeben.";
$text['description-access_control_name']['es-cl'] = " Introduzca el nombre.";
$text['description-access_control_name']['es-mx'] = " Introduzca el nombre."; //copied from es-cl
$text['description-access_control_name']['fr-ca'] = "Entrez le nom."; //copied from fr-fr
$text['description-access_control_name']['fr-fr'] = "Entrez le nom.";
$text['description-access_control_name']['he-il'] = " הזן את השם.";
$text['description-access_control_name']['it-it'] = "Inserisci il nome.";
$text['description-access_control_name']['nl-nl'] = "Voer de naam in.";
$text['description-access_control_name']['pl-pl'] = " Wpisz nazwę.";
$text['description-access_control_name']['pt-br'] = "Digite o nome."; //copied from pt-pt
$text['description-access_control_name']['pt-pt'] = "Digite o nome.";
$text['description-access_control_name']['ro-ro'] = "Introduceți numele.";
$text['description-access_control_name']['ru-ru'] = "Введите имя.";
$text['description-access_control_name']['fr-fr'] = "Entrez le nom.";
$text['description-access_control_name']['pt-br'] = "Digite o nome.";
$text['description-access_control_name']['he'] = " הזן את השם.";
$text['description-access_control_name']['de-at'] = "Geben Sie den Namen.";
$text['description-access_control_name']['pl'] = " Wpisz nazwę.";
$text['description-access_control_name']['ro'] = "Introduceți numele.";
$text['description-access_control_name']['uk'] = "Введіть ім'я.";
$text['description-access_control_name']['sv-se'] = "Ange namnet.";
$text['description-access_control_name']['uk-ua'] = "Введіть ім'я.";
$text['description-access_control_name']['ar-eg'] = "أدخل اسم.";
$text['description-access_control_description']['en-us'] = "Enter the description";
$text['description-access_control_description']['en-gb'] = "Enter the description";
$text['description-access_control_description']['ar-eg'] = "دخل وصف";
$text['description-access_control_description']['de-at'] = "Beschreibung eingeben."; //copied from de-de
$text['description-access_control_description']['de-ch'] = "Beschreibung eingeben."; //copied from de-de
$text['description-access_control_description']['de-de'] = "Beschreibung eingeben.";
$text['description-access_control_description']['es-cl'] = "Introduzca la descripción";
$text['description-access_control_description']['es-mx'] = "Introduzca la descripción"; //copied from es-cl
$text['description-access_control_description']['fr-ca'] = "Entrez la description."; //copied from fr-fr
$text['description-access_control_description']['fr-fr'] = "Entrez la description.";
$text['description-access_control_description']['he-il'] = " הזן את התיאור";
$text['description-access_control_description']['it-it'] = "Inserisci la descrizione";
$text['description-access_control_description']['nl-nl'] = "Voer de omschrijving in.";
$text['description-access_control_description']['pl-pl'] = "Wprowadź opis";
$text['description-access_control_description']['pt-br'] = "Digite a descrição.";
$text['description-access_control_description']['pt-pt'] = "Digite a descrição";
$text['description-access_control_description']['ro-ro'] = "Introduceți descrierea";
$text['description-access_control_description']['ru-ru'] = "Введите описание";
$text['description-access_control_description']['sv-se'] = "Ange en beskrivning";
$text['description-access_control_description']['uk-ua'] = "Введіть опис";
$text['description-access_control_description']['fr-fr'] = "Entrez la description.";
$text['description-access_control_description']['pt-br'] = "Digite a descrição";
$text['description-access_control_description']['he'] = " הזן את התיאור";
$text['description-access_control_description']['de-at'] = "Geben Sie die Beschreibung";
$text['description-access_control_description']['pl'] = "Wprowadź opis";
$text['description-access_control_description']['ro'] = "Introduceți descrierea";
$text['description-access_control_description']['uk'] = "Введіть опис";
$text['description-access_control_description']['sv-se'] = "Skriv en beskrivning";
$text['description-access_control_description']['ar-eg'] = "دخل وصف";
$text['description-access_control_default']['en-us'] = "Select the default type.";
$text['description-access_control_default']['en-gb'] = "Select the default type.";
$text['description-access_control_default']['ar-eg'] = "حدد نوع الافتراضي.";
$text['description-access_control_default']['de-at'] = " Wählen Sie den Standardtyp."; //copied from de-de
$text['description-access_control_default']['de-ch'] = " Wählen Sie den Standardtyp."; //copied from de-de
$text['description-access_control_default']['de-de'] = " Wählen Sie den Standardtyp.";
$text['description-access_control_default']['es-cl'] = "Seleccione el tipo de defecto.";
$text['description-access_control_default']['es-mx'] = "Seleccione el tipo de defecto."; //copied from es-cl
$text['description-access_control_default']['fr-ca'] = "Sélectionnez le type de défaut"; //copied from fr-fr
$text['description-access_control_default']['fr-fr'] = "Sélectionnez le type de défaut";
$text['description-access_control_default']['he-il'] = " בחר את סוג ברירת המחדל.";
$text['description-access_control_default']['it-it'] = "Scegli il tipo di default.";
$text['description-access_control_default']['nl-nl'] = "Selecteer het standaard type.";
$text['description-access_control_default']['pl-pl'] = "Wybierz typ domyślny.";
$text['description-access_control_default']['pt-br'] = "Selecione o tipo de padrão."; //copied from pt-pt
$text['description-access_control_default']['pt-pt'] = "Selecione o tipo de padrão.";
$text['description-access_control_default']['ro-ro'] = "Selectați tipul implicit.";
$text['description-access_control_default']['ru-ru'] = "Выберите тип по умолчанию.";
$text['description-access_control_default']['fr-fr'] = "Sélectionnez le type de défaut";
$text['description-access_control_default']['pt-br'] = "Selecione o tipo de padrão.";
$text['description-access_control_default']['he'] = " בחר את סוג ברירת המחדל.";
$text['description-access_control_default']['de-at'] = " Wählen Sie den Standardtyp.";
$text['description-access_control_default']['pl'] = "Wybierz typ domyślny.";
$text['description-access_control_default']['ro'] = "Selectați tipul implicit.";
$text['description-access_control_default']['uk'] = "Вибір типу за замовчуванням.";
$text['description-access_control_default']['sv-se'] = "Välj standardtypen.";
$text['description-access_control_default']['uk-ua'] = "Вибір типу за замовчуванням.";
$text['description-access_control_default']['ar-eg'] = "حدد نوع الافتراضي.";
?>
$text['description-access_control']['en-us'] = "Access control list can allow or deny ranges of IP addresses.";
$text['description-access_control']['es-cl'] = " Lista de control de acceso puede permitir o denegar los rangos de direcciones IP.";
$text['description-access_control']['pt-pt'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP.";
$text['description-access_control']['fr-fr'] = " Liste de contrôle d'accès peut autoriser ou refuser des plages d'adresses IP.";
$text['description-access_control']['pt-br'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP.";
$text['description-access_control']['he'] = " רשימת בקרת גישה יכולה לאפשר או למנוע טווחים של כתובות IP.";
$text['description-access_control']['de-at'] = " Zugriffssteuerungsliste kann zulassen oder ablehnen Bereiche von IP-Adressen.";
$text['description-access_control']['pl'] = "Lista kontroli dostępu może umożliwić lub zablokować zakresy adresów IP.";
$text['description-access_control']['ro'] = "Lista de control al accesului poate permite sau refuza intervale de adrese IP.";
$text['description-access_control']['uk'] = "Список контролю доступу може дозволити або заборонити діапазони IP-адрес.";
$text['description-access_control']['sv-se'] = "Åtkomstkontrollista kan tillåta eller neka intervall av IP-adresser.";
$text['description-access_control']['ar-eg'] = "قائمة التحكم بالوصول يمكن السماح أو الرفض نطاقات العناوين.";
$text['confirm-delete']['en-us'] = "Do you really want to delete this?";
$text['confirm-delete']['es-cl'] = "¿Realmente desea eliminar esto?";
$text['confirm-delete']['pt-pt'] = "Deseja realmente remover isto?";
$text['confirm-delete']['fr-fr'] = "Voulez-vous vraiment supprimer cela?";
$text['confirm-delete']['pt-br'] = "Deseja realmente remover isto?";
$text['confirm-delete']['he'] = " האם אתה באמת רוצה למחוק את זה?";
$text['confirm-delete']['de-at'] = "Wollen Sie das wirklich löschen?";
$text['confirm-delete']['pl'] = "Czy na pewno chcesz to usunąć?";
$text['confirm-delete']['ro'] = "Chiar vrei să ștergeți asta?";
$text['confirm-delete']['uk'] = "Ви дійсно бажаєте це видалити?";
$text['confirm-delete']['sv-se'] = "Vill du verkligen ta bort detta?";
$text['confirm-delete']['ar-eg'] = "هل تريد حقا أن تحذف هذا؟";
$text['button-view']['en-us'] = "View";
$text['button-view']['es-cl'] = "Ver";
$text['button-view']['pt-pt'] = "Vista";
$text['button-view']['fr-fr'] = "Voir";
$text['button-view']['pt-br'] = "Visualizar";
$text['button-view']['he'] = " צפה ב";
$text['button-view']['de-at'] = "Ansicht";
$text['button-view']['pl'] = "Widok";
$text['button-view']['ro'] = "Vedere";
$text['button-view']['uk'] = "вид";
$text['button-view']['sv-se'] = "Visa";
$text['button-view']['ar-eg'] = "عرض";
$text['button-save']['en-us'] = "Save";
$text['button-save']['es-cl'] = "Guardar";
$text['button-save']['pt-pt'] = "Guardar";
$text['button-save']['fr-fr'] = "Sauvegarder";
$text['button-save']['pt-br'] = "Salvar";
$text['button-save']['he'] = "שמור";
$text['button-save']['de-at'] = "Speichern";
$text['button-save']['pl'] = "Zachowaj";
$text['button-save']['ro'] = "Salvează";
$text['button-save']['uk'] = "Зберегти";
$text['button-save']['sv-se'] = "Spara";
$text['button-save']['ar-eg'] = "حفظ";
$text['button-edit']['en-us'] = "Edit";
$text['button-edit']['es-cl'] = "Editar";
$text['button-edit']['pt-pt'] = "Editar";
$text['button-edit']['fr-fr'] = "Editer";
$text['button-edit']['pt-br'] = "Editar";
$text['button-edit']['he'] = " עריכה";
$text['button-edit']['de-at'] = "Bearbeiten";
$text['button-edit']['pl'] = "Edytuj";
$text['button-edit']['ro'] = "edita";
$text['button-edit']['uk'] = "Редагувати";
$text['button-edit']['sv-se'] = "Editera";
$text['button-edit']['ar-eg'] = "تعديل";
$text['button-delete']['en-us'] = "Delete";
$text['button-delete']['es-cl'] = "Eliminar";
$text['button-delete']['pt-pt'] = "Remover";
$text['button-delete']['fr-fr'] = "Supprimer";
$text['button-delete']['pt-br'] = "Remover";
$text['button-delete']['he'] = " מחק";
$text['button-delete']['de-at'] = "löschen";
$text['button-delete']['pl'] = "Usuń";
$text['button-delete']['ro'] = "șterge";
$text['button-delete']['uk'] = "Видалити";
$text['button-delete']['sv-se'] = "Ta Bort";
$text['button-delete']['ar-eg'] = "مسح";
$text['button-back']['en-us'] = "Back";
$text['button-back']['es-cl'] = "Volver";
$text['button-back']['pt-pt'] = "Voltar";
$text['button-back']['fr-fr'] = "Retour";
$text['button-back']['pt-br'] = "Voltar";
$text['button-back']['he'] = "חזרה";
$text['button-back']['de-at'] = "Zurück";
$text['button-back']['pl'] = "Wróć";
$text['button-back']['ro'] = "Înapoi";
$text['button-back']['uk'] = "Назад";
$text['button-back']['sv-se'] = "Tillbaka";
$text['button-back']['ar-eg'] = "رجوع";
$text['button-add']['en-us'] = "Add";
$text['button-add']['es-cl'] = "Agregar";
$text['button-add']['pt-pt'] = "Adicionar";
$text['button-add']['fr-fr'] = "Ajouter";
$text['button-add']['pt-br'] = "Adicionar";
$text['button-add']['he'] = " להוסיף";
$text['button-add']['de-at'] = "Hinzufügen";
$text['button-add']['pl'] = "Dodaj";
$text['button-add']['ro'] = "Adăuga";
$text['button-add']['uk'] = "Додати";
$text['button-add']['sv-se'] = "Lägg Till";
$text['button-add']['ar-eg'] = "اضافة";
?>
+18 -27
View File
@@ -1,30 +1,21 @@
<?php
$y=0;
$apps[$x]['menu'][$y]['title']['en-us'] = "Access Controls";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Access Controls";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "عناصر التحكم في الوصول";
$apps[$x]['menu'][$y]['title']['de-at'] = " Zugriffskontrolle";
$apps[$x]['menu'][$y]['title']['de-ch'] = "";
$apps[$x]['menu'][$y]['title']['de-de'] = " Zugriffskontrolle";
$apps[$x]['menu'][$y]['title']['es-cl'] = "Controles de acceso";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "Contrôles d'accès";
$apps[$x]['menu'][$y]['title']['he-il'] = "בקרת גישה";
$apps[$x]['menu'][$y]['title']['it-it'] = "Controlli Accesso";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Toegangs Controle";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Kontrola dostępu";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Controles de Acesso";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "Controles de Acesso";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "Controale de acces";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Контроль доступа";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "контроль доступу";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Åtkomstkontroll";
$apps[$x]['menu'][$y]['uuid'] = "bd47c972-5498-4541-b44a-d4bbfac69496";
$apps[$x]['menu'][$y]['parent_uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['path'] = "/app/access_controls/access_controls.php";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][0]['title']['en-us'] = "Access Controls";
$apps[$x]['menu'][0]['title']['fr-fr'] = "Contrôles d'accès";
$apps[$x]['menu'][0]['title']['pt-pt'] = "Controles de Acesso";
$apps[$x]['menu'][0]['title']['pt-br'] = "Controles de Acesso";
$apps[$x]['menu'][0]['title']['es-cl'] = "Controles de acceso";
$apps[$x]['menu'][0]['title']['he'] = "בקרת גישה";
$apps[$x]['menu'][0]['title']['de-at'] = " Zugriffskontrolle";
$apps[$x]['menu'][0]['title']['pl'] = "Kontrola dostępu";
$apps[$x]['menu'][0]['title']['ro'] = "Controale de acces";
$apps[$x]['menu'][0]['title']['uk'] = "контроль доступу";
$apps[$x]['menu'][0]['title']['sv-se'] = "Åtkomstkontroll";
$apps[$x]['menu'][0]['title']['ar-eg'] = "عناصر التحكم في الوصول";
$apps[$x]['menu'][0]['uuid'] = "bd47c972-5498-4541-b44a-d4bbfac69496";
$apps[$x]['menu'][0]['parent_uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['path'] = "/app/access_controls/access_controls.php";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
?>
?>
@@ -1,292 +0,0 @@
<?php
/**
* access controls class
*
* @method null download
*/
if (!class_exists('access_controls')) {
class access_controls {
/**
* declare private variables
*/
private $app_name;
private $app_uuid;
private $permission_prefix;
private $list_page;
private $table;
private $uuid_prefix;
/**
* called when the object is created
*/
public function __construct() {
//assign private variables
$this->app_name = 'access_controls';
$this->app_uuid = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
$this->list_page = 'access_controls.php';
}
/**
* called when there are no references to a particular object
* unset the variables used in the class
*/
public function __destruct() {
foreach ($this as $key => $value) {
unset($this->$key);
}
}
/**
* delete records
*/
public function delete($records) {
//assign private variables
$this->permission_prefix = 'access_control_';
$this->table = 'access_controls';
$this->uuid_prefix = 'access_control_';
if (permission_exists($this->permission_prefix.'delete')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//delete multiple records
if (is_array($records) && @sizeof($records) != 0) {
//build the delete array
foreach($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid'];
$array['access_control_nodes'][$x][$this->uuid_prefix.'uuid'] = $record['uuid'];
}
}
//delete the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('access_control_node_delete', 'temp');
//execute delete
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->delete($array);
unset($array);
//revoke temporary permissions
$p->delete('access_control_node_delete', 'temp');
//clear the cache
$cache = new cache;
$cache->delete("configuration:acl.conf");
//create the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
event_socket_request($fp, "api reloadacl");
}
//set message
message::add($text['message-delete']);
}
unset($records);
}
}
}
public function delete_nodes($records) {
//assign private variables
$this->permission_prefix = 'access_control_node_';
$this->table = 'access_control_nodes';
$this->uuid_prefix = 'access_control_node_';
if (permission_exists($this->permission_prefix.'delete')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate('/app/access_controls/access_control_nodes.php')) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//delete multiple records
if (is_array($records) && @sizeof($records) != 0) {
//build the delete array
foreach($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid'];
}
}
//delete the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//execute delete
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->delete($array);
unset($array);
//clear the cache
$cache = new cache;
$cache->delete("configuration:acl.conf");
//create the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
event_socket_request($fp, "api reloadacl");
}
//set message
message::add($text['message-delete']);
}
unset($records);
}
}
}
/**
* copy records
*/
public function copy($records) {
//assign private variables
$this->permission_prefix = 'access_control_';
$this->table = 'access_controls';
$this->uuid_prefix = 'access_control_';
if (permission_exists($this->permission_prefix.'add')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//copy the checked records
if (is_array($records) && @sizeof($records) != 0) {
//get checked records
foreach($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//create insert array from existing data
if (is_array($uuids) && @sizeof($uuids) != 0) {
//primary table
$sql = "select * from v_".$this->table." ";
$sql .= "where ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
$y = 0;
foreach ($rows as $x => $row) {
$primary_uuid = uuid();
//copy data
$array[$this->table][$x] = $row;
//overwrite
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $primary_uuid;
$array[$this->table][$x]['access_control_description'] = trim($row['access_control_description'].' ('.$text['label-copy'].')');
//nodes sub table
$sql_2 = "select * from v_access_control_nodes where access_control_uuid = :access_control_uuid";
$parameters_2['access_control_uuid'] = $row['access_control_uuid'];
$database = new database;
$rows_2 = $database->select($sql_2, $parameters_2, 'all');
if (is_array($rows_2) && @sizeof($rows_2) != 0) {
foreach ($rows_2 as $row_2) {
//copy data
$array['access_control_nodes'][$y] = $row_2;
//overwrite
$array['access_control_nodes'][$y]['access_control_node_uuid'] = uuid();
$array['access_control_nodes'][$y]['access_control_uuid'] = $primary_uuid;
//increment
$y++;
}
}
unset($sql_2, $parameters_2, $rows_2, $row_2);
}
}
unset($sql, $parameters, $rows, $row);
}
//save the changes and set the message
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('access_control_node_add', 'temp');
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('access_control_node_add', 'temp');
//clear the cache
$cache = new cache;
$cache->delete("configuration:acl.conf");
//create the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
event_socket_request($fp, "api reloadacl");
}
//set message
message::add($text['message-copy']);
}
unset($records);
}
}
}
}
}
?>
+15 -55
View File
@@ -25,66 +25,26 @@
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>
+342
View File
@@ -0,0 +1,342 @@
/**
* Alternative style for Adminer.
*
* Klemens Häckel [http://clickdimension.wordpress.com/]
*
* update 2014-01
*
* new remaster based on style for WT-NMP 13.12
*
* Created by Miroslav Pokorný [http://fuch.cz].
* Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).
* Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.
*
*/
/*** Fonts ***/
/*
* @import url(http://fonts.googleapis.com/css?family=Ubuntu:300&subset=latin,latin-ext);
@import url(http://fonts.googleapis.com/css?family=Ubuntu+Mono&subset=latin,latin-ext);
*
* */
* {
/* font-family: 'Ubuntu', sans-serif */
/* font-family: Verdana; font name */
font-family: Verdana,Arial,Helvetica,sans-serif;
}
textarea, pre, code, samp, kbd, var {
font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace
}
/*** Icons ***/
/* Error message */
html>/**/body .error {
background: #FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlpJREFUeNqkU8tu2lAQHT8wtlEQcUKUIjVVgaiCVkhIlSq1isSKTdRNuu5P8AX5Alb9g+6zqZR8QNWmC3ZRa1UJIm0hAWpeNthg/OiMechl00UtHXvuvXPOnbn3mPF9H/7n4en1nmGAwy+BAUghTjB8iThY5v1EfMatzhB3Lg4Ib3FzfkPwdUSSKulCIZs6PFSkeFykCi1dL95dXx81rq7e2JZVxbwPf1WwIkuJxOmL4+Ocz/PSzHHgvtEIFhRFkfdzOTmZTu/ULi5OJ6MRrERYemFZKU4UK8VyOTcyTWk4HEKr1YLC+XkAimluPJ1Kz0qlHBuNVoizFsB+Tg7y+ezAMKQRqhuGAaZprkujmOZ0XQcDRfYymay7OKdFCw7Aq61kUtH6/TVpPB5Dp9MJSLfYiue6i555Hna3txXi4PDdSuChx7Kig3278zkYgwGYkwk0m02IRCLA4jy3Usb1qWmKxAlXAA4u2FQ6VuHjbhGcI3IsFgNh47Q5zHXCtzAH+GV0u0Vf02QpZCy1VAq+8Y27ntv2lDjrQ0S1T912u7eF/ck4lheGgpKqQrleD2I5BN2y+sQJC5zd9np1YFlLRldSUhQhCEKwYzRE9jzPas9mN8RZC3hoz4nrVi81TcUFS0KRJM5/yWQCUCwhbCTXxmPV9LwqcYjLkFUZJDzCwXN042OWreQEIftEEJQEx4mUNHTd6Xfb7qu2fdNAcg1d+IMMSNylAB3mDmIX7bWfBzjaA3iKV/dgabT7LsDXbwAfcVsM4TdCQ66zEmBDbfL/+IPJURMyKHK9PwIMAA7iHkoee771AAAAAElFTkSuQmCC") no-repeat 0.8em center;
padding-left: 38px;
}
/* Ok message */
html>/**/body .message, html>/**/body #menu p.message {
background: #EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnZJREFUeNqkk01PE0EYx/+zu/TNanTbGCjWhrCmlp6MGl94kUQ9eOCC8chHMDG9mHjiE/QjePGOJsR4QQ8Q0UOJHqgVA6kiKQXa0th97+4OM1tq25MHJ/lvdmae3z/PzDMPoZTif4bEP+RVHBAJE5+QBAjm2d9dpsuncbtM66BYAqUVuGzmUtCFWsegb8yFpEAuPZpWUvGkHA1GQzw/zVSv/aztTm9Vfjy22laeLS0PZNCFzwXPLs5mZzISpLBjO1BttbsXGZfHIkn5Umy1uLbYMvx130TwtykSQSGQm746mbE0K6yqKkzTHFC1WoXe1MK3lVuZABnKcaZn4NL5K8PjiqmaYV3XYRjGgOr1OtZn3mJh5Akcox1OxZIKZ3oGDp2MR+Nyq9VCs9mEZVloqS0cHB6gXC7jdfol9vb28GhoFpvFTXiGJ3OmdwcOTQoQQpqmYePhCpQ3N6HbOii76Y17K36IKIqYeDfpV8q0zRBn+jOA67p4rjzFzs4Ovtz/ACp2YEmSfGXfTwFRFhtm4ZLjMz2DNv1d047MZ6UX/vT4+Bgbd/rgVQZf4LXoyCaWyZn+DD5Wj/Yboixi6vvcX9CHPzH4Yg/mMv/oDc70Gyw1d+vbAohBRgmubz7owAUGjw7CnucaVlXf5kzPwKMVV3Py9c/7Jep4BkkRZL8yONU5c1ee7RhqoVHydC/PGb8NeDMRwvogxa73hjAnjIm5QOaMEkhHZPG8FPKfSdMx7S29YZe0ba/s5lHwlvHLhc+eGvByxpjiSJBhTJBpdu4sK9lI56FhH4co4htdQ4UespUjphpjna6B0HdS6R8dzHtRY9IZ650IMACI9kBqNfbjbgAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;
}
/* Sql */
html>/**/body a[href$="sql="] {
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARpJREFUeNrE0z9LQlEYx/Fr/gXdJILegSQJEk13yrUxxDFwUhqagyAEF8E34BsIFKlozpqao8K9WVrCJSWu30d+F44SOjj4wId77nPOeTjn3HMjQRB4m8SOt2Fsv0CE8HleYoRdnGEPF8jhB4+4xw0ONLc7R4E7VJBX23JNtJBFSflD9YXjrT3fQhxpfKqqRQEf+MaLxuTVF3e3bo02yjjBrTMojD+9R52+sO3F8KxC13YmeELCHbT0vtBnE6ua1EfDGZRQO7qiQNEK1LiNRzynSKpjCJ+8fY1T5d/VZ+2Y5nQs8YVXPW01+zjGg3JvuFK+q1yoZ3tOaVnJpcOzqOtwzzF28rbaX0zWXbQMBvqc/r83cet/40yAAQCHjz1eQkhXqAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* DB Dump */
html>/**/body #dump {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqMU8+LElEc/8w4qeM4urvsCgqpEO7VYu/9YAmkNqiDRNdOQtC5k3QIL127BF78G+rQqegQlBRRhz24S0jWuumOrs74c2be9H2jkuJi+4XPvMe87/f73ufzPk/IZrOYxh1CFOeLOuEVn0izP6PRKFosFl/2ej0MBgNYlo1m06A5g98vQ1VVhEIhhMMh5HL3H3k8Hiw04GFZFjqdDjRNcxs0GjqGIwZFUWHZFkSPiIAiLxxFXHlQAXBocAQ2ASY4fwNKnxQ602LbxXzMU/hSKBRep9PpPcYY+v3+lIpFGvgRDAaJfxiVSuUN5X4+q8FOPp/fmxexcdJFbziG1+dFUFUQJhFv3r6XeZx7yG+g/F8R/5x00BuPIZNwJltD9WAffUNHq9VyeM5Sg2UR/3Fngo3uaRuZBxm6xhzX7grh60oRGbPAzCH6py38qlRgmia0Yw2H2uELWr7OaQszJ5KRduLx+NN5EU3bxPrWOhKXEohejCKgBhY2SG2mnkg8ebIbWxLx5+9jNNtNHOz/wLdP3zEaDLF7dxeRWATbW9t5QRDei7VaDbquwzAMZyZivV4nHKHV0WBYA1zYUJC4nMKYBJ0WP6M93xI+iuVyGdVqlSsvrTQTQVkLovi8iGQy2ZZl+YNt2+4tyGQONRaLBSRJcs3i9XpdCh6fjMCwC9EnQAnKuHrrmuuFUqkk0IkjVKuT27FBiFHHG47jbPKuNE5fAoimwD8QRZGPDp/TepN0ekfrR38FGAASfDL3E+dZ1QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* DB Import */
html>/**/body a[href$="import="] {
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ%0AbWFnZVJlYWR5ccllPAAAAnRJREFUeNqMU72PElEQ/%2B1HWHZhgYPjkiMWxoLkaChMzgoJ0JhwlsTK%0AhsKQmFxjT4ImxL/AxOSKS/wPXAs7Q%2BEHqO0VXElAkc89BA7c3ee8PY5w5xVOMjvvzXszb%2BY3vxUK%0AhQJW8pB0F/8nP0gNvpAvPYvFYvfo6Oj1dDrFfD6HZdno9X7T2oHXq0LXdQQCAQSDAZRKj55KkuTG%0AyScnJ0gkEu7GsizU63VMJhOEwxHMZgznCwc%2Bnw7LtiBKIjSfeqUUkSeo1Wprx2AwQCaTgWmOKeES%0AjHxMcC4UF7opvIVCr9e7ZRgGstms6%2Bz3%2B9jfv4ePn%2BoU6KUgtgq2Xb2SQBCEO6enpy83nY7jYDQa%0AIbylo91u42e7Cb/fT/0H0Ww239OVb5d3BQLjMdnbfFOpVJ5zm8vlEIls4/OXr1D9W9AJOL/uQ5BA%0A5EAeloocxFcuBqRvotHoi3w%2B3y0Wi1gul6A9DOMtzmk9MIfoDroYkZ1Mz/DHWlwFcW9vD6lUau2I%0ARCI4Pj6mJDtQNW3duyPYN2PAE2xKOp12J8F50B2ONyZASVZ6fQqX8r1arb5LJpMHHMTZbLZKZBGR%0AvBgSiH0C0bgGoswvr5C/Wy6XDzaZ%2BIsqMOdTyIoIn18lAHXcz%2BcePHtyaND0Gm6CVquFUCjEwWP8%0ANdM01y93aZTmcgpF8yDEAhBlBk1TQI/YoihiPB5DbjQaiMfjUBRFvvm/Yf8wkR6QeJXEHxcDlcih%0Ax2IxTZZllywej8dtQVJUaOdnEBXBbUHTVEiyyJmqdjqdHYqdCPQJk8ZUVc0wxrZtm0bFmEsyriT8%0AA14yWcbXdN6jCj7QeeevAAMALZ84sPgoxOsAAAAASUVORK5CYII%3D%0A") no-repeat 2px bottom;
padding-left: 22px;
}
/* Adminer logo */
html>/**/body h1 {
background: #eee url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEXAwMD/////AAAATmEAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5w%2BL8AAAAAXRSTlMAQObYZgAAAAlwSFlz%0AAAALEgAACxIB0t1%2B/AAAAEVJREFUCJljYEAGjIKCAmCGoKKSIFhASFBQEcgFkoJCggyMwsaGQiA1%0AjIaCwoKKQkCGsbGxIEwErJcoBtAcqEWCgiguAADa1AZzThzIfQAAAABJRU5ErkJggg%3D%3D%0A") no-repeat 14px center;
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
font-size: 1em;
padding: 6px 6px 5px 35px;
position:fixed;
width: 100%;
height: 22px;
}
/* Logout */
html>/**/body input[name="logout"], #logout {
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC") no-repeat 2px bottom;
border: none;
cursor: pointer;
height: 18px;
line-height: 18px;
overflow: hidden;
padding: 0;
position: absolute;
right: 8px;
text-indent: 8px;
top: 6px;
width: 80px;
position:fixed;
z-index: 10;
}
/* Alter table */
html>/**/body a[href*="&create="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl1JREFUeNqck19IU1Ecx7/3drfrXVpJf6BEx53bjK02UaLIJdQsiOrJJvVaL/UePgS52LvPKdRe68GCQOohg4gYmGTZnEzndNPWXpqbNPfH3T+dc3BrDp888OP8zv2d7+/3+f24h/P5/bcAnMT+VlrQNO3URCAwth/17ZGRB4KmqpxODte+Abqu14wkZqbTvf68E//qPQKq5VVV5ekFuq52cmwfsPz3vcT3ynrte9WnGqoVVEXhVJaAw4e4DotQIp0VWOUBiVRMa+BInPpazSdi/RCoVlAUZReB9quIR45Wdp5ZWsI5u535oUgEF51O5n+emyMEHaDaOgIwAq8IfF9ZYf0ebGrCdDTKem6WJHwJh5lPF9VQLU+zqORy/QzOmM1wyTK2SiX02GzoJRT5YhHnHQ5cIBQiocn5fDi7uGhnLTQSzCeTjEASRczGYqyqidIsLCC3sYHc6io83d3oGR29ziuVSq2FKsHp9nY4CEWxXIarsxNuqxUFQmM/+gfq5ibuDg/j2fY2ptzuqV1DrBJE19cZgWg04mc8zgiMlXn8CI3hZr8HjwMzGBwaQjCRWKYEfCOBra0NXYSiTKo4ySzMLWlk4+PwEvHkuxA8fTIsZC5UK5RLpQONBLFUihHQFQ5PIJ98gSuX+vDq9Ue0Wu+h+UQv+5GoVshmMqLBYECwK7/zh4u1t1XIxPB7+SUTvyWV3Zf9OGbuZzGqoVpOkuWHvMnUsddjueNMeZ4Hpz1Pn7jW3oePhyLpw4n6uFYorNGmJWItxIQ9cqTu3+Ams1sYf/NJn22IKcT+/hNgALjZYbRNSSf5AAAAAElFTkSuQmCC") no-repeat 2px bottom;
padding-left: 22px;
}
/* Create table */
html>/**/body a[href$="&create="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqck8trE1EUxr+ZTjKZ+kB31UwtSUiVRFykRsGFKGkEF7qqe5e6FARdtVBc+B+0brTg1pU7dSGIWm2sMebRkDQNTVMSoUWC2qZmHp57kkzTuFB64HK/MzPfub9z517pxtTUNQDHsL+oKZZlHX82PT27H/fE5OQtxTJNyabkyiJg27YzqDAPW8y9eef9QuwIhFc2TVMWH4iIBySex/27OkY65rOd510tPMKrmIYhmVxAwquSDb/SpM62eOVxjVasWZDovdCWo8lsH4bwKoZh7CGwqtu4GzrKeaJQQHR0lPX7bBYXwmHWb1IpIjgB4e0hABPEVCC5ssL9HvB48DGf554PahreptOsRQiPQ2DSx7sEwOmREc6/lEqIBINtGip0PhRiPZ/JQHiYgAv0EWRWV5lAU1V8LhZ51UFBk8vtIWgXaLWcFroEp4aHOc+UyzgTCLBO0n483ZlDspGGbul4EnoE4ZV7N1EQiMivrSFHFKrbja/URmp5GR6ieVddwNnoGAq/ivwbuwRyP0HQ6+V8iYqEfT7cSdzDfP0TBqlIw2wALQvxF1dRCX+bUHaazQGrbw+K6+u8ByKy1MaHSgLeeLvohrEB76XOAuUlXfm+uam6XC48Pvmzc8LVv+7WuWoUqZfJ9gm8LEN+TQdKorniriuNWq3uj0Qe/s/l2b5evTl0UR+q56t17bk+J2+5KuLAazQO0VD+WeG2+wH9vzEMSIuY+X2fnvz4I8AAYtpfN5Cu7WwAAAAASUVORK5CYII=") no-repeat 2px bottom;
padding-left: 22px;
}
/* Create new database */
html>/**/body #content a[href*="&database="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqUkr+LE1EQx7/7g93sJptERPFSbCGSJkUKK20CinB4d8UVQWytAqIiWEoKi4CVlYJwWNwfoMVZCIJWFhcuTQiCORFDJN5tNtns5TY/Nm93fW8TNcHTOwdmZ1hm5s18Zrh8Po+ZrFFdwsnkO9Ut5og//4zH46WNjY3njuNgOByCEA/t9iH1fUQiCjRNQzweRyIRR6Fw47YgCFgowIQQAtu20el0wgKG0cdo7CMa1UA8Al7goUaVhVb4fzbKAQE1AedPFVM9eQEaPk0MZsleqPMyP0KlVCq9zmazq77vYzAYzEYhlEEEsViMzp9AvV5/Q2N3jipwsVgsrs5DNMwDOCMXkiwhpkWRoBCvrawv3y3cYhsoHwtx37ThuC4UCm7iJylEQFHl/4H4e3af845lcPQWfm3Aw2PjCb7sNWDl2jdPm/FnxCcQMplMGOt5HqrVaoraNBuh1WrhW+MreoYBx+rB6fawxb1F7moOH5rbg70znafmqR5ERpwJtX9CpEn20MGL4SZ2x7tQeQW2Z0MccCqRgx3aVkVsNptIJpNwXTdYhEiwb1mwXQe1UQ3n1y6ED5nExKX1yzp19fcv30Esl8tIp9OQZVn82zHpQQqNV58hiiKk5Sg+bdaak4hnUEYVlqTQ49BSqZTKAtixSJIUjiDICtTRAe7LdxCNKbi3/QBdrwv/kHB42L9Oc/thAapnLctydV1/xGAGQTDbATgq7AOe5zG54q/4ZZzj2sFHlsNO54cAAwDujTg3Gh40tQAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* Privileges */
html>/**/body #content a[href*="&privileges="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlNJREFUeNp8U11Ik1EYfr795kynaBBLglbtqiyRSMiMunCCF0FgBP14U5d1JdHFJAKD8rKrEAIjqMlGF/0hTHKLSpi15ZoMjdZgbi23ydzn3PZ93/b1nuFkK7cXHs457/s8z/ee853DybKMckxbVNAowSkUOELLXoJhqxQlfCwW4RcKkAfGpG2NCtXBSUUMtuw1DR3qGeqVtXqjkOUh55LBlW/TPalY0EactwR5R4O8KHe27Tt86fjgyOWvTmvg15LbUShKMHTs7zh5+sI173ubcu13KEzUhbJGUWmQE3Cus/+G2ee2BoMRhx369WFla2Y4lg7Y/QuvgkdPDZgZp1JT1cGmgANNzXvao8n5sEoHM6XM5dqfjdB6d4PKyDi1DfIynxdyOXP/eFdBkpBKxZHhk9BpJOzWyhAEMcc4lZrqLYj47PnkWCySOJ9OYy0WRTwSBJ8IoyDl4fniW2Scmh3QIc7MvrEbE6ur+WMn+kxaXWN7g6SHCCnhdLqXAz6/leMwU7MD5lEo4rF37oNl8tGYq7GlFSq1Bi+fT7m+e/0WVmOcegYsRMIsQc0WSnVpUG/lxH/JVVsQpf9rticT72gYLSfpNqJmB+xWV4BjuSs3b5+l+QOWY+KfsToG9+zAcgTIZkso/a6Jh+OvaX4nswk8dQGTrjoGLF7MAUsrQJpHjq1v3R29yPMY+UHGofgOJ8ZeYxnsMRE0hKar3bBGPfdlGqf6DuI85fSEXeyjlRqu8jlzHMc60hGauww4Y2rD9UAcz3wxzFOObSlN2CDN9nH/FWAAi5Yew8BvpusAAAAASUVORK5CYII=") no-repeat 2px bottom;
padding-left: 22px;
}
/* Process list */
html>/**/body #content a[href*="&processlist="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj5JREFUeNp0k8FrE0EUxr/ZrNvEWlqITdKqTS/ai6AWTyIWFHsTETx4KF49KR68+Q8IHqwgQr2pBasVBEUFL6KtejBLQRDEoiKShBpzWGya3ZnsjG92Z9co6cCPN/Ptm5n33r5huD8MM3acP3LOqbfWWC6Xw93lewFpVf2BnfmFzYaFUMFQ7nQ6E5zzCW1pPa51triR+B4mFo0dM/NRG0IlDnuFECPtdls5jgPS66S9gUy/XyROEw+NZVr85wAuxG7f91U2m2Wkr0ZqmEbLelkbXCYOewTn+4IgAEUC0q34gPSC68Qj4hpRjtIHijaC1GF7KGUpDENQDUB6VEB1zAF76uvpa0MyTsVF1BEYlIyjkfKvxp75yYZDxGMznzLzKRu/KUknTosLDs/z4hQCk1ohvfF7V/6XiBPEExs+OQrSMwyNnw00m83YxY9/rxphYLso3R+SmbzRbS0ozJFjBQ3ekRk6rI/2ZSgqWke6/r4zunjcbNT2KvFcW8Yu9LnTZ09OSqVQ9Wqoe3WUBooobBumFpBYWnjhkuNBdkP07MQMDlgbX9xP5dzk4Gg9oN7JAuushdCRWLm97EJilr2XH1BTR8l/LmlvGg+IlzqFeQg5+/HmOzdfzAODwFBhCKu3XFfrqKp5VKKCXiamjf0WXZ4WtUT2uDWDGatS/rxfaRutS6w72qUedkyfsgXr9Di+qhb60fJW1vJ0/gJeqbek90fdGlMj7hBXCMc0kstMKAPE1v/qo18BN3Q2e85/BBgADNADzS2n40UAAAAASUVORK5CYII=") no-repeat 2px bottom;
padding-left: 22px;
}
/* Variables */
html>/**/body #content a[href*="&variables="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqMU0FoE0EUfTvZlArmFpR4L0jT3HvoKR6EQG6eC5bQeuwhIAhpYREUDz2IYKG0SEvoxbOtBIVC793oRTCQQyOlFGNNUrK72Z3x/8nOpkUQP/z9uzv/vX3vz6z1aG0NHJZllank8O/4LKVsySiCUgrfjo9h8w0H1Xu76+ubAS2OOKVERGtm3XVd7DYaT/hblN/53f2FBQhmi9OSDBqNdAaeh+HVFQaDAfr9vq7vHWeT+h4QdsZIsiMCx2ExtaBrOpWaiA5DhETc7Xbxpl5HcXb27et6vUYrzzWBnBAIBgtNg79IisWitpPJZPDRdX8loJAI4qQ5jgnarRb2trbQabfhk/QP+/vwyI4Vk3OvwYmI2ONMLDQODvB4ZQWfDg+RzWbh+z7SQsCmZBLuNTibLzcsUBMD+P56nSJLU7aN1JhATCzwkMYpjIJSuYwXjoOHpRJ+XlzAox0Z9HqYTqf1bLjX4OxwokDPgLNQKCA/NwfeVkmDe1qr6cqZIoWEsRIFZt8pEwVfm01UV1e1nebJCZ5Vq/hCB4nXtAXqNbibFlgBn+dcLvH/bnsbrzY2sLezo58tvasTC+L32ZkhSHaBIwgCbYcrK9E13mbuZQxjRevoCN1Oh4+tHQ8CndNTjEjeD3pfWV7G0uIiliqVRAH3MoaxHLco79ydn3fUtaCBqUhKRcdY0c+l6CdTXhgqn565lzGMtQ1B7/z88nY+/xL/EXI4vIwJwj8CDAAVoIrz1xox8QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* Status */
html>/**/body #content a[href*="&status="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU7+LE0EU/mZ2d3bD7pqckhQqB4YDuQRsTj2t1ULESkgnWKloYRMQizQ2dhZXxkq8fyCFjdrYCAqCCIIgLCgWIkQ0m+Q2+9P3ZnMrNsJ5Ax/zivd973vvzYiiKLCfY/Z6vTbdmwR/j9yQ8NrMsuxsv9+/12q1ulmWIk0zQoIk4ThFnucoTRoQwtQwTYXxePxhOHz4wKSEA7PZrBsEgU5mkKjGv2JCdzQauaZlWflgMECz2dS+eCZl1aKKGUmSIIpiSMkOTO1Sz4BsCiZ3Op2qCltfnFpD9vK9Jk4mIWGOet3X9hnz+aQSkFyJSbtgUnH0EFWMiDil5BiW5RBKMrmmnOiPgBACcRxr4i6c1RbCcIbFIoNt15ZEtXRgUTzVApKSJdvmaumZ4/pm8CEdeJ02jmzdROPSaS1k2w6UsrWIdkCVjdqFk0g3T2Dx6Su8+9eqRXvrx9C4dRE/7j6Bf/083HNXcLi2go2VNh5fvVMJSPHiLSbvPush/nz6Su/dXV/DwduXEQ6fwXUbyLbfIC1yBAIIiMhtVw4cx9F98wC5HaU8qG8LTB89h/M9gUG9S2n89Qx3dsoZmPSILKVUtffyWDTAMYyPvxARUUqxrCgqgSgKaa11T/i+f8MwjNX/+Ujk9gtL1pYfydwjP+UPJfb7nX8LMAC+uy+OK4sAWgAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* Alter database */
html>/**/body #content a[href*="&database="][href*="&db="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAltJREFUeNqMks1rE1EUxc98kMlkMkkqbaXRhaEStCAhaDeuKii2JBWFtiqCYFcBof+BKW6yU3FpyUJxU1Eo2IKtXdRFV7EiFMG0pVAsxnRmYpPWSTLT+fDNpGpCwfbC4T1m7rvvnt991PDwMPZjkKgLR4sfRNPOhv3zRdO0rmw2+0xVVdRqNRiGCVn+RfYWvF4eoigiEAggGAwglbp5n2EYtBRwwjAMVCoVlEolt4Ak7aKuWRAEEYZpgGZo+AS+pRX6v41SgE0Wm7IaQkNHL0DSGwft/cOmq+ZotvApk8nMxGKxpGVZqFar+1YMwsALv99P/Aexuro6S3KXTisKhhYXWwqcT6fTyWaIkrIDta7Dw3ngFwUECcQriRv9Y6nR6f58PncoxC2lAlXXwRNwe1aIQAR4H4ceWY5EFGWqCDw9BOI/7xbV8C/JRewwzJnI+Ph1GXjIHjqFvxMwsacuYX2Dw6P5+eTV7u4nt2179sgQ620S9rhF3LmWQDwen5Dq9ecjwDLrJDtB1oMQf5ZRqang6RWYpfe43JfA1NsPuHBOqC6vnFzOt7eD3dzcRCgUgq7rditEA1vb29C1zzCNOQwODGDyzRy6e8fw/dWLfEcHjYVyGWwul0M0GgXHcQd4UHoRgvYOg8kEXk7OoLPnHtpO9JILHjNOl2tra+4YefI4xHA47GNZ1n0sHo/HtVBan8Stu6+RnRjB8bOj6Dx1EQxLQ1EUvlAodJKzu4QzjhGFeZ6/ZNt2u2mScdm22wCx8WCoj/76ZYP5uFFkvlEUZRM5/2XSwQLJKfwWYAAtt0zt3hIutwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* Database schema */
html>/**/body #content a[href*="&schema="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqkU7tOAkEUvfuABIgsyksTAkgBtISS0kIbYk/sTKgt7PgF/QEK/QMaSDREjQmFNhu0oLEglISHbniEAAE8l8AG2O2Y5OTOnT1z7rk7M8JisaB9hkh7DjmXyx2KoniGuRvozufz19ls9lev13VSJBIhSZJMeVI8Hr/MZDLXwI3T6VQqlUq/2+3W8FEXGA6HNJ1ODbzRaFSTG43GMUTOmcQR+ZOiKNlNm+PxmFqtlm2Xx9/gTIp5PB4lEAiclkqlt2Kx+Gmz2R5kWVYnk0kSnHy/31exwcDTNO1bgB0P7KZB9AEtCBbRayeRSHABdpKvVquEnk15MhY76O9x07LX66XBYKDnbrebms2mgQcBks2OxmKxEGzrOaxTNBpdblgPOCL+0QYBq9VKvV5vay0YDBIu3BE2XbAe0EH+jPhLDoeD/+RWdZzCGlm73U4+n49SqdRVuVx+QdUFR84BEkyvJ/cmL82lUemEJ+Fw+EBV1bs1J5lM3iLcS2YC/D64P1j+wVxdIeb3+12hUChcKBTecYwf7Xb7a9MBz1mQS1u5m1VcAq5cAN8LF6BBXAXquwLC6oFJJhA3wLwp33Jh3+f8L8AAZ3ntkRsbeCkAAAAASUVORK5CYII=") no-repeat 2px bottom;
padding-left: 22px;
}
/* Refresh */
html>/**/body #content a[href*="&refresh="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNqkU0tPE1EUPtOZQh9QSVsKtAgB5A3RWDRaU+PCR4RUDSZGSTeuiDvjD3DRhJ1xYeI/MJi4wMRHosTEuJCNEqJBQQtFaAuhb0amnee9nlsLNW5cOMk3c+fc8333nO/McJRS+J9LYLfjD1ZBMJtBEAQw8byX47hxDAcQPZW874g5PGyGELLJ83wY34Nvb3omhb8EQwJPI4cO2tytjRanwybYWFAs6v2JtByMrktXCaVzhq5f2COY9qmUhqy1MHXltOdIm9PSyulgK5UMUBSCZXK2dpeldeyk+4yO5PCY14/PaguUEC/PkchYoGk4tVmCkqrLK1tSMpEuFth+h8/ecKzf1ZVNy3D9vM+/k1dBU9VqBbqqjnf5rO6tuAjZ/K785kPiy3qycBeFRzRZHonGcq+mX0bnPS1WWI/mQNd00BWlKqAqyim3w+zcyRfhayybRPX7aNi0JIpsL4w4cSs86BfzJWhwWcBiFVi82gKe0s1znE2SNUhuFwo4iWlD0wAdZ94E2ajvPZyb/9NtnNT8vgBTkxQdJIOU18QwwDB0qLVY2XgnmRDrGUn+kcPt9c1NdfT568X1aguyHN0uyEXJJIDjgLUBPZlQSzLkUinIZzKwg8Aqj9bV1ZzDnKF4erdRUxTzvgC+vF+LZ3KiUAstvW0+PO0Olj1R2cMu6CjGrnn72lswh9tIZFWM71YFVHVmbflHhtitkODtlqHRwKCnrTGCU/iIeIfr20MXAwNJcz1lORvRuIScbNkLZpAj/Jj1HeLttinX5dHhkk7BbubAUVPWF0WVJCWNxqwCt5J9+mLBKMmzaPSW+OjGbwE0B0yePjD1XgqZfMMRc0+3m+vscBKni33KoimXjdHV2JIWjX4mycUn5NuzGEktQ5lbEWDTcCHcnGegmes8GwRn9yDw5k6MSaDLC5BZ+kRXZpdpfu0nxtKIDHL1PQFWq60C4R9/sFEWBSgil/wSYABg+JOXZhLaRAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* Show structure */
html>/**/body .links a[href*="&table="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
padding-left: 22px;
}
/* Edit row */
html>/**/body table a[href*="&edit="][href*="&where"] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=") no-repeat 5px bottom;
display: block;
float: left;
height: 16px;
overflow: hidden;
padding-left: 24px;
}
/* Hide text in automatic selects */
html>/**/body form>table a[href*="&edit="][href*="&where"] {
width: 0;
}
/* Select data */
html>/**/body #menu p a[href*="&select="], html>/**/body .links a[href*="&select="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=") no-repeat left bottom
}
html>/**/body #menu p a[href*="&select="] {
clear: left;
display: block;
float: left;
height: 18px;
margin-right: 5px;
overflow: hidden;
padding-left: 16px;
text-decoration: none;
width: 0;
}
html>/**/body .links a[href*="&select="] {
background-position: 2px bottom;
padding-left: 22px;
}
/* Edit Sql */
html>/**/body #content a[href*="&sql="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1Mjg3MUE5NEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1Mjg3MUFBNEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyODcxQTc0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyODcxQTg0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67SGPfAAABvElEQVR42sTTSyhEURgH8O94jRqTJg1lo6YsptGIpEzKa2FhRGhY2chCWZDSbHATmkgkC81CInklpCxGmlGy8QqTopnFJEXyiGsadDv+p87UbKwsfPXr3PP67nncyzjn9JdIoD/G/ydgiFKUXfAIJmiCLOgEC7zBNmyCAlabwZAx9f6uTybqFRk2oAXy5LNoG4ZRyIAq2W7bXWBkNBq9DRbLClcUvsXYvtgCEpEeArAqV5YPl8v9/AmlX47Jw4WVmUym7MXTU2e1xzPxzPmwSDAOTqiEJZkgObZH7zxpot7iIGvkg3rP/Y1Ws9m8fhyNzqHDm4ROnzzMPnEmsAcpkBhLUlJAmeXF5Kiuc9mUAfdrmi4xFInoL2K30CYnrcOgnJMi0ecXVTgqKKe1zWWbnXH7dvx0FwxrN5qmUTtjhSJBB77GIpTfoJMJrqD0IED2+wca6+5xGacn3SeqykcCQYqiL0lVVTHHIwaH4VCWYjXZUAxbtXb2ytVrrnSyUH0VNctDDsdZE3tOlcvVxR8eIhPOakrY0+0jDV0E+RHqX2JX8AGq9GukQS4cwAvUQLq88lT5sgT273/jjwADAGLJkFFBwODaAAAAAElFTkSuQmCC") no-repeat 2px bottom;
margin-left: 10px;
padding-left: 22px;
}
/* Inline plus */
html>/**/body #content input[src*="file=plus.gif"] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAelJREFUeNqkU81qFEEQ/tr50UncrI4iwq6oRJCIIV6zxFxE9iCIbxHwXXwA32CPXgRFEZFgPGgiIcfNn0hgYU1mnV070zPTbXXP7Mwke4hgNzVT3f3VV9VV1Uwphf8ZDJ2r9GUXSVuhdZvEP8PmkOQtFF5CqaFttpRauXN99vmDmwtNz7ngVtGnI+QxF9/3Nme3ezt6+cJGavbbCzfmm+JP5ApEBXgwGJh/vV6vcrj3G/ea2wc77ZzAePAtWG54HBaoMAzxefm10VufnqBWqxVnnue5ZGeuaiPJQoyiCJzzAiSEOKFXzxhjGNsVBBpUJdF6v9836/0f+5BSZga2Dd/3JwniOMZoNMK3x+/R6/UwHA4NgeM4+PronTHUMvemhTAKJwnSNAVPOLrdrsm8BmvjseFYQDVKnKRCEGfKkThC4AR4uPU0uyhhNpY+GKP5j8samY0ZcsaodPGpCAIrgJoifWpccJReL+vUl3WUNCciENQBOIcqqiQ4j5JYNxfNMoLIZPcwllQGD2UXkse59VamN072suSSSiZ1S8PCLt3nFq5Jnt61G+40m2aWua+dvwo/13MhnDj+MviZHkQddMQaM5AZdhtL7BmuYJHWl854TAF+YQ2r6hV+q12Wp6eGMs//OhLd8X8FGACYiuElnjs9iAAAAABJRU5ErkJggg==") no-repeat left center;
height: 16px;
overflow: hidden;
padding-left: 16px;
width: 0;
}
/* Inline up */
html>/**/body #content input[src*="file=up.gif"] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi1JREFUeNqkUz2IE0EYfZOZ3WySi9FAPLU4fwjEw8IUhyjXxUYrK8FOG8FWQQst7OxEUE7wOq200qv0GguR4+BEMIpwGDxNBE8vcMZcsv87fjPJrkl1iB885s238958M/Mtk1Lif0KI6iINLAfGzhOpEXZto9kkvISUDwHZE4OcvFA9svfS7LH9ZSttWOPrJeIi1Wg7vrO08rVS//idUWpOIArVt9qJmaly51ff6oxIO53BrFAojDpaM0f3lesfvtUGBlIbFFNMWo7jjO399HZFj+eufxnLm2bGIl1R8ZSugOB5LmzbTvD41oFEoPjoN9t2EOuEDAO1hjmOB9d1teDF/arm3W5XC6Iowr3LOZy8+AZccJRKRSogYMMKyCAKmO/7CMMQC3em0Ww28Wyxjna7TZV5eLfaBeccrx/N0pUK9Pu+1ihtbIAgCGG7ARqNBpberuPm/AYMw6B3Frh2t4n3n3qaCzMLyUzEOoHhEbb6EXoex9kb6+D0kkZmx0BAUPzq3AZCvwUzUwDjVP3wCEI7kYEdmjDSeQ0VvttLDISRpXxuvD2i2CD0tQFSalH6b/tQ1yQGZjYxTiL0hwaBp9vT86UrrInEgThOX/mseb50aEzr9Xsu6VRLg8Ndpf0PTwaOU9m5ZypnWBMixQ0oZPK7NeK5gu/Y7trKq9bWz9YT/H6wrMooghUPgp86AzZ5nNy2+ZnkJuSPZYTPF4iuKYOMqlIf599C3X73jwADAG6CADM79TwjAAAAAElFTkSuQmCC") no-repeat left center;
height: 16px;
overflow: hidden;
padding-left: 16px;
width: 0;
}
/* Inline down */
html>/**/body #content input[src*="file=down.gif"] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqkU01oE1EQ/l72vWTTZps22B+ltCiBRItYsYhSBIkXxUMv9qzgQaH04kEFe/WsIh486s1jDyJePIhIoRepogjRYipoNRBjmuz/Pue9dJf0VKQDHzP7Zr5vZ97sMikl9mKcT78kx/rB2GUKKoShXTgNwitI+QSQbd49k1emp/Zfnz05WTQzwtxZLxE3qbzt+M7b1W+ltY8/GB094ohClaucnpkoNv90zGYPtdnsPuXz+V5Fc+bYgeLah++VroDUAoUUk6bjOElVq9XC84dHdXxx8T0sy0py6XTWJF5B38F2B/A8F7ZtJ0We5+2Ie3NCUPfbPC7DQHnmOB5c102KFKFer2tfq9UQRd2LMLiB4eECNRCoO0AKEQlEAfN9H2EYYvneYSxeMvG73tAC6u0SBh7cnsKbp7MUc3Q6vuYoLtcCZEEQwnYDVKtVTI5I3F0Yp1YF7Znj/s0SThwZ1DFP90EygZiXghqB2tnqRGh7Bubv/NSFx8sDXQIhJp+5+g7CtMBEVnMUNxnBDtMQGQu5oXHML9UTcoyz1z7pXJoEDJFLRqAOaJ7QZ0j1aQGFgX2HMHdrMyGfW/iiz+K8guYQlyPQ62p4vnS5mcvEW8iPlXHhxtck7jWv03aJ19BbgfuZllgeDRynNDg20S/MHE8ZAgpZa0QjflbwHdtdX329sfVr4xn+Pl5RuyyAFQ7COD8HNnqK1Hb5mWQDcnMF4YtlCteVAF0pLP1V/p+pPbb+CTAAmwfytdL1/44AAAAASUVORK5CYII=") no-repeat left center;
height: 16px;
overflow: hidden;
padding-left: 16px;
width: 0;
}
/* Inline cross */
html>/**/body #content input[src*="file=cross.gif"] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqkk89KG1EUxr+ZubnUjJaipgtNtTZKxE1AVIi4yM5tF30Hoe/iA3TnQkTBRbZFKApCAl1142CJqLR0ZUNJJpPJZP70nJvcEK0SpAPfzD3n5vedM2dujCRJ8D+XODIMGMA4aYfibdLkCKZO+kxlP5FcwRla7MytrHxcLhazMp2WT5HcbeB5gVOp5H44Dqd2RdTb217a2Mi6vi/h+6O6lu9WV7M3jsPd7ppsQJqMTVO6rgtWdn8fev1YrpskkhlmzZBuLJ8qN5tNLJfLqgw/OX4sxyaaE2G/L8/z0Gq1cLy4iA+1mjKcOzhQ+RrFpmniy9oaUqkUMpkMNDcwCIIAYRhiwraxNz2NwskJLMtSgJQSZwSr6Xa7aDca/xowHFB7Xr0OO47vwazx4W9PJpozu2xK6hCY3N1hLIqQPz29BwshULq8RJp+x5JUTHODIRpkkKbv/GYI/ra+jq+FgjJgbV5dKYMX1KHmBh1ImgFv3pZKCr4geJZiVjWfV+2e53K9LqiQ5kSnfzwjmuIY+cxT8J3g+aF35nWVYJ1rx3HQ6R1pWNd0ewu8bkdRfkYI2zYMi/8M4oF0juGq7//8FUWHh0DF4L2XwMIW8H4KKFL8asRR/vObwHOg3ACu2YA6x0S/wHMunmHzrwADAPb07huzEp/RAAAAAElFTkSuQmCC") no-repeat left center;
height: 16px;
overflow: hidden;
padding-left: 16px;
width: 0;
}
/* Delete */
html>/**/body input[name="delete"], html>/**/body input[name="drop"] {
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE0RDRCQjlFNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE0RDRCQjlGNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTRENEJCOUM0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTRENEJCOUQ0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zX5oGAAAB3klEQVR42qRSvU7CUBS+LQXaBgIpgSiJEpIuxMlVwgMwuOAb8Ah9AgZnJmfeABYegMHoGxiW6qAJJg3UEJAWaIvfKW1TjamDJ/l6b+893/n57uEOhwP7jwn0GQwGjOM4H7Aq0AGugPPA7xV4BEbAjJISut3uMUDMrgVB0CqViqrAstmsSI673e7SNM2WYRg3juP04Tf+VkFIBqGnqmoDlUie5zHLssI7GfHkYrFY0nW9t91uWRiEDxyqqVRKq9frDWSTiEhOcdAZ3dVqtQbP81rQ6rEClNkpl8uqbdsSSkwUDYkkVKLO53PS6S4M0JQkSdlsNpGj67qU0QftCUEAJsuyQpx4gDMsIjm12222XC4ZqvFfJZPJMGjjE8mGwyHb7/diwIla8DPggkFpf0+En2RfNP4oWzg/fgAo/obyLxFAnkwmf2lA/jZx4hU8rNfrJjLKwTAlGpKZxImeET8j9P0MsoVBYkmA4UUtnTjxADOaMPQ/xd6iPn8DtLEWi8UUa584UQuYLiaK4rhQKNCzafl8XgWUdDot0j20sVerlQnoKL+Pasf0SvFRFnBQAl6g+m0ul2tBjwucnwb37wj8BJ3uMZUG/k+AOeCEATzgk7qBwwcwTdDQDXyJw74EGAC1PioqQ6UN2AAAAABJRU5ErkJggg==") no-repeat left center;
border: 0;
cursor: pointer;
font-size: .9em;
padding: 1px 5px 1px 18px;
}
html>/**/body input[name="delete"]:hover, html>/**/body input[name="drop"]:hover {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqkU0tPE1EUPvPoOHdaSSkUsYkY2xLTmpCQmJBAumBNZIFLoz+CX8Av6MpfoHHLhgXsTTWE7ohtDRhEkrGpQy0M7e3ceXnO2Db1BQtv8s3cx/m+87pXCsMQ/meo9HktSaDgnyABZBAbOF1GzA3sviDeoatthOnjgvAcnau/CT6JMbaZXVjIZ+bnU2xiQqcI+eXlonl0VDo5PHwqOC+j3c4vEQzJLJncWlpbK4SqyhzPA+fiYnhmzBYKRjqbnaru7m51f+5HIhJ5eCVJmVu6/mZ5fX2Juy4LguCv+UqYqhqG/GBvb184zrMXYWhGEWA+G3PFYv67bTPHca4tWiwWYzO5XP60VqM6vYwEPICV2+l0ymq3R4au60Kv240ghAAPU4pyVlWYnpxMEWdc4F4gyzoZlSoVME0TOp0OKIoC8XgcEokEaJoWCezkctDv9XTijIpI2h56FLYNjUYj8oah/kGmwajdaOuNd8EFOLNbrcXQsozG6uq1NUiQvRB94oxHUGk1myt3VNUwUP2mccZ5mzg0lwcC25/Pzz+BLHMDW2VQ4/8BbDFvOs4xcUYC2HWz6/vl95ZVxwPOUIQN8h2HQHL16qreC4IycUYXiS7IfVw8xtv4QJY3C5qWf6hpqaSi6GTU8f3+RyHadSGOT5BcxWac4n7EHQhQLaYQ0xmA2SJAaQbgET6uu4OL9rUF8KEG8Bbd4hS+ISzkekMBeSxN9YYa0kPsInrIDX4IMADJaAE/Me2jPAAAAABJRU5ErkJggg==");
color: red;
}
/* New item */
html>/**/body #content p a[href*="&edit="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqUU01LG1EUPW/yQsigUmOISZSkYxdVwW2lm4KkFrpwV6F/QGj3Lrpy4a9oN/0FBcFNQYWIuFHoIsRSWxzFkjZCsKaZNElN5r3eOzMOtEg1F87MvTPvnHfu+xDPVlYghFgAkEH/UZVaaxCy71ZXX/fLpslfSOW6nAtNjycfgEAQSqkQ19X7hTsgrpCuL2AozRIC8/cENo6091aKQL83bKBgsYiPrWOAxxPXkG6v5zlwA4FNW2NCdqC//4Lm2QiP40Q8UxDKB9euHgJxhez5AoED+DNX2lieToS97h0eYnZyMqx3SiVykANxDfnz4QkGd3Pf2MFisgs0NKxhidNaLVwPK5PBcbUa1plkEjzec3A53NQXD+w5l6y9+fz01jtQTL/3HbQc5xSmU2RFyjH1aOZG8qedsufAE2icn+cHOqk5+lCkHHtr27dy4Al0u0IatbgY+mg9V0sarwoHoC4xEWnDku2w53/BoQIHRrI0zUmeFdfrcbQTJsoOkE0kMDYygnFasEaziVwqhfzoKO6m0/hRr185MOTvTocFI1fbyOegEAO+VCrhyeMo2/ZfNY8nbkReUN8UsWg0irf3m0GHpIDsf9eAxxM3JmJkyzDNl4Rcv5dJtVpfRZCbhEFupQ8+XyLnjwADAJgWSEmnMNKYAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
}
/* Create view */
html>/**/body #content a[href*="&view="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqkU89rE1EQns1udhOCrk2KlxIhaaGHFPfQBFJYxFbc+gtvkQq5+uPoQfAPEHJQemnFIAFFzCFYycGLGEgVElgMRhG7OTRiKiaVKCkYSTTbbF5nYuJBDxYy8LFv3sw384b5lmOMwShmgxFt5AIcWv8wGOUg4jhCQ/gR7kHeDuIjIoN4iWgOecMCHBY4L0nSJU3TpqLR6GHDMFz5fF6koKqqZiAQaCWTya+ZTOZDp9NJIO8p9aURHIhroVDoRi6XU9Pp9LRlWWNer1dstdpAQJJIdxSjHMolTp/L8/wp7Lper9c77XabEbLZLCNLJO4zVZ1nmnaO4avYME65xCGugFWWwuGwG58vmqbZnysWi2FnC1ZX431/cnIGqtUSDOOUSxxstEQFHhYKhbFmszntQKMEn88H2awOc3Mn+wSHQwK73fenwC805HwiLm+z2b5UKpWerutWMBgcl2X5AM4LhvEe/H4FZNmN3Q1YWDgG8e4juLm5vLvyPP7ZePD2Dm2Fx1EtPGzUarXtVCr1vVwuNxRF4Z1Ou1gqvRIbjS1QlMAPj8ezdbt6Vzhz+qwrV9W/Iedq77qrSzvkEYcQHlyNG180gd8j6MuDDYF12bnIpvhxEDgzcjHiX3uyZgDPdVGGBW6gRkp0Imjv3D9yW5GfzUdOHP37+kV6/Q33X60uSqhL6R4wmCV35oIyu/H4XfG3DKEo7EvwDK5AF6W+y17vWKjqnz0AOxfEkUDY919TxxV2WXH71iYgsUhkmJBgT4ABAOtC+bduhTyuAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
}
/*** Messages ***/
.error {
border: red 1px solid
}
.message {
border: green 1px solid
}
.error, .message {
margin: 1em 0 0 0
}
/*** Content ***/
#breadcrumb {
/* background: #fbfbfb;
border-radius: 2px !important;
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important; */
background: transparent;
font-size: 1em;
margin-left: 0em;
padding-top: 2px;
position:fixed;
z-index: 10;
}
h2 {
display: none
}
#content {
margin: 2em 0 0 21em
}
.tabs {
margin: 12px auto 10px auto
}
#form + p {
margin: 20px 0
}
/*** Tables ***/
html>/**/body table tbody input[name*="check"] {
display: block;
float: left;
}
table {
border-radius: 2px !important;
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
}
thead td, thead th {
background: #eee;
}
table tbody td:first-child {
white-space: normal;
}
td, th {
border-color: #bbb;
border-width: 0 1px 1px 0;
font-size: 0.8em; /* x-small; font size */
}
#tables a {
height: 18px;
line-height: 18px;
}
/*** Links ***/
a:hover {
color: #3b82ca
}
a, a:visited {
color: #385a75
}
/*** Sidebar ***/
#h1 {
color: #222;
font-style: normal;
}
#menu {
background-color: #fafafa;
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
margin: 0;
padding-bottom: 0;
top: 0;
}
/*** Forms ***/
fieldset {
border-radius: 1px !important
}
/*** Others ***/
#lang {
background: transparent;
font-size: .9em;
left: auto;
right: 90px;
position:fixed;
z-index: 10;
padding-top: 2px;
}
.sqlarea {
width: 99%
}
.jush-sql {
padding: 1px 2px
}
p {
margin: 0.8em 0 0 0
}
#menu form {
padding-top: 30px;
}
.view {
background-color: #FFFFAA !important;
}
File diff suppressed because one or more lines are too long
+27
View File
@@ -0,0 +1,27 @@
<?php
//application details
$apps[$x]['name'] = "Adminer";
$apps[$x]['uuid'] = "214b9f02-547b-d49d-f4e9-02987d9581c5";
$apps[$x]['category'] = "System";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "3.2.2";
$apps[$x]['license'] = "http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0";
$apps[$x]['url'] = "http://www.adminer.org/";
$apps[$x]['description']['en-us'] = "Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL and Oracle.";
$apps[$x]['description']['es-cl'] = "Adminer (anteriormente phpMinAdmin) es una herramienta completa para la gestión de bases de datos escrita en PHP. Adminer está disponible para MySQL, PostgreSQL, SQLite, MS SQL y Oracle)";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "Adminer (précédemment phpMinAdmin) est un outil gestion de base de données complet écrite en php. Adminer est disponible pour MySQL, PostgreSQL, SQLite, MS SQL et Oracle.";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "Adminer (anteriormente phpMinAdmin) é uma ferramenta completa para gestão de bases de dados escrita em PHP. O Adminer está disponível para MySQL, PostgreSQL, SQLite, MS SQL e Oracle.";
$apps[$x]['description']['pt-br'] = "";
//permission details
$apps[$x]['permissions'][0]['name'] = "adminer";
$apps[$x]['permissions'][0]['menu']['uuid'] = "1f59d07b-b4f7-4f9e-bde9-312cf491d66e";
$apps[$x]['permissions'][0]['groups'][] = "superadmin";
?>
+19
View File
@@ -0,0 +1,19 @@
<?php
$apps[$x]['menu'][0]['title']['en-us'] = "Adminer";
$apps[$x]['menu'][0]['title']['es-cl'] = "Administrador";
$apps[$x]['menu'][0]['title']['de-de'] = "";
$apps[$x]['menu'][0]['title']['de-ch'] = "";
$apps[$x]['menu'][0]['title']['de-at'] = "";
$apps[$x]['menu'][0]['title']['fr-fr'] = "Admin BDD";
$apps[$x]['menu'][0]['title']['fr-ca'] = "";
$apps[$x]['menu'][0]['title']['fr-ch'] = "";
$apps[$x]['menu'][0]['title']['pt-pt'] = "Administrador";
$apps[$x]['menu'][0]['title']['pt-br'] = "";
$apps[$x]['menu'][0]['uuid'] = "1f59d07b-b4f7-4f9e-bde9-312cf491d66e";
$apps[$x]['menu'][0]['parent_uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f";
$apps[$x]['menu'][0]['category'] = "external";
$apps[$x]['menu'][0]['path'] = "<!--{project_path}-->/app/adminer/index.php";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
?>
+66
View File
@@ -0,0 +1,66 @@
<?php
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permission
if (permission_exists('adminer')) {
//access granted
}
else {
echo "access denied";
exit;
}
//only allow users in the superadmin group to use this feature
if (if_group("superadmin")) {
//echo "access granted";
}
else {
echo "access denied";
exit;
}
function adminer_object() {
class AdminerSoftware extends Adminer {
function name() {
// custom name in title and heading
return 'Adminer';
}
/*
function permanentLogin() {
// key used for permanent login
return "7bebc76d8680196752c6b961ef13c360";
}
function credentials() {
global $db_host, $db_username, $db_password;
// server, username and password for connecting to database
return array($db_host.':'.$db_port, $db_username, $db_password);
}
function database() {
global $db_name;
// database name, will be escaped by Adminer
return $db_name;
}
function login($login, $password) {
// validate user submitted credentials
return ($login == 'admin' && $password == '');
}
*/
}
return new AdminerSoftware;
}
// include original Adminer or Adminer Editor
include "adminer.php";
?>
+50
View File
@@ -0,0 +1,50 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
// make sure the PATH_SEPARATOR is defined
if (!defined("PATH_SEPARATOR")) {
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>
-198
View File
@@ -1,198 +0,0 @@
<?php
class azure{
public static $formats = array (
'English-Zira' =>
array (
'lang' => 'en-US',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)'
),
'English-Jessa' =>
array (
'lang' => 'en-US',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (en-US, JessaRUS)'
),
'English-Benjamin' =>
array (
'lang' => 'en-US',
'gender' => 'Male',
'name' => 'Microsoft Server Speech Text to Speech Voice (en-US, BenjaminRUS)'
),
'British-Susan' =>
array (
'lang' => 'en-GB',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (en-GB, Susan, Apollo)'
),
'British-Hazel' =>
array (
'lang' => 'en-GB',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (en-GB, HazelRUS)'
),
'British-George' =>
array (
'lang' => 'en-GB',
'gender' => 'Male',
'name' => 'Microsoft Server Speech Text to Speech Voice (en-GB, George, Apollo)'
),
'Australian-Catherine' =>
array (
'lang' => 'en-AU',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (en-AU, Catherine)'
),
'Spanish-Helena' =>
array (
'lang' => 'es-ES',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (es-ES, HelenaRUS)'
),
'Spanish-Laura' =>
array (
'lang' => 'es-ES',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (es-ES, Laura, Apollo)'
),
'Spanish-Pablo' =>
array (
'lang' => 'es-ES',
'gender' => 'Male',
'name' => 'Microsoft Server Speech Text to Speech Voice (es-ES, Pablo, Apollo)'
),
'French-Julie' =>
array (
'lang' => 'fr-FR',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (fr-FR, Julie, Apollo)'
),
'French-Hortense' =>
array (
'lang' => 'fr-FR',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (fr-FR, HortenseRUS)'
),
'French-Paul' =>
array (
'lang' => 'fr-FR',
'gender' => 'Male',
'name' => 'Microsoft Server Speech Text to Speech Voice (fr-FR, Paul, Apollo)'
),
'German-Hedda' =>
array (
'lang' => 'de-DE',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (de-DE, Hedda)'
),
'Russian-Irina' =>
array (
'lang' => 'ru-RU',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (ru-RU, Irina, Apollo)'
),
'Russian-Pavel' =>
array (
'lang' => 'ru-RU',
'gender' => 'Male',
'name' => 'Microsoft Server Speech Text to Speech Voice (ru-RU, Pavel, Apollo)'
),
'Chinese-Huihui' =>
array (
'lang' => 'zh-CN',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (zh-CN, HuihuiRUS)'
),
'Chinese-Yaoyao' =>
array (
'lang' => 'zh-CN',
'gender' => 'Female',
'name' => 'Microsoft Server Speech Text to Speech Voice (zh-CN, Yaoyao, Apollo)'
),
'Chinese-Kangkang' =>
array (
'lang' => 'zh-CN',
'gender' => 'Male',
'name' => 'Microsoft Server Speech Text to Speech Voice (zh-CN, Kangkang, Apollo)'
)
);
private static function getTokenUrl(){
return "https://api.cognitive.microsoft.com/sts/v1.0/issueToken";
}
private static function getApiUrl(){
return "https://speech.platform.bing.com/synthesize";
}
private static function getSubscriptionKey(){
return $_SESSION['azure']['key']['text'];
}
private static function _getToken(){
$url = self::getTokenUrl();
$subscriptionKey = self::getSubscriptionKey();
$headers = array();
$headers[] = 'Ocp-Apim-Subscription-Key: '. $subscriptionKey;
$headers[] = 'Content-Length: 0';
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_URL, $url );
//curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 60 );
curl_setopt ( $ch, CURLOPT_TIMEOUT, 300 );
curl_setopt ( $ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_POST, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
public static function synthesize($data,$formate_key){
$lang = self::$formats[$formate_key]['lang'];
$gender = self::$formats[$formate_key]['gender'];
$name = self::$formats[$formate_key]['name'];
$token = self::_getToken();
$url = self::getApiUrl();
$headers = array();
$headers[] = 'Authorization: Bearer '. $token;
$headers[] = 'Content-Type: application/ssml+xml';
$headers[] = 'X-Microsoft-OutputFormat: riff-16khz-16bit-mono-pcm';
$headers[] = 'User-Agent: TTS';
$xml_post_string = "<speak version='1.0' xml:lang='".$lang."'>
<voice xml:lang='".$lang."' xml:gender='".$gender."' name='".$name."'>";
$xml_post_string .= $data;
$xml_post_string .= "</voice>
</speak>";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_URL, $url );
//curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 60 );
curl_setopt ( $ch, CURLOPT_TIMEOUT, 300 );
curl_setopt ( $ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
$response = curl_exec($ch);
$filename = "tts_".time().".wav";
file_put_contents("/var/www/html/fusionpbx/app/voiplyrecording/tts_record/".$filename, $response);
curl_close($ch);
return $filename;
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
//application details
$apps[$x]['name'] = "Backup";
$apps[$x]['uuid'] = "1df70270-8274-44e9-a43e-5074684649ad";
$apps[$x]['category'] = "App";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "";
$apps[$x]['description']['es-cl'] = "";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "";
$apps[$x]['description']['pt-br'] = "";
//permission details
$y = 0;
$apps[$x]['permissions'][$y]['name'] = "backup_download";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "7e174c3c-e494-4bb0-a52a-4ea55209ffeb";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "backup_upload";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
?>
+213
View File
@@ -0,0 +1,213 @@
<?php
$text['title-backup']['en-us'] = "Backup";
$text['title-backup']['es-cl'] = "Copia de seguridad";
$text['title-backup']['pt-pt'] = "Backup";
$text['title-backup']['fr-fr'] = "Sauvegarde";
$text['title-backup']['pt-br'] = "Backup";
$text['title-backup']['pl'] = "Kopie zapasowe";
$text['title-backup']['sv-se'] = "Backup";
$text['title-backup']['uk'] = "Резервна копія";
$text['title-backup']['de-at'] = "Sicherung";
$text['option-file_download']['en-us'] = "File Download";
$text['option-file_download']['es-cl'] = "Descarga de archivos";
$text['option-file_download']['pt-pt'] = "download do arquivo";
$text['option-file_download']['fr-fr'] = "Télécharger le fichier";
$text['option-file_download']['pt-br'] = "Download do arquivo";
$text['option-file_download']['pl'] = "Pobierz plik";
$text['option-file_download']['sv-se'] = "Ladda Ned Fil";
$text['option-file_download']['uk'] = "Скачування файлу";
$text['option-file_download']['de-at'] = "Datei Download";
$text['option-command']['en-us'] = "Command";
$text['option-command']['es-cl'] = "Comando";
$text['option-command']['pt-pt'] = "Comando";
$text['option-command']['fr-fr'] = "Commandementt";
$text['option-command']['pt-br'] = "Comando";
$text['option-command']['pl'] = "Polecenie";
$text['option-command']['sv-se'] = "Komando";
$text['option-command']['uk'] = "Команда";
$text['option-command']['de-at'] = "Befehl";
$text['message-restore_failed_upload']['en-us'] = "Restore Failed - File Upload Failed";
$text['message-restore_failed_upload']['es-cl'] = "Falló la recup - Cargar archivo Error";
$text['message-restore_failed_upload']['pt-pt'] = "Falha de restauração - Upload de arquivo falhou";
$text['message-restore_failed_upload']['fr-fr'] = "Echec de la restauration - Echec du téléchargement";
$text['message-restore_failed_upload']['pt-br'] = "Falha de restauração - Atualização de arquivo falhou ";
$text['message-restore_failed_upload']['pl'] = "Przywracanie oraz przesłanie pliku nie powiodło się";
$text['message-restore_failed_upload']['sv-se'] = "Återställning Misslyckades - Filöverföring misslyckades";
$text['message-restore_failed_upload']['uk'] = "Помилка відновлення: неможливо завантажити файл";
$text['message-restore_failed_upload']['de-at'] = "Wiederherstellung fehlgeschlagen - Datei hochladen fehlgeschlagen";
$text['message-restore_failed_format']['en-us'] = "Restore Failed - Invalid File Format";
$text['message-restore_failed_format']['es-cl'] = "Restaurar Error - Formato de archivo no válido";
$text['message-restore_failed_format']['pt-pt'] = "Falha na restauração - Formato de arquivo inválido";
$text['message-restore_failed_format']['fr-fr'] = "Échec de la restauration - Format de fichier incorrect";
$text['message-restore_failed_format']['pt-br'] = "Falha na restauração - Formato de arquivo inválido";
$text['message-restore_failed_format']['pl'] = "Przywracanie nie powiodło się - niepoprawny format pliku";
$text['message-restore_failed_format']['sv-se'] = "Återställning Misslyckades - Ogiltigt Filformat";
$text['message-restore_failed_format']['uk'] = "Помилка відновлення: хибний формат файлу";
$text['message-restore_failed_format']['de-at'] = "Wiederherstellung fehlgeschlagen - Ungültiges Dateiformat";
$text['message-restore_completed']['en-us'] = "Restore Completed";
$text['message-restore_completed']['es-cl'] = "Restaurar Completado";
$text['message-restore_completed']['pt-pt'] = "Concluída a Restauração";
$text['message-restore_completed']['fr-fr'] = "Restaurer Terminé";
$text['message-restore_completed']['pt-br'] = "Concluida a restauração";
$text['message-restore_completed']['pl'] = "Przywracanie zakończono pomyślnie.";
$text['message-restore_completed']['sv-se'] = "Återställning Genomförd";
$text['message-restore_completed']['uk'] = "Відновлено";
$text['message-restore_completed']['de-at'] = "Wiederherstellung erfolgreich";
$text['message-backup_failed_paths']['en-us'] = "Backup Failed - No Backup Paths Defined";
$text['message-backup_failed_paths']['es-cl'] = "Fallidos de copia de seguridad - No hay rutas de copia de seguridad definida";
$text['message-backup_failed_paths']['pt-pt'] = "Backup falhou - Sem Caminhos backup definido";
$text['message-backup_failed_paths']['fr-fr'] = "Echec de sauvegarde - Pas de chemins sauvegarde définis";
$text['message-backup_failed_paths']['pt-br'] = "Backup falhou - Sem destino para o backup definido";
$text['message-backup_failed_paths']['pl'] = "Przywracanie nie powiodło się – ścieżki nie zostały zdefiniowane.";
$text['message-backup_failed_paths']['sv-se'] = "Backup misslyckades - Ingen Backup Sökväg Definierad";
$text['message-backup_failed_paths']['uk'] = "Помилка: не вказано шлях для збереження файлу резервної копії";
$text['message-backup_failed_paths']['de-at'] = "Sicherung fehlgeschlagen - Kein Sicherungspfad angegeben";
$text['message-backup_failed_format']['en-us'] = "Backup Failed - Unable to Create Backup File";
$text['message-backup_failed_format']['es-cl'] = "Copia de seguridad Error - No se puede crear archivo de copia de seguridad";
$text['message-backup_failed_format']['pt-pt'] = "Falha no backup - Não é possível criar arquivo de backup";
$text['message-backup_failed_format']['fr-fr'] = "Echec de la sauvegarde - Impossible de créer le fichier de sauvegarde";
$text['message-backup_failed_format']['pt-br'] = "Falha no backup - Não é possível criar arquivo de backup ";
$text['message-backup_failed_format']['pl'] = "Przywracanie nie powiodło się - nie można utworzyć pliku kopii zapasowej";
$text['message-backup_failed_format']['sv-se'] = "Backup misslyckades - Kunde Inte Skapa Backup Fil";
$text['message-backup_failed_format']['uk'] = "Помилка: неможливо створити файл резервної копії";
$text['message-backup_failed_format']['de-at'] = "Sicherung fehlgeschlagen - Sicherungsdatei kann nicht erstellt werden";
$text['label-target_type']['en-us'] = "Target Type";
$text['label-target_type']['es-cl'] = "Tipo de destino";
$text['label-target_type']['pt-pt'] = "Tipo de Destino";
$text['label-target_type']['fr-fr'] = "type de cible";
$text['label-target_type']['pt-br'] = "Tipo de destino";
$text['label-target_type']['pl'] = "Typ docelowy";
$text['label-target_type']['sv-se'] = "Mål Typ";
$text['label-target_type']['uk'] = "Призначення";
$text['label-target_type']['de-at'] = "Ziel Typ";
$text['label-source_paths']['en-us'] = "Source Paths";
$text['label-source_paths']['es-cl'] = "Fuente Caminos";
$text['label-source_paths']['pt-pt'] = "Fonte Caminhos";
$text['label-source_paths']['fr-fr'] = "Chemins Source";
$text['label-source_paths']['pt-br'] = "Destino da fonte";
$text['label-source_paths']['pl'] = " Ścieżki źródłowe";
$text['label-source_paths']['sv-se'] = "Källa Sökväg";
$text['label-source_paths']['uk'] = "Об’єкти для резервного копіювання";
$text['label-source_paths']['de-at'] = "Quell Pfade";
$text['label-select_backup']['en-us'] = "Select Backup File";
$text['label-select_backup']['es-cl'] = "Seleccione Copia de Seguridad";
$text['label-select_backup']['pt-pt'] = "Selecione Backup";
$text['label-select_backup']['fr-fr'] = "Sélectionnez le Fichier de Sauvegarde";
$text['label-select_backup']['pt-br'] = "Selecione o Backup";
$text['label-select_backup']['pl'] = "Wybierz plik kopii zapasowej";
$text['label-select_backup']['sv-se'] = "Välj Backup Fil";
$text['label-select_backup']['uk'] = "Виберіть файл резервної копії";
$text['label-select_backup']['de-at'] = "Wählen Sie eine Sicherungsdatei";
$text['label-file_format']['en-us'] = "File Format";
$text['label-file_format']['es-cl'] = "Formato de Archivo";
$text['label-file_format']['pt-pt'] = "Formato de arquivo";
$text['label-file_format']['fr-fr'] = "Format de Fichier";
$text['label-file_format']['pt-br'] = "Formato do arquivo";
$text['label-file_format']['pl'] = "Format pliku";
$text['label-file_format']['sv-se'] = "Filformat";
$text['label-file_format']['uk'] = "Формат файлу";
$text['label-file_format']['de-at'] = "Dateiformat";
$text['label-command']['en-us'] = "Command";
$text['label-command']['es-cl'] = "Comando";
$text['label-command']['pt-pt'] = "Comando";
$text['label-command']['fr-fr'] = "Commandementt";
$text['label-command']['pt-br'] = "Comando";
$text['label-command']['pl'] = "Polecenie";
$text['label-command']['sv-se'] = "Komando";
$text['label-command']['uk'] = "Команда";
$text['label-command']['de-at'] = "Befehl";
$text['header-restore']['en-us'] = "Restore";
$text['header-restore']['es-cl'] = "Restaurar";
$text['header-restore']['pt-pt'] = "Restaurar";
$text['header-restore']['fr-fr'] = "Restaurer";
$text['header-restore']['pt-br'] = "Restaurar";
$text['header-restore']['pl'] = "Przywracanie kopii zapasowej";
$text['header-restore']['sv-se'] = "Återställ";
$text['header-restore']['uk'] = "Відновлення";
$text['header-restore']['de-at'] = "Wiederherstellen";
$text['header-backup']['en-us'] = "Backup";
$text['header-backup']['es-cl'] = "Copia de seguridad";
$text['header-backup']['pt-pt'] = "Backup";
$text['header-backup']['fr-fr'] = "Sauvegarde";
$text['header-backup']['pt-br'] = "Backup";
$text['header-backup']['pl'] = "Tworzenie kopii zapasowej";
$text['header-backup']['sv-se'] = "Backup";
$text['header-backup']['uk'] = "Резервна копія";
$text['header-backup']['de-at'] = "Sichern";
$text['description-restore_warning']['en-us'] = "Warning: Existing files, if any, will be overwritten.";
$text['description-restore_warning']['es-cl'] = "Advertencia: Los archivos existentes, si los hay, se sobrescribirá.";
$text['description-restore_warning']['pt-pt'] = "Aviso: Os arquivos existentes, se houver, serão substituídos.";
$text['description-restore_warning']['fr-fr'] = "Attention: les fichiers existants, s'il y en a, seront écrasés.";
$text['description-restore_warning']['pt-br'] = "Aviso: Os arquivos existentes, se houver, serão todos substituidos";
$text['description-restore_warning']['pl'] = "Uwaga - obecne pliki (jeżeli istnieją), zostaną nadpisane";
$text['description-restore_warning']['sv-se'] = "Varning: Befintliga filer, om någon, kommer att skrivas över.";
$text['description-restore_warning']['uk'] = "Увага! Файли, які вже існують, будуть перезаписані.";
$text['description-restore_warning']['de-at'] = "Warnung: Existierende Dateien, falls vorhanden, werden überschrieben.";
$text['description-restore']['en-us'] = "To restore a backup from a file on your local system, click 'Browse' then select the desired backup file (eg. 'backup_[YYMMDD]_[HHMMSS].tgz'), then click the 'Restore' button.";
$text['description-restore']['es-cl'] = "Para restaurar una copia de seguridad de un archivo en el sistema local, haga clic en 'Examinar' y seleccione el archivo de copia de seguridad que desee (por ejemplo, 'backup_[YYMMDD]_[HHMMSS].tgz'), a continuación, haga clic en el botón 'Restaurar'.";
$text['description-restore']['pt-pt'] = "Para restaurar um backup de um arquivo em seu sistema local, clique em 'Procurar' e selecione o arquivo de backup desejado (por exemplo, 'backup_[YYMMDD]_[HHMMSS].tgz'), então clique no botão 'Restaurar'.";
$text['description-restore']['fr-fr'] = "Pour restaurer une sauvegarde à partir d'un fichier sur votre système local, cliquez sur 'Parcourir' puis sélectionnez le fichier de sauvegarde souhaité (par exemple, 'backup_[YYMMDD]_[HHMMSS].tgz'), puis cliquez sur le bouton 'Restaurer'.";
$text['description-restore']['pt-br'] = "Para restaurar um backup de um arquivo em seu sistema local, clique em 'Procurar' e selecione o arquivo de backup desejado (por exemplo, 'backup_[YYMMDD]_[HHMMSS].tgz'), então clique no botão 'Restaurar'. ";
$text['description-restore']['pl'] = "Aby przywrócić kopię zapasową z pliku w systemie lokalnym, kliknij 'Przeglądaj', wybierz żądany plik kopii zapasowej (np. 'Backup_ [ YYMMDD ] _ [ GGMMSS ] .tgz' ), a następnie kliknij przycisk 'Przywróć ustawienia domyślne'.";
$text['description-restore']['sv-se'] = "För att återställa en säkerhetskopia från en fil på ditt lokala system, klicka på ' Bläddra ' och välj sedan önskad säkerhetskopia (t.ex. . ' Backup_ [ ÅÅMMDD ] _ [ HHMMSS ] .tgz ' ) och klicka på ' Återställ ' -knappen.";
$text['description-restore']['uk'] = "Для відновлення резервної копії з файлу, натисніть кнопку 'Огляд' і виберіть потрібний файл резервної копії, а потім натисніть кнопку 'Відновити '.";
$text['description-restore']['de-at'] = "Um das System von einer lokalen Datei Wiederherzustellen klicken Sie 'Durchsuchen' und wählen Sie die gewünschte Sicherungsdatei.";
$text['description-backup']['en-us'] = "To create a backup of the Source Paths below (defined in Default Settings), select the desired File Format and Target Type.";
$text['description-backup']['es-cl'] = "Para crear una copia de seguridad de las rutas de origen siguientes (definidos en la configuración predeterminada), seleccione el formato de archivo deseado y tipo de destino.";
$text['description-backup']['pt-pt'] = "Para criar uma cópia de segurança dos caminhos de origem abaixo (definidos em Default Settings), selecione o formato de arquivo desejado e Target Type.";
$text['description-backup']['fr-fr'] = "Pour créer une sauvegarde des chemins source ci-dessous (défini dans les paramètres par défaut), sélectionnez le format de fichier désiré et Type de cible.";
$text['description-backup']['pt-br'] = "Para criar uma cópia de segurança do caminhos de origem abaixo (definidos em Default Settings), selecione o formato de arquivo desejado e Target Type. ";
$text['description-backup']['pl'] = "Aby utworzyć kopię zapasową scieżki zródłowej zdefiniowanej w ustawieniach domyślnych, wybierz żądany format pliku i typ docelowy.";
$text['description-backup']['sv-se'] = "För att skapa en säkerhetskopia av Källa Sökväg nedan (som definieras i standardinställningar), välj önskad Filformat och Mål Typ.";
$text['description-backup']['uk'] = "Щоб створити резервну копію вказаних нижче об’єктів (вказано у налаштуваннях за замовчуванням), виберіть потрібний формат і призначення";
$text['description-backup']['de-at'] = "Um eine Sicherung der unten angeführten Quell Pfade (in Standard Einstellungen definiert) zu erstellen, wählen Sie das gewünschte Dateiformat und den Ziel Typ.";
$text['button-restore']['en-us'] = "Restore";
$text['button-restore']['es-cl'] = "Restaurar";
$text['button-restore']['pt-pt'] = "Restaurar";
$text['button-restore']['fr-fr'] = "Restaurer";
$text['button-restore']['pt-br'] = "Restaurar valores";
$text['button-restore']['pl'] = "Przywróć ustawienia domyślne";
$text['button-restore']['sv-se'] = "Återställ";
$text['button-restore']['uk'] = "Відновити";
$text['button-restore']['de-at'] = "Widerherstellen";
$text['button-generate']['en-us'] = "Generate";
$text['button-generate']['es-cl'] = "Generar";
$text['button-generate']['pt-pt'] = "Gerar";
$text['button-generate']['fr-fr'] = "Générer";
$text['button-generate']['pt-br'] = "Geração";
$text['button-generate']['pl'] = "Generuj";
$text['button-generate']['sv-se'] = "Generera";
$text['button-generate']['uk'] = "Згенерувати";
$text['button-generate']['de-at'] = "Generieren";
$text['button-download']['en-us'] = "Download";
$text['button-download']['es-cl'] = "Descargar";
$text['button-download']['pt-pt'] = "Baixar";
$text['button-download']['fr-fr'] = "Télécharger";
$text['button-download']['pt-br'] = "Download";
$text['button-download']['pl'] = "Pobierz";
$text['button-download']['sv-se'] = "Ladda Ned";
$text['button-download']['uk'] = "Скачати";
$text['button-download']['de-at'] = "Download";
?>
+15
View File
@@ -0,0 +1,15 @@
<?php
$apps[$x]['menu'][0]['title']['en-us'] = "Backup";
$apps[$x]['menu'][0]['title']['fr-fr'] = "Sauvegarde";
$apps[$x]['menu'][0]['title']['pl'] = "Kopie zapasowe";
$apps[$x]['menu'][0]['title']['sv-se'] = "Backup";
$apps[$x]['menu'][0]['title']['uk'] = "Резервна копія";
$apps[$x]['menu'][0]['title']['de-at'] = "Sicherung";
$apps[$x]['menu'][0]['uuid'] = "7e174c3c-e494-4bb0-a52a-4ea55209ffeb";
$apps[$x]['menu'][0]['parent_uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['path'] = "/app/backup/index.php";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
?>
+257
View File
@@ -0,0 +1,257 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists("backup_download")) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//download the backup
if ($_GET['a'] == "download" && permission_exists('backup_download')) {
$file_format = $_GET['file_format'];
$file_format = ($file_format != '') ? $file_format : 'tgz';
//build the backup file
$backup_path = ($_SESSION['server']['backup']['path'] != '') ? $_SESSION['server']['backup']['path'] : '/tmp';
$backup_file = 'backup_'.date('Ymd_His').'.'.$file_format;
if (count($_SESSION['backup']['path']) > 0) {
//determine compression method
switch ($file_format) {
case "rar" : $cmd = 'rar a -ow -r '; break;
case "zip" : $cmd = 'zip -r '; break;
case "tbz" : $cmd = 'tar -jvcf '; break;
default : $cmd = 'tar -zvcf ';
}
$cmd .= $backup_path.'/'.$backup_file.' ';
foreach ($_SESSION['backup']['path'] as $value) {
$cmd .= $value.' ';
}
exec($cmd);
//download the file
session_cache_limiter('public');
if (file_exists($backup_path."/".$backup_file)) {
$fd = fopen($backup_path."/".$backup_file, 'rb');
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename='.$backup_file);
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Content-Length: ".filesize($backup_path."/".$backup_file));
header("Pragma: no-cache");
header("Expires: 0");
ob_clean();
fpassthru($fd);
exit;
}
else {
//set response message
$_SESSION["message"] = $text['message-backup_failed_format'];
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
}
else {
//set response message
$_SESSION["message"] = $text['message-backup_failed_paths'];
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
}
//script a backup (cron)
if ($_GET['a'] == "script" && permission_exists('backup_download')) {
$file_format = $_GET['file_format'];
$target_type = "script";
$backup = new backup;
$command = $backup->command("backup", $file_format);
}
//restore a backup
if ($_POST['a'] == "restore" && permission_exists('backup_upload')) {
$backup_path = ($_SESSION['server']['backup']['path'] != '') ? $_SESSION['server']['backup']['path'] : '/tmp';
$backup_file = $_FILES['backup_file']['name'];
if (is_uploaded_file($_FILES['backup_file']['tmp_name'])) {
//move temp file to backup path
move_uploaded_file($_FILES['backup_file']['tmp_name'], $backup_path.'/'.$backup_file);
//determine file format and restore backup
$file_format = pathinfo($_FILES['backup_file']['name'], PATHINFO_EXTENSION);
$valid_format = true;
switch ($file_format) {
case "rar" : $cmd = 'rar x -ow -o+ '.$backup_path.'/'.$backup_file.' /'; break;
case "zip" : $cmd = 'umask 755; unzip -o -qq -X -K '.$backup_path.'/'.$backup_file.' -d /'; break;
case "tbz" : $cmd = 'tar -xvpjf '.$backup_path.'/'.$backup_file.' -C /'; break;
case "tgz" : $cmd = 'tar -xvpzf '.$backup_path.'/'.$backup_file.' -C /'; break;
default: $valid_format = false;
}
if (!$valid_format) {
@unlink($backup_path.'/'.$backup_file);
$_SESSION["message"] = $text['message-restore_failed_format'];
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
else {
exec($cmd);
//set response message
$_SESSION["message"] = $text['message-restore_completed'];
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
}
else {
//set response message
$_SESSION["message"] = $text['message-restore_failed_upload'];
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
}
//add the header
require_once "resources/header.php";
$document['title'] = $text['title-destinations'];
// backup type switch javascript
echo "<script language='javascript' type='text/javascript'>";
echo " var fade_speed = 400;";
echo " function toggle_target(first_elem, second_elem) {";
echo " $('#command').fadeOut(fade_speed);";
echo " $('#'+first_elem).fadeToggle(fade_speed, function() {";
echo " $('#command').slideUp(fade_speed, function() {";
echo " $('#'+second_elem).fadeToggle(fade_speed);";
echo " });";
echo " });";
echo " }";
echo "</script>";
//show the content
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>\n";
echo " <tr>\n";
echo " <td width='50%' valign='top'>\n";
echo "<b>".$text['header-backup']."</b>\n";
echo "<br><br>";
echo $text['description-backup']."\n";
echo "<br><br><br>";
echo "<table border='0' cellpadding='0' cellspacing='0' width='100%'>\n";
echo "<tr>\n";
echo "<td width='30%' class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-source_paths']."\n";
echo "</td>\n";
echo "<td width='70%' class='vtable' align='left'>\n";
foreach ($_SESSION['backup']['path'] as $backup_path) {
echo $backup_path."<br>\n";
}
echo "</td>";
echo "</tr>";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-file_format']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='file_format' id='file_format'>";
echo " <option value='tgz' ".(($file_format == 'tgz') ? 'selected' : null).">TAR GZIP</option>";
echo " <option value='tbz' ".(($file_format == 'tbz') ? 'selected' : null).">TAR BZIP</option>";
echo " <option value='rar' ".(($file_format == 'rar') ? 'selected' : null).">RAR</option>";
echo " <option value='zip' ".(($file_format == 'zip') ? 'selected' : null).">ZIP</option>";
echo " </select>";
echo "</td>";
echo "</tr>";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-target_type']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='target_type' id='target_type' onchange=\"(this.selectedIndex == 0) ? toggle_target('btn_script','btn_download') : toggle_target('btn_download','btn_script');\">";
echo " <option value='download'>".$text['option-file_download']."</option>";
echo " <option value='script' ".(($target_type == 'script') ? 'selected' : null).">".$text['option-command']."</option>";
echo " </select>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "<div id='command' ".(($command == '') ? "style='display: none;'" : null).">";
echo "<table border='0' cellpadding='0' cellspacing='0' width='100%'>\n";
echo "<tr>\n";
echo "<td width='30%' class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-command']."\n";
echo "</td>\n";
echo "<td width='70%' class='vtable' align='left'>\n";
echo " <textarea class='formfld' style='width: 100%; height: 200px; font-family: courier;'>".$command."</textarea>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</div>";
echo "<br>";
echo "<div align='right'>";
echo "<input type='button' id='btn_script' class='btn' ".(($target_type != 'script') ? "style='display: none;'" : null)." value='".$text['button-generate']."' onclick=\"document.location.href='".PROJECT_PATH."/app/backup/index.php?a=script&file_format='+document.getElementById('file_format').options[document.getElementById('file_format').selectedIndex].value;\">";
echo "<input type='button' id='btn_download' class='btn' ".(($target_type == 'script') ? "style='display: none;'" : null)." value='".$text['button-download']."' onclick=\"document.location.href='".PROJECT_PATH."/app/backup/index.php?a=download&file_format='+document.getElementById('file_format').options[document.getElementById('file_format').selectedIndex].value;\">";
echo "</div>";
echo "<br><br>";
echo " </td>\n";
echo " <td width='20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
echo " <td width='50%' valign='top'>\n";
echo "<b>".$text['header-restore']."</b>\n";
echo "<br><br>";
echo $text['description-restore']."\n";
echo "<br><br><br>";
echo "<div align='center'>";
echo "<form name='frmrestore' method='post' enctype='multipart/form-data' action=''>";
echo "<input type='hidden' name='a' value='restore'>";
echo "<table>";
echo " <tr>";
echo " <td nowrap>".$text['label-select_backup']."&nbsp;</td>";
echo " <td><input type='file' class='formfld fileinput' name='backup_file'></td>";
echo " <td><input type='submit' class='btn' value='".$text['button-restore']."'></td>";
echo " </tr>";
echo "</table>";
echo "<br>";
echo "<span style='font-weight: bold; text-decoration: underline; color: #000;'>".$text['description-restore_warning']."</span>";
echo "</form>\n";
echo "</div>";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
echo "<br><br>";
//show the footer
require_once "resources/footer.php";
?>
+124
View File
@@ -0,0 +1,124 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2014
All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
include "root.php";
//define the backup class
if (!class_exists('backup')) {
class backup {
public $result;
public $domain_uuid;
public function command($type, $file) {
if ($type == "backup") {
$path = ($_SESSION['server']['backup']['path'] != '') ? $_SESSION['server']['backup']['path'] : '/tmp';
$file = str_replace(array("/", "\\"),'',$file); //remove slashes to prevent changing the directory with the file name
$format = substr($file,-3);
if (strlen($file) == 3) {
$file = 'backup_'.date('Ymd_His').'.'.$format;
}
if (count($_SESSION['backup']['path']) > 0) {
//determine compression method
switch ($format) {
case "rar" : $cmd = 'rar a -ow -r '; break;
case "zip" : $cmd = 'zip -r '; break;
case "tbz" : $cmd = 'tar -jvcf '; break;
default : $cmd = 'tar -zvcf ';
}
$cmd .= $path.'/'.$file.' ';
foreach ($_SESSION['backup']['path'] as $value) {
$cmd .= $value.' ';
}
return $cmd;
}
else {
return false;
}
}
if ($type == "restore") {
$path = ($_SESSION['server']['backup']['path'] != '') ? $_SESSION['server']['backup']['path'] : '/tmp';
$file = str_replace(array("/", "\\"),'',$file); //remove slashes to prevent changing the directory with the file name
$format = substr($file,-3);
if (count($_SESSION['backup']['path']) > 0) {
switch ($format) {
case "rar" : $cmd = 'rar x -ow -o+ '.$path.'/'.$file.' /'; break;
case "zip" : $cmd = 'umask 755; unzip -o -qq -X -K '.$path.'/'.$file.' -d /'; break;
case "tbz" : $cmd = 'tar -xvpjf '.$path.'/'.$file.' -C /'; break;
case "tgz" : $cmd = 'tar -xvpzf '.$path.'/'.$file.' -C /'; break;
default: $valid_format = false;
}
return $cmd;
}
else {
return false;
}
}
}
public function backup($type, $format) {
$cmd = $this->command("backup", $format);
exec($cmd);
return $cmd;
}
public function restore($file) {
$path = ($_SESSION['server']['backup']['path'] != '') ? $_SESSION['server']['backup']['path'] : '/tmp';
$format = substr($file,-3);
switch ($format) {
case "rar" : break;
case "zip" : break;
case "tbz" : break;
case "tgz" : break;
default: return false;
}
$cmd = $this->command("restore", $file);
exec($cmd);
return $cmd;
}
public function download($file) {
$path = ($_SESSION['server']['backup']['path'] != '') ? $_SESSION['server']['backup']['path'] : '/tmp';
session_cache_limiter('public');
$file = str_replace(array("/", "\\"),'',$file); //remove slashes to prevent changing the directory with the file name
if (file_exists($path."/".$file)) {
$fd = fopen($path."/".$file, 'rb');
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename='.$file);
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Content-Length: ".filesize($path."/".$file));
header("Pragma: no-cache");
header("Expires: 0");
ob_clean();
fpassthru($fd);
exit;
}
}
}
}
?>
+50
View File
@@ -0,0 +1,50 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
// make sure the PATH_SEPARATOR is defined
if (!defined("PATH_SEPARATOR")) {
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>
-103
View File
@@ -1,103 +0,0 @@
<?php
//application details
$apps[$x]['name'] = "Operator Panel";
$apps[$x]['uuid'] = "dd3d173a-5d51-4231-ab22-b18c5b712bb2";
$apps[$x]['category'] = "Switch";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.0";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Operator panel shows the status.";
$apps[$x]['description']['en-gb'] = "Operator panel shows the status.";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "Das Bedienfeld zeigt den Status an.";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "Das Bedienfeld zeigt den Status an.";
$apps[$x]['description']['es-cl'] = "";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['fr-fr'] = "";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "Bedieningspaneel laat de status zien";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "";
$apps[$x]['description']['pt-pt'] = "Canais ativos no sistema.";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
//permission details
$y=0;
$apps[$x]['permissions'][$y]['name'] = "operator_panel_view";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "operator_panel_manage";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "operator_panel_eavesdrop";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "operator_panel_hangup";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "operator_panel_record";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "operator_panel_call_details";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "operator_panel_on_demand";
//default settings
$y=0;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "569280f2-a433-4eaf-9c08-945efdc6cf8f";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "operator_panel";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "refresh";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "1500";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Set the refresh rate in seconds (<=120) or milliseconds (>=500).";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "0c273cad-1ee4-48d9-9336-08bc8260579a";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "operator_panel";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "group_extensions";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Set if extensions are grouped by call_group when viewing all extensions.";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "a9ccd174-5ae1-4f90-8ee2-b79a183a04f8";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "theme";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "operator_panel_main_background_color";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "#ffffff";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Set main background color (and opacity) of extensions";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "b9d34460-db41-40d5-becd-5da037fa8942";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "theme";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "operator_panel_sub_background_color";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "#e5eaf5";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Set sub background color (and opacity) of extensions";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "9cb6477d-0454-4b9c-b0fb-11c258d4f35f";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "theme";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "operator_panel_border_color";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "#b9c5d8";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Set border color (and opacity) of extensions";
$y++;
?>
-424
View File
@@ -1,424 +0,0 @@
<?php
#This file was last reorganized on 19th of September 2017 08:54:24 AM UTC
$text['title-operator_panel']['en-us'] = "Operator Panel";
$text['title-operator_panel']['en-gb'] = "Operator Panel";
$text['title-operator_panel']['ar-eg'] = "";
$text['title-operator_panel']['de-at'] = "Bedienfeld"; //copied from de-de
$text['title-operator_panel']['de-ch'] = "Bedienfeld"; //copied from de-de
$text['title-operator_panel']['de-de'] = "Bedienfeld";
$text['title-operator_panel']['es-cl'] = "Panel de Operador";
$text['title-operator_panel']['es-mx'] = "Panel de Operador"; //copied from es-cl
$text['title-operator_panel']['fr-ca'] = "Operator Panel"; //copied from fr-fr
$text['title-operator_panel']['fr-fr'] = "Operator Panel";
$text['title-operator_panel']['he-il'] = "לוח מפעיל";
$text['title-operator_panel']['it-it'] = "Pannello Operatore";
$text['title-operator_panel']['nl-nl'] = "Operator paneel";
$text['title-operator_panel']['pl-pl'] = "Panel operatora";
$text['title-operator_panel']['pt-br'] = "Painel do operador";
$text['title-operator_panel']['pt-pt'] = "Painel do Operador";
$text['title-operator_panel']['ro-ro'] = "";
$text['title-operator_panel']['ru-ru'] = "Панель Оператора";
$text['title-operator_panel']['sv-se'] = "Telefonist Panel";
$text['title-operator_panel']['uk-ua'] = "Панель оператора";
$text['label-status_on_demand']['en-us'] = "On Demand";
$text['label-status_on_demand']['en-gb'] = "On Demand";
$text['label-status_on_demand']['ar-eg'] = "";
$text['label-status_on_demand']['de-at'] = "Bei Bedarf"; //copied from de-de
$text['label-status_on_demand']['de-ch'] = "Bei Bedarf"; //copied from de-de
$text['label-status_on_demand']['de-de'] = "Bei Bedarf";
$text['label-status_on_demand']['es-cl'] = "A Pedido";
$text['label-status_on_demand']['es-mx'] = "A Pedido"; //copied from es-cl
$text['label-status_on_demand']['fr-ca'] = "Sur Demande"; //copied from fr-fr
$text['label-status_on_demand']['fr-fr'] = "Sur Demande";
$text['label-status_on_demand']['he-il'] = "על פי דרישה";
$text['label-status_on_demand']['it-it'] = "Su Richiesta";
$text['label-status_on_demand']['nl-nl'] = "Op Aanvraag";
$text['label-status_on_demand']['pl-pl'] = "Na żądanie";
$text['label-status_on_demand']['pt-br'] = "A pedido";
$text['label-status_on_demand']['pt-pt'] = "A Pedido";
$text['label-status_on_demand']['ro-ro'] = "";
$text['label-status_on_demand']['ru-ru'] = "По требованию";
$text['label-status_on_demand']['sv-se'] = "På Begäran";
$text['label-status_on_demand']['uk-ua'] = "На вимогу";
$text['label-status_on_break']['en-us'] = "On Break";
$text['label-status_on_break']['en-gb'] = "On Break";
$text['label-status_on_break']['ar-eg'] = "";
$text['label-status_on_break']['de-at'] = "In Pause"; //copied from de-de
$text['label-status_on_break']['de-ch'] = "In Pause"; //copied from de-de
$text['label-status_on_break']['de-de'] = "In Pause";
$text['label-status_on_break']['es-cl'] = "En Pausa";
$text['label-status_on_break']['es-mx'] = "En Pausa"; //copied from es-cl
$text['label-status_on_break']['fr-ca'] = "En Pause"; //copied from fr-fr
$text['label-status_on_break']['fr-fr'] = "En Pause";
$text['label-status_on_break']['he-il'] = "בהפסקה";
$text['label-status_on_break']['it-it'] = "In Pausa";
$text['label-status_on_break']['nl-nl'] = "In de wacht";
$text['label-status_on_break']['pl-pl'] = "Na przerwie";
$text['label-status_on_break']['pt-br'] = "Em pausa";
$text['label-status_on_break']['pt-pt'] = "Em Pausa";
$text['label-status_on_break']['ro-ro'] = "";
$text['label-status_on_break']['ru-ru'] = "Пауза";
$text['label-status_on_break']['sv-se'] = "På Rast";
$text['label-status_on_break']['uk-ua'] = "На перерві";
$text['label-status_logged_out_or_unknown']['en-us'] = "Logged Out / Unknown";
$text['label-status_logged_out_or_unknown']['en-gb'] = "Logged Out / Unknown";
$text['label-status_logged_out_or_unknown']['ar-eg'] = "";
$text['label-status_logged_out_or_unknown']['de-at'] = "Abgemeldet / Unbekannt"; //copied from de-de
$text['label-status_logged_out_or_unknown']['de-ch'] = "Abgemeldet / Unbekannt"; //copied from de-de
$text['label-status_logged_out_or_unknown']['de-de'] = "Abgemeldet / Unbekannt";
$text['label-status_logged_out_or_unknown']['es-cl'] = "Desconectado / Desconocido";
$text['label-status_logged_out_or_unknown']['es-mx'] = "Desconectado / Desconocido"; //copied from es-cl
$text['label-status_logged_out_or_unknown']['fr-ca'] = "Déconnexion / Unknown"; //copied from fr-fr
$text['label-status_logged_out_or_unknown']['fr-fr'] = "Déconnexion / Unknown";
$text['label-status_logged_out_or_unknown']['he-il'] = "";
$text['label-status_logged_out_or_unknown']['it-it'] = "Sloggato/Sconosciuto";
$text['label-status_logged_out_or_unknown']['nl-nl'] = "Afgelogged / Onbekend";
$text['label-status_logged_out_or_unknown']['pl-pl'] = "Wylogowany / Nieznany";
$text['label-status_logged_out_or_unknown']['pt-br'] = "Desligar / Desconhecido";
$text['label-status_logged_out_or_unknown']['pt-pt'] = "Desligado / Unknown";
$text['label-status_logged_out_or_unknown']['ro-ro'] = "";
$text['label-status_logged_out_or_unknown']['ru-ru'] = "Вышел из системы / Неизвестен";
$text['label-status_logged_out_or_unknown']['sv-se'] = "Utloggad / Okänd";
$text['label-status_logged_out_or_unknown']['uk-ua'] = "Вийшов/невідомо";
$text['label-status_logged_out']['en-us'] = "Logged Out";
$text['label-status_logged_out']['en-gb'] = "Logged Out";
$text['label-status_logged_out']['ar-eg'] = "";
$text['label-status_logged_out']['de-at'] = "Abgemeldet"; //copied from de-de
$text['label-status_logged_out']['de-ch'] = "Abgemeldet"; //copied from de-de
$text['label-status_logged_out']['de-de'] = "Abgemeldet";
$text['label-status_logged_out']['es-cl'] = "Desconectado";
$text['label-status_logged_out']['es-mx'] = "Desconectado"; //copied from es-cl
$text['label-status_logged_out']['fr-ca'] = "Déconnexion"; //copied from fr-fr
$text['label-status_logged_out']['fr-fr'] = "Déconnexion";
$text['label-status_logged_out']['he-il'] = "";
$text['label-status_logged_out']['it-it'] = "Sloggato";
$text['label-status_logged_out']['nl-nl'] = "Afgelogged";
$text['label-status_logged_out']['pl-pl'] = "Wylogowany";
$text['label-status_logged_out']['pt-br'] = "Desligado"; //copied from pt-pt
$text['label-status_logged_out']['pt-pt'] = "Desligado";
$text['label-status_logged_out']['ro-ro'] = "";
$text['label-status_logged_out']['ru-ru'] = "Вышел из системы";
$text['label-status_logged_out']['sv-se'] = "Utloggad";
$text['label-status_logged_out']['uk-ua'] = "Вийшов";
$text['label-status_do_not_disturb']['en-us'] = "Do Not Disturb";
$text['label-status_do_not_disturb']['en-gb'] = "Do Not Disturb";
$text['label-status_do_not_disturb']['ar-eg'] = "";
$text['label-status_do_not_disturb']['de-at'] = "Bitte nicht Stören"; //copied from de-de
$text['label-status_do_not_disturb']['de-ch'] = "Bitte nicht Stören"; //copied from de-de
$text['label-status_do_not_disturb']['de-de'] = "Bitte nicht Stören";
$text['label-status_do_not_disturb']['es-cl'] = "No Molestar";
$text['label-status_do_not_disturb']['es-mx'] = "No Molestar"; //copied from es-cl
$text['label-status_do_not_disturb']['fr-ca'] = "Ne pas Déranger"; //copied from fr-fr
$text['label-status_do_not_disturb']['fr-fr'] = "Ne pas Déranger";
$text['label-status_do_not_disturb']['he-il'] = "נא לא להפריע";
$text['label-status_do_not_disturb']['it-it'] = "Non Disturbare";
$text['label-status_do_not_disturb']['nl-nl'] = "Niet Storen";
$text['label-status_do_not_disturb']['pl-pl'] = "Nie przeszkadzać (DND)";
$text['label-status_do_not_disturb']['pt-br'] = "Não perturbe";
$text['label-status_do_not_disturb']['pt-pt'] = "Não perturbe (DND)";
$text['label-status_do_not_disturb']['ro-ro'] = "";
$text['label-status_do_not_disturb']['ru-ru'] = "Просьба не беспокоить";
$text['label-status_do_not_disturb']['sv-se'] = "Stör Ej";
$text['label-status_do_not_disturb']['uk-ua'] = "Не турбувати";
$text['label-status_available_on_demand']['en-us'] = "Available (On Demand)";
$text['label-status_available_on_demand']['en-gb'] = "Available (On Demand)";
$text['label-status_available_on_demand']['ar-eg'] = "";
$text['label-status_available_on_demand']['de-at'] = "Verfügbar (Bei Bedarf)"; //copied from de-de
$text['label-status_available_on_demand']['de-ch'] = "Verfügbar (Bei Bedarf)"; //copied from de-de
$text['label-status_available_on_demand']['de-de'] = "Verfügbar (Bei Bedarf)";
$text['label-status_available_on_demand']['es-cl'] = "Disponible (A Pedido)";
$text['label-status_available_on_demand']['es-mx'] = "Disponible (A Pedido)"; //copied from es-cl
$text['label-status_available_on_demand']['fr-ca'] = "Disponible (sur demande)"; //copied from fr-fr
$text['label-status_available_on_demand']['fr-fr'] = "Disponible (sur demande)";
$text['label-status_available_on_demand']['he-il'] = "";
$text['label-status_available_on_demand']['it-it'] = "Disponibile (Su Richiesta)";
$text['label-status_available_on_demand']['nl-nl'] = "Beschikbaar (Op Aaanvraag)";
$text['label-status_available_on_demand']['pl-pl'] = "Dostępny (na żądanie)";
$text['label-status_available_on_demand']['pt-br'] = "Disponivel (A pedido)";
$text['label-status_available_on_demand']['pt-pt'] = "Disponível (A Pedido)";
$text['label-status_available_on_demand']['ro-ro'] = "";
$text['label-status_available_on_demand']['ru-ru'] = "Доступен (по требованию)";
$text['label-status_available_on_demand']['sv-se'] = "Tillgänglig (På Begäran)";
$text['label-status_available_on_demand']['uk-ua'] = "Доступний (на вимогу)";
$text['label-status_available']['en-us'] = "Available";
$text['label-status_available']['en-gb'] = "Available";
$text['label-status_available']['ar-eg'] = "";
$text['label-status_available']['de-at'] = "Verfügbar"; //copied from de-de
$text['label-status_available']['de-ch'] = "Verfügbar"; //copied from de-de
$text['label-status_available']['de-de'] = "Verfügbar";
$text['label-status_available']['es-cl'] = "Disponible";
$text['label-status_available']['es-mx'] = "Disponible"; //copied from es-cl
$text['label-status_available']['fr-ca'] = "Disponible"; //copied from fr-fr
$text['label-status_available']['fr-fr'] = "Disponible";
$text['label-status_available']['he-il'] = "זמין";
$text['label-status_available']['it-it'] = "Disponibile";
$text['label-status_available']['nl-nl'] = "Beschikbaar";
$text['label-status_available']['pl-pl'] = "Dostępny";
$text['label-status_available']['pt-br'] = "Disponível";
$text['label-status_available']['pt-pt'] = "Disponível";
$text['label-status_available']['ro-ro'] = "";
$text['label-status_available']['ru-ru'] = "Доступен";
$text['label-status_available']['sv-se'] = "Tillgänglig";
$text['label-status_available']['uk-ua'] = "Доступний";
$text['label-refresh_pause']['en-us'] = "Pause Refresh";
$text['label-refresh_pause']['en-gb'] = "Pause Refresh";
$text['label-refresh_pause']['ar-eg'] = "";
$text['label-refresh_pause']['de-at'] = "Seite neu laden deaktivieren"; //copied from de-de
$text['label-refresh_pause']['de-ch'] = "Seite neu laden deaktivieren"; //copied from de-de
$text['label-refresh_pause']['de-de'] = "Seite neu laden deaktivieren";
$text['label-refresh_pause']['es-cl'] = "Actualizar Pausa";
$text['label-refresh_pause']['es-mx'] = "Actualizar Pausa"; //copied from es-cl
$text['label-refresh_pause']['fr-ca'] = "Pause Actualiser"; //copied from fr-fr
$text['label-refresh_pause']['fr-fr'] = "Pause Actualiser";
$text['label-refresh_pause']['he-il'] = "עצור רענון";
$text['label-refresh_pause']['it-it'] = "Interrompi";
$text['label-refresh_pause']['nl-nl'] = "Stop verversen";
$text['label-refresh_pause']['pl-pl'] = "Pauzuj odświeżanie";
$text['label-refresh_pause']['pt-br'] = "Pausar atualização";
$text['label-refresh_pause']['pt-pt'] = "Pausa Atualizar";
$text['label-refresh_pause']['ro-ro'] = "";
$text['label-refresh_pause']['ru-ru'] = "Приостановить обновление";
$text['label-refresh_pause']['sv-se'] = "Paus Uppdatera";
$text['label-refresh_pause']['uk-ua'] = "Припинити оновлення";
$text['label-refresh_enable']['en-us'] = "Enable Refresh";
$text['label-refresh_enable']['en-gb'] = "Enable Refresh";
$text['label-refresh_enable']['ar-eg'] = "";
$text['label-refresh_enable']['de-at'] = "Seite neu laden aktivieren"; //copied from de-de
$text['label-refresh_enable']['de-ch'] = "Seite neu laden aktivieren"; //copied from de-de
$text['label-refresh_enable']['de-de'] = "Seite neu laden aktivieren";
$text['label-refresh_enable']['es-cl'] = "Activar Actualizar";
$text['label-refresh_enable']['es-mx'] = "Activar Actualizar"; //copied from es-cl
$text['label-refresh_enable']['fr-ca'] = "Activer Actualiser"; //copied from fr-fr
$text['label-refresh_enable']['fr-fr'] = "Activer Actualiser";
$text['label-refresh_enable']['he-il'] = "אפשר רענון";
$text['label-refresh_enable']['it-it'] = "Abilita Aggiornamento";
$text['label-refresh_enable']['nl-nl'] = "Start verversen";
$text['label-refresh_enable']['pl-pl'] = "Włącz odświeżanie";
$text['label-refresh_enable']['pt-br'] = "Habilitar atualização";
$text['label-refresh_enable']['pt-pt'] = "Habilitar Atualização";
$text['label-refresh_enable']['ro-ro'] = "";
$text['label-refresh_enable']['ru-ru'] = "Включить обновление";
$text['label-refresh_enable']['sv-se'] = "Aktivera Uppdatering";
$text['label-refresh_enable']['uk-ua'] = "Включити оновлення";
$text['label-recording']['en-us'] = "Recording";
$text['label-recording']['en-gb'] = "Recording";
$text['label-recording']['ar-eg'] = "";
$text['label-recording']['de-at'] = "Aufnahme"; //copied from de-de
$text['label-recording']['de-ch'] = "Aufnahme"; //copied from de-de
$text['label-recording']['de-de'] = "Aufnahme";
$text['label-recording']['es-cl'] = "Grabación de Llamadas";
$text['label-recording']['es-mx'] = "Grabación de Llamadas"; //copied from es-cl
$text['label-recording']['fr-ca'] = "Enregistrement de L'appel"; //copied from fr-fr
$text['label-recording']['fr-fr'] = "Enregistrement de L'appel";
$text['label-recording']['he-il'] = "מקליט";
$text['label-recording']['it-it'] = "Registrazione";
$text['label-recording']['nl-nl'] = "Opnemend";
$text['label-recording']['pl-pl'] = "Nagrywanie";
$text['label-recording']['pt-br'] = "Gravação de chamadas";
$text['label-recording']['pt-pt'] = "Gravação de Chamadas";
$text['label-recording']['ro-ro'] = "";
$text['label-recording']['ru-ru'] = "Запись";
$text['label-recording']['sv-se'] = "Inspelning";
$text['label-recording']['uk-ua'] = "Запис";
$text['label-record']['en-us'] = "Record";
$text['label-record']['en-gb'] = "Record";
$text['label-record']['ar-eg'] = "";
$text['label-record']['de-at'] = "Aufnehmen"; //copied from de-de
$text['label-record']['de-ch'] = "Aufnehmen"; //copied from de-de
$text['label-record']['de-de'] = "Aufnehmen";
$text['label-record']['es-cl'] = "Registro";
$text['label-record']['es-mx'] = "Registro"; //copied from es-cl
$text['label-record']['fr-ca'] = "Enregistrer"; //copied from fr-fr
$text['label-record']['fr-fr'] = "Enregistrer";
$text['label-record']['he-il'] = "הקלטה";
$text['label-record']['it-it'] = "Registrazione";
$text['label-record']['nl-nl'] = "Opnemen";
$text['label-record']['pl-pl'] = "Nagrywanie";
$text['label-record']['pt-br'] = "Registro"; //copied from pt-pt
$text['label-record']['pt-pt'] = "Registro";
$text['label-record']['ro-ro'] = "";
$text['label-record']['ru-ru'] = "Воспроизведение";
$text['label-record']['sv-se'] = "Spela In";
$text['label-record']['uk-ua'] = "Запис";
$text['label-other_extensions']['en-us'] = "Other Extensions";
$text['label-other_extensions']['en-gb'] = "Other Extensions";
$text['label-other_extensions']['ar-eg'] = "";
$text['label-other_extensions']['de-at'] = "Andere Nebenstellen"; //copied from de-de
$text['label-other_extensions']['de-ch'] = "Andere Nebenstellen"; //copied from de-de
$text['label-other_extensions']['de-de'] = "Andere Nebenstellen";
$text['label-other_extensions']['es-cl'] = "Otras Extensiones";
$text['label-other_extensions']['es-mx'] = "Otras Extensiones"; //copied from es-cl
$text['label-other_extensions']['fr-ca'] = "Autres Extensions"; //copied from fr-fr
$text['label-other_extensions']['fr-fr'] = "Autres Extensions";
$text['label-other_extensions']['he-il'] = "שלוחות אחרות";
$text['label-other_extensions']['it-it'] = "Altri Interni";
$text['label-other_extensions']['nl-nl'] = "Andere toestellen";
$text['label-other_extensions']['pl-pl'] = "Inne numery wewnętrzne";
$text['label-other_extensions']['pt-br'] = "Outras extensões";
$text['label-other_extensions']['pt-pt'] = "Outros Extensions";
$text['label-other_extensions']['ro-ro'] = "";
$text['label-other_extensions']['ru-ru'] = "Другие внутренние номера";
$text['label-other_extensions']['sv-se'] = "Annan Anknytning";
$text['label-other_extensions']['uk-ua'] = "Інші розширення";
$text['label-no_extensions_found']['en-us'] = "No extensions found.";
$text['label-no_extensions_found']['en-gb'] = "No extensions found.";
$text['label-no_extensions_found']['ar-eg'] = "";
$text['label-no_extensions_found']['de-at'] = "Keine Nebenstellen gefunden."; //copied from de-de
$text['label-no_extensions_found']['de-ch'] = "Keine Nebenstellen gefunden."; //copied from de-de
$text['label-no_extensions_found']['de-de'] = "Keine Nebenstellen gefunden.";
$text['label-no_extensions_found']['es-cl'] = "No hay extensiones encontrados.";
$text['label-no_extensions_found']['es-mx'] = "No hay extensiones encontrados."; //copied from es-cl
$text['label-no_extensions_found']['fr-ca'] = "Aucun extensions trouvés."; //copied from fr-fr
$text['label-no_extensions_found']['fr-fr'] = "Aucun extensions trouvés.";
$text['label-no_extensions_found']['he-il'] = "לא נמצאו שלוחות";
$text['label-no_extensions_found']['it-it'] = "Nessun interno trovato.";
$text['label-no_extensions_found']['nl-nl'] = "Geen toestellen gevonden.";
$text['label-no_extensions_found']['pl-pl'] = "Nie znaleziono numerów wewnętrznych";
$text['label-no_extensions_found']['pt-br'] = "Não foi encontrada nenhuma extensão";
$text['label-no_extensions_found']['pt-pt'] = "Sem extensões encontrado.";
$text['label-no_extensions_found']['ro-ro'] = "";
$text['label-no_extensions_found']['ru-ru'] = "Внутренних номеров не найдено.";
$text['label-no_extensions_found']['sv-se'] = "Ingen anknytning funnen.";
$text['label-no_extensions_found']['uk-ua'] = "Не знайдено розширень";
$text['label-hangup']['en-us'] = "Hangup";
$text['label-hangup']['en-gb'] = "Hangup";
$text['label-hangup']['ar-eg'] = "";
$text['label-hangup']['de-at'] = "Abwürgen"; //copied from de-de
$text['label-hangup']['de-ch'] = "Abwürgen"; //copied from de-de
$text['label-hangup']['de-de'] = "Abwürgen";
$text['label-hangup']['es-cl'] = "Finalizar Llamada";
$text['label-hangup']['es-mx'] = "Finalizar Llamada"; //copied from es-cl
$text['label-hangup']['fr-ca'] = "Tuer Appel"; //copied from fr-fr
$text['label-hangup']['fr-fr'] = "Tuer Appel";
$text['label-hangup']['he-il'] = "הפסק";
$text['label-hangup']['it-it'] = "Abbatti";
$text['label-hangup']['nl-nl'] = "Ophangen";
$text['label-hangup']['pl-pl'] = "Rozłączenie się";
$text['label-hangup']['pt-br'] = "Chamada final";
$text['label-hangup']['pt-pt'] = "Chamada Final";
$text['label-hangup']['ro-ro'] = "";
$text['label-hangup']['ru-ru'] = "Убить";
$text['label-hangup']['sv-se'] = "Lägg På";
$text['label-hangup']['uk-ua'] = "вбити";
$text['label-eavesdrop']['en-us'] = "Eavesdrop";
$text['label-eavesdrop']['en-gb'] = "Eavesdrop";
$text['label-eavesdrop']['ar-eg'] = "";
$text['label-eavesdrop']['de-at'] = "Mithören"; //copied from de-de
$text['label-eavesdrop']['de-ch'] = "Mithören"; //copied from de-de
$text['label-eavesdrop']['de-de'] = "Mithören";
$text['label-eavesdrop']['es-cl'] = "Escuchar";
$text['label-eavesdrop']['es-mx'] = "Escuchar"; //copied from es-cl
$text['label-eavesdrop']['fr-ca'] = "Espionner"; //copied from fr-fr
$text['label-eavesdrop']['fr-fr'] = "Espionner";
$text['label-eavesdrop']['he-il'] = "";
$text['label-eavesdrop']['it-it'] = "Ascolta";
$text['label-eavesdrop']['nl-nl'] = "Afluisteren";
$text['label-eavesdrop']['pl-pl'] = "Podsłuchiwanie";
$text['label-eavesdrop']['pt-br'] = "Investigar";
$text['label-eavesdrop']['pt-pt'] = "Bisbilhotar";
$text['label-eavesdrop']['ro-ro'] = "";
$text['label-eavesdrop']['ru-ru'] = "Подслушивать";
$text['label-eavesdrop']['sv-se'] = "Medlyssning";
$text['label-eavesdrop']['uk-ua'] = "підслуховувати";
$text['label-call_group']['en-us'] = "Call Group";
$text['label-call_group']['en-gb'] = "Call Group";
$text['label-call_group']['ar-eg'] = "";
$text['label-call_group']['de-at'] = "Rufgruppe"; //copied from de-de
$text['label-call_group']['de-ch'] = "Rufgruppe"; //copied from de-de
$text['label-call_group']['de-de'] = "Rufgruppe";
$text['label-call_group']['es-cl'] = "Llamar a Grupo";
$text['label-call_group']['es-mx'] = "Llamar a Grupo"; //copied from es-cl
$text['label-call_group']['fr-ca'] = "Groupe d'appel"; //copied from fr-fr
$text['label-call_group']['fr-fr'] = "Groupe d'appel";
$text['label-call_group']['he-il'] = "קבוצת חיוג";
$text['label-call_group']['it-it'] = "Gruppo di Chiamata";
$text['label-call_group']['nl-nl'] = "Oproep Groep";
$text['label-call_group']['pl-pl'] = "Grupa odbiorców rozmowy";
$text['label-call_group']['pt-br'] = "Grupo"; //copied from pt-pt
$text['label-call_group']['pt-pt'] = "Grupo";
$text['label-call_group']['ro-ro'] = "";
$text['label-call_group']['ru-ru'] = "Группы вызова";
$text['label-call_group']['sv-se'] = "Ring Grupp";
$text['label-call_group']['uk-ua'] = "груповий виклик";
$text['label-call_direction']['en-us'] = "Call Direction";
$text['label-call_direction']['en-gb'] = "Call Direction";
$text['label-call_direction']['ar-eg'] = "";
$text['label-call_direction']['de-at'] = "Anruf Richtung"; //copied from de-de
$text['label-call_direction']['de-ch'] = "Anruf Richtung"; //copied from de-de
$text['label-call_direction']['de-de'] = "Anruf Richtung";
$text['label-call_direction']['es-cl'] = "Dirección de la llamada";
$text['label-call_direction']['es-mx'] = "Dirección de la llamada"; //copied from es-cl
$text['label-call_direction']['fr-ca'] = "Sens de l'appel"; //copied from fr-fr
$text['label-call_direction']['fr-fr'] = "Sens de l'appel";
$text['label-call_direction']['he-il'] = "כיוון שיחה";
$text['label-call_direction']['it-it'] = "Direzione Chiamata";
$text['label-call_direction']['nl-nl'] = "Oproep richting";
$text['label-call_direction']['pl-pl'] = "Kierunek rozmowy";
$text['label-call_direction']['pt-br'] = "Direção da chamada";
$text['label-call_direction']['pt-pt'] = "Direção da chamada";
$text['label-call_direction']['ro-ro'] = "";
$text['label-call_direction']['ru-ru'] = "Направление вызова";
$text['label-call_direction']['sv-se'] = "Samtals Riktning";
$text['label-call_direction']['uk-ua'] = "напрямок виклику";
$text['description-eavesdrop_destination']['en-us'] = "Select the Eavesdrop Destination";
$text['description-eavesdrop_destination']['en-gb'] = "Select the Eavesdrop Destination";
$text['description-eavesdrop_destination']['ar-eg'] = "";
$text['description-eavesdrop_destination']['de-at'] = "Wählen Sie ein Ziel zum Mithören"; //copied from de-de
$text['description-eavesdrop_destination']['de-ch'] = "Wählen Sie ein Ziel zum Mithören"; //copied from de-de
$text['description-eavesdrop_destination']['de-de'] = "Wählen Sie ein Ziel zum Mithören";
$text['description-eavesdrop_destination']['es-cl'] = "Seleccione el Eavesdrop Destino";
$text['description-eavesdrop_destination']['es-mx'] = "Seleccione el Eavesdrop Destino"; //copied from es-cl
$text['description-eavesdrop_destination']['fr-ca'] = "Sélectionnez la destination d'espionnage"; //copied from fr-fr
$text['description-eavesdrop_destination']['fr-fr'] = "Sélectionnez la destination d'espionnage";
$text['description-eavesdrop_destination']['he-il'] = "";
$text['description-eavesdrop_destination']['it-it'] = "Seleziona la Destinazione d'Ascolto";
$text['description-eavesdrop_destination']['nl-nl'] = "Kies afluister bestemming";
$text['description-eavesdrop_destination']['pl-pl'] = "Wybierz destynację podsłuchiwanych rozmów";
$text['description-eavesdrop_destination']['pt-br'] = "Selecione o eavesdrop de destino";
$text['description-eavesdrop_destination']['pt-pt'] = "Selecione o Eavesdrop Destino";
$text['description-eavesdrop_destination']['ro-ro'] = "";
$text['description-eavesdrop_destination']['ru-ru'] = "Выберите подслушивание пункта назначения";
$text['description-eavesdrop_destination']['sv-se'] = "Välj Medlyssning Destination";
$text['description-eavesdrop_destination']['uk-ua'] = "Виберіть пункт призначення підслуховувати";
$text['button-all']['en-us'] = "All";
$text['button-all']['en-gb'] = "All";
$text['button-all']['ar-eg'] = "";
$text['button-all']['de-at'] = "Alle"; //copied from de-de
$text['button-all']['de-ch'] = "Alle"; //copied from de-de
$text['button-all']['de-de'] = "Alle";
$text['button-all']['es-cl'] = "Todos";
$text['button-all']['es-mx'] = "Todos"; //copied from es-cl
$text['button-all']['fr-ca'] = "Tous"; //copied from fr-fr
$text['button-all']['fr-fr'] = "Tous";
$text['button-all']['he-il'] = "הכל";
$text['button-all']['it-it'] = "Tutti";
$text['button-all']['nl-nl'] = "Alle";
$text['button-all']['pl-pl'] = "Wszyscy";
$text['button-all']['pt-br'] = "Tudo"; //copied from pt-pt
$text['button-all']['pt-pt'] = "Tudo";
$text['button-all']['ro-ro'] = "";
$text['button-all']['ru-ru'] = "Все";
$text['button-all']['sv-se'] = "Alla";
$text['button-all']['uk-ua'] = "Всі";
?>
-30
View File
@@ -1,30 +0,0 @@
<?php
$y=0;
$apps[$x]['menu'][$y]['title']['en-us'] = "Operator Panel";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Operator Panel";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "";
$apps[$x]['menu'][$y]['title']['de-at'] = "Bedienfeld";
$apps[$x]['menu'][$y]['title']['de-de'] = "Bedienfeld";
$apps[$x]['menu'][$y]['title']['es-cl'] = "";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "Panneau Operateur";
$apps[$x]['menu'][$y]['title']['he-il'] = "לוח מפעיל";
$apps[$x]['menu'][$y]['title']['it-it'] = "Pannello Operatore";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Bedienings paneel";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Panel operatora";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Painel do operador";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Панель оператора";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Telefonist Panel";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "Панель оператора";
$apps[$x]['menu'][$y]['uuid'] = "dd3d173a-5d51-4231-ab22-b18c5b712bb2";
$apps[$x]['menu'][$y]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['path'] = "/app/basic_operator_panel/index.php";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][$y]['groups'][] = "admin";
?>
-195
View File
@@ -1,195 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('contact_view')) {
//access granted
}
else {
exit;
}
//search term
$term = check_str($_GET['term']);
if (isset($_GET['debug'])) {
echo "Search Term: ".escape($term)."<br><br>";
}
//if term contains spaces, break into array
if (substr_count($term, ' ') > 0) {
$terms = explode(' ', $term);
}
else {
$terms[] = $term;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//retrieve current user's assigned groups (uuids)
foreach ($_SESSION['groups'] as $group_data) {
$user_group_uuids[] = $group_data['group_uuid'];
}
//add user's uuid to group uuid list to include private (non-shared) contacts
$user_group_uuids[] = $_SESSION["user_uuid"];
//create the database object
$database = new database;
//get extensions list
$sql = "select \n";
$sql .= "e.extension, \n";
$sql .= "e.effective_caller_id_name, \n";
$sql .= "concat(e.directory_first_name, ' ', e.directory_last_name) as directory_full_name \n";
$sql .= "from \n";
$sql .= "v_extensions e \n";
$sql .= "where \n";
foreach ($terms as $index => $term) {
$sql .= "( \n";
$sql .= " lower(e.effective_caller_id_name) like lower(:term) or \n";
$sql .= " lower(e.outbound_caller_id_name) like lower(:term) or \n";
$sql .= " lower(concat(e.directory_first_name, ' ', e.directory_last_name)) like lower(:term) or \n";
$sql .= " lower(e.description) like lower(:term) or \n";
$sql .= " lower(e.call_group) like lower(:term) or \n";
$sql .= " e.extension like :term \n";
$sql .= ") \n";
if ($index + 1 < sizeof($terms)) {
$sql .= " and \n";
}
}
$sql .= "and e.domain_uuid = :domain_uuid \n";
$sql .= "and e.enabled = 'true' \n";
$sql .= "order by \n";
$sql .= "directory_full_name asc, \n";
$sql .= "e.effective_caller_id_name asc \n";
if (isset($_GET['debug'])) { echo $sql."<br><br>"; }
$parameters['term'] = '%'.$term.'%';
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$result = $database->select($sql, $parameters, 'all');
unset ($parameters, $sql);
if (is_array($result)) {
if (isset($_GET['debug'])) { echo $result."<br><br>"; }
foreach($result as $row) {
if ($row['directory_full_name'] != '') { $values[] = $row['directory_full_name']; }
if ($row['effective_caller_id_name'] != '') { $values[] = $row['effective_caller_id_name']; }
$suggestions[] = "{ \"label\": \"".(implode(', ', $values)." @ ".$row['extension'])."\", \"value\": \"".$row['extension']."\" }";
unset($values);
}
unset($sql, $result, $row_count);
}
//get contacts list
$sql = "select \n";
$sql .= "c.contact_organization, \n";
$sql .= "c.contact_name_given, \n";
$sql .= "c.contact_name_middle, \n";
$sql .= "c.contact_name_family, \n";
$sql .= "c.contact_nickname, \n";
$sql .= "p.phone_number, \n";
$sql .= "p.phone_label \n";
$sql .= "from \n";
$sql .= "v_contacts as c, \n";
$sql .= "v_contact_phones as p \n";
$sql .= "where \n";
foreach ($terms as $index => $term) {
$sql .= "( \n";
$sql .= " lower(c.contact_organization) like lower(:term) or \n";
$sql .= " lower(c.contact_name_given) like lower(:term) or \n";
$sql .= " lower(c.contact_name_middle) like lower(:term) or \n";
$sql .= " lower(c.contact_name_family) like lower(:term) or \n";
$sql .= " lower(c.contact_nickname) like lower(:term) or \n";
$sql .= " p.phone_number like :term \n";
$sql .= ") \n";
if ($index + 1 < sizeof($terms)) {
$sql .= " and \n";
}
}
$sql .= "and c.contact_uuid = p.contact_uuid \n";
$sql .= "and c.domain_uuid = :domain_uuid \n";
if (sizeof($user_group_uuids) > 0) {
$sql .= "and ( \n"; //only contacts assigned to current user's group(s) and those not assigned to any group
$sql .= " c.contact_uuid in ( \n";
$sql .= " select contact_uuid from v_contact_groups \n";
$sql .= " where group_uuid in ('".implode("','", $user_group_uuids)."') \n";
$sql .= " and domain_uuid = :domain_uuid \n";
$sql .= " ) \n";
$sql .= " or \n";
$sql .= " c.contact_uuid not in ( \n";
$sql .= " select contact_uuid from v_contact_groups \n";
$sql .= " where domain_uuid = :domain_uuid \n";
$sql .= " ) \n";
$sql .= ") \n";
}
$sql .= "and p.phone_type_voice = 1 \n";
$sql .= "order by \n";
$sql .= "contact_organization desc, \n";
$sql .= "contact_name_given asc, \n";
$sql .= "contact_name_family asc \n";
if (isset($_GET['debug'])) { echo $sql."<br><br>"; }
$parameters['term'] = '%'.$term.'%';
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$result = $database->select($sql, $parameters, 'all');
unset ($parameters, $sql);
if (is_array($result)) {
foreach($result as $row) {
if ($row['contact_organization'] != '') { $values[] = $row['contact_organization']; }
if ($row['contact_name_given'] != '') { $names = $row['contact_name_given']; }
if ($row['contact_name_middle'] != '') { $names .= " ".$row['contact_name_middle']; }
if ($row['contact_name_family'] != '') { $names .= " ".$row['contact_name_family']; }
if ($names != '') { $values[] = $names; }
if ($row['contact_nickname'] != '') { $values[] = $row['contact_nickname']; }
$suggestions[] = "{ \"label\": \"".(implode(', ', $values)." - ".format_phone($row['phone_number']).(($row['phone_label'] != '') ? " (".$row['phone_label'].")" : null))."\", \"value\": \"".$row['phone_number']."\" }";
unset($values, $names);
}
unset($sql, $result, $row_count);
}
//output suggestions, if any
if (sizeof($suggestions) > 0) {
$resp .= "[\n";
$resp .= implode(",\n", $suggestions)."\n";
$resp .= "]";
if (isset($_GET['debug'])) { echo "<pre>"; }
echo $resp;
if (isset($_GET['debug'])) { echo "</pre>"; }
}
?>
-124
View File
@@ -1,124 +0,0 @@
<?php
/* $Id$ */
/*
v_exec.php
Copyright (C) 2008-2019 Mark J Crane
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('operator_panel_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//authorized referrer
// if(stristr($_SERVER["HTTP_REFERER"], '/index.php') === false) {
// if(stristr($_SERVER["HTTP_REFERER"], '/index_inc.php') === false) {
// echo " access denied";
// exit;
// }
// }
//process the requests
if (count($_GET) > 0) {
//set the variables
$switch_cmd = trim($_GET["cmd"]);
$action = trim($_GET["action"]);
$data = trim($_GET["data"]);
$direction = trim($_GET["direction"]);
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//allow specific commands
if (strlen($switch_cmd) > 0) {
$api_cmd = '';
$uuid_pattern = '/[^-A-Fa-f0-9]/';
$num_pattern = '/[^-A-Za-z0-9()*#]/';
if ($switch_cmd == 'originate') {
$source = preg_replace($num_pattern,'',$_GET['source']);
$destination = preg_replace($num_pattern,'',$_GET['destination']);
$api_cmd = 'bgapi originate {sip_auto_answer=true,origination_caller_id_number=' . $source . ',sip_h_Call-Info=_undef_}user/' . $source . '@' . $_SESSION['domain_name'] . ' ' . $destination . ' XML ' . trim($_SESSION['user_context']);
} elseif ($switch_cmd == 'uuid_record') {
$uuid = preg_replace($uuid_pattern,'',$_GET['uuid']);
$api_cmd = 'uuid_record ' . $uuid . ' start ' . $_SESSION['switch']['recordings']['dir'] . '/' . $_SESSION['domain_name'] . '/archive/' . date('Y/M/d') . '/' . $uuid . '.wav';
} elseif ($switch_cmd == 'uuid_transfer') {
$uuid = preg_replace($uuid_pattern,'',$_GET['uuid']);
$destination = preg_replace($num_pattern,'',$_GET['destination']);
$api_cmd = 'uuid_transfer ' . $uuid . ' ' . $destination . ' XML ' . trim($_SESSION['user_context']);
} elseif ($switch_cmd == 'uuid_eavesdrop') {
$chan_uuid = preg_replace($uuid_pattern,'',$_GET['chan_uuid']);
$ext = preg_replace($num_pattern,'',$_GET['ext']);
$destination = preg_replace($num_pattern,'',$_GET['destination']);
$language = new text;
$text = $language->get();
$api_cmd = 'bgapi originate {origination_caller_id_name=' . $text['label-eavesdrop'] . ',origination_caller_id_number=' . $ext . '}user/' . $destination . '@' . $_SESSION['domain_name'] . ' &eavesdrop(' . $chan_uuid . ')';
} elseif ($switch_cmd == 'uuid_kill') {
$call_id = preg_replace($uuid_pattern,'',$_GET['call_id']);
$api_cmd = 'uuid_kill ' . $call_id;
} else {
echo 'access denied';
return;
}
//run the command
$switch_result = event_socket_request($fp, 'api '.$api_cmd);
/*
//record stop
if ($action == "record") {
if (trim($_GET["action2"]) == "stop") {
$x=0;
while (true) {
if ($x > 0) {
$dest_file = $_SESSION['switch']['recordings']['dir']."/archive/".date("Y")."/".date("M")."/".date("d")."/".$_GET["uuid"]."_".$x.".wav";
}
else {
$dest_file = $_SESSION['switch']['recordings']['dir']."/archive/".date("Y")."/".date("M")."/".date("d")."/".$_GET["uuid"].".wav";
}
if (!file_exists($dest_file)) {
rename($_SESSION['switch']['recordings']['dir']."/archive/".date("Y")."/".date("M")."/".date("d")."/".$_GET["uuid"].".wav", $dest_file);
break;
}
$x++;
}
}
}
*/
}
}
?>
-599
View File
@@ -1,599 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Luis Daniel Lucio Quiroz <dlucio@okay.com.mx>
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('operator_panel_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//set user status
if (isset($_REQUEST['status']) && $_REQUEST['status'] != '') {
//validate the user status
$user_status = $_REQUEST['status'];
switch ($user_status) {
case "Available" :
break;
case "Available (On Demand)" :
break;
case "On Break" :
break;
case "Do Not Disturb" :
break;
case "Logged Out" :
break;
default :
$user_status = '';
}
//update the status
if (permission_exists("user_setting_edit")) {
//add the user_edit permission
$p = new permissions;
$p->add("user_edit", "temp");
//update the database user_status
$array['users'][0]['user_uuid'] = $_SESSION['user']['user_uuid'];
$array['users'][0]['domain_uuid'] = $_SESSION['user']['domain_uuid'];
$array['users'][0]['user_status'] = $user_status;
$database = new database;
$database->app_name = 'operator_panel';
$database->app_uuid = 'dd3d173a-5d51-4231-ab22-b18c5b712bb2';
$database->save($array);
//remove the temporary permission
$p->delete("user_edit", "temp");
unset($array);
}
//if call center app is installed then update the user_status
if (is_dir($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/app/call_centers')) {
//get the call center agent uuid
$sql = "select call_center_agent_uuid from v_call_center_agents ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and user_uuid = :user_uuid ";
$parameters['domain_uuid'] = $_SESSION['user']['domain_uuid'];
$parameters['user_uuid'] = $_SESSION['user']['user_uuid'];
$database = new database;
$call_center_agent_uuid = $database->select($sql, $parameters, 'column');
unset($sql, $parameters);
//update the user_status
if (is_uuid($call_center_agent_uuid)) {
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
$switch_cmd .= "callcenter_config agent set status ".$call_center_agent_uuid." '".$user_status."'";
$switch_result = event_socket_request($fp, 'api '.$switch_cmd);
}
//update the user state
if (is_uuid($call_center_agent_uuid)) {
$cmd = "api callcenter_config agent set state ".$call_center_agent_uuid." Waiting";
$response = event_socket_request($fp, $cmd);
}
//update do not disturb
if ($user_status == "Do Not Disturb") {
$x = 0;
foreach($_SESSION['user']['extension'] as $row) {
//build the array
$array['extensions'][$x]['extension_uuid'] = $row['extension_uuid'];
$array['extensions'][$x]['dial_string'] = '!USER_BUSY';
$array['extensions'][$x]['do_not_disturb'] = 'true';
//delete extension from the cache
$cache = new cache;
$cache->delete("directory:".$row['extension']."@".$_SESSION['user']['domain_name']);
if(strlen($number_alias) > 0){
$cache->delete("directory:".$row['number_alias']."@".$_SESSION['user']['domain_name']);
}
//incrment
$x++;
}
}
else {
$x = 0;
foreach($_SESSION['user']['extension'] as $row) {
//build the array
$array['extensions'][$x]['extension_uuid'] = $row['extension_uuid'];
$array['extensions'][$x]['dial_string'] = null;
$array['extensions'][$x]['do_not_disturb'] = 'false';
//delete extension from the cache
$cache = new cache;
$cache->delete("directory:".$row['extension']."@".$_SESSION['user']['domain_name']);
if(strlen($number_alias) > 0){
$cache->delete("directory:".$row['number_alias']."@".$_SESSION['user']['domain_name']);
}
//incrment
$x++;
}
}
//grant temporary permissions
$p = new permissions;
$p->add('extension_edit', 'temp');
//execute update
$database = new database;
$database->app_name = 'calls';
$database->app_uuid = '19806921-e8ed-dcff-b325-dd3e5da4959d';
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('extension_edit', 'temp');
//delete extension from the cache
$cache = new cache;
$cache->delete("directory:".$extension."@".$this->domain_name);
if(strlen($number_alias) > 0){
$cache->delete("directory:".$number_alias."@".$this->domain_name);
}
}
//stop execution
exit;
}
//set the title
$document['title'] = $text['title-operator_panel'];
//include the header
require_once "resources/header.php";
?>
<!-- virtual_drag function holding elements -->
<input type='hidden' class='formfld' id='vd_call_id' value=''>
<input type='hidden' class='formfld' id='vd_ext_from' value=''>
<input type='hidden' class='formfld' id='vd_ext_to' value=''>
<input type='hidden' class='formfld' id='sort1' value=''>
<!-- autocomplete for contact lookup -->
<link rel="stylesheet" type="text/css" href="<?php echo PROJECT_PATH; ?>/resources/jquery/jquery-ui.min.css">
<script language="JavaScript" type="text/javascript" src="<?php echo PROJECT_PATH; ?>/resources/jquery/jquery-ui.min.js"></script>
<script type="text/javascript">
<?php
//determine refresh rate
$refresh_default = 1500; //milliseconds
$refresh = is_numeric($_SESSION['operator_panel']['refresh']['numeric']) ? $_SESSION['operator_panel']['refresh']['numeric'] : $refresh_default;
if ($refresh >= 0.5 && $refresh <= 120) { //convert seconds to milliseconds
$refresh = $refresh * 1000;
}
else if ($refresh < 0.5 || ($refresh > 120 && $refresh < 500)) {
$refresh = $refresh_default; //use default
}
else {
//>= 500, must be milliseconds
}
unset($refresh_default);
?>
//ajax refresh
var refresh = <?php echo $refresh; ?>;
var source_url = 'resources/content.php?' <?php if (isset($_GET['debug'])) { echo " + '&debug'"; } ?>;
var interval_timer_id;
function loadXmlHttp(url, id) {
var f = this;
f.xmlHttp = null;
/*@cc_on @*/ // used here and below, limits try/catch to those IE browsers that both benefit from and support it
/*@if(@_jscript_version >= 5) // prevents errors in old browsers that barf on try/catch & problems in IE if Active X disabled
try {f.ie = window.ActiveXObject}catch(e){f.ie = false;}
@end @*/
if (window.XMLHttpRequest&&!f.ie||/^http/.test(window.location.href))
f.xmlHttp = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari, others, IE 7+ when live - this is the standard method
else if (/(object)|(function)/.test(typeof createRequest))
f.xmlHttp = createRequest(); // ICEBrowser, perhaps others
else {
f.xmlHttp = null;
// Internet Explorer 5 to 6, includes IE 7+ when local //
/*@cc_on @*/
/*@if(@_jscript_version >= 5)
try{f.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}
catch (e){try{f.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){f.xmlHttp=null;}}
@end @*/
}
if(f.xmlHttp != null){
f.el = document.getElementById(id);
f.xmlHttp.open("GET",url,true);
f.xmlHttp.onreadystatechange = function(){f.stateChanged();};
f.xmlHttp.send(null);
}
}
loadXmlHttp.prototype.stateChanged=function () {
var url = new URL(this.xmlHttp.responseURL);
if (/login\.php$/.test(url.pathname)) {
// You are logged out. Stop refresh!
refresh_stop();
url.searchParams.set('path', '<?php echo $_SERVER['REQUEST_URI']; ?>');
window.location.href = url.href;
return;
}
if (this.xmlHttp.readyState == 4 && (this.xmlHttp.status == 200 || !/^http/.test(window.location.href)))
//this.el.innerHTML = this.xmlHttp.responseText;
document.getElementById('ajax_reponse').innerHTML = this.xmlHttp.responseText;
if (document.getElementById('sort')) {
if (document.getElementById('sort').value != "")
document.getElementById('sort1').value=document.getElementById('sort').value;
}
}
var requestTime = function() {
var url = source_url;
url += '&vd_ext_from=' + document.getElementById('vd_ext_from').value;
url += '&vd_ext_to=' + document.getElementById('vd_ext_to').value;
url += '&group=' + ((document.getElementById('group')) ? document.getElementById('group').value : '');
url += '&extension_filter=' + ((document.getElementById('extension_filter')) ? document.getElementById('extension_filter').value : '');
url += '&name_filter=' + ((document.getElementById('name_filter')) ? document.getElementById('name_filter').value : '');
url += '&eavesdrop_dest=' + ((document.getElementById('eavesdrop_dest')) ? document.getElementById('eavesdrop_dest').value : '');
if (document.getElementById('sort1'))
if (document.getElementById('sort1').value == '1') url += '&sort';
<?php
if (isset($_GET['debug'])) {
echo "url += '&debug';";
}
?>
new loadXmlHttp(url, 'ajax_reponse');
refresh_start();
}
if (window.addEventListener) {
window.addEventListener('load', requestTime, false);
}
else if (window.attachEvent) {
window.attachEvent('onload', requestTime);
}
//drag/drop functionality
var ie_workaround = false;
function drag(ev, from_ext) {
refresh_stop();
try {
ev.dataTransfer.setData("Call", ev.target.id);
ev.dataTransfer.setData("From", from_ext);
virtual_drag_reset();
}
catch (err) {
// likely internet explorer being used, do workaround
virtual_drag(ev.target.id, from_ext);
ie_workaround = true;
}
}
function allowDrop(ev, target_id) {
ev.preventDefault();
}
function discardDrop(ev, target_id) {
ev.preventDefault();
}
function drop(ev, to_ext) {
ev.preventDefault();
if (ie_workaround) { // potentially set on drag() function above
var call_id = document.getElementById('vd_call_id').value;
var from_ext = document.getElementById('vd_ext_from').value;
virtual_drag_reset();
}
else {
var call_id = ev.dataTransfer.getData("Call");
var from_ext = ev.dataTransfer.getData("From");
}
var to_ext = to_ext;
var cmd;
if (call_id != '') {
cmd = get_transfer_cmd(call_id, to_ext); //transfer a call
}
else {
if (from_ext != to_ext) { // prevent user from dragging extention onto self
cmd = get_originate_cmd(from_ext, to_ext); //make a call
}
}
if (cmd != '') { send_cmd(cmd) }
refresh_start();
}
//refresh controls
function refresh_stop() {
clearInterval(interval_timer_id);
if (document.getElementById('refresh_state')) { document.getElementById('refresh_state').innerHTML = "<img src='resources/images/refresh_paused.png' style='width: 16px; height: 16px; border: none; margin-top: 1px; cursor: pointer;' onclick='refresh_start();' alt=\"<?php echo $text['label-refresh_enable']?>\" title=\"<?php echo $text['label-refresh_enable']?>\">"; }
}
function refresh_start() {
if (document.getElementById('refresh_state')) { document.getElementById('refresh_state').innerHTML = "<img src='resources/images/refresh_active.gif' style='width: 16px; height: 16px; border: none; margin-top: 3px; cursor: pointer;' alt=\"<?php echo $text['label-refresh_pause']?>\" title=\"<?php echo $text['label-refresh_pause']?>\">"; }
refresh_stop();
interval_timer_id = setInterval( function() {
url = source_url;
url += '&vd_ext_from=' + document.getElementById('vd_ext_from').value;
url += '&vd_ext_to=' + document.getElementById('vd_ext_to').value;
url += '&group=' + ((document.getElementById('group')) ? document.getElementById('group').value : '');
url += '&extension_filter=' + ((document.getElementById('extension_filter')) ? document.getElementById('extension_filter').value : '');
url += '&name_filter=' + ((document.getElementById('name_filter')) ? document.getElementById('name_filter').value : '');
url += '&eavesdrop_dest=' + ((document.getElementById('eavesdrop_dest')) ? document.getElementById('eavesdrop_dest').value : '');
if (document.getElementById('sort1'))
if (document.getElementById('sort1').value == '1') url += '&sort';
<?php
if (isset($_GET['debug'])) {
echo "url += '&debug';";
}
?>
new loadXmlHttp(url, 'ajax_reponse');
}, refresh);
}
//call or transfer to destination
function go_destination(from_ext, destination, which, call_id) {
call_id = typeof call_id !== 'undefined' ? call_id : '';
if (destination != '') {
if (!isNaN(parseFloat(destination)) && isFinite(destination)) {
if (call_id == '') {
cmd = get_originate_cmd(from_ext, destination); //make a call
}
else {
cmd = get_transfer_cmd(call_id, destination);
}
if (cmd != '') {
send_cmd(cmd);
$('#destination_'+from_ext+'_'+which).removeAttr('onblur');
toggle_destination(from_ext, which);
}
}
}
}
//hangup call
function hangup_call(call_id) {
if (call_id != '') {
send_cmd('exec.php?cmd=uuid_kill&call_id=' + call_id)
}
}
//eavesdrop call
function eavesdrop_call(ext, chan_uuid) {
if (ext != '' && chan_uuid != '') {
cmd = get_eavesdrop_cmd(ext, chan_uuid, document.getElementById('eavesdrop_dest').value);
if (cmd != '') {
send_cmd(cmd)
}
}
}
//record call
function record_call(chan_uuid) {
if (chan_uuid != '') {
cmd = get_record_cmd(chan_uuid);
if (cmd != '') {
send_cmd(cmd);
}
}
}
//used by call control and ajax refresh functions
function send_cmd(url) {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",url,false);
xmlhttp.send(null);
document.getElementById('cmd_reponse').innerHTML=xmlhttp.responseText;
}
//hide/show destination input field
function toggle_destination(ext, which) {
refresh_stop();
if (which == 'call') {
if ($('#destination_'+ext+'_call').is(':visible')) {
$('#destination_'+ext+'_call').val('');
$('#destination_'+ext+'_call').autocomplete('destroy');
$('#destination_'+ext+'_call').hide(0, function() {
$('.call_control').children().attr('onmouseout', "refresh_start();");
$('.destination_control').attr('onmouseout', "refresh_start();");
refresh_start();
});
}
else {
$('#destination_'+ext+'_call').show(0, function() {
$('#destination_'+ext+'_call').trigger('focus');
$('#destination_'+ext+'_call').autocomplete({
source: "autocomplete.php",
minLength: 3,
select: function(event, ui) {
$('#destination_'+ext+'_call').val(ui.item.value);
$('#frm_destination_'+ext+'_call').submit();
}
});
$('.call_control').children().removeAttr('onmouseout');
$('.destination_control').removeAttr('onmouseout');
});
}
}
else if (which == 'transfer') {
if ($('#destination_'+ext+'_transfer').is(':visible')) {
$('#destination_'+ext+'_transfer').val('');
$('#destination_'+ext+'_transfer').autocomplete('destroy');
$('#destination_'+ext+'_transfer').hide(0, function() {
$('#op_caller_details_'+ext).show();
$('.call_control').children().attr('onmouseout', "refresh_start();");
$('.destination_control').attr('onmouseout', "refresh_start();");
refresh_start();
});
}
else {
$('#op_caller_details_'+ext).hide(0, function() {
$('#destination_'+ext+'_transfer').show(0, function() {
$('#destination_'+ext+'_transfer').trigger('focus');
$('#destination_'+ext+'_transfer').autocomplete({
source: "autocomplete.php",
minLength: 3,
select: function(event, ui) {
$('#destination_'+ext+'_transfer').val(ui.item.value);
$('#frm_destination_'+ext+'_transfer').submit();
}
});
$('.call_control').children().removeAttr('onmouseout');
$('.destination_control').removeAttr('onmouseout');
});
});
}
}
}
function get_transfer_cmd(uuid, destination) {
url = "exec.php?cmd=uuid_transfer&uuid=" + uuid + "&destination=" + destination
return url;
}
function get_originate_cmd(source, destination) {
url = "exec.php?cmd=originate&source=" + source + "&destination=" + destination
return url;
}
function get_eavesdrop_cmd(ext, chan_uuid, destination) {
url = "exec.php?cmd=uuid_eavesdrop&ext=" + ext + "&chan_uuid=" + chan_uuid + "&destination=" + destination;
return url;
}
function get_record_cmd(uuid) {
url = "exec.php?cmd=uuid_record&uuid=" + uuid;
return url;
}
//virtual functions
function virtual_drag(call_id, ext) {
if (document.getElementById('vd_ext_from').value != '' && document.getElementById('vd_ext_to').value != '') {
virtual_drag_reset();
}
if (call_id != '') {
document.getElementById('vd_call_id').value = call_id;
}
if (ext != '') {
if (document.getElementById('vd_ext_from').value == '') {
document.getElementById('vd_ext_from').value = ext;
document.getElementById(ext).style.borderStyle = 'dotted';
if (document.getElementById('vd_ext_to').value != '') {
document.getElementById(document.getElementById('vd_ext_to').value).style.borderStyle = '';
document.getElementById('vd_ext_to').value = '';
}
}
else {
document.getElementById('vd_ext_to').value = ext;
if (document.getElementById('vd_ext_from').value != document.getElementById('vd_ext_to').value) {
if (document.getElementById('vd_call_id').value != '') {
cmd = get_transfer_cmd(document.getElementById('vd_call_id').value, document.getElementById('vd_ext_to').value); //transfer a call
}
else {
cmd = get_originate_cmd(document.getElementById('vd_ext_from').value, document.getElementById('vd_ext_to').value); //originate a call
}
if (cmd != '') {
//alert(cmd);
send_cmd(cmd);
}
}
virtual_drag_reset();
}
}
}
function virtual_drag_reset(vd_var) {
if (!(vd_var === undefined)) {
document.getElementById(vd_var).value = '';
}
else {
document.getElementById('vd_call_id').value = '';
if (document.getElementById('vd_ext_from').value != '') {
document.getElementById(document.getElementById('vd_ext_from').value).style.borderStyle = '';
document.getElementById('vd_ext_from').value = '';
}
if (document.getElementById('vd_ext_to').value != '') {
document.getElementById(document.getElementById('vd_ext_to').value).style.borderStyle = '';
document.getElementById('vd_ext_to').value = '';
}
}
}
</script>
<style type="text/css">
TABLE {
border-spacing: 0px;
border-collapse: collapse;
border: none;
}
</style>
<?php
//create simple array of users own extensions
unset($_SESSION['user']['extensions']);
if (is_array($_SESSION['user']['extension'])) {
foreach ($_SESSION['user']['extension'] as $assigned_extensions) {
$_SESSION['user']['extensions'][] = $assigned_extensions['user'];
}
}
?>
<div id='ajax_reponse'></div>
<div id='cmd_reponse' style='display: none;'></div>
<br><br>
<?php
//include the footer
require_once "resources/footer.php";
?>
@@ -1,257 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
/**
* Define the operator_panel class
*/
if (!class_exists('basic_operator_panel')) {
class basic_operator_panel {
/**
* Define the variables
*/
public $domain_uuid;
/**
* Called when the object is created
*/
public function __construct() {
if (!isset($this->domain_uuid)) {
$this->domain_uuid = $_SESSION['domain_uuid'];
}
}
/**
* Called when there are no references to a particular object
* unset the variables used in the class
*/
public function __destruct() {
foreach ($this as $key => $value) {
unset($this->$key);
}
}
/**
* Get the call activity
*/
public function call_activity() {
//define the global variable
global $ext_user_status;
//get the extensions and their user status
$sql = "select ";
$sql .= "e.extension, ";
$sql .= "e.number_alias, ";
$sql .= "e.effective_caller_id_name, ";
$sql .= "lower(e.effective_caller_id_name) as filter_name, ";
$sql .= "e.effective_caller_id_number, ";
$sql .= "e.call_group, ";
$sql .= "e.description, ";
$sql .= "u.user_uuid, ";
$sql .= "u.user_status ";
$sql .= "from ";
$sql .= "v_extensions as e ";
$sql .= "left outer join v_extension_users as eu on ( eu.extension_uuid = e.extension_uuid and eu.domain_uuid = :domain_uuid ) ";
$sql .= "left outer join v_users as u on ( u.user_uuid = eu.user_uuid and u.domain_uuid = :domain_uuid ) ";
$sql .= "where ";
$sql .= "e.enabled = 'true' and ";
$sql .= "e.domain_uuid = :domain_uuid ";
$sql .= "order by ";
$sql .= "e.extension asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$extensions = $database->select($sql, $parameters);
//store extension status by user uuid
if (isset($extensions)) {
foreach($extensions as &$row) {
if ($row['user_uuid'] != '') {
$ext_user_status[$row['user_uuid']] = $row['user_status'];
unset($row['user_status']);
}
}
}
//send the command
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
$switch_result = event_socket_request($fp, 'api show channels as json');
$json_array = json_decode($switch_result, true);
}
//build the response
$x = 0;
if (isset($extensions)) {
foreach($extensions as &$row) {
$user = $row['extension'];
if (strlen($row['number_alias']) >0 ) {
$user = $row['number_alias'];
}
//add the extension details
$array[$x] = $row;
//set the call detail defaults
$array[$x]["uuid"] = null;
$array[$x]["direction"] = null;
$array[$x]["created"] = null;
$array[$x]["created_epoch"] = null;
$array[$x]["name"] = null;
$array[$x]["state"] = null;
$array[$x]["cid_name"] = null;
$array[$x]["cid_num"] = null;
$array[$x]["ip_addr"] = null;
$array[$x]["dest"] = null;
$array[$x]["application"] = null;
$array[$x]["application_data"] = null;
$array[$x]["dialplan"] = null;
$array[$x]["context"] = null;
$array[$x]["read_codec"] = null;
$array[$x]["read_rate"] = null;
$array[$x]["read_bit_rate"] = null;
$array[$x]["write_codec"] = null;
$array[$x]["write_rate"] = null;
$array[$x]["write_bit_rate"] = null;
$array[$x]["secure"] = null;
$array[$x]["hostname"] = null;
$array[$x]["presence_id"] = null;
$array[$x]["presence_data"] = null;
$array[$x]["callstate"] = null;
$array[$x]["callee_name"] = null;
$array[$x]["callee_num"] = null;
$array[$x]["callee_direction"] = null;
$array[$x]["call_uuid"] = null;
$array[$x]["sent_callee_name"] = null;
$array[$x]["sent_callee_num"] = null;
$array[$x]["destination"] = null;
//add the active call details
$found = false;
if (isset($json_array['rows'])) {
foreach($json_array['rows'] as &$field) {
$presence_id = $field['presence_id'];
$presence = explode("@", $presence_id);
$presence_id = $presence[0];
$presence_domain = $presence[1];
if ($user == $presence_id) {
if ($presence_domain == $_SESSION['domain_name']) {
$found = true;
break;
}
}
}
}
//normalize the array
if ($found) {
$array[$x]["uuid"] = $field['uuid'];
$array[$x]["direction"] = $field['direction'];
$array[$x]["created"] = $field['created'];
$array[$x]["created_epoch"] = $field['created_epoch'];
$array[$x]["name"] = $field['name'];
$array[$x]["state"] = $field['state'];
$array[$x]["cid_name"] = $field['cid_name'];
$array[$x]["cid_num"] = $field['cid_num'];
$array[$x]["ip_addr"] = $field['ip_addr'];
$array[$x]["dest"] = $field['dest'];
$array[$x]["application"] = $field['application'];
$array[$x]["application_data"] = $field['application_data'];
$array[$x]["dialplan"] = $field['dialplan'];
$array[$x]["context"] = $field['context'];
$array[$x]["read_codec"] = $field['read_codec'];
$array[$x]["read_rate"] = $field['read_rate'];
$array[$x]["read_bit_rate"] = $field['read_bit_rate'];
$array[$x]["write_codec"] = $field['write_codec'];
$array[$x]["write_rate"] = $field['write_rate'];
$array[$x]["write_bit_rate"] = $field['write_bit_rate'];
$array[$x]["secure"] = $field['secure'];
$array[$x]["hostname"] = $field['hostname'];
$array[$x]["presence_id"] = $field['presence_id'];
$array[$x]["presence_data"] = $field['presence_data'];
$array[$x]["callstate"] = $field['callstate'];
$array[$x]["callee_name"] = $field['callee_name'];
$array[$x]["callee_num"] = $field['callee_num'];
$array[$x]["callee_direction"] = $field['callee_direction'];
$array[$x]["call_uuid"] = $field['call_uuid'];
$array[$x]["sent_callee_name"] = $field['sent_callee_name'];
$array[$x]["sent_callee_num"] = $field['sent_callee_num'];
$array[$x]["destination"] = $user;
//calculate and set the call length
$call_length_seconds = time() - $array[$x]["created_epoch"];
$call_length_hour = floor($call_length_seconds/3600);
$call_length_min = floor($call_length_seconds/60 - ($call_length_hour * 60));
$call_length_sec = $call_length_seconds - (($call_length_hour * 3600) + ($call_length_min * 60));
$call_length_min = sprintf("%02d", $call_length_min);
$call_length_sec = sprintf("%02d", $call_length_sec);
$call_length = $call_length_hour.':'.$call_length_min.':'.$call_length_sec;
$array[$x]['call_length'] = $call_length;
//send the command
if ($field['state'] != '') {
if ($fp) {
if (is_uuid($field['uuid'])) {
$switch_cmd = 'uuid_dump '.$field['uuid'].' json';
$dump_result = event_socket_request($fp, 'api '.$switch_cmd);
$dump_array = json_decode($dump_result, true);
if (is_array($dump_array)) {
foreach ($dump_array as $dump_var_name => $dump_var_value) {
$array[$x][$dump_var_name] = $dump_var_value;
}
}
}
}
}
}
//increment the row
$x++;
}
}
//reindex array using extension instead of auto-incremented value
$result = array();
if (is_array($array)) {
foreach ($array as $index => $subarray) {
$extension = $subarray['extension'];
if (is_array($subarray)) foreach ($subarray as $field => $value) {
$result[$extension][$field] = $array[$index][$field];
unset($array[$index][$field]);
}
unset($array[$subarray['extension']]['extension']);
unset($array[$index]);
}
}
//return array
return $result;
}
}
}
?>
@@ -1,521 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('operator_panel_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get(null,'app/basic_operator_panel');
//get the call activity
$operator_panel = new basic_operator_panel;
$activity = $operator_panel->call_activity();
if (is_array($activity)) {
foreach ($activity as $extension => $fields) {
if (substr_count($fields['call_group'], ',')) {
$tmp = explode(',', $fields['call_group']);
if (is_array($tmp)) foreach ($tmp as $tmp_index => $tmp_value) {
if (trim($tmp_value) == '') { unset($tmp[$tmp_index]); }
else { $groups[] = $tmp_value; }
}
}
else if ($fields['call_group'] != '') {
$groups[] = $fields['call_group'];
}
}
}
if (is_array($groups)) {
$groups = array_unique($groups);
sort($groups);
}
//prevent warnings
if (!is_array($_SESSION['user']['extensions'])) {
$_SESSION['user']['extensions'] = array();
}
//get registrations -- All SIP profiles
$obj = new registrations;
$registrations = $obj->get("all");
$onhover_pause_refresh = " onmouseover='refresh_stop();' onmouseout='refresh_start();'";
echo "<table width='100%'>";
echo " <tr>";
echo " <td valign='top' align='left' width='50%' nowrap>";
echo " <b>".$text['title-operator_panel']."</b>";
echo " </td>";
echo " <td valign='top' align='center' nowrap>";
if (permission_exists("user_setting_edit") && sizeof($_SESSION['user']['extensions']) > 0) {
$status_options[1]['status'] = "Available";
$status_options[1]['label'] = $text['label-status_available'];
$status_options[1]['style'] = "op_btn_status_available";
if (permission_exists('operator_panel_on_demand')) {
$status_options[2]['status'] = "Available (On Demand)";
$status_options[2]['label'] = $text['label-status_on_demand'];
$status_options[2]['style'] = "op_btn_status_available_on_demand";
}
$status_options[3]['status'] = "On Break";
$status_options[3]['label'] = $text['label-status_on_break'];
$status_options[3]['style'] = "op_btn_status_on_break";
$status_options[4]['status'] = "Do Not Disturb";
$status_options[4]['label'] = $text['label-status_do_not_disturb'];
$status_options[4]['style'] = "op_btn_status_do_not_disturb";
$status_options[5]['status'] = "Logged Out";
$status_options[5]['label'] = $text['label-status_logged_out'];
$status_options[5]['style'] = "op_btn_status_logged_out";
if (is_array($status_options)) foreach ($status_options as $status_option) {
echo " <input type='button' id='".$status_option['style']."' class='btn' value=\"".$status_option['label']."\" onclick=\"send_cmd('index.php?status='+escape('".$status_option['status']."')); this.disabled='disabled'; refresh_start();\" ".$onhover_pause_refresh.">\n";
}
}
echo " </td>";
echo " <td valign='top' align='right' width='50%' nowrap>";
echo " <table cellpadding='0' cellspacing='0' border='0'>";
echo " <tr>";
echo " <td valign='middle' nowrap='nowrap' style='padding-right: 15px' id='refresh_state'>";
echo " <img src='resources/images/refresh_active.gif' style='width: 16px; height: 16px; border: none; margin-top: 3px; cursor: pointer;' onclick='refresh_stop();' alt=\"".$text['label-refresh_pause']."\" title=\"".$text['label-refresh_pause']."\">";
echo " </td>";
if (permission_exists('operator_panel_eavesdrop')) {
echo " <td valign='top' nowrap='nowrap'>";
if (sizeof($_SESSION['user']['extensions']) > 1) {
echo " <input type='hidden' id='eavesdrop_dest' value=\"".(($_REQUEST['eavesdrop_dest'] == '') ? $_SESSION['user']['extension'][0]['destination'] : escape($_REQUEST['eavesdrop_dest']))."\">";
echo " <img src='resources/images/eavesdrop.png' style='width: 12px; height: 12px; border: none; margin: 0px 5px; cursor: help;' title='".$text['description-eavesdrop_destination']."' align='absmiddle'>";
echo " <select class='formfld' style='margin-right: 5px;' align='absmiddle' onchange=\"document.getElementById('eavesdrop_dest').value = this.options[this.selectedIndex].value; refresh_start();\" onfocus='refresh_stop();'>\n";
if (is_array($_SESSION['user']['extensions'])) foreach ($_SESSION['user']['extensions'] as $user_extension) {
echo " <option value='".escape($user_extension)."' ".(($_REQUEST['eavesdrop_dest'] == $user_extension) ? "selected" : null).">".escape($user_extension)."</option>\n";
}
echo " </select>\n";
}
else if (sizeof($_SESSION['user']['extensions']) == 1) {
echo " <input type='hidden' id='eavesdrop_dest' value=\"".escape($_SESSION['user']['extension'][0]['destination'])."\">";
}
echo " </td>";
}
if (is_array($groups) && @sizeof($groups) > 0) {
echo " <td valign='top' nowrap='nowrap'>";
echo " <input type='hidden' id='group' value=\"".escape($_REQUEST['group'])."\">";
if (sizeof($groups) > 5) {
//show select box
echo " <select class='formfld' onchange=\"document.getElementById('group').value = this.options[this.selectedIndex].value; refresh_start();\" onfocus='refresh_stop();'>\n";
echo " <option value='' ".(($_REQUEST['group'] == '') ? "selected" : null).">".$text['label-call_group']."</option>";
echo " <option value=''>".$text['button-all']."</option>";
if (is_array($groups)) foreach ($groups as $group) {
echo " <option value='".escape($group)."' ".(($_REQUEST['group'] == $group) ? "selected" : null).">".escape($group)."</option>\n";
}
echo " </select>\n";
}
else {
//show buttons
echo " <input type='button' class='btn' title=\"".$text['label-call_group']."\" value=\"".$text['button-all']."\" onclick=\"document.getElementById('group').value = '';\" ".$onhover_pause_refresh.">";
if (is_array($groups)) foreach ($groups as $group) {
echo " <input type='button' class='btn' title=\"".$text['label-call_group']."\" value=\"".escape($group)."\" ".(($_REQUEST['group'] == $group) ? "disabled='disabled'" : null)." onclick=\"document.getElementById('group').value = this.value;\" ".$onhover_pause_refresh.">";
}
}
echo " </td>";
}
echo " <td valign='top' nowrap='nowrap'>";
echo " <input type='hidden' id='extension_filter' value=\"".escape($_REQUEST['extension_filter'])."\">";
echo " <input type='hidden' id='name_filter' value=\"".strtolower(escape($_REQUEST['name_filter']))."\">";
echo " <input type='text' class='formfld' placeholder='Filter Extension' value=\"".escape($_REQUEST['extension_filter'])."\" onkeyup=\"document.getElementById('extension_filter').value = this.value; refresh_start();\" onfocus='refresh_stop();'>\n";
echo " <input type='text' class='formfld' placeholder='Filter Name' value=\"".strtolower(escape($_REQUEST['name_filter']))."\" onkeyup=\"document.getElementById('name_filter').value = this.value; refresh_start();\" onfocus='refresh_stop();'>\n";
echo " <input type='button' class='btn' title=\"Clear\" value=\"Clear\" onclick=\"document.getElementById('extension_filter').value = ''; document.getElementById('name_filter').value = '';\" ".$onhover_pause_refresh.">";
echo " </td>";
echo " </tr>";
echo " </table>";
echo " </td>";
echo " </tr>";
echo "</table>";
echo "<br>";
// Define the arrays to ensure no errors are omitted below with the sizeof operators
$user_extensions = array();
$grouped_extensions = array();
$other_extensions = array();
if (is_array($activity)) foreach ($activity as $extension => $ext) {
unset($block);
//filter by group, if defined
if ($_REQUEST['group'] != '' && substr_count($ext['call_group'], $_REQUEST['group']) == 0 && !in_array($extension, $_SESSION['user']['extensions'])) { continue; }
//filter by extension or name, if defined
if ($_REQUEST['extension_filter'] != '' && substr_count($ext['extension'], $_REQUEST['extension_filter']) == 0 && !in_array($extension, $_SESSION['user']['extensions'])) { continue; }
if ($_REQUEST['name_filter'] != '' && substr_count($ext['filter_name'], $_REQUEST['name_filter']) == 0 && !in_array($extension, $_SESSION['user']['extensions'])) { continue; }
//check if feature code being called
$format_number = (substr($ext['dest'], 0, 1) == '*') ? false : true;
//determine extension state, direction icon, and displayed name/number for caller/callee
if ($ext['state'] == 'CS_EXECUTE') {
if (($ext['callstate'] == 'RINGING' || $ext['callstate'] == 'EARLY' || $ext['callstate'] == 'RING_WAIT') && $ext['direction'] == 'inbound') {
$ext_state = 'ringing';
}
else if ($ext['callstate'] == 'ACTIVE' && $ext['direction'] == 'outbound') {
$ext_state = 'active';
}
else if ($ext['callstate'] == 'HELD' && $ext['direction'] == 'outbound') {
$ext_state = 'held';
}
else if ($ext['callstate'] == 'RING_WAIT' && $ext['direction'] == 'outbound') {
$ext_state = 'ringing';
}
else if ($ext['callstate'] == 'ACTIVE' && $ext['direction'] == 'inbound') {
$ext_state = 'active';
}
else if ($ext['callstate'] == 'HELD' && $ext['direction'] == 'inbound') {
$ext_state = 'held';
}
if (!$format_number) {
$call_name = 'System';
$call_number = $ext['dest'];
}
else {
$call_name = $activity[$ext['dest']]['effective_caller_id_name'];
$call_number = format_phone($ext['dest']);
}
$dir_icon = 'outbound';
}
else if ($ext['state'] == 'CS_HIBERNATE') {
if ($ext['callstate'] == 'ACTIVE') {
$ext_state = 'active';
if ($ext['direction'] == 'inbound') {
$call_name = $activity[$ext['dest']]['effective_caller_id_name'];
$call_number = format_phone($ext['dest']);
$dir_icon = 'outbound';
}
else if ($ext['direction'] == 'outbound') {
$call_name = $activity[$ext['cid_num']]['effective_caller_id_name'];
$call_number = format_phone($ext['cid_num']);
$dir_icon = 'inbound';
}
}
}
else if ($ext['state'] == 'CS_CONSUME_MEDIA' || $ext['state'] == 'CS_EXCHANGE_MEDIA') {
if ($ext['state'] == 'CS_CONSUME_MEDIA' && $ext['callstate'] == 'RINGING' && $ext['direction'] == 'outbound') {
$ext_state = 'ringing';
}
else if ($ext['state'] == 'CS_EXCHANGE_MEDIA' && $ext['callstate'] == 'ACTIVE' && $ext['direction'] == 'outbound') {
$ext_state = 'active';
}
else if ($ext['state'] == 'CS_CONSUME_MEDIA' && $ext['callstate'] == 'HELD' && $ext['direction'] == 'outbound') {
$ext_state = 'held';
}
else if ($ext['state'] == 'CS_EXCHANGE_MEDIA' && $ext['callstate'] == 'HELD' && $ext['direction'] == 'outbound') {
$ext_state = 'held';
}
$dir_icon = 'inbound';
$call_name = $activity[$ext['cid_num']]['effective_caller_id_name'];
$call_number = format_phone($ext['cid_num']);
}
else {
unset($ext_state, $dir_icon, $call_name, $call_number);
}
//determin extension register status
$extension_number = $extension.'@'.$_SESSION['domain_name'];
$found_count = 0;
if (is_array($registrations)) {
foreach ($registrations as $array) {
if ($extension_number == $array['user']) {
$found_count++;
}
}
}
if ($found_count > 0) {
//determine block style by state (if any) and register status
$style = ($ext_state != '') ? "op_ext op_state_".$ext_state : "op_ext";
} else {
$style = "off_ext";
}
unset($extension_number, $found_count, $array);
//determine the call identifier passed on drop
if ($ext['uuid'] == $ext['call_uuid'] && $ext['variable_bridge_uuid'] == '') { // transfer an outbound internal call
$call_identifier = $activity[$call_number]['uuid'];
}
else if (($ext['variable_call_direction'] == 'outbound' || $ext['variable_call_direction'] == 'local') && $ext['variable_bridge_uuid'] != '') { // transfer an outbound external call
$call_identifier = $ext['variable_bridge_uuid'];
}
else {
if( $ext['call_uuid'] ) {
$call_identifier = $ext['call_uuid']; // transfer all other call types
}
else {
$call_identifier = $ext['uuid']; // e.g. voice menus
}
}
//determine extension draggable state
if (permission_exists('operator_panel_manage')) {
if (!in_array($extension, $_SESSION['user']['extensions'])) {
//other extension
if ($ext_state == "ringing") {
if ($_GET['vd_ext_from'] == '' && $dir_icon == 'inbound') {
$draggable = true; // selectable - is ringing and not outbound so can transfer away the call (can set as vd_ext_from)
}
else {
$draggable = false; // unselectable - is ringing so can't send a call to the ext (can't set as vd_ext_to)
}
}
else if ($ext_state == 'active') {
$draggable = false; // unselectable - on a call already so can't transfer or send a call to the ext (can't set as vd_ext_from or vd_ext_to)
}
else { // idle
if ($_GET['vd_ext_from'] == '') {
$draggable = false; // unselectable - is idle, but can't initiate a call from the ext as is not assigned to user (can't set as vd_ext_from)
}
else {
$draggable = true; // selectable - is idle, so can transfer a call in to ext (can set as vd_ext_to).
}
}
}
else {
//user extension
if ($ext['uuid'] != '' && $ext['uuid'] == $ext['call_uuid'] && $ext['variable_bridge_uuid'] == '') {
$draggable = false;
}
else if ($ext_state == 'ringing' && $ext['variable_call_direction'] == 'local') {
$draggable = false;
}
else if ($ext_state != '' && !$format_number) {
$draggable = false;
}
else {
$draggable = true;
}
}
}
else {
$draggable = false;
}
//determine extension (user) status
$ext_status = (in_array($extension, $_SESSION['user']['extensions'])) ? $ext_user_status[$_SESSION['user_uuid']] : $ext_user_status[$ext['user_uuid']];
switch ($ext_status) {
case "Available" :
$status_icon = "available";
$status_hover = $text['label-status_available'];
break;
case "Available (On Demand)" :
$status_icon = "available_on_demand";
$status_hover = $text['label-status_available_on_demand'];
break;
case "On Break" :
$status_icon = "on_break";
$status_hover = $text['label-status_on_break'];
break;
case "Do Not Disturb" :
$status_icon = "do_not_disturb";
$status_hover = $text['label-status_do_not_disturb'];
break;
default :
$status_icon = "logged_out";
$status_hover = $text['label-status_logged_out_or_unknown'];
}
$block .= "<div id='".escape($extension)."' class='".$style."' ".(($_GET['vd_ext_from'] == $extension || $_GET['vd_ext_to'] == $extension) ? "style='border-style: dotted;'" : null)." ".(($ext_state != 'active' && $ext_state != 'ringing') ? "ondrop='drop(event, this.id);' ondragover='allowDrop(event, this.id);' ondragleave='discardDrop(event, this.id);'" : null).">"; // DRAG TO
$block .= "<table class='".$style."'>";
$block .= " <tr>";
$block .= " <td class='op_ext_icon'>";
$block .= " <span name='".escape($extension)."'>"; // DRAG FROM
$block .= "<img id='".escape($call_identifier)."' class='op_ext_icon' src='resources/images/status_".$status_icon.".png' title='".$status_hover."' ".(($draggable) ? "draggable='true' ondragstart=\"drag(event, this.parentNode.getAttribute('name'));\" onclick=\"virtual_drag('".escape($call_identifier)."', '".escape($extension)."');\"" : "onfocus='this.blur();' draggable='false' style='cursor: not-allowed;'").">";
$block .= "</span>";
$block .= " </td>";
$block .= " <td class='op_ext_info ".$style."'>";
if ($dir_icon != '') {
$block .= " <img src='resources/images/".$dir_icon.".png' align='right' style='margin-top: 3px; margin-right: 1px; width: 12px; height: 12px; cursor: help;' draggable='false' alt=\"".$text['label-call_direction']."\" title=\"".$text['label-call_direction']."\">";
}
$block .= " <span class='op_user_info'>";
if ($ext['effective_caller_id_name'] != '' && escape($ext['effective_caller_id_name']) != $extension) {
$block .= " <strong class='strong'>".escape($ext['effective_caller_id_name'])."</strong> (".escape($extension).")";
}
else {
$block .= " <strong class='strong'>".escape($extension)."</strong>";
}
$block .= " </span><br>";
if ($ext_state != '') {
$block .= " <span class='op_caller_info'>";
$block .= " <table align='right'><tr><td style='text-align: right;'>";
$block .= " <span class='op_call_info'>".escape($ext['call_length'])."</span><br>";
$block .= " <span class='call_control'>";
//record
if (permission_exists('operator_panel_record') && $ext_state == 'active') {
$call_identifier_record = $ext['call_uuid'];
$rec_file = $_SESSION['switch']['recordings']['dir']."/".$_SESSION['domain_name']."/archive/".date("Y")."/".date("M")."/".date("d")."/".escape($call_identifier_record).".wav";
if (file_exists($rec_file)) {
$block .= "<img src='resources/images/recording.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: help;' title=\"".$text['label-recording']."\" ".$onhover_pause_refresh.">";
}
else {
$block .= "<img src='resources/images/record.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title=\"".$text['label-record']."\" onclick=\"record_call('".$call_identifier_record."');\" ".$onhover_pause_refresh.">";
}
}
//eavesdrop
if (permission_exists('operator_panel_eavesdrop') && $ext_state == 'active' && sizeof($_SESSION['user']['extensions']) > 0 && !in_array($extension, $_SESSION['user']['extensions'])) {
$block .= "<img src='resources/images/eavesdrop.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title='".$text['label-eavesdrop']."' onclick=\"eavesdrop_call('".escape($ext['destination'])."','".escape($call_identifier)."');\" ".$onhover_pause_refresh.">";
}
//hangup
if (permission_exists('operator_panel_hangup') || in_array($extension, $_SESSION['user']['extensions'])) {
if ($ext['variable_bridge_uuid'] == '' && $ext_state == 'ringing') {
$call_identifier_hangup_uuid = $ext['uuid'];
}
else if ($dir_icon == 'outbound') {
$call_identifier_hangup_uuid = $ext['uuid'];
}
else {
$call_identifier_hangup_uuid = $call_identifier;
}
$block .= "<img src='resources/images/kill.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title='".$text['label-hangup']."' onclick=\"hangup_call('".escape($call_identifier_hangup_uuid)."');\" ".$onhover_pause_refresh.">";
}
$block .= "</span>";
//transfer
if (in_array($extension, $_SESSION['user']['extensions']) && $ext_state == 'active') {
$block .= "<img id='destination_control_".escape($extension)."_transfer' class='destination_control' src='resources/images/keypad_transfer.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' onclick=\"toggle_destination('".escape($extension)."', 'transfer');\" ".$onhover_pause_refresh.">";
}
$block .= " </td></tr></table>";
if (permission_exists('operator_panel_call_details')) {
$block .= " <span id='op_caller_details_".escape($extension)."'><strong>".escape($call_name)."</strong><br>".escape($call_number)."</span>";
}
$block .= " </span>";
//transfer
if (in_array($extension, $_SESSION['user']['extensions']) && $ext_state == 'active') {
$call_identifier_transfer = $ext['variable_bridge_uuid'];
$block .= " <form id='frm_destination_".escape($extension)."_transfer' onsubmit=\"go_destination('".escape($extension)."', document.getElementById('destination_".escape($extension)."_transfer').value, 'transfer', '".escape($call_identifier_transfer)."'); return false;\">";
$block .= " <input type='text' class='formfld' id='destination_".escape($extension)."_transfer' style='width: 100px; min-width: 100px; max-width: 100px; margin-top: 3px; text-align: center; display: none;' onblur=\"toggle_destination('".escape($extension)."', 'transfer');\">";
$block .= " </form>\n";
}
}
else {
//call
if (in_array($extension, $_SESSION['user']['extensions'])) {
$block .= " <img id='destination_control_".escape($extension)."_call' class='destination_control' src='resources/images/keypad_call.png' style='width: 12px; height: 12px; border: none; margin-top: 26px; margin-right: 1px; cursor: pointer;' align='right' onclick=\"toggle_destination('".escape($extension)."', 'call');\" ".$onhover_pause_refresh.">";
$block .= " <form id='frm_destination_".escape($extension)."_call' onsubmit=\"go_destination('".escape($extension)."', document.getElementById('destination_".escape($extension)."_call').value, 'call'); return false;\">";
$block .= " <input type='text' class='formfld' id='destination_".escape($extension)."_call' style='width: 100px; min-width: 100px; max-width: 100px; margin-top: 10px; text-align: center; display: none;' onblur=\"toggle_destination('".escape($extension)."', 'call');\">";
$block .= " </form>\n";
}
}
$block .= " </td>";
$block .= " </tr>";
$block .= "</table>";
if (if_group("superadmin") && isset($_GET['debug'])) {
$block .= "<span style='font-size: 10px;'>";
$block .= "From ID<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: maroon'>".escape($extension)."</strong><br>";
$block .= "uuid<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: ".($call_identifier == $ext['uuid'] ? 'blue' : 'black').";'>".escape($ext['uuid'])."</strong><br>";
$block .= "call_uuid<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: ".($call_identifier == $ext['call_uuid'] ? 'blue' : 'black').";'>".escape($ext['call_uuid'])."</strong><br>";
$block .= "variable_bridge_uuid<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: ".($call_identifier == $ext['variable_bridge_uuid'] ? 'blue' : 'black').";'>".escape($ext['variable_bridge_uuid'])."</strong><br>";
$block .= "direction<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['direction'])."</strong><br>";
$block .= "variable_call_direction<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['variable_call_direction'])."</strong><br>";
$block .= "state<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['state'])."</strong><br>";
$block .= "cid_num<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['cid_num'])."</strong><br>";
$block .= "dest<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['dest'])."</strong><br>";
$block .= "context<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['context'])."</strong><br>";
$block .= "presence_id<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['presence_id'])."</strong><br>";
$block .= "callstate<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong style='color: black;'>".escape($ext['callstate'])."</strong><br>";
$block .= "</span>";
}
$block .= "</div>";
if (in_array($extension, $_SESSION['user']['extensions'])) {
$user_extensions[] = $block;
} elseif (!empty($ext['call_group']) && filter_var($_SESSION['operator_panel']['group_extensions']['boolean'], FILTER_VALIDATE_BOOLEAN)) {
$grouped_extensions[$ext['call_group']][] = $block;
} else {
$other_extensions[] = $block;
}
}
if (sizeof($user_extensions) > 0) {
echo "<table width='100%'><tr><td>";
if (is_array($user_extensions)) foreach ($user_extensions as $ext_block) {
echo $ext_block;
}
echo "</td></tr></table><br>";
}
if (sizeof($grouped_extensions) > 0) {
// Ensure alphabetical order
ksort($grouped_extensions);
foreach ($grouped_extensions as $group => $extensions) {
echo "<strong style='color: black;'>".ucwords(escape($group))."</strong>";
echo "<br><br>";
echo "<table width='100%'><tr><td>";
foreach ($extensions as $ext_block) {
echo $ext_block;
}
echo "</td></tr></table><br>";
}
}
if (sizeof($other_extensions) > 0) {
echo "<strong style='color: black;'>".$text['label-other_extensions']."</strong>";
echo "<br><br>";
echo "<table width='100%'><tr><td>";
foreach ($other_extensions as $ext_block) {
echo $ext_block;
}
echo "</td></tr></table>";
}
if (sizeof($other_extensions) + sizeof($grouped_extensions) < 1) {
echo $text['label-no_extensions_found'];
}
echo "<br><br>";
/*
if (if_group("superadmin") && isset($_GET['debug'])) {
echo '$activity<br>';
echo "<textarea style='width: 100%; height: 600px; overflow: scroll;' onfocus='refresh_stop();' onblur='refresh_start();'>";
print_r($activity);
echo "</textarea>";
echo "<br><br>";
echo '$_SESSION<br>';
echo "<textarea style='width: 100%; height: 600px; overflow: scroll;' onfocus='refresh_stop();' onblur='refresh_start();'>";
print_r($_SESSION);
echo "</textarea>";
}
*/
?>
@@ -1,90 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
}
?>
-90
View File
@@ -1,90 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
}
?>
-97
View File
@@ -1,97 +0,0 @@
<?php
//application details
$apps[$x]['name'] = 'Bridges';
$apps[$x]['uuid'] = 'a6a7c4c5-340a-43ce-bcbc-2ed9bab8659d';
$apps[$x]['category'] = '';
$apps[$x]['subcategory'] = '';
$apps[$x]['version'] = '';
$apps[$x]['license'] = 'Mozilla Public License 1.1';
$apps[$x]['url'] = 'http://www.fusionpbx.com';
$apps[$x]['description']['en-us'] = '';
$apps[$x]['description']['en-gb'] = '';
//permission details
$y = 0;
$apps[$x]['permissions'][$y]['name'] = 'bridge_view';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = 'bridge_add';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = 'bridge_edit';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = 'bridge_delete';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
//$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
$apps[$x]['permissions'][$y]['name'] = 'bridge_all';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
$y++;
$apps[$x]['permissions'][$y]['name'] = 'bridge_destinations';
$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
$apps[$x]['permissions'][$y]['groups'][] = 'admin';
$y++;
//destination details
$y = 0;
$apps[$x]['destinations'][$y]['type'] = "sql";
$apps[$x]['destinations'][$y]['label'] = "bridges";
$apps[$x]['destinations'][$y]['name'] = "bridges";
//$apps[$x]['destinations'][$y]['sql'] = "select bridge_name, bridge_destination, bridge_description from v_bridges ";
$apps[$x]['destinations'][$y]['where'] = "where domain_uuid = '\${domain_uuid}' and bridge_enabled = 'true'";
$apps[$x]['destinations'][$y]['order_by'] = "bridge_name asc";
$apps[$x]['destinations'][$y]['field']['bridge_uuid'] = "bridge_uuid";
$apps[$x]['destinations'][$y]['field']['name'] = "bridge_name";
$apps[$x]['destinations'][$y]['field']['description'] = "bridge_description";
$apps[$x]['destinations'][$y]['field']['destination'] = "bridge_destination";
$apps[$x]['destinations'][$y]['select_value']['user_contact'] = "\${destination}";
$apps[$x]['destinations'][$y]['select_value']['dialplan'] = "bridge:\${destination}";
$apps[$x]['destinations'][$y]['select_value']['ivr'] = "menu-exec-app:bridge \${destination}";
$apps[$x]['destinations'][$y]['select_label'] = "\${name} \${description} ";
$y++;
//Bridges
$y = 0;
$apps[$x]['db'][$y]['table']['name'] = 'v_bridges';
$apps[$x]['db'][$y]['table']['parent'] = '';
$z = 0;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'bridge_uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'primary';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'domain_uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'foreign';
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = 'v_domains';
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = 'domain_uuid';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'bridge_name';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the name.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'bridge_destination';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the destination.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'bridge_enabled';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Select to enable or disable.';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'bridge_description';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the description.';
$z++;
?>
-257
View File
@@ -1,257 +0,0 @@
<?php
//Bridges
$text['title-bridges']['en-us'] = 'Bridges';
$text['title-bridges']['en-gb'] = 'Bridges';
$text['title-bridges']['ar-eg'] = '';
$text['title-bridges']['de-at'] = '';
$text['title-bridges']['de-ch'] = '';
$text['title-bridges']['de-de'] = '';
$text['title-bridges']['es-cl'] = '';
$text['title-bridges']['es-mx'] = '';
$text['title-bridges']['fr-ca'] = 'Ponts';
$text['title-bridges']['fr-fr'] = 'Ponts';
$text['title-bridges']['he-il'] = '';
$text['title-bridges']['it-it'] = '';
$text['title-bridges']['nl-nl'] = 'Bruggen';
$text['title-bridges']['pl-pl'] = 'Mostki';
$text['title-bridges']['pt-br'] = '';
$text['title-bridges']['pt-pt'] = '';
$text['title-bridges']['ro-ro'] = '';
$text['title-bridges']['ru-ru'] = '';
$text['title-bridges']['sv-se'] = '';
$text['title-bridges']['uk-ua'] = '';
$text['title-bridge']['en-us'] = 'Bridge';
$text['title-bridge']['en-gb'] = 'Bridge';
$text['title-bridge']['ar-eg'] = '';
$text['title-bridge']['de-at'] = '';
$text['title-bridge']['de-ch'] = '';
$text['title-bridge']['de-de'] = '';
$text['title-bridge']['es-cl'] = '';
$text['title-bridge']['es-mx'] = '';
$text['title-bridge']['fr-ca'] = 'Pont';
$text['title-bridge']['fr-fr'] = 'Pont';
$text['title-bridge']['he-il'] = '';
$text['title-bridge']['it-it'] = '';
$text['title-bridge']['nl-nl'] = 'Brug';
$text['title-bridge']['pl-pl'] = 'Mostek';
$text['title-bridge']['pt-br'] = '';
$text['title-bridge']['pt-pt'] = '';
$text['title-bridge']['ro-ro'] = '';
$text['title-bridge']['ru-ru'] = '';
$text['title-bridge']['sv-se'] = '';
$text['title-bridge']['uk-ua'] = '';
$text['title_description-bridge']['en-us'] = 'Add bridge statements to destination select list.';
$text['title_description-bridge']['en-gb'] = 'Add bridge statements to destination select list.';
$text['title_description-bridge']['ar-eg'] = '';
$text['title_description-bridge']['de-at'] = '';
$text['title_description-bridge']['de-ch'] = '';
$text['title_description-bridge']['de-de'] = '';
$text['title_description-bridge']['es-cl'] = '';
$text['title_description-bridge']['es-mx'] = '';
$text['title_description-bridge']['fr-ca'] = 'Ajouter des déclarations de pont à la liste de sélection';
$text['title_description-bridge']['fr-fr'] = 'Ajouter des déclarations de pont à la liste de sélection';
$text['title_description-bridge']['he-il'] = '';
$text['title_description-bridge']['it-it'] = '';
$text['title_description-bridge']['nl-nl'] = 'Voeg brug opdrachten toe aan bestemmings lijst.';
$text['title_description-bridge']['pl-pl'] = 'Dodaj wyrażenia mostkowania do listy wyboru destynacji.';
$text['title_description-bridge']['pt-br'] = '';
$text['title_description-bridge']['pt-pt'] = '';
$text['title_description-bridge']['ro-ro'] = '';
$text['title_description-bridge']['ru-ru'] = '';
$text['title_description-bridge']['sv-se'] = '';
$text['title_description-bridge']['uk-ua'] = '';
$text['label-bridge_name']['en-us'] = 'Name';
$text['label-bridge_name']['en-gb'] = 'Name';
$text['label-bridge_name']['ar-eg'] = '';
$text['label-bridge_name']['de-at'] = '';
$text['label-bridge_name']['de-ch'] = '';
$text['label-bridge_name']['de-de'] = '';
$text['label-bridge_name']['es-cl'] = '';
$text['label-bridge_name']['es-mx'] = '';
$text['label-bridge_name']['fr-ca'] = 'Nom';
$text['label-bridge_name']['fr-fr'] = 'Nom';
$text['label-bridge_name']['he-il'] = '';
$text['label-bridge_name']['it-it'] = '';
$text['label-bridge_name']['nl-nl'] = 'Naam';
$text['label-bridge_name']['pl-pl'] = 'Nazwa';
$text['label-bridge_name']['pt-br'] = '';
$text['label-bridge_name']['pt-pt'] = '';
$text['label-bridge_name']['ro-ro'] = '';
$text['label-bridge_name']['ru-ru'] = '';
$text['label-bridge_name']['sv-se'] = '';
$text['label-bridge_name']['uk-ua'] = '';
$text['description-bridge_name']['en-us'] = 'Enter the name.';
$text['description-bridge_name']['en-gb'] = 'Enter the name.';
$text['description-bridge_name']['ar-eg'] = '';
$text['description-bridge_name']['de-at'] = '';
$text['description-bridge_name']['de-ch'] = '';
$text['description-bridge_name']['de-de'] = '';
$text['description-bridge_name']['es-cl'] = '';
$text['description-bridge_name']['es-mx'] = '';
$text['description-bridge_name']['fr-ca'] = 'Entrez le nom';
$text['description-bridge_name']['fr-fr'] = 'Entrez le nom';
$text['description-bridge_name']['he-il'] = '';
$text['description-bridge_name']['it-it'] = '';
$text['description-bridge_name']['nl-nl'] = 'Voer naam in.';
$text['description-bridge_name']['pl-pl'] = 'Wprowadź nazwę.';
$text['description-bridge_name']['pt-br'] = '';
$text['description-bridge_name']['pt-pt'] = '';
$text['description-bridge_name']['ro-ro'] = '';
$text['description-bridge_name']['ru-ru'] = '';
$text['description-bridge_name']['sv-se'] = '';
$text['description-bridge_name']['uk-ua'] = '';
$text['label-bridge_destination']['en-us'] = 'Destination';
$text['label-bridge_destination']['en-gb'] = 'Destination';
$text['label-bridge_destination']['ar-eg'] = '';
$text['label-bridge_destination']['de-at'] = '';
$text['label-bridge_destination']['de-ch'] = '';
$text['label-bridge_destination']['de-de'] = '';
$text['label-bridge_destination']['es-cl'] = '';
$text['label-bridge_destination']['es-mx'] = '';
$text['label-bridge_destination']['fr-ca'] = 'Destination';
$text['label-bridge_destination']['fr-fr'] = 'Destination';
$text['label-bridge_destination']['he-il'] = '';
$text['label-bridge_destination']['it-it'] = '';
$text['label-bridge_destination']['nl-nl'] = 'Bestemming';
$text['label-bridge_destination']['pl-pl'] = 'Destynacja';
$text['label-bridge_destination']['pt-br'] = '';
$text['label-bridge_destination']['pt-pt'] = '';
$text['label-bridge_destination']['ro-ro'] = '';
$text['label-bridge_destination']['ru-ru'] = '';
$text['label-bridge_destination']['sv-se'] = '';
$text['label-bridge_destination']['uk-ua'] = '';
$text['description-bridge_destination']['en-us'] = 'Enter the destination.';
$text['description-bridge_destination']['en-gb'] = 'Enter the destination.';
$text['description-bridge_destination']['ar-eg'] = '';
$text['description-bridge_destination']['de-at'] = '';
$text['description-bridge_destination']['de-ch'] = '';
$text['description-bridge_destination']['de-de'] = '';
$text['description-bridge_destination']['es-cl'] = '';
$text['description-bridge_destination']['es-mx'] = '';
$text['description-bridge_destination']['fr-ca'] = 'Entrer la destination';
$text['description-bridge_destination']['fr-fr'] = 'Entrer la destination';
$text['description-bridge_destination']['he-il'] = '';
$text['description-bridge_destination']['it-it'] = '';
$text['description-bridge_destination']['nl-nl'] = 'Voer de bestemming in.';
$text['description-bridge_destination']['pl-pl'] = 'Wprowadź destynację.';
$text['description-bridge_destination']['pt-br'] = '';
$text['description-bridge_destination']['pt-pt'] = '';
$text['description-bridge_destination']['ro-ro'] = '';
$text['description-bridge_destination']['ru-ru'] = '';
$text['description-bridge_destination']['sv-se'] = '';
$text['description-bridge_destination']['uk-ua'] = '';
$text['label-bridge_enabled']['en-us'] = 'Enabled';
$text['label-bridge_enabled']['en-gb'] = 'Enabled';
$text['label-bridge_enabled']['ar-eg'] = '';
$text['label-bridge_enabled']['de-at'] = '';
$text['label-bridge_enabled']['de-ch'] = '';
$text['label-bridge_enabled']['de-de'] = '';
$text['label-bridge_enabled']['es-cl'] = '';
$text['label-bridge_enabled']['es-mx'] = '';
$text['label-bridge_enabled']['fr-ca'] = 'Activé';
$text['label-bridge_enabled']['fr-fr'] = 'Activé';
$text['label-bridge_enabled']['he-il'] = '';
$text['label-bridge_enabled']['it-it'] = '';
$text['label-bridge_enabled']['nl-nl'] = 'Geactiveerd';
$text['label-bridge_enabled']['pl-pl'] = 'Aktywny';
$text['label-bridge_enabled']['pt-br'] = '';
$text['label-bridge_enabled']['pt-pt'] = '';
$text['label-bridge_enabled']['ro-ro'] = '';
$text['label-bridge_enabled']['ru-ru'] = '';
$text['label-bridge_enabled']['sv-se'] = '';
$text['label-bridge_enabled']['uk-ua'] = '';
$text['description-bridge_enabled']['en-us'] = 'Select to enable or disable.';
$text['description-bridge_enabled']['en-gb'] = 'Select to enable or disable.';
$text['description-bridge_enabled']['ar-eg'] = '';
$text['description-bridge_enabled']['de-at'] = '';
$text['description-bridge_enabled']['de-ch'] = '';
$text['description-bridge_enabled']['de-de'] = '';
$text['description-bridge_enabled']['es-cl'] = '';
$text['description-bridge_enabled']['es-mx'] = '';
$text['description-bridge_enabled']['fr-ca'] = 'Sélectionnez pour activer ou désactiver';
$text['description-bridge_enabled']['fr-fr'] = 'Sélectionnez pour activer ou désactiver';
$text['description-bridge_enabled']['he-il'] = '';
$text['description-bridge_enabled']['it-it'] = '';
$text['description-bridge_enabled']['nl-nl'] = 'Kies aktiveer/deactiveer.';
$text['description-bridge_enabled']['pl-pl'] = 'Wybierz czy aktywować lub dezaktywować.';
$text['description-bridge_enabled']['pt-br'] = '';
$text['description-bridge_enabled']['pt-pt'] = '';
$text['description-bridge_enabled']['ro-ro'] = '';
$text['description-bridge_enabled']['ru-ru'] = '';
$text['description-bridge_enabled']['sv-se'] = '';
$text['description-bridge_enabled']['uk-ua'] = '';
$text['label-bridge_description']['en-us'] = 'Description';
$text['label-bridge_description']['en-gb'] = 'Description';
$text['label-bridge_description']['ar-eg'] = '';
$text['label-bridge_description']['de-at'] = '';
$text['label-bridge_description']['de-ch'] = '';
$text['label-bridge_description']['de-de'] = '';
$text['label-bridge_description']['es-cl'] = '';
$text['label-bridge_description']['es-mx'] = '';
$text['label-bridge_description']['fr-ca'] = 'La description';
$text['label-bridge_description']['fr-fr'] = 'La description';
$text['label-bridge_description']['he-il'] = '';
$text['label-bridge_description']['it-it'] = '';
$text['label-bridge_description']['nl-nl'] = 'Omschrijving';
$text['label-bridge_description']['pl-pl'] = 'Opis';
$text['label-bridge_description']['pt-br'] = '';
$text['label-bridge_description']['pt-pt'] = '';
$text['label-bridge_description']['ro-ro'] = '';
$text['label-bridge_description']['ru-ru'] = '';
$text['label-bridge_description']['sv-se'] = '';
$text['label-bridge_description']['uk-ua'] = '';
$text['description-bridge_description']['en-us'] = 'Enter the description. ';
$text['description-bridge_description']['en-gb'] = 'Enter the description. ';
$text['description-bridge_description']['ar-eg'] = '';
$text['description-bridge_description']['de-at'] = '';
$text['description-bridge_description']['de-ch'] = '';
$text['description-bridge_description']['de-de'] = '';
$text['description-bridge_description']['es-cl'] = '';
$text['description-bridge_description']['es-mx'] = '';
$text['description-bridge_description']['fr-ca'] = 'Entrez la description';
$text['description-bridge_description']['fr-fr'] = 'Entrez la description';
$text['description-bridge_description']['he-il'] = '';
$text['description-bridge_description']['it-it'] = '';
$text['description-bridge_description']['nl-nl'] = 'Voer omschrijving in.';
$text['description-bridge_description']['pl-pl'] = 'Wprowadź opis.';
$text['description-bridge_description']['pt-br'] = '';
$text['description-bridge_description']['pt-pt'] = '';
$text['description-bridge_description']['ro-ro'] = '';
$text['description-bridge_description']['ru-ru'] = '';
$text['description-bridge_description']['sv-se'] = '';
$text['description-bridge_description']['uk-ua'] = '';
$text['label-bridge_description']['en-us'] = "Description";
$text['label-bridge_description']['en-gb'] = "Description";
$text['label-bridge_description']['ar-eg'] = "";
$text['label-bridge_description']['de-at'] = "Beschreibung"; //copied from de-de
$text['label-bridge_description']['de-ch'] = "Beschreibung"; //copied from de-de
$text['label-bridge_description']['de-de'] = "Beschreibung";
$text['label-bridge_description']['es-cl'] = "Descripción";
$text['label-bridge_description']['es-mx'] = "Descripción"; //copied from es-cl
$text['label-bridge_description']['fr-ca'] = "Description"; //copied from fr-fr
$text['label-bridge_description']['fr-fr'] = "Description";
$text['label-bridge_description']['he-il'] = "";
$text['label-bridge_description']['it-it'] = "Descrizione";
$text['label-bridge_description']['nl-nl'] = "Omschrijving";
$text['label-bridge_description']['pl-pl'] = "Opis";
$text['label-bridge_description']['pt-br'] = "Descrição";
$text['label-bridge_description']['pt-pt'] = "Descripção";
$text['label-bridge_description']['ro-ro'] = "";
$text['label-bridge_description']['ru-ru'] = "Описание";
$text['label-bridge_description']['sv-se'] = "Beskrivning";
$text['label-bridge_description']['uk-ua'] = "Опис";
$text['label-bridge_description']['tr-tr'] = "Açıklama";
?>
-21
View File
@@ -1,21 +0,0 @@
<?php
$apps[$x]['menu'][0]['title']['en-us'] = 'Bridges';
$apps[$x]['menu'][0]['title']['en-gb'] = 'Bridges';
$apps[$x]['menu'][0]['title']['es-cl'] = '';
$apps[$x]['menu'][0]['title']['fr-fr'] = '';
$apps[$x]['menu'][0]['title']['fr-ca'] = '';
$apps[$x]['menu'][0]['title']['nl-nl'] = 'Bruggen';
$apps[$x]['menu'][0]['title']['pl'] = 'Mostkowania';
$apps[$x]['menu'][0]['title']['sv-se'] = '';
$apps[$x]['menu'][0]['title']['uk'] = '';
$apps[$x]['menu'][0]['title']['de-at'] = '';
$apps[$x]['menu'][0]['uuid'] = '345f0aad-8321-4a8b-9f08-c4730297660c';
$apps[$x]['menu'][0]['parent_uuid'] = 'fd29e39c-c936-f5fc-8e2b-611681b266b5';
$apps[$x]['menu'][0]['category'] = 'internal';
$apps[$x]['menu'][0]['path'] = '/app/bridges/bridges.php';
$apps[$x]['menu'][0]['groups'][] = 'superadmin';
//$apps[$x]['menu'][0]['groups'][] = 'admin';
//$apps[$x]['menu'][0]['groups'][] = 'user';
?>
-261
View File
@@ -1,261 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2018 - 2019
the Initial Developer. All Rights Reserved.
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (!permission_exists('bridge_add') && !permission_exists('bridge_edit')) {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//action add or update
if (is_uuid($_REQUEST["id"])) {
$action = "update";
$bridge_uuid = $_REQUEST["id"];
$id = $_REQUEST["id"];
}
else {
$action = "add";
}
//get http post variables and set them to php variables
if (is_array($_POST)) {
$bridge_uuid = $_POST["bridge_uuid"];
$bridge_name = $_POST["bridge_name"];
$bridge_destination = $_POST["bridge_destination"];
$bridge_enabled = $_POST["bridge_enabled"];
$bridge_description = $_POST["bridge_description"];
}
//process the user data and save it to the database
if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
//delete the bridge
if (permission_exists('bridge_delete')) {
if ($_POST['action'] == 'delete' && is_uuid($bridge_uuid)) {
//prepare
$array[0]['checked'] = 'true';
$array[0]['uuid'] = $bridge_uuid;
//delete
$obj = new bridges;
$obj->delete($array);
//redirect
header('Location: bridges.php');
exit;
}
}
//get the uuid from the POST
if ($action == "update") {
$bridge_uuid = $_POST["bridge_uuid"];
}
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: bridges.php');
exit;
}
//check for all required data
$msg = '';
if (strlen($bridge_name) == 0) { $msg .= $text['message-required']." ".$text['label-bridge_name']."<br>\n"; }
if (strlen($bridge_destination) == 0) { $msg .= $text['message-required']." ".$text['label-bridge_destination']."<br>\n"; }
if (strlen($bridge_enabled) == 0) { $msg .= $text['message-required']." ".$text['label-bridge_enabled']."<br>\n"; }
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
require_once "resources/header.php";
require_once "resources/persist_form_var.php";
echo "<div align='center'>\n";
echo "<table><tr><td>\n";
echo $msg."<br />";
echo "</td></tr></table>\n";
persistformvar($_POST);
echo "</div>\n";
require_once "resources/footer.php";
return;
}
//add the bridge_uuid
if (strlen($bridge_uuid) == 0) {
$bridge_uuid = uuid();
}
//prepare the array
$array['bridges'][0]['bridge_uuid'] = $bridge_uuid;
$array['bridges'][0]['domain_uuid'] = $_SESSION["domain_uuid"];
$array['bridges'][0]['bridge_name'] = $bridge_name;
$array['bridges'][0]['bridge_destination'] = $bridge_destination;
$array['bridges'][0]['bridge_enabled'] = $bridge_enabled;
$array['bridges'][0]['bridge_description'] = $bridge_description;
//save to the data
$database = new database;
$database->app_name = 'bridges';
$database->app_uuid = 'a6a7c4c5-340a-43ce-bcbc-2ed9bab8659d';
$database->save($array);
$message = $database->message;
//clear the destinations session array
if (isset($_SESSION['destinations']['array'])) {
unset($_SESSION['destinations']['array']);
}
//redirect the user
if (isset($action)) {
if ($action == "add") {
$_SESSION["message"] = $text['message-add'];
}
if ($action == "update") {
$_SESSION["message"] = $text['message-update'];
}
header('Location: bridges.php');
return;
}
}
//pre-populate the form
if (is_array($_GET) && $_POST["persistformvar"] != "true") {
$bridge_uuid = $_GET["id"];
$sql = "select * from v_bridges ";
$sql .= "where bridge_uuid = :bridge_uuid ";
$parameters['bridge_uuid'] = $bridge_uuid;
$database = new database;
$row = $database->select($sql, $parameters, 'row');
if (is_array($row) && sizeof($row) != 0) {
$bridge_name = $row["bridge_name"];
$bridge_destination = $row["bridge_destination"];
$bridge_enabled = $row["bridge_enabled"];
$bridge_description = $row["bridge_description"];
}
unset($sql, $parameters, $row);
}
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//show the header
$document['title'] = $text['title-bridge'];
require_once "resources/header.php";
//show the content
echo "<form name='frm' id='frm' method='post'>\n";
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-bridge']."</b></div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','style'=>'margin-right: 15px;','link'=>'bridges.php']);
if ($action == 'update' && permission_exists('bridge_delete')) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'name'=>'btn_delete','style'=>'margin-right: 15px;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','name'=>'action','value'=>'save']);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if ($action == 'update' && permission_exists('bridge_delete')) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]);
}
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td width='30%' class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-bridge_name']."\n";
echo "</td>\n";
echo "<td width='70%' class='vtable' style='position: relative;' align='left'>\n";
echo " <input class='formfld' type='text' name='bridge_name' maxlength='255' value='".escape($bridge_name)."'>\n";
echo "<br />\n";
echo $text['description-bridge_name']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-bridge_destination']."\n";
echo "</td>\n";
echo "<td class='vtable' style='position: relative;' align='left'>\n";
echo " <input class='formfld' type='text' name='bridge_destination' maxlength='255' value='".escape($bridge_destination)."'>\n";
echo "<br />\n";
echo $text['description-bridge_destination']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-bridge_enabled']."\n";
echo "</td>\n";
echo "<td class='vtable' style='position: relative;' align='left'>\n";
echo " <select class='formfld' name='bridge_enabled'>\n";
if ($bridge_enabled == "true") {
echo " <option value='true' selected='selected'>".$text['label-true']."</option>\n";
}
else {
echo " <option value='true'>".$text['label-true']."</option>\n";
}
if ($bridge_enabled == "false") {
echo " <option value='false' selected='selected'>".$text['label-false']."</option>\n";
}
else {
echo " <option value='false'>".$text['label-false']."</option>\n";
}
echo " </select>\n";
echo "<br />\n";
echo $text['description-bridge_enabled']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-bridge_description']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='bridge_description' maxlength='255' value=\"".escape($bridge_description)."\">\n";
echo "<br />\n";
echo $text['description-bridge_description']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>";
echo "<br /><br />";
if ($action == "update") {
echo "<input type='hidden' name='bridge_uuid' value='".escape($bridge_uuid)."'>\n";
}
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>";
//include the footer
require_once "resources/footer.php";
?>
-265
View File
@@ -1,265 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2018 - 2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
//check permissions
if (permission_exists('bridge_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the http post data
if (is_array($_POST['bridges'])) {
$action = $_POST['action'];
$search = $_POST['search'];
$bridges = $_POST['bridges'];
}
//process the http post data by action
if ($action != '' && is_array($bridges) && @sizeof($bridges) != 0) {
switch ($action) {
case 'copy':
if (permission_exists('bridge_add')) {
$obj = new bridges;
$obj->copy($bridges);
}
break;
case 'toggle':
if (permission_exists('bridge_edit')) {
$obj = new bridges;
$obj->toggle($bridges);
}
break;
case 'delete':
if (permission_exists('bridge_delete')) {
$obj = new bridges;
$obj->delete($bridges);
}
break;
}
header('Location: bridges.php'.($search != '' ? '?search='.urlencode($search) : null));
exit;
}
//get order and order by
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search string
if (isset($_GET["search"])) {
$search = strtolower($_GET["search"]);
$sql_search = " (";
$sql_search .= " lower(bridge_name) like :search ";
$sql_search .= " or lower(bridge_destination) like :search ";
$sql_search .= " or lower(bridge_enabled) like :search ";
$sql_search .= " or lower(bridge_description) like :search ";
$sql_search .= ") ";
$parameters['search'] = '%'.$search.'%';
}
//get the count
$sql = "select count(bridge_uuid) from v_bridges ";
if ($_GET['show'] == "all" && permission_exists('bridge_all')) {
if (isset($sql_search)) {
$sql .= "where ".$sql_search;
}
}
else {
$sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) ";
if (isset($sql_search)) {
$sql .= "and ".$sql_search;
}
$parameters['domain_uuid'] = $domain_uuid;
}
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
//prepare to page the results
$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50;
$param = $search ? "&search=".$search : null;
$param = ($_GET['show'] == 'all' && permission_exists('bridge_all')) ? "&show=all" : null;
$page = is_numeric($_GET['page']) ? $_GET['page'] : 0;
list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page);
list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true);
$offset = $rows_per_page * $page;
//get the list
$sql = str_replace('count(bridge_uuid)', '*', $sql);
$sql .= order_by($order_by, $order, 'bridge_name', 'asc');
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$bridges = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//include the header
$document['title'] = $text['title-bridges'];
require_once "resources/header.php";
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-bridges']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
if (permission_exists('bridge_add')) {
echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','link'=>'bridge_edit.php']);
}
if (permission_exists('bridge_add') && $bridges) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
}
if (permission_exists('bridge_edit') && $bridges) {
echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','style'=>'display: none;','onclick'=>"modal_open('modal-toggle','btn_toggle');"]);
}
if (permission_exists('bridge_delete') && $bridges) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo "<form id='form_search' class='inline' method='get'>\n";
if (permission_exists('bridge_all')) {
if ($_GET['show'] == 'all') {
echo " <input type='hidden' name='show' value='all'>\n";
}
else {
echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?show=all']);
}
}
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search']);
//echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'bridges.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>\n";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if (permission_exists('bridge_add') && $bridges) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]);
}
if (permission_exists('bridge_edit') && $bridges) {
echo modal::create(['id'=>'modal-toggle','type'=>'toggle','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_toggle','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('toggle'); list_form_submit('form_list');"])]);
}
if (permission_exists('bridge_delete') && $bridges) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
echo $text['title_description-bridge']."\n";
echo "<br /><br />\n";
echo "<form id='form_list' method='post'>\n";
echo "<input type='hidden' id='action' name='action' value=''>\n";
echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
if (permission_exists('bridge_add') || permission_exists('bridge_edit') || permission_exists('bridge_delete')) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".($bridges ?: "style='visibility: hidden;'").">\n";
echo " </th>\n";
}
if ($_GET['show'] == 'all' && permission_exists('bridge_all')) {
echo th_order_by('domain_name', $text['label-domain'], $order_by, $order);
}
echo th_order_by('bridge_name', $text['label-bridge_name'], $order_by, $order);
echo th_order_by('bridge_destination', $text['label-bridge_destination'], $order_by, $order);
echo th_order_by('bridge_enabled', $text['label-bridge_enabled'], $order_by, $order, null, "class='center'");
echo " <th class='hide-sm-dn'>".$text['label-bridge_description']."</th>\n";
if (permission_exists('bridge_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>&nbsp;</td>\n";
}
echo "</tr>\n";
if (is_array($bridges) && @sizeof($bridges) != 0) {
$x = 0;
foreach ($bridges as $row) {
if (permission_exists('bridge_edit')) {
$list_row_url = "bridge_edit.php?id=".urlencode($row['bridge_uuid']);
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
if (permission_exists('bridge_add') || permission_exists('bridge_edit') || permission_exists('bridge_delete')) {
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='bridges[$x][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
echo " <input type='hidden' name='bridges[$x][uuid]' value='".escape($row['bridge_uuid'])."' />\n";
echo " </td>\n";
}
if ($_GET['show'] == 'all' && permission_exists('bridge_all')) {
echo " <td>".escape($_SESSION['domains'][$row['domain_uuid']]['domain_name'])."</td>\n";
}
echo " <td>\n";
if (permission_exists('bridge_edit')) {
echo " <a href='".$list_row_url."' title=\"".$text['button-edit']."\">".escape($row['bridge_name'])."</a>\n";
}
else {
echo " ".escape($row['bridge_name']);
}
echo " </td>\n";
echo " <td>".escape($row['bridge_destination'])."</td>\n";
if (permission_exists('bridge_edit')) {
echo " <td class='no-link center'>\n";
echo button::create(['type'=>'submit','class'=>'link','label'=>$text['label-'.$row['bridge_enabled']],'title'=>$text['button-toggle'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('toggle'); list_form_submit('form_list')"]);
}
else {
echo " <td class='center'>\n";
echo $text['label-'.$row['bridge_enabled']];
}
echo " </td>\n";
echo " <td class='description overflow hide-sm-dn'>".escape($row['bridge_description'])."</td>\n";
if (permission_exists('bridge_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>\n";
echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
echo " </td>\n";
}
echo "</tr>\n";
$x++;
}
unset($bridges);
}
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
//include the footer
require_once "resources/footer.php";
?>
-270
View File
@@ -1,270 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//define the bridges class
if (!class_exists('bridges')) {
class bridges {
/**
* declare private variables
*/
private $app_name;
private $app_uuid;
private $permission_prefix;
private $list_page;
private $table;
private $uuid_prefix;
private $toggle_field;
private $toggle_values;
/**
* called when the object is created
*/
public function __construct() {
//assign private variables
$this->app_name = 'bridges';
$this->app_uuid = 'a6a7c4c5-340a-43ce-bcbc-2ed9bab8659d';
$this->permission_prefix = 'bridge_';
$this->list_page = 'bridges.php';
$this->table = 'bridges';
$this->uuid_prefix = 'bridge_';
$this->toggle_field = 'bridge_enabled';
$this->toggle_values = ['true','false'];
}
/**
* called when there are no references to a particular object
* unset the variables used in the class
*/
public function __destruct() {
foreach ($this as $key => $value) {
unset($this->$key);
}
}
/**
* delete records
*/
public function delete($records) {
if (permission_exists($this->permission_prefix.'delete')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//delete multiple records
if (is_array($records) && @sizeof($records) != 0) {
//build the delete array
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid'];
$array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
}
}
//delete the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//execute delete
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->delete($array);
unset($array);
//clear the destinations session array
if (isset($_SESSION['destinations']['array'])) {
unset($_SESSION['destinations']['array']);
}
//set message
message::add($text['message-delete']);
}
unset($records);
}
}
}
/**
* toggle records
*/
public function toggle($records) {
if (permission_exists($this->permission_prefix.'edit')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//toggle the checked records
if (is_array($records) && @sizeof($records) != 0) {
//get current toggle state
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select ".$this->uuid_prefix."uuid as uuid, ".$this->toggle_field." as toggle from v_".$this->table." ";
$sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) ";
$sql .= "and ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $row) {
$states[$row['uuid']] = $row['toggle'];
}
}
unset($sql, $parameters, $rows, $row);
}
//build update array
$x = 0;
foreach ($states as $uuid => $state) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $uuid;
$array[$this->table][$x][$this->toggle_field] = $state == $this->toggle_values[0] ? $this->toggle_values[1] : $this->toggle_values[0];
$x++;
}
//save the changes
if (is_array($array) && @sizeof($array) != 0) {
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
unset($array);
//clear the destinations session array
if (isset($_SESSION['destinations']['array'])) {
unset($_SESSION['destinations']['array']);
}
//set message
message::add($text['message-toggle']);
}
unset($records, $states);
}
}
}
/**
* copy records
*/
public function copy($records) {
if (permission_exists($this->permission_prefix.'add')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//copy the checked records
if (is_array($records) && @sizeof($records) != 0) {
//get checked records
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//create insert array from existing data
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select * from v_".$this->table." ";
$sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) ";
$sql .= "and ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $x => $row) {
//copy data
$array[$this->table][$x] = $row;
//overwrite
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = uuid();
$array[$this->table][$x]['bridge_description'] = trim($row['bridge_description'].' ('.$text['label-copy'].')');
}
}
unset($sql, $parameters, $rows, $row);
}
//save the changes and set the message
if (is_array($array) && @sizeof($array) != 0) {
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
unset($array);
//set message
message::add($text['message-copy']);
}
unset($records);
}
}
}
}
}
?>
-90
View File
@@ -1,90 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2018
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
}
?>
+19 -93
View File
@@ -5,43 +5,22 @@
$apps[$x]['uuid'] = "9ed63276-e085-4897-839c-4f2e36d92d6c";
$apps[$x]['category'] = "Switch";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.0";
$apps[$x]['version'] = "";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "A tool to block incoming numbers.";
$apps[$x]['description']['en-gb'] = "A tool to block incoming numbers.";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "Ein Werkzeug um eingehende Rufnummern zu sperren.";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "Ein Werkzeug um eingehende Rufnummern zu sperren.";
$apps[$x]['description']['el-gr'] = "Εργαλείο για αποκλεισμό εισερχόμενων κλήσεων από συγκεκριμένους αριθμούς.";
$apps[$x]['description']['es-cl'] = "Una herramineta para bloquear números entrantes";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "Outil pour bloquer des numéros d'appelant.";
$apps[$x]['description']['fr-fr'] = "Outil pour bloquer des numéros d'appelant.";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "Gereedschap om inkommende nummers te blokkeren.";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "Uma ferramenta para bloquear números que entram.";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "Outil pour bloquer les numéro d'appelant";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "Uma ferramenta para bloquear números indesejados";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
//default settings
$y=0;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "e8356e52-3d18-4da5-93b1-9b2e08878982";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "call_block";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "recent_call_limit";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "50";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Number of recent calls to show.";
$apps[$x]['description']['pt-br'] = "";
//permission details
$y=0;
$y = 0;
$apps[$x]['permissions'][$y]['name'] = "call_block_view";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "29295c90-b1b9-440b-9c7E-c8363c6e8975";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
@@ -63,34 +42,11 @@
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "user";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_block_all";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_block_extension";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_block_ivr";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_block_ring_group";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_block_voicemail";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "view_call_block";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
//schema details
$y=0;
$apps[$x]['db'][$y]['table']['name'] = "v_call_block";
$apps[$x]['db'][$y]['table']['parent'] = "";
$z=0;
$y = 0; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = "v_call_block";
$apps[$x]['db'][$y]['fields'][$z]['name'] = "domain_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
@@ -107,64 +63,34 @@
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "primary";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_block_direction";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the direction of the calls to block.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "extension_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_extensions";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "extension_uuid";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_block_name";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "blocked_caller_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the name.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_block_country_code";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the country code.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the name.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_block_number";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "blocked_caller_number";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the phone number.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the full phone number.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_block_count";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "blocked_call_count";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Number of calls.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Number of calls.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_block_action";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "blocked_call_action";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Action for call.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_block_app";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Application";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_block_data";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Data";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Action for call.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "date_added";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Date/Time number was added.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Date/Time number was added.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_block_enabled";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "block_call_enabled";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enable/disable blocking the call.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enable/disable blocking the call.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'call_block_description';
$apps[$x]['db'][$y]['fields'][$z]['type'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = 'Enter the description.';
?>
?>
-51
View File
@@ -1,51 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
if ($domains_processed == 1) {
//create a view for call block
$database = new database;
$database->execute("DROP VIEW view_call_block;", null);
$sql = "CREATE VIEW view_call_block AS ( \n";
$sql .= " select c.domain_uuid, call_block_uuid, c.call_block_direction, c.extension_uuid, c.call_block_name, c.call_block_country_code, \n";
$sql .= " c.call_block_number, e.extension, e.number_alias, c.call_block_count, c.call_block_app, c.call_block_data, c.date_added, c.call_block_enabled, c.call_block_description \n";
$sql .= " from v_call_block as c \n";
$sql .= " left join v_extensions as e \n";
$sql .= " on c.extension_uuid = e.extension_uuid \n";
$sql .= "); \n";
$database = new database;
$database->execute($sql, null);
unset($sql);
//set call blocks to inbound if no direction defined
$sql = "update v_call_block set call_block_direction = 'inbound' where call_block_direction is null ";
$database = new database;
$database->execute($sql, null);
unset($sql);
}
?>
File diff suppressed because it is too large Load Diff
+20 -30
View File
@@ -1,33 +1,23 @@
<?php
$y=0;
$apps[$x]['menu'][$y]['title']['en-us'] = "Call Block";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Call Block";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "حظر المكالمات";
$apps[$x]['menu'][$y]['title']['de-at'] = "Sperrlisten";
$apps[$x]['menu'][$y]['title']['de-ch'] = "";
$apps[$x]['menu'][$y]['title']['de-de'] = "Sperrlisten";
$apps[$x]['menu'][$y]['title']['el-gr'] = "Λίστα απορρίψεων";
$apps[$x]['menu'][$y]['title']['es-cl'] = "Bloqueo de llamadas";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "Liste Noire";
$apps[$x]['menu'][$y]['title']['he-il'] = "חסימת מספר";
$apps[$x]['menu'][$y]['title']['it-it'] = "Blocco Chiamate";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Oproep blokkade";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Blokowanie rozmów";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Bloqueio de chamadas";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "Bloqueio de Chamadas";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "Blocare apel";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Черный список";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Blockera Samtal";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "Блокування дзвінків";
$apps[$x]['menu'][$y]['uuid'] = "29295c90-b1b9-440b-9c7E-c8363c6e8975";
$apps[$x]['menu'][$y]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['path'] = "/app/call_block/call_block.php";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][$y]['groups'][] = "admin";
$apps[$x]['menu'][$y]['groups'][] = "user";
$apps[$x]['menu'][0]['title']['en-us'] = "Call Block";
$apps[$x]['menu'][0]['title']['es-cl'] = "Bloqueo de llamadas";
$apps[$x]['menu'][0]['title']['fr-fr'] = "Liste Noire";
$apps[$x]['menu'][0]['title']['pt-pt'] = "Bloqueio de Chamadas";
$apps[$x]['menu'][0]['title']['pt-br'] = "Bloqueio de chamadas";
$apps[$x]['menu'][0]['title']['pl'] = "Blokowanie rozmów";
$apps[$x]['menu'][0]['title']['sv-se'] = "Blockera Samtal";
$apps[$x]['menu'][0]['title']['uk'] = "Блокування дзвінків";
$apps[$x]['menu'][0]['title']['ro'] = "Blocare apel";
$apps[$x]['menu'][0]['title']['de-at'] = "Sperrlisten";
$apps[$x]['menu'][0]['title']['ar-eg'] = "حظر المكالمات";
$apps[$x]['menu'][0]['title']['he'] = "חסימת מספר";
$apps[$x]['menu'][0]['uuid'] = "29295c90-b1b9-440b-9c7E-c8363c6e8975";
$apps[$x]['menu'][0]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['path'] = "/app/call_block/call_block.php";
$apps[$x]['menu'][0]['groups'][] = "user";
$apps[$x]['menu'][0]['groups'][] = "admin";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
?>
?>
+114 -269
View File
@@ -17,319 +17,164 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
The original Call Block was written by Gerrit Visser <gerrit308@gmail.com>
All of it has been rewritten over years.
Call Block is written by Gerrit Visser <gerrit308@gmail.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
require_once "root.php";
require_once "resources/require.php";
//check permissions
if (!permission_exists('call_block_view')) {
echo "access denied"; exit;
require_once "resources/check_auth.php";
if (permission_exists('call_block_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get posted data
if (is_array($_POST['call_blocks'])) {
$action = $_POST['action'];
$search = $_POST['search'];
$call_blocks = $_POST['call_blocks'];
}
//process the http post data by action
if ($action != '' && is_array($call_blocks) && @sizeof($call_blocks) != 0) {
switch ($action) {
case 'copy':
if (permission_exists('call_block_add')) {
$obj = new call_block;
$obj->copy($call_blocks);
}
break;
case 'toggle':
if (permission_exists('call_block_edit')) {
$obj = new call_block;
$obj->toggle($call_blocks);
}
break;
case 'delete':
if (permission_exists('call_block_delete')) {
$obj = new call_block;
$obj->delete($call_blocks);
}
break;
}
header('Location: call_block.php'.($search != '' ? '?search='.urlencode($search) : null));
exit;
}
//additional includes
require_once "resources/header.php";
require_once "resources/paging.php";
//get variables used to control the order
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search term
$search = strtolower($_GET["search"]);
if (strlen($search) > 0) {
$sql_search = " (";
$sql_search .= "lower(call_block_name) like :search ";
$sql_search .= "or call_block_country_code like :search ";
$sql_search .= "or lower(call_block_number) like :search ";
$sql_search .= "or lower(call_block_description) like :search ";
$sql_search .= ") ";
$parameters['search'] = '%'.$search.'%';
}
//prepare to page the results
$sql = "select count(*) from view_call_block ";
$sql .= "where true ";
if ($_GET['show'] == "all" && permission_exists('call_forward_all')) {
$sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
}
else {
$sql .= "and (domain_uuid = :domain_uuid) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
}
if (!permission_exists('call_block_all') && is_array($_SESSION['user']['extension']) && count($_SESSION['user']['extension']) > 0) {
$sql .= "and extension_uuid in (";
$x = 0;
foreach ($_SESSION['user']['extension'] as $field) {
if (is_uuid($field['extension_uuid'])) {
$sql .= ($x == 0) ? "'".$field['extension_uuid']."'" : ",'".$field['extension_uuid']."'";
}
$x++;
}
$sql .= ") ";
}
if (isset($sql_search)) {
$sql .= "and ".$sql_search;
}
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
unset($parameters);
//prepare to page the results
$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50;
$param = "&search=".$search;
if ($_GET['show'] == "all" && permission_exists('call_forward_all')) {
$param .= "&show=all";
}
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page);
list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true);
$offset = $rows_per_page * $page;
//get the list
$sql = "select * from view_call_block ";
$sql .= "where true ";
if ($_GET['show'] == "all" && permission_exists('call_forward_all')) {
$sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
}
else {
$sql .= "and (domain_uuid = :domain_uuid) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
}
if (!permission_exists('call_block_all') && is_array($_SESSION['user']['extension']) && count($_SESSION['user']['extension']) > 0) {
$sql .= "and extension_uuid in (";
$x = 0;
foreach ($_SESSION['user']['extension'] as $field) {
if (is_uuid($field['extension_uuid'])) {
$sql .= ($x == 0) ? "'".$field['extension_uuid']."'" : ",'".$field['extension_uuid']."'";
}
$x++;
}
$sql .= ") ";
}
if (isset($sql_search)) {
$sql .= "and ".$sql_search;
}
$sql .= order_by($order_by, $order, ['call_block_country_code','call_block_number']);
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$result = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//include the header
$document['title'] = $text['title-call-block'];
require_once "resources/header.php";
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-call-block']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
if (permission_exists('call_block_add')) {
echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','link'=>'call_block_edit.php']);
}
if (permission_exists('call_block_add') && $result) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
}
if (permission_exists('call_block_edit') && $result) {
echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','style'=>'display: none;','onclick'=>"modal_open('modal-toggle','btn_toggle');"]);
}
if (permission_exists('call_block_delete') && $result) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo "<form id='form_search' class='inline' method='get'>\n";
if (permission_exists('call_forward_all')) {
if ($_GET['show'] == 'all') {
echo " <input type='hidden' name='show' value='all'>";
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>\n";
echo " <tr>\n";
echo " <td width='50%' align='left' nowrap='nowrap'><b>".$text['title-call-block']."</b></td>\n";
echo " <td width='50%' align='right'>&nbsp;</td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td align='left' colspan='2'>\n";
echo " ".$text['description-call-block']."<br /><br />\n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
//prepare to page the results
$sql = "select count(*) as num_rows from v_call_block ";
$sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] > 0) {
$num_rows = $row['num_rows'];
}
else {
echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?type='.urlencode($destination_type).'&show=all'.($search != '' ? "&search=".urlencode($search) : null)]);
$num_rows = '0';
}
}
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search']);
//echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'call_block.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if (permission_exists('call_block_add') && $result) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]);
}
if (permission_exists('call_block_edit') && $result) {
echo modal::create(['id'=>'modal-toggle','type'=>'toggle','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_toggle','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('toggle'); list_form_submit('form_list');"])]);
}
if (permission_exists('call_block_delete') && $result) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
//prepare to page the results
$rows_per_page = 100;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page, $var3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
echo $text['description-call-block']."\n";
echo "<br /><br />\n";
//get the list
$sql = "select * from v_call_block ";
$sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$sql .= " limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll();
$result_count = count($result);
unset ($prep_statement, $sql);
echo "<form id='form_list' method='post'>\n";
echo "<input type='hidden' id='action' name='action' value=''>\n";
echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
if (permission_exists('call_block_add') || permission_exists('call_block_edit') || permission_exists('call_block_delete')) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".($result ?: "style='visibility: hidden;'").">\n";
echo " </th>\n";
}
if ($_GET['show'] == 'all' && permission_exists('domain_all')) {
echo th_order_by('domain_name', $text['label-domain'], $order_by, $order);
}
echo th_order_by('call_block_direction', $text['label-direction'], $order_by, $order, null, "style='width: 1%;' class='center'");
echo th_order_by('extension', $text['label-extension'], $order_by, $order, null, "class='center'");
echo th_order_by('call_block_name', $text['label-name'], $order_by, $order);
echo th_order_by('call_block_country_code', $text['label-country_code'], $order_by, $order);
//table headers
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo th_order_by('call_block_number', $text['label-number'], $order_by, $order);
echo th_order_by('call_block_count', $text['label-count'], $order_by, $order, '', "class='center hide-sm-dn'");
echo th_order_by('call_block_name', $text['label-name'], $order_by, $order);
echo th_order_by('call_block_count', $text['label-count'], $order_by, $order, '', "style='text-align: center;'");
echo th_order_by('date_added', $text['label-date-added'], $order_by, $order);
echo th_order_by('call_block_action', $text['label-action'], $order_by, $order);
echo th_order_by('call_block_enabled', $text['label-enabled'], $order_by, $order, null, "class='center'");
echo th_order_by('date_added', $text['label-date-added'], $order_by, $order, null, "class='shrink no-wrap'");
echo "<th class='hide-md-dn pct-20'>".$text['label-description']."</th>\n";
if (permission_exists('call_block_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>&nbsp;</td>\n";
echo th_order_by('call_block_enabled', $text['label-enabled'], $order_by, $order);
echo "<td class='list_control_icons'>";
if (permission_exists('call_block_add')) {
echo "<a href='call_block_edit.php' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
echo "</td>\n";
echo "</tr>\n";
if (is_array($result)) {
$x = 0;
//show the results
if ($result_count > 0) {
foreach($result as $row) {
$tr_link = (permission_exists('call_block_edit')) ? "href='call_block_edit.php?id=".$row['call_block_uuid']."'" : null;
echo "<tr ".$tr_link.">\n";
echo " <td valign='top' class='".$row_style[$c]."'>";
if (permission_exists('call_block_edit')) {
$list_row_url = "call_block_edit.php?id=".urlencode($row['call_block_uuid']);
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
if (permission_exists('call_block_add') || permission_exists('call_block_edit') || permission_exists('call_block_delete')) {
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='call_blocks[".$x."][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
echo " <input type='hidden' name='call_blocks[".$x."][uuid]' value='".escape($row['call_block_uuid'])."' />\n";
echo " </td>\n";
}
if ($_GET['show'] == 'all' && permission_exists('domain_all')) {
echo " <td>".escape($_SESSION['domains'][$row['domain_uuid']]['domain_name'])."</td>\n";
}
echo " <td class='center'>";
switch ($row['call_block_direction']) {
case "inbound": echo "<img src='/themes/".$_SESSION['domain']['template']['name']."/images/icon_cdr_inbound_answered.png' style='border: none;' title='".$text['label-inbound']."'>\n"; break;
case "outbound": echo "<img src='/themes/".$_SESSION['domain']['template']['name']."/images/icon_cdr_outbound_answered.png' style='border: none;' title='".$text['label-outbound']."'>\n"; break;
}
echo " </td>\n";
echo " <td class='center'>";
if (strlen($row['extension']) == 0) {
echo $text['label-all'];
echo "<a href='call_block_edit.php?id=".$row['call_block_uuid']."'>".$row['call_block_number']."</a>";
}
else {
echo escape($row['extension']);
echo $row['call_block_number'];
}
echo " </td>\n";
echo " <td>".escape($row['call_block_name'])."</td>\n";
echo " <td>";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['call_block_name']."</td>\n";
echo " <td valign='top' class='".$row_style[$c]."' style='text-align: center;'>".$row['call_block_count']."</td>\n";
if (defined('TIME_24HR') && TIME_24HR == 1) {
$tmp_date_added = date("j M Y H:i:s", $row['date_added']);
} else {
$tmp_date_added = date("j M Y h:i:sa", $row['date_added']);
}
echo " <td valign='top' class='".$row_style[$c]."'>".$tmp_date_added."</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['call_block_action']."</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".ucwords($row['call_block_enabled'])."</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_block_edit')) {
echo "<a href='".$list_row_url."'>".escape($row['call_block_country_code'])."</a>";
}
else {
echo escape($row['call_block_country_code']);
}
echo " </td>\n";
echo " <td>";
if (permission_exists('call_block_edit')) {
echo "<a href='".$list_row_url."'>".escape(format_phone($row['call_block_number']))."</a>";
}
else {
echo escape(format_phone($row['call_block_number']));
}
echo " </td>\n";
echo " <td class='center hide-sm-dn'>".escape($row['call_block_count'])."</td>\n";
echo " <td>".$text['label-'.$row['call_block_app']]." ".escape($row['call_block_data'])."</td>\n";
if (permission_exists('call_block_edit')) {
echo " <td class='no-link center'>";
echo button::create(['type'=>'submit','class'=>'link','label'=>$text['label-'.$row['call_block_enabled']],'title'=>$text['button-toggle'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('toggle'); list_form_submit('form_list')"]);
}
else {
echo " <td class='center'>";
echo $text['label-'.$row['call_block_enabled']];
}
echo " </td>\n";
echo " <td class='no-wrap'>".date('j M Y', $row['date_added'])." <span class='hide-sm-dn'>".date(($_SESSION['domain']['time_format']['text'] == '12h' ? 'h:i:s a' : 'H:i:s'), $row['date_added'])."</span></td>\n";
echo " <td class='description overflow hide-md-dn'>".escape($row['call_block_description'])."</td>\n";
if (permission_exists('call_block_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>";
echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
echo " </td>\n";
echo "<a href='call_block_edit.php?id=".$row['call_block_uuid']."' alt='".$text['button-edit']."'>$v_link_label_edit</a>";
}
if (permission_exists('call_block_delete')) {
echo "<a href='call_block_delete.php?id=".$row['call_block_uuid']."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete']."')\">$v_link_label_delete</a>";
};
echo " </td>";
echo "</tr>\n";
$x++;
}
unset($result);
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
//complete the content
echo "<tr>\n";
echo "<td colspan='11' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap>$paging_controls</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_block_add')) {
echo "<a href='call_block_edit.php' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
echo "</table>";
echo "<br /><br />";
//include the footer
require_once "resources/footer.php";
?>
?>
+110
View File
@@ -0,0 +1,110 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Call Block is written by Gerrit Visser <gerrit308@gmail.com>
*/
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_block_edit') || permission_exists('call_block_add')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//action add from cdr
if (isset($_REQUEST["cdr_id"])) {
$action = "cdr_add";
$cdr_uuid = check_str($_REQUEST["cdr_id"]);
$call_block_name = check_str($_REQUEST["name"]);
// get the caller id info from cdr that user chose
$sql = "select ";
if ($call_block_name == '') {
$sql .= "caller_id_name, ";
}
$sql .= "caller_id_number ";
$sql .= "from v_xml_cdr ";
$sql .= "where uuid = '".$cdr_uuid."' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetch();
unset ($prep_statement);
$call_block_name = ($call_block_name == '') ? $result["caller_id_name"] : $call_block_name;
$call_block_number = $result["caller_id_number"];
$call_block_enabled = "true";
$block_call_action = "Reject";
//ensure call block is enabled in the dialplan
$sql = "update v_dialplans set ";
$sql .= "dialplan_enabled = 'true' ";
$sql .= "where ";
$sql .= "app_uuid = 'b1b31930-d0ee-4395-a891-04df94599f1f' and ";
$sql .= "domain_uuid = '".$domain_uuid."' and ";
$sql .= "dialplan_enabled <> 'true' ";
$db->exec(check_sql($sql));
unset($sql);
// insert call block record
$sql = "insert into v_call_block ";
$sql .= "(";
$sql .= "domain_uuid, ";
$sql .= "call_block_uuid, ";
$sql .= "call_block_name, ";
$sql .= "call_block_number, ";
$sql .= "call_block_count, ";
$sql .= "call_block_action, ";
$sql .= "call_block_enabled, ";
$sql .= "date_added ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".$_SESSION['domain_uuid']."', ";
$sql .= "'".uuid()."', ";
$sql .= "'".$call_block_name."', ";
$sql .= "'".$call_block_number."', ";
$sql .= "0, ";
$sql .= "'".$block_call_action."', ";
$sql .= "'".$call_block_enabled."', ";
$sql .= "'".time()."' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
$_SESSION["message"] = $text['label-add-complete'];
}
header("Location: call_block.php");
?>
+83
View File
@@ -0,0 +1,83 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Call Block is written by Gerrit Visser <gerrit308@gmail.com>
*/
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_block_delete')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//set the variable
if (count($_GET)>0) {
$id = $_GET["id"];
}
//delete the extension
if (strlen($id)>0) {
//read the call_block_number
$sql = " select c.call_block_number, d.domain_name from v_call_block as c ";
$sql .= "JOIN v_domains as d ON c.domain_uuid=d.domain_uuid ";
$sql .= "where c.domain_uuid = '".$_SESSION['domain_uuid']."' ";
$sql .= "and c.call_block_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll();
$result_count = count($result);
if ($result_count > 0) {
$call_block_number = $result[0]["call_block_number"];
$domain_name = $result[0]["domain_name"];
//clear the cache
$cache = new cache;
$cache->delete("app:call_block:".$domain_name.":".$call_block_number);
}
unset ($prep_statement, $sql);
//delete the call block
$sql = "delete from v_call_block ";
$sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' ";
$sql .= "and call_block_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
unset($prep_statement, $sql);
}
//redirect the browser
$_SESSION["message"] = $text['label-delete-complete'];
header("Location: call_block.php");
return;
?>
File diff suppressed because it is too large Load Diff
@@ -1,431 +0,0 @@
<?php
/**
* call block class
*
* @method null download
*/
if (!class_exists('call_block')) {
class call_block {
/**
* declare private variables
*/
private $app_name;
private $app_uuid;
private $permission_prefix;
private $list_page;
private $table;
private $uuid_prefix;
private $toggle_field;
private $toggle_values;
/**
* declare public variables
*/
public $call_block_direction;
public $extension_uuid;
public $call_block_app;
public $call_block_data;
/**
* called when the object is created
*/
public function __construct() {
//assign private variables
$this->app_name = 'call_block';
$this->app_uuid = '9ed63276-e085-4897-839c-4f2e36d92d6c';
$this->permission_prefix = 'call_block_';
$this->list_page = 'call_block.php';
$this->table = 'call_block';
$this->uuid_prefix = 'call_block_';
$this->toggle_field = 'call_block_enabled';
$this->toggle_values = ['true','false'];
}
/**
* called when there are no references to a particular object
* unset the variables used in the class
*/
public function __destruct() {
foreach ($this as $key => $value) {
unset($this->$key);
}
}
/**
* delete records
*/
public function delete($records) {
if (permission_exists($this->permission_prefix.'delete')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//delete multiple records
if (is_array($records) && @sizeof($records) != 0) {
//filter out unchecked, build where clause for below
foreach($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//get necessary call block details
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select ".$this->uuid_prefix."uuid as uuid, call_block_number from v_".$this->table." ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $row) {
$call_block_numbers[$row['uuid']] = $row['call_block_number'];
}
}
unset($sql, $parameters, $rows, $row);
}
//build the delete array
$x = 0;
foreach ($call_block_numbers as $call_block_uuid => $call_block_number) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $call_block_uuid;
$array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$x++;
}
//delete the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//execute delete
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->delete($array);
unset($array);
//clear the cache
$cache = new cache;
foreach ($call_block_numbers as $call_block_number) {
$cache->delete("app:call_block:".$_SESSION['domain_name'].":".$call_block_number);
}
//set message
message::add($text['message-delete']);
}
unset($records);
}
}
}
/**
* toggle records
*/
public function toggle($records) {
if (permission_exists($this->permission_prefix.'edit')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//toggle the checked records
if (is_array($records) && @sizeof($records) != 0) {
//get current toggle state
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select ".$this->uuid_prefix."uuid as uuid, ".$this->toggle_field." as toggle, call_block_number from v_".$this->table." ";
$sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) ";
$sql .= "and ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $row) {
$states[$row['uuid']] = $row['toggle'];
$call_block_numbers[] = $row['call_block_number'];
}
}
unset($sql, $parameters, $rows, $row);
}
//build update array
$x = 0;
foreach ($states as $uuid => $state) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $uuid;
$array[$this->table][$x][$this->toggle_field] = $state == $this->toggle_values[0] ? $this->toggle_values[1] : $this->toggle_values[0];
$x++;
}
//save the changes
if (is_array($array) && @sizeof($array) != 0) {
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
unset($array);
//clear the cache
$cache = new cache;
foreach ($call_block_numbers as $call_block_number) {
$cache->delete("app:call_block:".$_SESSION['domain_name'].":".$call_block_number);
}
//set message
message::add($text['message-toggle']);
}
unset($records, $states);
}
}
}
/**
* copy records
*/
public function copy($records) {
if (permission_exists($this->permission_prefix.'add')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//copy the checked records
if (is_array($records) && @sizeof($records) != 0) {
//get checked records
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//create insert array from existing data
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select * from v_".$this->table." ";
$sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) ";
$sql .= "and ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $x => $row) {
//copy data
$array[$this->table][$x] = $row;
//overwrite
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = uuid();
$array[$this->table][$x]['call_block_description'] = trim($row['call_block_description'].' ('.$text['label-copy'].')');
}
}
unset($sql, $parameters, $rows, $row);
}
//save the changes and set the message
if (is_array($array) && @sizeof($array) != 0) {
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
unset($array);
//set message
message::add($text['message-copy']);
}
unset($records);
}
}
}
/**
* add records
*/
public function add($records) {
if (permission_exists($this->permission_prefix.'add')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//add the checked records
if (is_array($records) && @sizeof($records) != 0) {
//filter checked records
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//get the caller id info from cdrs
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select caller_id_name, caller_id_number, caller_destination from v_xml_cdr ";
$sql .= "where xml_cdr_uuid in (".implode(', ', $uuids).") ";
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
unset($sql);
}
//loop through records
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $x => $row) {
//build insert array
if (permission_exists('call_block_all')) {
$array['call_block'][$x]['call_block_uuid'] = uuid();
$array['call_block'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['call_block'][$x]['call_block_direction'] = $this->call_block_direction;
if (is_uuid($this->extension_uuid)) {
$array['call_block'][$x]['extension_uuid'] = $this->extension_uuid;
}
if ($this->call_block_direction == 'inbound') {
//remove e.164 and country code
$call_block_number = str_replace("+".trim($_SESSION['domain']['country_code']['numeric']), "", trim($row["caller_id_number"]));
//build the array
$array['call_block'][$x]['call_block_country_code'] = trim($_SESSION['domain']['country_code']['numeric']);
$array['call_block'][$x]['call_block_name'] = trim($row["caller_id_name"]);
$array['call_block'][$x]['call_block_number'] = $call_block_number;
$array['call_block'][$x]['call_block_description'] = trim($row["caller_id_name"]);
}
if ($this->call_block_direction == 'outbound') {
$array['call_block'][$x]['call_block_number'] = trim($row["caller_destination"]);
}
$array['call_block'][$x]['call_block_count'] = 0;
$array['call_block'][$x]['call_block_app'] = $this->call_block_app;
$array['call_block'][$x]['call_block_data'] = $this->call_block_data;
$array['call_block'][$x]['call_block_enabled'] = 'true';
$array['call_block'][$x]['date_added'] = time();
$x++;
}
else {
if (is_array($_SESSION['user']['extension'])) {
foreach ($_SESSION['user']['extension'] as $field) {
if (is_uuid($field['extension_uuid'])) {
$array['call_block'][$x]['call_block_uuid'] = uuid();
$array['call_block'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['call_block'][$x]['call_block_direction'] = $this->call_block_direction;
$array['call_block'][$x]['extension_uuid'] = $field['extension_uuid'];
if ($this->call_block_direction == 'inbound') {
//remove e.164 and country code
$call_block_number = str_replace("+".trim($_SESSION['domain']['country_code']['numeric']), "", trim($row["caller_id_number"]));
//build the array
$array['call_block'][$x]['call_block_name'] = trim($row["caller_id_name"]);
$array['call_block'][$x]['call_block_number'] = $call_block_number;
$array['call_block'][$x]['call_block_description'] = trim($row["caller_id_name"]);
}
if ($this->call_block_direction == 'outbound') {
$array['call_block'][$x]['call_block_number'] = trim($row["caller_destination"]);
}
$array['call_block'][$x]['call_block_count'] = 0;
$array['call_block'][$x]['call_block_app'] = $this->call_block_app;
$array['call_block'][$x]['call_block_data'] = $this->call_block_data;
$array['call_block'][$x]['call_block_enabled'] = 'true';
$array['call_block'][$x]['date_added'] = time();
$x++;
}
}
}
}
}
}
//add records
if (is_array($array) && @sizeof($array) != 0) {
//ensure call block is enabled in the dialplan (build update array)
$sql = "select dialplan_uuid from v_dialplans ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and app_uuid = '".$this->app_uuid."' ";
$sql .= "and dialplan_enabled <> 'true' ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters);
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $x => $row) {
$array['dialplans'][$x]['dialplan_uuid'] = $row['dialplan_uuid'];
$array['dialplans'][$x]['dialplan_enabled'] = 'true';
}
}
unset($rows, $parameters);
//grant temporary permissions
$p = new permissions;
$p->add('dialplan_edit', 'temp');
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
$response = $database->message;
unset($array);
//revoke temporary permissions
$p->delete('dialplan_edit', 'temp');
//set message
message::add($text['message-add']);
}
}
}
} //method
} //class
}
?>
+17 -55
View File
@@ -22,69 +22,31 @@
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Callblock is written by Gerrit Visser <gerrit308@gmail.com>
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>
+32 -92
View File
@@ -5,93 +5,46 @@
$apps[$x]['uuid'] = "efc11f6b-ed73-9955-4d4d-3a1bed75a056";
$apps[$x]['category'] = "Switch";;
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.0";
$apps[$x]['version'] = "";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Schedule to immediately make multiple calls to the extension, an IVR Menu, Conference Room, or any other number.";
$apps[$x]['description']['en-gb'] = "Schedule to immediately make multiple calls to the extension, an IVR Menu, Conference Room, or any other number.";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "Methode um sofort mehrere parallele Anrufe an Nebenstellen, Automatische Zentralen, Conferenzräume oder andere Rufnummern zu leiten.";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "Methode um sofort mehrere parallele Anrufe an Nebenstellen, Automatische Zentralen, Conferenzräume oder andere Rufnummern zu leiten.";
$apps[$x]['description']['es-cl'] = "Realiza llamadas inmediatamente a extensiones, IVR, conferencias o cualquier otro número";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "Il fait d' massive appels vers des extensions, IVR, salles de conferences ou quelqu'autre nom.";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "Programmation de campagnes d'appels vers des extensions, IVR, salles de conferences ou tout autre numéro.";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "Methode om direct meerdere parallele oproepen naar toestellen, IVR menu, Conferentie, of een ander nummer te maken.";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "Programação para imediatamente realizar várias chamadas para uma extensão, um menu IVR, Sala de Conferência ou qualquer outro número.";
$apps[$x]['description']['fr-ca'] = "Il fait d' massive appels vers des extensions, IVR, salles de conferences ou quelqu'autre nom.";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "Programação para imediatamente fazer várias chamadas para uma extensão, um IVR, Sala de Conferência, ou qualquer outro número.";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
$apps[$x]['description']['pt-br'] = "";
//permission details
$y=0;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_view";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "50153bbf-78c5-b49e-7bd9-4b3e4b1134e6";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_add";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_edit";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_start_time";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_timeout";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_concurrent_limit";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_caller_id";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_destination_number";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_phone_number_list";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_voicemail_detection";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "broadcast_toll_allow";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_delete";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_all";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_broadcast_send";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][0]['name'] = "call_broadcast_view";
$apps[$x]['permissions'][0]['menu']['uuid'] = "50153bbf-78c5-b49e-7bd9-4b3e4b1134e6";
$apps[$x]['permissions'][0]['groups'][] = "admin";
$apps[$x]['permissions'][0]['groups'][] = "superadmin";
$apps[$x]['permissions'][1]['name'] = "call_broadcast_add";
$apps[$x]['permissions'][1]['groups'][] = "admin";
$apps[$x]['permissions'][1]['groups'][] = "superadmin";
$apps[$x]['permissions'][2]['name'] = "call_broadcast_edit";
$apps[$x]['permissions'][2]['groups'][] = "admin";
$apps[$x]['permissions'][2]['groups'][] = "superadmin";
$apps[$x]['permissions'][3]['name'] = "call_broadcast_delete";
$apps[$x]['permissions'][3]['groups'][] = "admin";
$apps[$x]['permissions'][3]['groups'][] = "superadmin";
$apps[$x]['permissions'][4]['name'] = "call_broadcast_send";
$apps[$x]['permissions'][4]['groups'][] = "admin";
$apps[$x]['permissions'][4]['groups'][] = "superadmin";
//schema details
$y=0;
$apps[$x]['db'][$y]['table']['name'] = "v_call_broadcasts";
$apps[$x]['db'][$y]['table']['parent'] = "";
$z=0;
$y = 0; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = "v_call_broadcasts";
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "id";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "call_broadcast_id";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "serial";
@@ -125,17 +78,11 @@
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "broadcast_description";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "broadcast_desc";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_start_time";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_timeout";
@@ -158,12 +105,10 @@
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_caller_id_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_caller_id_number";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_destination_type";
@@ -172,7 +117,6 @@
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_phone_numbers";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_avmd";
@@ -186,9 +130,5 @@
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_accountcode";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "broadcast_toll_allow";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
?>
?>
File diff suppressed because it is too large Load Diff
+16 -28
View File
@@ -1,31 +1,19 @@
<?php
$y=0;
$apps[$x]['menu'][$y]['title']['en-us'] = "Call Broadcast";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Call Broadcast";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "";
$apps[$x]['menu'][$y]['title']['de-at'] = "Rundrufe";
$apps[$x]['menu'][$y]['title']['de-ch'] = "";
$apps[$x]['menu'][$y]['title']['de-de'] = "Rundrufe";
$apps[$x]['menu'][$y]['title']['es-cl'] = "Llamada Broadcast";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "Campagne d'Appels";
$apps[$x]['menu'][$y]['title']['he-il'] = "";
$apps[$x]['menu'][$y]['title']['it-it'] = "Chiamate Multiple";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Omroep";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Rozsyłanie rozmów";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Chamada em broadcast";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "Chamada em Broadcast";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Массовые вызовы";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Samtalsdistribution";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "Трансляція дзвінка";
$apps[$x]['menu'][$y]['uuid'] = "50153bbf-78c5-b49e-7bd9-4b3e4b1134e6";
$apps[$x]['menu'][$y]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['groups'][] = "admin";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][$y]['path'] = "/app/call_broadcast/call_broadcast.php";
$apps[$x]['menu'][0]['title']['en-us'] = "Call Broadcast";
$apps[$x]['menu'][0]['title']['es-cl'] = "Llamada Broadcast";
$apps[$x]['menu'][0]['title']['fr-fr'] = "Campagne d'Appels";
$apps[$x]['menu'][0]['title']['pt-pt'] = "Chamada em Broadcast";
$apps[$x]['menu'][0]['title']['pt-br'] = "Chamada em broadcast";
$apps[$x]['menu'][0]['title']['pl'] = "Rozsyłanie rozmów";
$apps[$x]['menu'][0]['title']['sv-se'] = "Samtalsdistribution";
$apps[$x]['menu'][0]['title']['uk'] = "Трансляція дзвінка";
$apps[$x]['menu'][0]['title']['de-at'] = "Automatische Anrufe";
$apps[$x]['menu'][0]['uuid'] = "50153bbf-78c5-b49e-7bd9-4b3e4b1134e6";
$apps[$x]['menu'][0]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['groups'][] = "admin";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
$apps[$x]['menu'][0]['path'] = "/app/call_broadcast/call_broadcast.php";
?>
?>
+90 -192
View File
@@ -17,235 +17,133 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2020
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
//check permissions
if (permission_exists('call_broadcast_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_broadcast_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get posted data
if (is_array($_POST['call_broadcasts'])) {
$action = $_POST['action'];
$search = $_POST['search'];
$call_broadcasts = $_POST['call_broadcasts'];
}
//process the http post data by action
if ($action != '' && is_array($call_broadcasts) && @sizeof($call_broadcasts) != 0) {
switch ($action) {
case 'copy':
if (permission_exists('call_broadcast_add')) {
$obj = new call_broadcast;
$obj->copy($call_broadcasts);
}
break;
case 'delete':
if (permission_exists('call_broadcast_delete')) {
$obj = new call_broadcast;
$obj->delete($call_broadcasts);
}
break;
}
header('Location: call_broadcast.php'.($search != '' ? '?search='.urlencode($search) : null));
exit;
}
//add the includes
require_once "resources/header.php";
require_once "resources/paging.php";
//get the http get variables and set them to php variables
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search term
$search = strtolower($_GET["search"]);
if (strlen($search) > 0) {
$sql_search = " (";
$sql_search .= " lower(broadcast_name) like :search ";
$sql_search .= " or lower(broadcast_description) like :search ";
$sql_search .= " or lower(broadcast_caller_id_name) like :search ";
$sql_search .= " or lower(broadcast_caller_id_number) like :search ";
$sql_search .= " or lower(broadcast_phone_numbers) like :search ";
$sql_search .= ") ";
$parameters['search'] = '%'.$search.'%';
}
//show the content
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'><tr>\n";
echo "<td width='50%' nowrap='nowrap' align='left'><b>".$text['title']."</b></td>\n";
echo "<td width='50%' align='right'>&nbsp;</td>\n";
echo "</tr></table>\n";
echo "<br>";
//get the count
$sql = "select count(*) from v_call_broadcasts ";
$sql .= "where true ";
if ($_GET['show'] != "all" || !permission_exists('call_broadcast_all')) {
$sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
}
if (isset($sql_search)) {
$sql .= "and ".$sql_search;
}
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
$sql = "select * from v_call_broadcasts ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$num_rows = count($result);
unset ($prep_statement, $result, $sql);
//prepare the paging
$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50;
$param = "&search=".urlencode($search);
if ($_GET['show'] == "all" && permission_exists('call_broadcast_all')) {
$param .= "&show=all";
}
$rows_per_page = 10;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page);
list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true);
list($paging_controls, $rows_per_page, $var_3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
//get the call broadcasts
$sql = str_replace('count(*)','*', $sql);
$sql .= order_by($order_by, $order);
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$result = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
$sql = "select * from v_call_broadcasts ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$sql .= " limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
unset ($prep_statement, $sql);
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
//include the header
$document['title'] = $text['title-call_broadcast'];
require_once "resources/header.php";
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-call_broadcast']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
if (permission_exists('call_broadcast_add')) {
echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','link'=>'call_broadcast_edit.php']);
}
if (permission_exists('call_broadcast_add') && $result) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
}
if (permission_exists('call_broadcast_delete') && $result) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo "<form id='form_search' class='inline' method='get'>\n";
if (permission_exists('call_broadcast_all')) {
if ($_GET['show'] == 'all') {
echo " <input type='hidden' name='show' value='all'>";
}
else {
echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?type='.urlencode($destination_type).'&show=all'.($search != '' ? "&search=".urlencode($search) : null)]);
}
}
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search']);
//echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'call_broadcast.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if (permission_exists('call_broadcast_add') && $result) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]);
}
if (permission_exists('call_broadcast_delete') && $result) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
echo $text['title_description-call_broadcast']."\n";
echo "<br /><br />\n";
echo "<form id='form_list' method='post'>\n";
echo "<input type='hidden' id='action' name='action' value=''>\n";
echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
if (permission_exists('call_broadcast_add') || permission_exists('call_broadcast_delete')) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".($result ?: "style='visibility: hidden;'").">\n";
echo " </th>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_broadcast_all')) {
echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, $param, "class='shrink'");
}
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo th_order_by('broadcast_name', $text['label-name'], $order_by, $order);
echo th_order_by('broadcast_concurrent_limit', $text['label-concurrent-limit'], $order_by, $order);
echo th_order_by('broadcast_description', $text['label-description'], $order_by, $order);
if (permission_exists('call_broadcast_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>&nbsp;</td>\n";
//echo th_order_by('recordingid', 'Recording', $order_by, $order);
echo "<td class='list_control_icons'>";
if (permission_exists('call_broadcast_add')) {
echo "<a href='call_broadcast_edit.php' alt='add'>$v_link_label_add</a>";
}
echo "</td>\n";
echo "</tr>\n";
if (is_array($result) && @sizeof($result) != 0) {
$x = 0;
if ($result_count > 0) {
foreach($result as $row) {
$tr_link = (permission_exists('call_broadcast_edit')) ? "href='call_broadcast_edit.php?id=".$row['call_broadcast_uuid']."'" : null;
echo "<tr ".$tr_link.">\n";
echo " <td valign='top' class='".$row_style[$c]."'>";
if (permission_exists('call_broadcast_edit')) {
$list_row_url = "call_broadcast_edit.php?id=".urlencode($row['call_broadcast_uuid']);
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
if (permission_exists('call_broadcast_add') || permission_exists('call_broadcast_delete')) {
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='call_broadcasts[$x][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
echo " <input type='hidden' name='call_broadcasts[$x][uuid]' value='".escape($row['call_broadcast_uuid'])."' />\n";
echo " </td>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_broadcast_all')) {
if (strlen($_SESSION['domains'][$row['domain_uuid']]['domain_name']) > 0) {
$domain = $_SESSION['domains'][$row['domain_uuid']]['domain_name'];
}
else {
$domain = $text['label-global'];
}
echo " <td>".escape($domain)."</td>\n";
}
echo " <td>";
if (permission_exists('call_broadcast_edit')) {
echo "<a href='".$list_row_url."'>".escape($row['broadcast_name'])."</a>";
echo "<a href='call_broadcast_edit.php?id=".$row['call_broadcast_uuid']."'>".$row['broadcast_name']."</a>";
}
else {
echo escape($row['broadcast_name']);
echo $row['broadcast_name'];
}
echo " </td>\n";
echo " <td>".escape($row['broadcast_concurrent_limit'])."</td>\n";
echo " <td class='description overflow hide-xs'>".escape($row['broadcast_description'])."</td>\n";
if (permission_exists('call_broadcast_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>";
echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
echo " </td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['broadcast_concurrent_limit']."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row['recordingid']."</td>\n";
echo " <td valign='top' class='row_stylebg'>".$row['broadcast_description']."&nbsp;</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_broadcast_edit')) {
echo "<a href='call_broadcast_edit.php?id=".$row['call_broadcast_uuid']."' alt='".$text['button-edit']."'>$v_link_label_edit</a>";
}
if (permission_exists('call_broadcast_delete')) {
echo "<a href='call_broadcast_delete.php?id=".$row['call_broadcast_uuid']."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete-info']."')\">$v_link_label_delete</a>";
}
echo " </td>\n";
echo "</tr>\n";
$x++;
}
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "<tr>\n";
echo "<td colspan='5' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap>$paging_controls</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_broadcast_add')) {
echo "<a href='call_broadcast_edit.php' alt='add'>$v_link_label_add</a>";
}
unset($result);
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "</table>";
echo "<br><br>";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
//include the footer
require_once "resources/footer.php";
?>
require_once "resources/footer.php";
?>
@@ -0,0 +1,61 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
require "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_broadcast_delete')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the id
if (count($_GET)>0) {
$id = $_GET["id"];
}
//delete the call broadcast entry
if (strlen($id)>0) {
$sql = "delete from v_call_broadcasts ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_broadcast_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
unset($sql);
}
$_SESSION["message"] = $text['confirm-delete'];
header("Location: call_broadcast.php");
return;
?>
+318 -395
View File
@@ -17,144 +17,79 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Luis Daniel Lucio Quiroz <dlucio@okay.com.mx>
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_broadcast_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_broadcast_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//set the action with add or update
if (is_uuid($_REQUEST["id"])) {
if (isset($_REQUEST["id"])) {
$action = "update";
$call_broadcast_uuid = $_REQUEST["id"];
$call_broadcast_uuid = check_str($_REQUEST["id"]);
}
else {
$action = "add";
}
//function to Upload CSV/TXT file
function upload_file($sql, $broadcast_phone_numbers) {
$upload_csv = $sql = '';
if (isset($_FILES['broadcast_phone_numbers_file']) && !empty($_FILES['broadcast_phone_numbers_file']) && $_FILES['broadcast_phone_numbers_file']['size'] > 0) {
$filename=$_FILES["broadcast_phone_numbers_file"]["tmp_name"];
$file_extension = array('application/octet-stream','application/vnd.ms-excel','text/plain','text/csv','text/tsv');
if (in_array($_FILES['broadcast_phone_numbers_file']['type'],$file_extension)) {
$file = fopen($filename, "r");
$count = 0;
while (($getData = fgetcsv($file, 0, "\n")) !== FALSE)
{
$count++;
if ($count == 1) { continue; }
$getData = preg_split('/[ ,|]/', $getData[0], null, PREG_SPLIT_NO_EMPTY);
$separator = $getData[0];
$separator .= (isset($getData[1]) && $getData[1] != '')? '|'.$getData[1] : '';
$separator .= (isset($getData[2]) && $getData[2] != '')? ','.$getData[2] : '';
$separator .= '\n';
$upload_csv .= $separator;
}
fclose($file);
}
else {
return array('code'=>false,'sql'=>'');
}
}
if (!empty($broadcast_phone_numbers) && !empty($upload_csv)) {
$sql .= $broadcast_phone_numbers.'\n'.$upload_csv;
}
elseif (empty($broadcast_phone_numbers) && !empty($upload_csv)) {
$sql .= $upload_csv;
}
else {
$sql .= $broadcast_phone_numbers;
}
return array('code'=>true,'sql'=> $sql);
}
//get the http post variables and set them to php variables
if (count($_POST)>0) {
$broadcast_name = $_POST["broadcast_name"];
$broadcast_start_time = $_POST["broadcast_start_time"];
$broadcast_timeout = $_POST["broadcast_timeout"];
$broadcast_concurrent_limit = $_POST["broadcast_concurrent_limit"];
$broadcast_caller_id_name = $_POST["broadcast_caller_id_name"];
$broadcast_caller_id_number = $_POST["broadcast_caller_id_number"];
$broadcast_destination_type = $_POST["broadcast_destination_type"];
$broadcast_phone_numbers = $_POST["broadcast_phone_numbers"];
$broadcast_avmd = $_POST["broadcast_avmd"];
$broadcast_destination_data = $_POST["broadcast_destination_data"];
$broadcast_description = $_POST["broadcast_description"];
$broadcast_toll_allow = $_POST["broadcast_toll_allow"];
$broadcast_name = check_str($_POST["broadcast_name"]);
$broadcast_description = check_str($_POST["broadcast_description"]);
$broadcast_timeout = check_str($_POST["broadcast_timeout"]);
$broadcast_concurrent_limit = check_str($_POST["broadcast_concurrent_limit"]);
//$recording_uuid = check_str($_POST["recording_uuid"]);
$broadcast_caller_id_name = check_str($_POST["broadcast_caller_id_name"]);
$broadcast_caller_id_number = check_str($_POST["broadcast_caller_id_number"]);
$broadcast_destination_type = check_str($_POST["broadcast_destination_type"]);
$broadcast_phone_numbers = check_str($_POST["broadcast_phone_numbers"]);
$broadcast_avmd = check_str($_POST["broadcast_avmd"]);
$broadcast_destination_data = check_str($_POST["broadcast_destination_data"]);
if (if_group("superadmin")) {
$broadcast_accountcode = $_POST["broadcast_accountcode"];
if (if_group("superadmin")){
$broadcast_accountcode = check_str($_POST["broadcast_accountcode"]);
}
else if (if_group("admin") && file_exists($_SERVER["PROJECT_ROOT"]."/app/billing/app_config.php")){
$sql = "select count(*) ";
$sql .= "from v_billings ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and type_value = :type_value ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['type_value'] = $_POST['accountcode'];
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
$broadcast_accountcode = $num_rows > 0 ? $_POST["broadcast_accountcode"] : $_SESSION['domain_name'];
unset($sql, $parameters, $num_rows);
elseif (if_group("admin") && file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/app/billing/app_config.php")){
$sql_accountcode = "SELECT COUNT(*) as count FROM v_billings WHERE domain_uuid = '".$_SESSION['domain_uuid']."' AND type_value='".$_POST["accountcode"]."'";
$prep_statement_accountcode = $db->prepare(check_sql($sql_accountcode));
$prep_statement_accountcode->execute();
$row_accountcode = $prep_statement_accountcode->fetch(PDO::FETCH_ASSOC);
if ($row_accountcode['count'] > 0) {
$broadcast_accountcode = check_str($_POST["broadcast_accountcode"]);
}
else {
$broadcast_accountcode = $_SESSION['domain_name'];
}
unset($sql_accountcode, $prep_statement_accountcode, $row_accountcode);
}
else{
$broadcast_accountcode = $_SESSION['domain_name'];
}
}
if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
//delete the call broadcast
if (permission_exists('call_broadcast_delete')) {
if ($_POST['action'] == 'delete' && is_uuid($call_broadcast_uuid)) {
//prepare
$call_broadcasts[0]['checked'] = 'true';
$call_broadcasts[0]['uuid'] = $call_broadcast_uuid;
//delete
$obj = new call_broadcast;
$obj->delete($call_broadcasts);
//redirect
header('Location: call_broadcast.php');
exit;
}
}
if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
$msg = '';
if ($action == "update") {
$call_broadcast_uuid = $_POST["call_broadcast_uuid"];
$call_broadcast_uuid = check_str($_POST["call_broadcast_uuid"]);
}
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: call_broadcast.php');
exit;
}
//check for all required data
if (strlen($broadcast_name) == 0) { $msg .= "".$text['confirm-name']."<br>\n"; }
//if (strlen($broadcast_description) == 0) { $msg .= "Please provide: Description<br>\n"; }
@@ -182,92 +117,111 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
//add or update the database
if ($_POST["persistformvar"] != "true") {
//prep insert
if ($action == "add" && permission_exists('call_broadcast_add')) {
//begin insert array
$call_broadcast_uuid = uuid();
$array['call_broadcasts'][0]['call_broadcast_uuid'] = $call_broadcast_uuid;
//set message
message::add($text['confirm-add']);
//set return url on error
$error_return_url = "call_broadcast_edit.php";
if ($action == "add" && permission_exists('call_broadcast_add')) {
$call_broadcast_uuid = uuid();
$sql = "insert into v_call_broadcasts ";
$sql .= "(";
$sql .= "domain_uuid, ";
$sql .= "call_broadcast_uuid, ";
$sql .= "broadcast_name, ";
$sql .= "broadcast_description, ";
$sql .= "broadcast_timeout, ";
$sql .= "broadcast_concurrent_limit, ";
//$sql .= "recording_uuid, ";
$sql .= "broadcast_caller_id_name, ";
$sql .= "broadcast_caller_id_number, ";
$sql .= "broadcast_destination_type, ";
$sql .= "broadcast_phone_numbers, ";
$sql .= "broadcast_avmd, ";
$sql .= "broadcast_destination_data, ";
$sql .= "broadcast_accountcode ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'$domain_uuid', ";
$sql .= "'$call_broadcast_uuid', ";
$sql .= "'$broadcast_name', ";
$sql .= "'$broadcast_description', ";
if (strlen($broadcast_timeout) == 0) {
$sql .= "null, ";
}
//prep update
if ($action == "update" && permission_exists('call_broadcast_edit')) {
//begin update array
$array['call_broadcasts'][0]['call_broadcast_uuid'] = $call_broadcast_uuid;
//set message
message::add($text['confirm-update']);
//set return url on error
$error_return_url = "call_broadcast_edit.php?id=".urlencode($_GET['id']);
else {
$sql .= "'$broadcast_timeout', ";
}
//execute
if (is_array($array) && @sizeof($array) != 0) {
//add file selection and download sample
$file_res = upload_file($sql, $broadcast_phone_numbers);
if ($file_res['code'] != true) {
$_SESSION["message_mood"] = "negative";
$_SESSION["message"] = $text['file-error'];
header("Location: ".$error_return_url);
exit;
}
$broadcast_phone_numbers = $file_res['sql'];
//common array items
$array['call_broadcasts'][0]['domain_uuid'] = $domain_uuid;
$array['call_broadcasts'][0]['broadcast_name'] = $broadcast_name;
$array['call_broadcasts'][0]['broadcast_start_time'] = $broadcast_start_time;
$array['call_broadcasts'][0]['broadcast_timeout'] = strlen($broadcast_timeout) != 0 ? $broadcast_timeout : null;
$array['call_broadcasts'][0]['broadcast_concurrent_limit'] = strlen($broadcast_concurrent_limit) != 0 ? $broadcast_concurrent_limit : null;
$array['call_broadcasts'][0]['broadcast_caller_id_name'] = $broadcast_caller_id_name;
$array['call_broadcasts'][0]['broadcast_caller_id_number'] = $broadcast_caller_id_number;
$array['call_broadcasts'][0]['broadcast_destination_type'] = $broadcast_destination_type;
$array['call_broadcasts'][0]['broadcast_phone_numbers'] = $broadcast_phone_numbers;
$array['call_broadcasts'][0]['broadcast_avmd'] = $broadcast_avmd;
$array['call_broadcasts'][0]['broadcast_destination_data'] = $broadcast_destination_data;
$array['call_broadcasts'][0]['broadcast_accountcode'] = $broadcast_accountcode;
$array['call_broadcasts'][0]['broadcast_description'] = $broadcast_description;
$array['call_broadcasts'][0]['broadcast_toll_allow'] = $broadcast_toll_allow;
//execute
$database = new database;
$database->app_name = 'call_broadcast';
$database->app_uuid = 'efc11f6b-ed73-9955-4d4d-3a1bed75a056';
$database->save($array);
unset($array);
//redirect
header("Location: call_broadcast.php");
exit;
if (strlen($broadcast_concurrent_limit) == 0) {
$sql .= "null, ";
}
else {
$sql .= "'$broadcast_concurrent_limit', ";
}
//$sql .= "'$recording_uuid', ";
$sql .= "'$broadcast_caller_id_name', ";
$sql .= "'$broadcast_caller_id_number', ";
$sql .= "'$broadcast_destination_type', ";
$sql .= "'$broadcast_phone_numbers', ";
$sql .= "'$broadcast_avmd', ";
$sql .= "'$broadcast_destination_data', ";
$sql .= "'$broadcast_accountcode' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
}
}
$_SESSION["message"] = $text['confirm-add'];
header("Location: call_broadcast.php");
return;
} //if ($action == "add")
if ($action == "update" && permission_exists('call_broadcast_edit')) {
$sql = "update v_call_broadcasts set ";
$sql .= "broadcast_name = '$broadcast_name', ";
$sql .= "broadcast_description = '$broadcast_description', ";
if (strlen($broadcast_timeout) == 0) {
$sql .= "broadcast_timeout = null, ";
}
else {
$sql .= "broadcast_timeout = '$broadcast_timeout', ";
}
if (strlen($broadcast_concurrent_limit) == 0) {
$sql .= "broadcast_concurrent_limit = null, ";
}
else {
$sql .= "broadcast_concurrent_limit = '$broadcast_concurrent_limit', ";
}
//$sql .= "recording_uuid = '$recording_uuid', ";
$sql .= "broadcast_caller_id_name = '$broadcast_caller_id_name', ";
$sql .= "broadcast_caller_id_number = '$broadcast_caller_id_number', ";
$sql .= "broadcast_destination_type = '$broadcast_destination_type', ";
$sql .= "broadcast_phone_numbers = '$broadcast_phone_numbers', ";
$sql .= "broadcast_avmd = '$broadcast_avmd', ";
$sql .= "broadcast_destination_data = '$broadcast_destination_data', ";
$sql .= "broadcast_accountcode = '$broadcast_accountcode' ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_broadcast_uuid = '$call_broadcast_uuid'";
echo $sql."<br><br>";
$db->exec(check_sql($sql));
unset($sql);
$_SESSION["message"] = $text['confirm-update'];
header("Location: call_broadcast.php");
return;
} //if ($action == "update")
} //if ($_POST["persistformvar"] != "true")
} //(count($_POST)>0 && strlen($_POST["persistformvar"]) == 0)
//pre-populate the form
if (count($_GET) > 0 && $_POST["persistformvar"] != "true") {
if (count($_GET)>0 && $_POST["persistformvar"] != "true") {
$call_broadcast_uuid = $_GET["id"];
$sql = "select * from v_call_broadcasts ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and call_broadcast_uuid = :call_broadcast_uuid ";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['call_broadcast_uuid'] = $call_broadcast_uuid;
$database = new database;
$row = $database->select($sql, $parameters, 'row');
if (is_array($row) && @sizeof($row) != 0) {
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_broadcast_uuid = '$call_broadcast_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
while($row = $prep_statement->fetch()) {
$broadcast_name = $row["broadcast_name"];
$broadcast_start_time = $row["broadcast_start_time"];
$broadcast_description = $row["broadcast_description"];
$broadcast_timeout = $row["broadcast_timeout"];
$broadcast_concurrent_limit = $row["broadcast_concurrent_limit"];
//$recording_uuid = $row["recording_uuid"];
$broadcast_caller_id_name = $row["broadcast_caller_id_name"];
$broadcast_caller_id_number = $row["broadcast_caller_id_number"];
$broadcast_destination_type = $row["broadcast_destination_type"];
@@ -275,107 +229,107 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
$broadcast_avmd = $row["broadcast_avmd"];
$broadcast_destination_data = $row["broadcast_destination_data"];
$broadcast_accountcode = $row["broadcast_accountcode"];
$broadcast_description = $row["broadcast_description"];
$broadcast_toll_allow = $row["broadcast_toll_allow"];
break; //limit to 1 row
}
unset($sql, $parameters, $row);
unset ($prep_statement);
}
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//begin header
$document['title'] = $text['title-call_broadcast'];
require_once "resources/header.php";
//begin content
echo "<form name='frm' id='frm' method='post' enctype='multipart/form-data'>\n";
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-call_broadcast']."</b></div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>'call_broadcast.php']);
if ($action == "update") {
echo button::create(['type'=>'button','label'=>$text['button-start'],'icon'=>$_SESSION['theme']['button_icon_start'],'style'=>'margin-left: 15px;','link'=>'call_broadcast_send.php?id='.urlencode($call_broadcast_uuid)]);
echo button::create(['type'=>'button','label'=>$text['button-stop'],'icon'=>$_SESSION['theme']['button_icon_stop'],'link'=>'call_broadcast_stop.php?id='.urlencode($call_broadcast_uuid)]);
if (permission_exists('call_broadcast_delete')) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'name'=>'btn_delete','style'=>'margin-left: 15px;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
}
echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','style'=>'margin-left: 15px;']);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if ($action == 'update' && permission_exists('call_broadcast_delete')) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]);
}
echo "<form method='post' name='frm' action=''>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td width='30%' class='vncellreq' valign='top' align='left' nowrap>\n";
echo "<td width='30%' align='left' nowrap='nowrap'><b>".$text['label-call-broadcast']."</b></td>\n";
echo "<td width='70%' align='right'>\n";
echo " <input type='button' class='btn' name='back' alt='".$text['button-back']."' onclick=\"window.location='call_broadcast.php'\" value='".$text['button-back']."'>\n";
if ($action == "update") {
echo "<input type='hidden' name='call_broadcast_uuid' value='$call_broadcast_uuid'>\n";
echo "<input type='button' class='btn' name='' alt='".$text['button-send']."' onclick=\"window.location='call_broadcast_send.php?id=$call_broadcast_uuid'\" value='".$text['button-send']."'>\n";
echo "<input type='button' class='btn' name='' alt='".$text['button-stop']."' onclick=\"window.location='call_broadcast_stop.php?id=".$call_broadcast_uuid."'\" value='".$text['button-stop']."'>\n";
}
echo " <input type='submit' class='btn' name='submit' value='".$text['button-save']."'>\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " ".$text['label-name']."\n";
echo "</td>\n";
echo "<td width='70%' class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_name' maxlength='255' value=\"".escape($broadcast_name)."\" required='required'>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_name' maxlength='255' value=\"$broadcast_name\" required='required'>\n";
echo "<br />\n";
echo "".$text['description-name']."\n";
echo "</td>\n";
echo "</tr>\n";
if (permission_exists('call_broadcast_start_time')) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-start_time']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='broadcast_start_time' value=\"".escape($broadcast_start_time)."\">\n";
echo "<br />\n";
echo "".$text['description-start_time']."\n";
echo "</td>\n";
echo "</tr>\n";
}
if (if_group("superadmin")){
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-accountcode']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
if ($action == "add") { $accountcode=$_SESSION['domain_name']; }
echo " <input class='formfld' type='text' name='broadcast_accountcode' maxlength='255' value=\"".escape($broadcast_accountcode)."\">\n";
if ($action == "add"){ $accountcode=$_SESSION['domain_name']; }
echo " <input class='formfld' type='text' name='broadcast_accountcode' maxlength='255' value=\"$broadcast_accountcode\">\n";
echo "<br />\n";
echo $text['description-accountcode']."\n";
echo "</td>\n";
echo "</tr>\n";
}elseif (if_group("admin") && file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/app/billing/app_config.php")){
$sql_accountcode = "SELECT type_value FROM v_billings WHERE domain_uuid = '".$_SESSION['domain_uuid']."'";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-accountcode']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select name='broadcast_accountcode' id='broadcast_accountcode' class='formfld'>\n";
$prep_statement_accountcode = $db->prepare(check_sql($sql_accountcode));
$prep_statement_accountcode->execute();
$result_accountcode = $prep_statement_accountcode->fetchAll(PDO::FETCH_NAMED);
foreach ($result_accountcode as &$row_accountcode) {
$selected = '';
if (($action == "add") && ($row_accountcode['type_value'] == $_SESSION['domain_name'])){
$selected='selected="selected"';
}
elseif ($row_accountcode['type_value'] == $accountcode){
$selected='selected="selected"';
}
echo " <option value=\"".$row_accountcode['type_value']."\" $selected>".$row_accountcode['type_value']."</option>\n";
}
unset($sql_accountcode, $prep_statement_accountcode, $result_accountcode);
echo "</select>";
echo "<br />\n";
echo $text['description-accountcode']."\n";
echo "</td>\n";
echo "</tr>\n";
}
if (permission_exists('call_broadcast_timeout')) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-timeout']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='broadcast_timeout' maxlength='255' min='1' step='1' value=\"".escape($broadcast_timeout)."\">\n";
echo "<br />\n";
echo "".$text['description-timeout']."\n";
echo "</td>\n";
echo "</tr>\n";
}
if (permission_exists('call_broadcast_concurrent_limit')) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-concurrent-limit']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='broadcast_concurrent_limit' maxlength='255' min='1' step='1' value=\"".escape($broadcast_concurrent_limit)."\">\n";
echo "<br />\n";
echo "".$text['description-concurrent-limit']."\n";
echo "</td>\n";
echo "</tr>\n";
}
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-timeout']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='broadcast_timeout' maxlength='255' min='1' step='1' value=\"$broadcast_timeout\">\n";
echo "<br />\n";
echo "".$text['description-timeout']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-concurrent-limit']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='broadcast_concurrent_limit' maxlength='255' min='1' step='1' value=\"$broadcast_concurrent_limit\">\n";
echo "<br />\n";
echo "".$text['description-concurrent-limit']."\n";
echo "</td>\n";
echo "</tr>\n";
//echo "<tr>\n";
//echo "<td class='vncell' valign='top' align='left' nowrap>\n";
@@ -386,21 +340,18 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
//echo " <option></option>\n";
//$sql = "";
//$sql .= "select * from v_recordings ";
//$sql .= "where domain_uuid = :domain_uuid ";
//$parameters['domain_uuid'] = $domain_uuid;
//$database = new database;
//$rows = $database->select($sql, $parameters, 'all');
//if (is_array($rows) && @sizeof($rows) != 0) {
// foreach ($rows as $row) {
// if ($recording_uuid == $row['recording_uuid']) {
// echo " <option value='".$row['recording_uuid']."' selected='yes'>".escape($row['recordingname'])."</option>\n";
// }
// else {
// echo " <option value='".$row['recording_uuid']."'>".escape($row['recordingname'])."</option>\n";
// }
//$sql .= "where domain_uuid = '$domain_uuid' ";
//$prep_statement = $db->prepare(check_sql($sql));
//$prep_statement->execute();
//while($row = $prep_statement->fetch()) {
// if ($recording_uuid == $row['recording_uuid']) {
// echo " <option value='".$row['recording_uuid']."' selected='yes'>".$row['recordingname']."</option>\n";
// }
// else {
// echo " <option value='".$row['recording_uuid']."'>".$row['recordingname']."</option>\n";
// }
//}
//unset($sql, $parameters, $rows, $row);
//unset ($prep_statement);
//echo " </select>\n";
//echo "<br />\n";
//echo "Recording to play when the call is answered.<br />\n";
@@ -408,36 +359,35 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
//echo "</td>\n";
//echo "</tr>\n";
if (permission_exists("call_broadcast_caller_id")) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-caller-id-name']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_caller_id_name' maxlength='255' value=\"".escape($broadcast_caller_id_name)."\">\n";
echo "<br />\n";
echo "".$text['description-caller-id-name']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-callerid-number']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='broadcast_caller_id_number' maxlength='255' min='0' step='1' value=\"".escape($broadcast_caller_id_number)."\">\n";
echo "<br />\n";
echo "".$text['description-caller-id-number']."\n";
echo "</td>\n";
echo "</tr>\n";
}
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-caller-id-name']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_caller_id_name' maxlength='255' value=\"$broadcast_caller_id_name\">\n";
echo "<br />\n";
echo "".$text['description-caller-id-name']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-callerid-number']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='broadcast_caller_id_number' maxlength='255' min='0' step='1' value=\"$broadcast_caller_id_number\">\n";
echo "<br />\n";
echo "".$text['description-caller-id-number']."\n";
echo "</td>\n";
echo "</tr>\n";
/*
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " Type\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_destination_type' maxlength='255' value=\"".escape($broadcast_destination_type)."\">\n";
echo " <input class='formfld' type='text' name='broadcast_destination_type' maxlength='255' value=\"$broadcast_destination_type\">\n";
echo "<br />\n";
echo "Optional, Destination Type: bridge, transfer, voicemail, conference, fifo, etc.\n";
echo "</td>\n";
@@ -448,7 +398,7 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
echo " Destination\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_destination_data' maxlength='255' value=\"".escape($broadcast_destination_data)."\">\n";
echo " <input class='formfld' type='text' name='broadcast_destination_data' maxlength='255' value=\"$broadcast_destination_data\">\n";
echo "<br />\n";
echo "Optional, send the call to an auto attendant, conference room, or any other destination. <br /><br />\n";
echo "conference (8khz): 01-\${domain}@default <br />\n";
@@ -459,82 +409,62 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
echo "</tr>\n";
*/
if (permission_exists('call_broadcast_destination_number')) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-destination']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_destination_data' maxlength='255' value=\"".escape($broadcast_destination_data)."\">\n";
echo "<br />\n";
echo "".$text['description-destination']." <br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
}
if (permission_exists('call_broadcast_phone_number_list')) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-phone']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-destination']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_destination_data' maxlength='255' value=\"$broadcast_destination_data\">\n";
echo "<br />\n";
echo "".$text['description-destination']." <br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
echo " <textarea class='formfld' style='width: 300px; height: 200px;' type='text' name='broadcast_phone_numbers' placeholder=\"".$text['label-list_example']."\">".str_replace('\n', "\n", $broadcast_phone_numbers)."</textarea>";
echo "<br><br>";
echo " <input type='file' name='broadcast_phone_numbers_file' accept='.csv,.txt' style=\"display:inline-block;\"><a href='sample.csv' download><i class='fas fa-cloud-download-alt' style='margin-right: 5px;'></i>".$text['label-sample_file']."</a>";
echo "<br /><br />";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-phone']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <textarea class='formfld' type='text' name='broadcast_phone_numbers' rows='10'>$broadcast_phone_numbers</textarea>\n";
echo "<br />\n";
echo "".$text['description-phone']." <br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-avmd']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='broadcast_avmd'>\n";
echo " <option value='false' ".(($broadcast_avmd == "false") ? "selected='selected'" : null).">".$text['option-false']."</option>\n";
echo " <option value='true' ".(($broadcast_avmd == "true") ? "selected='selected'" : null).">".$text['option-true']."</option>\n";
echo " </select>\n";
echo "<br />\n";
echo "<br />\n";
echo $text['description-avmd']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "".$text['description-phone']." <br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
}
if (permission_exists('call_broadcast_voicemail_detection')) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-avmd']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='broadcast_avmd'>\n";
echo " <option value='false' ".(($broadcast_avmd == "false") ? "selected='selected'" : null).">".$text['option-false']."</option>\n";
echo " <option value='true' ".(($broadcast_avmd == "true") ? "selected='selected'" : null).">".$text['option-true']."</option>\n";
echo " </select>\n";
echo "<br />\n";
echo "<br />\n";
echo $text['description-avmd']."\n";
echo "</td>\n";
echo "</tr>\n";
}
if (permission_exists('broadcast_toll_allow')) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-broadcast_toll_allow']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_toll_allow' maxlength='255' value=".escape($broadcast_toll_allow).">\n";
echo "<br />\n";
echo $text['description-broadcast_toll_allow']."\n";
echo "</td>\n";
echo "</tr>\n";
}
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-description']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='broadcast_description' maxlength='255' value=\"".escape($broadcast_description)."\">\n";
echo " <input class='formfld' type='text' name='broadcast_description' maxlength='255' value=\"$broadcast_description\">\n";
echo "<br />\n";
echo "".$text['description-info']."\n";
echo "</td>\n";
echo "</tr>\n";
echo " <tr>\n";
echo " <td colspan='2' align='right'>\n";
echo " <br>";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-save']."'>\n";
echo " </td>\n";
echo " </tr>";
echo "</table>";
echo "<br><br>";
if ($action == "update") {
echo "<input type='hidden' name='call_broadcast_uuid' value='".escape($call_broadcast_uuid)."'>\n";
}
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>";
/*
@@ -560,24 +490,22 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
echo " <select name='user_category' class='formfld'>\n";
echo " <option></option>\n";
$sql = "";
$sql .= "select distinct user_category as user_category from v_users ";
//$sql .= "where domain_uuid = :domain_uuid ";
//$parameters['domain_uuid'] = $domain_uuid;
$database = new database;
$rows = $database->select($sql, null, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $row) {
if ($user_category == $row['user_category']) {
echo " <option value='".escape($row['user_category'])."' selected='yes'>".escape($row['user_category'])."</option>\n";
}
else {
echo " <option value='".escape($row['user_category'])."'>".escape($row['user_category'])."</option>\n";
}
$sql .= "select distinct(user_category) as user_category from v_users ";
//$sql .= "where domain_uuid = '$domain_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
while($row = $prep_statement->fetch()) {
if ($user_category == $row['user_category']) {
echo " <option value='".$row['user_category']."' selected='yes'>".$row['user_category']."</option>\n";
}
else {
echo " <option value='".$row['user_category']."'>".$row['user_category']."</option>\n";
}
}
unset($sql, $parameters, $rows, $row);
unset ($prep_statement);
echo " </select>\n";
echo "<br />\n";
//echo "zzz.<br />\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
@@ -591,23 +519,21 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
echo " <option></option>\n";
$sql = "";
$sql .= "select * from v_groups ";
//$sql .= "where domain_uuid = :domain_uuid ";
//$parameters['domain_uuid'] = $domain_uuid;
$database = new database;
$rows = $database->select($sql, null, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $row) {
if ($recording_uuid == $row['group_name']) {
echo " <option value='".escape($row['group_name'])."' selected='yes'>".escape($row['group_name'])."</option>\n";
}
else {
echo " <option value='".escape($row['group_name'])."'>".escape($row['group_name'])."</option>\n";
}
//$sql .= "where domain_uuid = '$domain_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
while($row = $prep_statement->fetch()) {
if ($recording_uuid == $row['group_name']) {
echo " <option value='".$row['group_name']."' selected='yes'>".$row['group_name']."</option>\n";
}
else {
echo " <option value='".$row['group_name']."'>".$row['group_name']."</option>\n";
}
}
unset($sql, $parameters, $rows, $row);
unset ($prep_statement);
echo " </select>\n";
echo "<br />\n";
//echo "zzz.<br />\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
@@ -622,21 +548,18 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
echo " <option></option>\n";
$sql = "";
$sql .= "select * from v_gateways ";
//$sql .= "where domain_uuid = :domain_uuid ";
//$parameters['domain_uuid'] = $domain_uuid;
$database = new database;
$rows = $database->select($sql, null, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $row) {
if ($gateway == $row['gateway']) {
echo " <option value='".escape($row['gateway'])."' selected='yes'>".escape($row['gateway'])."</option>\n";
}
else {
echo " <option value='".escape($row['gateway'])."'>".escape($row['gateway'])."</option>\n";
}
//$sql .= "where domain_uuid = '$domain_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
while($row = $prep_statement->fetch()) {
if ($gateway == $row['gateway']) {
echo " <option value='".$row['gateway']."' selected='yes'>".$row['gateway']."</option>\n";
}
else {
echo " <option value='".$row['gateway']."'>".$row['gateway']."</option>\n";
}
}
unset($sql, $parameters, $rows, $row);
unset ($prep_statement);
echo " <option value='loopback'>loopback</option>\n";
echo " </select>\n";
echo "<br />\n";
@@ -659,6 +582,7 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
//echo " <option value='zzz'>cell</option>\n";
echo " </select>\n";
echo "<br />\n";
//echo "zzz.<br />\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
@@ -677,6 +601,7 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
//echo " <option value='zzz'>cell</option>\n";
echo " </select>\n";
echo "<br />\n";
//echo "zzz.<br />\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
@@ -684,7 +609,7 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
echo " <tr>\n";
echo " <td colspan='2' align='right'>\n";
echo " <input type='hidden' name='call_broadcast_uuid' value='".escape($call_broadcast_uuid)."'>\n";
echo " <input type='hidden' name='call_broadcast_uuid' value='$call_broadcast_uuid'>\n";
echo " <input type='submit' name='submit' class='btn' value='Send Broadcast'>\n";
echo " </td>\n";
echo " </tr>";
@@ -694,7 +619,5 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
}
*/
//include the footer
require_once "resources/footer.php";
require_once "resources/footer.php";
?>
+227 -98
View File
@@ -17,27 +17,23 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2020
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Luis Daniel Lucio Quiroz <dlucio@okay.com.mx>
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//chec permissions
if (permission_exists('call_broadcast_send')) {
//access granted
}
else {
echo "access denied";
exit;
}
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_broadcast_send')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
@@ -46,23 +42,22 @@
//set the max execution time to 1 hour
ini_set(max_execution_time,3600);
//define the asynchronous command function
function cmd_async($cmd) {
//windows
if (stristr(PHP_OS, 'WIN')) {
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w") // stderr
);
$process = proc_open("start ".$cmd, $descriptorspec, $pipes);
//sleep(1);
proc_close($process);
}
else { //posix
exec ($cmd ." /dev/null 2>&1 &");
}
function cmd_async($cmd) {
//windows
if (stristr(PHP_OS, 'WIN')) {
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w") // stderr
);
$process = proc_open("start ".$cmd, $descriptorspec, $pipes);
//sleep(1);
proc_close($process);
}
else { //posix
exec ($cmd ." /dev/null 2>&1 &");
}
}
//get the http get values and set as php variables
$group_name = $_GET["group_name"];
@@ -74,15 +69,13 @@
//get the call broadcast details from the database
$sql = "select * from v_call_broadcasts ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and call_broadcast_uuid = :call_broadcast_uuid ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['call_broadcast_uuid'] = $call_broadcast_uuid;
$database = new database;
$row = $database->select($sql, $parameters, 'row');
if (is_array($row) && sizeof($row) != 0) {
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_broadcast_uuid = '$call_broadcast_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
while($row = $prep_statement->fetch()) {
$broadcast_name = $row["broadcast_name"];
$broadcast_start_time = $row["broadcast_start_time"];
$broadcast_description = $row["broadcast_description"];
$broadcast_timeout = $row["broadcast_timeout"];
$broadcast_concurrent_limit = $row["broadcast_concurrent_limit"];
$recordingid = $row["recordingid"];
@@ -93,7 +86,6 @@
$broadcast_destination_data = $row["broadcast_destination_data"];
$broadcast_avmd = $row["broadcast_avmd"];
$broadcast_accountcode = $row["broadcast_accountcode"];
$broadcast_description = $row["broadcast_description"];
//if (strlen($row["broadcast_destination_data"]) == 0) {
// $broadcast_destination_application = '';
// $broadcast_destination_data = '';
@@ -103,10 +95,10 @@
// $broadcast_destination_application = $broadcast_destination_array[0];
// $broadcast_destination_data = $broadcast_destination_array[1];
//}
break; //limit to 1 row
}
unset($sql, $parameters, $row);
unset ($prep_statement);
//set the defaults
if (strlen($broadcast_caller_id_name) == 0) {
$broadcast_caller_id_name = "anonymous";
}
@@ -116,15 +108,9 @@
if (strlen($broadcast_accountcode) == 0) {
$broadcast_accountcode = $_SESSION['domain_name'];;
}
if (isset($broadcast_start_time) && is_numeric($broadcast_start_time)) {
$sched_seconds = $broadcast_start_time;
}
else {
$sched_seconds = '3';
}
//get the recording name
//$recording_filename = get_recording_filename($recordingid);
//get the recording name
//$recording_filename = get_recording_filename($recordingid);
//remove unsafe characters from the name
$broadcast_name = str_replace(" ", "", $broadcast_name);
@@ -157,6 +143,7 @@
if (strlen($broadcast_phone_numbers) > 0) {
$broadcast_phone_number_array = explode ("\n", $broadcast_phone_numbers);
$count = 1;
$sched_seconds = '3';
foreach ($broadcast_phone_number_array as $tmp_value) {
//set the variables
$tmp_value = str_replace(";", "|", $tmp_value);
@@ -165,57 +152,55 @@
//remove the number formatting
$phone_1 = preg_replace('{\D}', '', $tmp_value_array[0]);
if (is_numeric($phone_1)) {
//get the dialplan variables and bridge statement
//$dialplan = new dialplan;
//$dialplan->domain_uuid = $_SESSION['domain_uuid'];
//$dialplan->outbound_routes($phone_1);
//$dialplan_variables = $dialplan->variables;
//$bridge_array[0] = $dialplan->bridges;
//get the dialplan variables and bridge statement
$dialplan = new dialplan;
$dialplan->domain_uuid = $_SESSION['domain_uuid'];
$dialplan->outbound_routes($phone_1);
$dialplan_variables = $dialplan->variables;
$bridge_array[0] = $dialplan->bridges;
//echo "var: ".$variables."\n";
//echo "bridges: ".$bridges."\n";
//prepare the string
$channel_variables = "ignore_early_media=true";
$channel_variables .= ",origination_number=".$phone_1;
$channel_variables .= ",origination_caller_id_name='$broadcast_caller_id_name'";
$channel_variables .= ",origination_caller_id_number=$broadcast_caller_id_number";
$channel_variables .= ",domain_uuid=".$_SESSION['domain_uuid'];
$channel_variables .= ",domain=".$_SESSION['domain_name'];
$channel_variables .= ",domain_name=".$_SESSION['domain_name'];
$channel_variables .= ",accountcode='$broadcast_accountcode'";
$channel_variables .= ",toll_allow='$broadcast_toll_allow'";
if ($broadcast_avmd == "true") {
$channel_variables .= ",execute_on_answer='avmd start'";
//prepare the string
$channel_variables = $dialplan_variables."ignore_early_media=true";
$channel_variables .= ",origination_number=$phone_1";
$channel_variables .= ",origination_caller_id_name='$broadcast_caller_id_name'";
$channel_variables .= ",origination_caller_id_number=$broadcast_caller_id_number";
$channel_variables .= ",domain_uuid=".$_SESSION['domain_uuid'];
$channel_variables .= ",domain=".$_SESSION['domain_name'];
$channel_variables .= ",domain_name=".$_SESSION['domain_name'];
$channel_variables .= ",accountcode='$broadcast_accountcode'";
if ($broadcast_avmd == "true") {
$channel_variables .= ",execute_on_answer='avmd start'";
}
$origination_url = "{".$channel_variables."}".$bridge_array[0];
//get the context
$context = $_SESSION['domain_name'];
//set the command
$cmd = "bgapi sched_api +".$sched_seconds." ".$call_broadcast_uuid." bgapi originate ".$origination_url." ".$broadcast_destination_data." XML $context";
//if the event socket connection is lost then re-connect
if (!$fp) {
$fp = eventsocket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
}
//method 1
$response = trim(event_socket_request($fp, 'api '.$cmd));
//method 2
//cmd_async($_SESSION['switch']['bin']['dir']."/fs_cli -x \"".$cmd."\";");
//spread the calls out so that they are scheduled with different times
if (strlen($broadcast_concurrent_limit) > 0 && strlen($broadcast_timeout) > 0) {
if ($broadcast_concurrent_limit == $count) {
$sched_seconds = $sched_seconds + $broadcast_timeout;
$count=0;
}
//$origination_url = "{".$channel_variables."}".$bridge_array[0];
$origination_url = "{".$channel_variables."}loopback/".$phone_1.'/'.$_SESSION['domain_name'];
}
//get the context
$context = $_SESSION['domain_name'];
//set the command
$cmd = "bgapi sched_api +".$sched_seconds." ".$call_broadcast_uuid." bgapi originate ".$origination_url." ".$broadcast_destination_data." XML $context";
//if the event socket connection is lost then re-connect
if (!$fp) {
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
}
//method 1
$response = trim(event_socket_request($fp, 'api '.$cmd));
//method 2
//cmd_async($_SESSION['switch']['bin']['dir']."/fs_cli -x \"".$cmd."\";");
//spread the calls out so that they are scheduled with different times
if (strlen($broadcast_concurrent_limit) > 0 && strlen($broadcast_timeout) > 0) {
if ($broadcast_concurrent_limit == $count) {
$sched_seconds = $sched_seconds + $broadcast_timeout;
$count=0;
}
}
$count++;
}
$count++;
}
fclose($fp);
@@ -249,4 +234,148 @@
require_once "resources/footer.php";
}
/*
//reserved for future use
require_once "resources/header.php";
echo "<div align='center'>";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='2'>\n";
echo "<tr class='border'>\n";
echo " <td align=\"center\">\n";
echo " <br>";
echo "<table width='100%' border='0'><tr>\n";
echo "<td width='50%' nowrap><b>Contact List</b></td>\n";
echo "<td width='50%' align='right'>&nbsp;</td>\n";
echo "</tr></table>\n";
$broadcast_phone_number_array = explode ("\n", $broadcast_phone_numbers);
foreach ($broadcast_phone_number_array as $tmp_value) {
$tmp_value = str_replace(";", "|", $tmp_value);
$tmp_value_array = explode ("|", $tmp_value);
//remove the number formatting
$phone_1 = preg_replace('{\D}', '', $tmp_value_array[0]);
if ($gateway == "loopback") {
$cmd = $_SESSION['switch']['bin']['dir']."/fs_cli -x \"luarun call_broadcast_originate.lua {call_timeout=".$broadcast_timeout."}loopback/".$phone_1."/default/XML ".$_SESSION['switch']['recordings']['dir']."/".$recording_filename." '".$broadcast_caller_id_name."' ".$broadcast_caller_id_number." ".$broadcast_timeout." '".$broadcast_destination_application."' '".$broadcast_destination_data."'\";";
}
else {
$cmd = $_SESSION['switch']['bin']['dir']."/fs_cli -x \"luarun call_broadcast_originate.lua {call_timeout=".$broadcast_timeout."}sofia/gateway/".$gateway."/".$phone_1." ".$_SESSION['switch']['recordings']['dir']."/".$recording_filename." '".$broadcast_caller_id_name."' ".$broadcast_caller_id_number." ".$broadcast_timeout." '".$broadcast_destination_application."' '".$broadcast_destination_data."'\";";
}
echo $cmd."<br />\n";
cmd_async($cmd);
//sleep(60);
}
if (strlen($group_name) > 0) {
$sql = " select * from v_users as u, v_group_users as m ";
$sql .= "where u.user_uuid = m.user_uuid ";
$sql .= "and u.user_enabled = 'true' ";
$sql .= "and m.group_name = '".$group_name."' ";
$sql .= "and u.user_category = '".$user_category."' ";
//echo $sql."<br />";
}
else {
$sql = "select * from v_users as u ";
$sql .= "where u.user_category = '".$user_category."' ";
$sql .= "and u.user_enabled = 'true' ";
//echo $sql."<br />";
}
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
unset ($prep_statement, $sql);
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
echo "<div align='center'>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
//echo th_order_by('username', 'Username', $order_by, $order);
echo th_order_by('user_type', 'Type', $order_by, $order);
//echo th_order_by('user_category', 'Category', $order_by, $order);
echo th_order_by('user_first_name', 'First Name', $order_by, $order);
echo th_order_by('user_last_name', 'Last Name', $order_by, $order);
echo th_order_by('user_company_name', 'Organization', $order_by, $order);
echo th_order_by('user_phone_1', 'phone_1', $order_by, $order);
echo th_order_by('user_phone_2', 'phone_2', $order_by, $order);
echo "<tr>\n";
if ($result_count > 0) {
foreach($result as $row) {
echo "<tr >\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[username]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[user_type]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[user_category]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[user_first_name]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[user_last_name]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[user_company_name]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[user_phone_1]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[user_phone_2]."&nbsp;</td>\n";
echo "</tr>\n";
//if (strlen($gateway) > 0) {
if ($phonetype1 == "phone_1" && strlen($row[user_phone_1]) > 0) { $phone_1 = $row[user_phone_1]; }
if ($phonetype1 == "phone_2" && strlen($row[user_phone_2]) > 0) { $phone_1 = $row[user_phone_2]; }
if ($phonetype1 == "cell" && strlen($row[user_phone_mobile]) > 0) { $phone_1 = $row[user_phone_mobile]; }
if ($phonetype2 == "phone_1" && strlen($row[user_phone_2]) > 0) { $phone_2 = $row[user_phone_2]; }
if ($phonetype2 == "phone_2" && strlen($row[user_phone_2]) > 0) { $phone_2 = $row[user_phone_2]; }
if ($phonetype2 == "cell" && strlen($row[user_phone_mobile]) > 0) { $phone_2 = $row[user_phone_mobile]; }
//remove the number formatting
$phone_1 = preg_replace('{\D}', '', $phone_1);
$phone_2 = preg_replace('{\D}', '', $phone_2);
//make the call
if (strlen($phone_1)> 0) {
if ($gateway == "loopback") {
$cmd = $_SESSION['switch']['bin']['dir']."/fs_cli -x \"luarun call_broadcast_originate.lua {call_timeout=".$broadcast_timeout."}loopback/".$phone_1."/default/XML ".$_SESSION['switch']['recordings']['dir']."/".$recording_filename." '".$broadcast_caller_id_name."' ".$broadcast_caller_id_number." ".$broadcast_timeout." '".$broadcast_destination_application."' '".$broadcast_destination_data."'\";";
}
else {
$cmd = $_SESSION['switch']['bin']['dir']."/fs_cli -x \"luarun call_broadcast_originate.lua {call_timeout=".$broadcast_timeout."}sofia/gateway/".$gateway."/".$phone_1." ".$_SESSION['switch']['recordings']['dir']."/".$recording_filename." '".$broadcast_caller_id_name."' ".$broadcast_caller_id_number." ".$broadcast_timeout." '".$broadcast_destination_application."' '".$broadcast_destination_data."'\";";
}
//echo $cmd."<br />\n";
cmd_async($cmd);
}
if (strlen($phone_2)> 0) {
if ($gateway == "loopback") {
$cmd = $_SESSION['switch']['bin']['dir']."/fs_cli -x \"luarun call_broadcast_originate.lua {call_timeout=".$broadcast_timeout."}loopback/".$phone_2."/default/XML ".$_SESSION['switch']['recordings']['dir']."/".$recording_filename." '".$broadcast_caller_id_name."' ".$broadcast_caller_id_number." ".$broadcast_timeout." '".$broadcast_destination_application."' '".$broadcast_destination_data."'\";";
}
else {
$cmd = $_SESSION['switch']['bin']['dir']."/fs_cli -x \"luarun call_broadcast_originate.lua {call_timeout=".$broadcast_timeout."}sofia/gateway/".$gateway."/".$phone_2." ".$_SESSION['switch']['recordings']['dir']."/".$recording_filename." '".$broadcast_caller_id_name."' ".$broadcast_caller_id_number." ".$broadcast_timeout." '".$broadcast_destination_application."' '".$broadcast_destination_data."'\";";
}
//echo $cmd."<br />\n";
cmd_async($cmd);
}
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "</table>";
echo "</div>";
echo "<br><br>";
echo "<br><br>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</div>";
echo "<br><br>";
require_once "resources/footer.php";
unset ($result_count);
unset ($result);
unset ($key);
unset ($val);
unset ($c);
*/
?>
+14 -19
View File
@@ -39,26 +39,21 @@ else {
$text = $language->get();
//get the html values and set them as variables
$uuid = trim($_GET["id"]);
if (is_uuid($uuid)) {
//show the result
if (count($_GET) > 0) {
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
$cmd = "sched_del ".$uuid;
$result = event_socket_request($fp, 'api '.$cmd);
message::add(htmlentities($result));
}
}
//redirect
header('Location: call_broadcast_edit.php?id='.$uuid);
exit;
if (count($_GET)>0) {
$uuid = trim($_GET["id"]);
}
//default redirect
header('Location: call_broadcasts.php');
exit;
//show the header
header('Location: call_broadcast_edit.php?id='.$uuid);
//show the result
if (count($_GET) > 0) {
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
$cmd = "sched_del ".$uuid;
$result = event_socket_request($fp, 'api '.$cmd);
$_SESSION['message'] = htmlentities($result);
}
}
?>
@@ -1,167 +0,0 @@
<?php
/**
* call broadcast class
*
* @method null download
*/
if (!class_exists('call_broadcast')) {
class call_broadcast {
/**
* declare private variables
*/
private $app_name;
private $app_uuid;
private $permission_prefix;
private $list_page;
private $table;
private $uuid_prefix;
/**
* called when the object is created
*/
public function __construct() {
//assign private variables
$this->app_name = 'call_broadcast';
$this->app_uuid = 'efc11f6b-ed73-9955-4d4d-3a1bed75a056';
$this->permission_prefix = 'call_broadcast_';
$this->list_page = 'call_broadcast.php';
$this->table = 'call_broadcasts';
$this->uuid_prefix = 'call_broadcast_';
}
/**
* called when there are no references to a particular object
* unset the variables used in the class
*/
public function __destruct() {
foreach ($this as $key => $value) {
unset($this->$key);
}
}
/**
* delete records
*/
public function delete($records) {
if (permission_exists($this->permission_prefix.'delete')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//delete multiple records
if (is_array($records) && @sizeof($records) != 0) {
//build the delete array
foreach($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid'];
$array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
}
}
//delete the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//execute delete
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->delete($array);
unset($array);
//set message
message::add($text['message-delete']);
}
unset($records);
}
}
}
/**
* copy records
*/
public function copy($records) {
if (permission_exists($this->permission_prefix.'add')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//copy the checked records
if (is_array($records) && @sizeof($records) != 0) {
//get checked records
foreach($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//create insert array from existing data
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select * from v_".$this->table." ";
$sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) ";
$sql .= "and ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $x => $row) {
//copy data
$array[$this->table][$x] = $row;
//overwrite
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = uuid();
$array[$this->table][$x]['broadcast_description'] = trim($row['broadcast_description'].' ('.$text['label-copy'].')');
}
}
unset($sql, $parameters, $rows, $row);
}
//save the changes and set the message
if (is_array($array) && @sizeof($array) != 0) {
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
unset($array);
//set message
message::add($text['message-copy']);
}
unset($records);
}
}
}
}
}
?>
+15 -55
View File
@@ -25,66 +25,26 @@
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>
-3
View File
@@ -1,3 +0,0 @@
Phone_Number,Last_Name,First_Name
9888888877,Doe,John
8777666666,Bullock,Sarah
1 Phone_Number Last_Name First_Name
2 9888888877 Doe John
3 8777666666 Bullock Sarah
+17 -28
View File
@@ -5,40 +5,29 @@
$apps[$x]['uuid'] = "3f159f62-ca2d-41b8-b3f0-c5519cebbc5a";
$apps[$x]['category'] = "Switch";;
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.0";
$apps[$x]['version'] = "";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Shows active calls, and agents in the call center queue.";
$apps[$x]['description']['en-gb'] = "Shows active calls, and agents in the call center queue.";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "Zeigt aktive Anrufe und Agenten in der Callcenter Warteschlange.";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "Zeigt aktive Anrufe und Agenten in der Callcenter Warteschlange.";
$apps[$x]['description']['es-cl'] = "Muestra las llamadas activas y los agentes en la cola del centro de llamadas.";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "Il montre les appels actives et des agents en queue du centre d'appels.";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "Affiche les appels actifs et les agents en queue sur le centre d'appel.";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "Laat actieve oproepen en agenten in het Call-Center wachtrij zien";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "Mostra as chamadas ativas, e os agentes na fila do Call Center.";
$apps[$x]['description']['fr-ca'] = "Il montre les appels actives et des agents en queue du centre d'appels.";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "Mostra as chamadas ativas e agentes na fila do centro de chamadas.";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
$apps[$x]['description']['pt-br'] = "";
//permission details
$y=0;
$apps[$x]['permissions'][$y]['name'] = "call_center_active_view";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "7fb0dd87-e984-9980-c512-2c76b887aeb2";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_active_options";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "7fb0dd87-e984-9980-c512-2c76b887aeb2";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][0]['name'] = "call_center_active_view";
$apps[$x]['permissions'][0]['menu']['uuid'] = "7fb0dd87-e984-9980-c512-2c76b887aeb2";
$apps[$x]['permissions'][0]['groups'][] = "admin";
$apps[$x]['permissions'][0]['groups'][] = "superadmin";
?>
$apps[$x]['permissions'][1]['name'] = "call_center_active_options";
$apps[$x]['permissions'][1]['menu']['uuid'] = "7fb0dd87-e984-9980-c512-2c76b887aeb2";
$apps[$x]['permissions'][1]['groups'][] = "admin";
$apps[$x]['permissions'][1]['groups'][] = "superadmin";
?>
File diff suppressed because it is too large Load Diff
+16 -28
View File
@@ -1,31 +1,19 @@
<?php
$y=0;
$apps[$x]['menu'][$y]['title']['en-us'] = "Active Call Center";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Active Call Center";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "";
$apps[$x]['menu'][$y]['title']['de-at'] = "Aktive Callcenter";
$apps[$x]['menu'][$y]['title']['de-ch'] = "";
$apps[$x]['menu'][$y]['title']['de-de'] = "Aktive Callcenter";
$apps[$x]['menu'][$y]['title']['es-cl'] = "Centro de Llamada Activo";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "Centre d'Appels Active";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "Centre d'Appel Actif";
$apps[$x]['menu'][$y]['title']['he-il'] = "";
$apps[$x]['menu'][$y]['title']['it-it'] = "Call Center Attivi";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Actieve Call-Center";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Aktywność w Call Center ";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Call Center ativos";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "Centro de Chamadas Activo";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Активные Колл-центры";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Aktivt Call Center";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "";
$apps[$x]['menu'][$y]['uuid'] = "7fb0dd87-e984-9980-c512-2c76b887aeb2";
$apps[$x]['menu'][$y]['parent_uuid'] = "0438b504-8613-7887-c420-c837ffb20cb1";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['path'] = "/app/call_center_active/call_center_queue.php";
$apps[$x]['menu'][$y]['groups'][] = "admin";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][0]['title']['en-us'] = "Active Call Center";
$apps[$x]['menu'][0]['title']['es-cl'] = "Centro de Llamada Activo";
$apps[$x]['menu'][0]['title']['fr-fr'] = "Centre d'Appel Actif";
$apps[$x]['menu'][0]['title']['fr-ca'] = "Centre d'Appels Active";
$apps[$x]['menu'][0]['title']['pt-pt'] = "Centro de Chamadas Activo";
$apps[$x]['menu'][0]['title']['pt-br'] = "Centro de chamadas ativas";
$apps[$x]['menu'][0]['title']['pl'] = "Aktywność w Call Center ";
$apps[$x]['menu'][0]['title']['sv-se'] = "Aktivt Call Center";
$apps[$x]['menu'][0]['title']['de-at'] = "Aktive Callcenter";
$apps[$x]['menu'][0]['uuid'] = "7fb0dd87-e984-9980-c512-2c76b887aeb2";
$apps[$x]['menu'][0]['parent_uuid'] = "0438b504-8613-7887-c420-c837ffb20cb1";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['path'] = "/app/call_center_active/call_center_queue.php";
$apps[$x]['menu'][0]['groups'][] = "admin";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
?>
?>
+73 -107
View File
@@ -17,136 +17,102 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the queue_name and set it as a variable
$queue_name = $_GET['queue_name'];
$name = $_GET['name'];
//get a new session array
unset($_SESSION['queues']);
unset($_SESSION['agents']);
$queue_name = $_GET[queue_name];
//get the header
$document['title'] = $text['title-call_center_queue_activity'];
require_once "resources/header.php";
$document['title'] = $text['title-call_center_queue_activity'];
//add the ajax
?><script type="text/javascript">
function loadXmlHttp(url, id) {
var f = this;
?><script type="text/javascript">
function loadXmlHttp(url, id) {
var f = this;
f.xmlHttp = null;
/*@cc_on @*/ // used here and below, limits try/catch to those IE browsers that both benefit from and support it
/*@if(@_jscript_version >= 5) // prevents errors in old browsers that barf on try/catch & problems in IE if Active X disabled
try {f.ie = window.ActiveXObject}catch(e){f.ie = false;}
@end @*/
if (window.XMLHttpRequest&&!f.ie||/^http/.test(window.location.href))
f.xmlHttp = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari, others, IE 7+ when live - this is the standard method
else if (/(object)|(function)/.test(typeof createRequest))
f.xmlHttp = createRequest(); // ICEBrowser, perhaps others
else {
f.xmlHttp = null;
/*@cc_on @*/ // used here and below, limits try/catch to those IE browsers that both benefit from and support it
/*@if(@_jscript_version >= 5) // prevents errors in old browsers that barf on try/catch & problems in IE if Active X disabled
try {f.ie = window.ActiveXObject}catch(e){f.ie = false;}
// Internet Explorer 5 to 6, includes IE 7+ when local //
/*@cc_on @*/
/*@if(@_jscript_version >= 5)
try{f.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}
catch (e){try{f.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){f.xmlHttp=null;}}
@end @*/
if (window.XMLHttpRequest&&!f.ie||/^http/.test(window.location.href))
f.xmlHttp = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari, others, IE 7+ when live - this is the standard method
else if (/(object)|(function)/.test(typeof createRequest))
f.xmlHttp = createRequest(); // ICEBrowser, perhaps others
else {
f.xmlHttp = null;
// Internet Explorer 5 to 6, includes IE 7+ when local //
/*@cc_on @*/
/*@if(@_jscript_version >= 5)
try{f.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}
catch (e){try{f.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){f.xmlHttp=null;}}
@end @*/
}
if(f.xmlHttp != null) {
f.el = document.getElementById(id);
f.xmlHttp.open("GET",url,true);
f.xmlHttp.onreadystatechange = function(){f.stateChanged();};
f.xmlHttp.send(null);
}
}
loadXmlHttp.prototype.stateChanged=function () {
var url = new URL(this.xmlHttp.responseURL);
if (/login\.php$/.test(url.pathname)) {
// You are logged out. Stop refresh!
url.searchParams.set('path', '<?php echo $_SERVER['REQUEST_URI']; ?>');
window.location.href = url.href;
return;
}
if (this.xmlHttp.readyState == 4 && (this.xmlHttp.status == 200 || !/^http/.test(window.location.href)))
//this.el.innerHTML = this.xmlHttp.responseText;
document.getElementById('ajax_response').innerHTML = this.xmlHttp.responseText;
//link table rows (except the last - the list_control_icons cell) on a table with a class of 'tr_hover', according to the href attribute of the <tr> tag
$('.tr_hover tr,.list tr').each(function(i,e) {
$(e).children('td:not(.list_control_icon,.list_control_icons,.tr_link_void,.list-row > .no-link,.list-row > .checkbox,.list-row > .button,.list-row > .action-button)').on('click', function() {
var href = $(this).closest('tr').attr('href');
var target = $(this).closest('tr').attr('target');
if (href) {
if (target) { window.open(href, target); }
else { window.location = href; }
}
});
});
if(f.xmlHttp != null){
f.el = document.getElementById(id);
f.xmlHttp.open("GET",url,true);
f.xmlHttp.onreadystatechange = function(){f.stateChanged();};
f.xmlHttp.send(null);
}
}
var requestTime = function() {
var url = 'call_center_active_inc.php?queue_name=<?php echo escape($queue_name); ?>&name=<?php echo urlencode(escape($name)); ?>';
new loadXmlHttp(url, 'ajax_response');
<?php
if (strlen($_SESSION["ajax_refresh_rate"]) == 0) { $_SESSION["ajax_refresh_rate"] = "1777"; }
echo "setInterval(function(){new loadXmlHttp(url, 'ajax_reponse');}, ".$_SESSION["ajax_refresh_rate"].");";
?>
}
loadXmlHttp.prototype.stateChanged=function () {
if (this.xmlHttp.readyState == 4 && (this.xmlHttp.status == 200 || !/^http/.test(window.location.href)))
//this.el.innerHTML = this.xmlHttp.responseText;
document.getElementById('ajax_response').innerHTML = this.xmlHttp.responseText;
}
if (window.addEventListener) {
window.addEventListener('load', requestTime, false);
}
else if (window.attachEvent) {
window.attachEvent('onload', requestTime);
}
var requestTime = function() {
var url = 'call_center_active_inc.php?queue_name=<?php echo $queue_name; ?>';
new loadXmlHttp(url, 'ajax_response');
<?php
if (strlen($_SESSION["ajax_refresh_rate"]) == 0) { $_SESSION["ajax_refresh_rate"] = "1777"; }
echo "setInterval(function(){new loadXmlHttp(url, 'ajax_reponse');}, ".$_SESSION["ajax_refresh_rate"].");";
?>
}
function send_command(url) {
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", url, false);
xmlhttp.send(null);
//document.getElementById('cmd_response').innerHTML=xmlhttp.responseText;
}
if (window.addEventListener) {
window.addEventListener('load', requestTime, false);
}
else if (window.attachEvent) {
window.attachEvent('onload', requestTime);
}
</script>
function send_cmd(url) {
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",url,false);
xmlhttp.send(null);
//document.getElementById('cmd_response').innerHTML=xmlhttp.responseText;
}
</script>
<?php
echo " <div id='ajax_response'></div>\n";
echo "<br><br>";
//show the response
echo "<div id='ajax_response'></div>\n";
echo "<br><br>";
//include the footer
require_once "resources/footer.php";
?>
require_once "resources/footer.php";
?>
+360 -389
View File
@@ -1,389 +1,360 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2021
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
James Rose <james.o.rose@gmail.com>
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the queue uuid and set it as a variable
$queue_uuid = $_GET['queue_name'];
//get the queues from the database
if (!is_array($_SESSION['queues'])) {
$sql = "select * from v_call_center_queues ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "order by queue_name asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$_SESSION['queues'] = $database->select($sql, $parameters, 'all');
}
//get the queue name
foreach ($_SESSION['queues'] as $row) {
if ($row['call_center_queue_uuid'] == $queue_uuid) {
$queue_name = $row['queue_name'];
$queue_extension = $row['queue_extension'];
}
}
//convert the string to a named array
function str_to_named_array($tmp_str, $tmp_delimiter) {
$tmp_array = explode ("\n", $tmp_str);
$result = array();
if (trim(strtoupper($tmp_array[0])) != "+OK") {
$tmp_field_name_array = explode ($tmp_delimiter, $tmp_array[0]);
$x = 0;
if (isset($tmp_array)) foreach ($tmp_array as $row) {
if ($x > 0) {
$tmp_field_value_array = explode ($tmp_delimiter, $tmp_array[$x]);
$y = 0;
if (isset($tmp_field_value_array)) foreach ($tmp_field_value_array as $tmp_value) {
$tmp_name = $tmp_field_name_array[$y];
if (trim(strtoupper($tmp_value)) != "+OK") {
$result[$x][$tmp_name] = $tmp_value;
}
$y++;
}
}
$x++;
}
unset($row);
}
return $result;
}
//create an event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//get the call center queue, agent and tiers list
if (!$fp) {
$msg = "<div align='center'>Connection to Event Socket failed.<br /></div>";
echo "<div align='center'>\n";
echo "<table width='40%'>\n";
echo "<tr>\n";
echo "<th align='left'>Message</th>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='row_style1'><strong>$msg</strong></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</div>\n";
}
else {
//get the agent list
//show the title
echo "<b>".$text['header-agents']."</b><br />\n";
echo $text['description-agents']."<br /><br />\n";
//send the event socket command and get the response
//callcenter_config queue list tiers [queue_name] |
$switch_command = 'callcenter_config queue list tiers '.$queue_extension."@".$_SESSION["domain_name"];
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_command));
$result = str_to_named_array($event_socket_str, '|');
//prepare the result for array_multisort
$x = 0;
if (is_array($result)) {
foreach ($result as $row) {
$tier_result[$x]['level'] = $row['level'];
$tier_result[$x]['position'] = $row['position'];
$tier_result[$x]['agent'] = $row['agent'];
$tier_result[$x]['state'] = trim($row['state']);
$tier_result[$x]['queue'] = $row['queue'];
$x++;
}
}
//sort the array //SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING
if (isset($tier_result)) { array_multisort($tier_result, SORT_ASC); }
//send the event socket command and get the response
//callcenter_config queue list agents [queue_name] [status] |
$switch_command = 'callcenter_config queue list agents '.$queue_extension."@".$_SESSION["domain_name"];
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_command));
$agent_result = str_to_named_array($event_socket_str, '|');
//get the agents from the database
if (!is_array($_SESSION['agents'])) {
$sql = "select * from v_call_center_agents ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "order by agent_name asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$_SESSION['agents'] = $database->select($sql, $parameters, 'all');
}
//list the agents
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
echo "<th>".$text['label-name']."</th>\n";
echo "<th>".$text['label-extension']."</th>\n";
echo "<th>".$text['label-status']."</th>\n";
echo "<th>".$text['label-state']."</th>\n";
echo "<th>".$text['label-status_change']."</th>\n";
echo "<th class='center'>".$text['label-missed']."</th>\n";
echo "<th class='center'>".$text['label-answered']."</th>\n";
echo "<th>".$text['label-tier_state']."</th>\n";
echo "<th class='center'>".$text['label-tier_level']."</th>\n";
echo "<th class='center'>".$text['label-tier_position']."</th>\n";
if (permission_exists('call_center_active_options')) {
echo "<th class='center'>".$text['label-options']."</th>\n";
}
echo "</tr>\n";
if (isset($tier_result)) {
foreach ($tier_result as $tier_row) {
//$queue = $tier_row['queue'];
//$queue = str_replace('@'.$_SESSION['domain_name'], '', $queue);
$agent = $tier_row['agent'];
//$agent = str_replace('@'.$_SESSION['domain_name'], '', $agent);
$tier_state = $tier_row['state'];
$tier_level = $tier_row['level'];
$tier_position = $tier_row['position'];
if (isset($agent_result)) {
foreach ($agent_result as $agent_row) {
if ($tier_row['agent'] == $agent_row['name']) {
$agent_uuid = $agent_row['name'];
//get the agent name
$agent_name = '';
if (is_array($_SESSION['agents'])) {
foreach ($_SESSION['agents'] as $agent) {
if ($agent['call_center_agent_uuid'] == $agent_uuid) {
$agent_name = $agent['agent_name'];
}
}
}
//$system = $agent_row['system'];
if (is_uuid($agent_row['uuid'])) {
$agent_uuid = $agent_row['uuid'];
}
//$type = $agent_row['type'];
$contact = $agent_row['contact'];
$agent_extension = preg_replace("/user\//", "", $contact);
$agent_extension = preg_replace("/@.*/", "", $agent_extension);
$agent_extension = preg_replace("/{.*}/", "", $agent_extension);
$status = $agent_row['status'];
$state = $agent_row['state'];
$max_no_answer = $agent_row['max_no_answer'];
$wrap_up_time = $agent_row['wrap_up_time'];
$reject_delay_time = $agent_row['reject_delay_time'];
$busy_delay_time = $agent_row['busy_delay_time'];
$last_bridge_start = $agent_row['last_bridge_start'];
$last_bridge_end = $agent_row['last_bridge_end'];
//$last_offered_call = $agent_row['last_offered_call'];
$last_status_change = $agent_row['last_status_change'];
$no_answer_count = $agent_row['no_answer_count'];
$calls_answered = $agent_row['calls_answered'];
$talk_time = $agent_row['talk_time'];
$ready_time = $agent_row['ready_time'];
$last_status_change_seconds = time() - $last_status_change;
$last_status_change_length_hour = floor($last_status_change_seconds/3600);
$last_status_change_length_min = floor($last_status_change_seconds/60 - ($last_status_change_length_hour * 60));
$last_status_change_length_sec = $last_status_change_seconds - (($last_status_change_length_hour * 3600) + ($last_status_change_length_min * 60));
$last_status_change_length_min = sprintf("%02d", $last_status_change_length_min);
$last_status_change_length_sec = sprintf("%02d", $last_status_change_length_sec);
$last_status_change_length = $last_status_change_length_hour.':'.$last_status_change_length_min.':'.$last_status_change_length_sec;
if (permission_exists('call_center_agent_edit')) {
$list_row_url = "../call_centers/call_center_agent_edit.php?id=".$agent_uuid;
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
echo "<td>";
if (permission_exists('call_center_agent_edit')) {
echo "<a href='".$list_row_url."'>".escape($agent_name)."</a>";
}
else {
echo escape($agent_name);
}
echo "</td>\n";
echo "<td>".escape($agent_extension)."</td>\n";
echo "<td>".escape($status)."</td>\n";
echo "<td>".escape($state)."</td>\n";
echo "<td>".escape($last_status_change_length)."</td>\n";
echo "<td class='center'>".escape($no_answer_count)."</td>\n";
echo "<td class='center'>".escape($calls_answered)."</td>\n";
echo "<td>".escape($tier_state)."</td>\n";
echo "<td class='center'>".escape($tier_level)."</td>\n";
echo "<td class='center'>".escape($tier_position)."</td>\n";
if (permission_exists('call_center_active_options')) {
echo "<td class='no-link center'>\n";
//need to check state to so only waiting gets call, and trying/answer gets eavesdrop
if ($tier_state == "Offering" || $tier_state == "Active Inbound") {
//$orig_command="{origination_caller_id_name=eavesdrop,origination_caller_id_number=".escape($agent_extension)."}user/".$_SESSION['user']['extension'][0]['user']."@".$_SESSION['domain_name']." %26eavesdrop(".escape($agent_uuid).")";
echo button::create(['type'=>'button','class'=>'link','label'=>$text['label-eavesdrop'],'onclick'=>"if (confirm('".$text['message-confirm']."')) { send_command('call_center_exec.php?command=eavesdrop&uuid=".urlencode($agent_uuid)."&extension=".urlencode($agent_extension)."'); } else { this.blur(); return false; }"]);
//$xfer_command = escape($agent_uuid)." -bleg ".escape($_SESSION['user']['extension'][0]['user'])." XML ".escape($_SESSION['domain_name']);
echo button::create(['type'=>'button','class'=>'link','label'=>$text['label-transfer'],'style'=>'margin-left: 15px;','onclick'=>"if (confirm('".$text['message-confirm']."')) { send_command('call_center_exec.php?command=uuid_transfer&uuid=".urlencode($agent_uuid)."'); } else { this.blur(); return false; }"]);
}
else {
//$orig_call="{origination_caller_id_name=c2c-".urlencode(escape($name)).",origination_caller_id_number=".escape($agent_extension)."}user/".$_SESSION['user']['extension'][0]['user']."@".$_SESSION['domain_name']." %26bridge(user/".escape($agent_extension)."@".$_SESSION['domain_name'].")";
echo button::create(['type'=>'button','class'=>'link','label'=>$text['label-call'],'onclick'=>"if (confirm('".$text['message-confirm']."')) { send_command('call_center_exec.php?command=bridge&extension=".urlencode($agent_extension)."&caller_id_name=".urlencode($name)."'); } else { this.blur(); return false; }"]);
}
echo "</td>";
}
echo "</tr>\n";
} //if
} //foreach
} //if
} //foreach
} //if
echo "</table>\n\n";
//add vertical spacing
echo "<br /><br /><br />";
//get the queue list
//send the event socket command and get the response
//callcenter_config queue list members [queue_name]
if (is_uuid($queue_uuid)) {
$switch_command = 'callcenter_config queue list members '.$queue_extension."@".$_SESSION["domain_name"];
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_command));
$result = str_to_named_array($event_socket_str, '|');
if (!is_array($result)) { unset($result); }
}
//show the title
$q_waiting=0;
$q_trying=0;
$q_answered=0;
echo "<div class='action_bar sub'>\n";
echo " <div class='heading'><b>".$text['label-queue'].": ".ucfirst(escape($queue_name))."</b></div>\n";
echo " <div class='actions'>\n";
if (isset($result)) {
foreach ($result as $row) {
$state = $row['state'];
$q_trying += ($state == "Trying") ? 1 : 0;
$q_waiting += ($state == "Waiting") ? 1 : 0;
$q_answered += ($state == "Answered") ? 1 : 0;
}
}
echo " <strong>".$text['label-waiting'].":</strong> <b>".$q_waiting."</b>&nbsp;&nbsp;&nbsp;";
echo " <strong>".$text['label-trying'].":</strong> <b>".$q_trying."</b>&nbsp;&nbsp;&nbsp; ";
echo " <strong>".$text['label-answered'].":</strong> <b>".$q_answered."</b>";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo $text['description-queue']."\n";
echo "<br /><br />\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
echo "<th>".$text['label-time']."</th>\n";
//echo "<th>".$text['label-system']."</th>\n";
echo "<th>".$text['label-name']."</th>\n";
echo "<th>".$text['label-number']."</th>\n";
echo "<th>".$text['label-status']."</th>\n";
if ((if_group("admin") || if_group("superadmin"))) {
echo "<th>".$text['label-options']."</th>\n";
}
echo "<th>".$text['label-agent']."</th>\n";
echo "</tr>\n";
if (is_array($result)) {
foreach ($result as $row) {
$queue = $row['queue'];
$system = $row['system'];
$uuid = $row['uuid'];
$session_uuid = $row['session_uuid'];
$caller_number = $row['cid_number'];
$caller_name = $row['cid_name'];
$system_epoch = $row['system_epoch'];
$joined_epoch = $row['joined_epoch'];
$rejoined_epoch = $row['rejoined_epoch'];
$bridge_epoch = $row['bridge_epoch'];
$abandoned_epoch = $row['abandoned_epoch'];
$base_score = $row['base_score'];
$skill_score = $row['skill_score'];
$serving_agent = $row['serving_agent'];
$serving_system = $row['serving_system'];
$state = $row['state'];
$joined_seconds = time() - $joined_epoch;
$joined_length_hour = floor($joined_seconds/3600);
$joined_length_min = floor($joined_seconds/60 - ($joined_length_hour * 60));
$joined_length_sec = $joined_seconds - (($joined_length_hour * 3600) + ($joined_length_min * 60));
$joined_length_min = sprintf("%02d", $joined_length_min);
$joined_length_sec = sprintf("%02d", $joined_length_sec);
$joined_length = $joined_length_hour.':'.$joined_length_min.':'.$joined_length_sec;
//get the serving agent name
$serving_agent_name = '';
if (is_array($_SESSION['agents'])) {
foreach ($_SESSION['agents'] as $agent) {
if ($agent['call_center_agent_uuid'] == $serving_agent) {
$serving_agent_name = $agent['agent_name'];
}
}
}
echo "<tr class='list-row'>\n";
echo "<td>".escape($joined_length)."</td>\n";
//echo "<td>".escape($system_length)."</td>\n";
echo "<td>".escape($caller_name)."&nbsp;</td>\n";
echo "<td>".escape($caller_number)."&nbsp;</td>\n";
echo "<td>".escape($state)."</td>\n";
if (if_group("admin") || if_group("superadmin")) {
echo "<td>";
if ($state != "Abandoned") {
$orig_command="{origination_caller_id_name=eavesdrop,origination_caller_id_number=".escape($q_caller_number)."}user/".escape($_SESSION['user']['extension'][0]['user'])."@".escape($_SESSION['domain_name'])." %26eavesdrop(".escape($session_uuid).")";
echo button::create(['type'=>'button','class'=>'link','label'=>$text['label-eavesdrop'],'onclick'=>"if (confirm('".$text['message-confirm']."')) { send_command('call_center_exec.php?command=eavesdrop&caller_id_number=".urlencode($caller_number)."&uuid=".urlencode($session_uuid)."'); } else { this.blur(); return false; }"]);
}
else {
echo "&nbsp;";
}
echo "</td>";
}
echo "<td>".escape($serving_agent_name)."&nbsp;</td>\n";
echo "</tr>\n";
}
}
echo "</table>\n";
}
?>
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
James Rose <james.o.rose@gmail.com>
*/
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the queue_name and set it as a variable
$queue_name = $_GET[queue_name].'@'. $_SESSION['domains'][$domain_uuid]['domain_name'];
//convert the string to a named array
function str_to_named_array($tmp_str, $tmp_delimiter) {
$tmp_array = explode ("\n", $tmp_str);
$result = '';
if (trim(strtoupper($tmp_array[0])) != "+OK") {
$tmp_field_name_array = explode ($tmp_delimiter, $tmp_array[0]);
$x = 0;
foreach ($tmp_array as $row) {
if ($x > 0) {
$tmp_field_value_array = explode ($tmp_delimiter, $tmp_array[$x]);
$y = 0;
foreach ($tmp_field_value_array as $tmp_value) {
$tmp_name = $tmp_field_name_array[$y];
if (trim(strtoupper($tmp_value)) != "+OK") {
$result[$x][$tmp_name] = $tmp_value;
}
$y++;
}
}
$x++;
}
unset($row);
}
return $result;
}
//alternate the color of the row
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
//create an event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//get the call center queue, agent and tiers list
if (!$fp) {
$msg = "<div align='center'>Connection to Event Socket failed.<br /></div>";
echo "<div align='center'>\n";
echo "<table width='40%'>\n";
echo "<tr>\n";
echo "<th align='left'>Message</th>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='row_style1'><strong>$msg</strong></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</div>\n";
}
else {
//get the agent list
//show the title
echo "<b>".$text['header-agents']."</b><br />\n";
echo $text['description-agents']."<br /><br />\n";
//send the event socket command and get the response
//callcenter_config queue list tiers [queue_name] |
$switch_cmd = 'callcenter_config queue list tiers '.$queue_name;
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$result = str_to_named_array($event_socket_str, '|');
//prepare the result for array_multisort
$x = 0;
foreach ($result as $row) {
$tier_result[$x]['level'] = $row['level'];
$tier_result[$x]['position'] = $row['position'];
$tier_result[$x]['agent'] = $row['agent'];
$tier_result[$x]['state'] = trim($row['state']);
$tier_result[$x]['queue'] = $row['queue'];
$x++;
}
//sort the array //SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING
array_multisort($tier_result, SORT_ASC);
//send the event socket command and get the response
//callcenter_config queue list agents [queue_name] [status] |
$switch_cmd = 'callcenter_config queue list agents '.$queue_name;
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$agent_result = str_to_named_array($event_socket_str, '|');
//list the agents
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<th>".$text['label-name']."</th>\n";
echo "<th>".$text['label-extension']."</th>\n";
echo "<th>".$text['label-status']."</th>\n";
echo "<th>".$text['label-state']."</th>\n";
echo "<th>".$text['label-status_change']."</th>\n";
echo "<th>".$text['label-missed']."</th>\n";
echo "<th>".$text['label-answered']."</th>\n";
echo "<th>".$text['label-tier_state']."</th>\n";
echo "<th>".$text['label-tier_level']."</th>\n";
echo "<th>".$text['label-tier_position']."</th>\n";
if (permission_exists('call_center_active_options')) {
echo "<th>".$text['label-options']."</th>\n";
}
echo "</tr>\n";
foreach ($tier_result as $tier_row) {
//$queue = $tier_row['queue'];
//$queue = str_replace('@'.$_SESSION['domain_name'], '', $queue);
$agent = $tier_row['agent'];
//$agent = str_replace('@'.$_SESSION['domain_name'], '', $agent);
$tier_state = $tier_row['state'];
$tier_level = $tier_row['level'];
$tier_position = $tier_row['position'];
foreach ($agent_result as $agent_row) {
if ($tier_row['agent'] == $agent_row['name']) {
$name = $agent_row['name'];
$name = str_replace('@'.$_SESSION['domain_name'], '', $name);
//$system = $agent_row['system'];
$a_uuid = $agent_row['uuid'];
//$type = $agent_row['type'];
$contact = $agent_row['contact'];
$a_exten = preg_replace("/user\//", "", $contact);
$a_exten = preg_replace("/@.*/", "", $a_exten);
$a_exten = preg_replace("/{.*}/", "", $a_exten);
$status = $agent_row['status'];
$state = $agent_row['state'];
$max_no_answer = $agent_row['max_no_answer'];
$wrap_up_time = $agent_row['wrap_up_time'];
$reject_delay_time = $agent_row['reject_delay_time'];
$busy_delay_time = $agent_row['busy_delay_time'];
$last_bridge_start = $agent_row['last_bridge_start'];
$last_bridge_end = $agent_row['last_bridge_end'];
//$last_offered_call = $agent_row['last_offered_call'];
$last_status_change = $agent_row['last_status_change'];
$no_answer_count = $agent_row['no_answer_count'];
$calls_answered = $agent_row['calls_answered'];
$talk_time = $agent_row['talk_time'];
$ready_time = $agent_row['ready_time'];
$last_offered_call_seconds = time() - $last_offered_call;
$last_offered_call_length_hour = floor($last_offered_call_seconds/3600);
$last_offered_call_length_min = floor($last_offered_call_seconds/60 - ($last_offered_call_length_hour * 60));
$last_offered_call_length_sec = $last_offered_call_seconds - (($last_offered_call_length_hour * 3600) + ($last_offered_call_length_min * 60));
$last_offered_call_length_min = sprintf("%02d", $last_offered_call_length_min);
$last_offered_call_length_sec = sprintf("%02d", $last_offered_call_length_sec);
$last_offered_call_length = $last_offered_call_length_hour.':'.$last_offered_call_length_min.':'.$last_offered_call_length_sec;
$last_status_change_seconds = time() - $last_status_change;
$last_status_change_length_hour = floor($last_status_change_seconds/3600);
$last_status_change_length_min = floor($last_status_change_seconds/60 - ($last_status_change_length_hour * 60));
$last_status_change_length_sec = $last_status_change_seconds - (($last_status_change_length_hour * 3600) + ($last_status_change_length_min * 60));
$last_status_change_length_min = sprintf("%02d", $last_status_change_length_min);
$last_status_change_length_sec = sprintf("%02d", $last_status_change_length_sec);
$last_status_change_length = $last_status_change_length_hour.':'.$last_status_change_length_min.':'.$last_status_change_length_sec;
echo "<tr>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$name."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$a_exten."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$status."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$state."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$last_status_change_length."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$no_answer_count."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$calls_answered."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$tier_state."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$tier_level."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$tier_position."</td>\n";
if (permission_exists('call_center_active_options')) {
echo "<td valign='top' class='".$row_style[$c]."'>";
//need to check state to so only waiting gets call, and trying/answer gets eavesdrop
if ($tier_state == "Offering" || $tier_state == "Active Inbound") {
$orig_command="{origination_caller_id_name=eavesdrop,origination_caller_id_number=".$a_exten."}user/".$_SESSION['user']['extension'][0]['user']."@".$_SESSION['domain_name']." %26eavesdrop(".$a_uuid.")";
//debug
//echo $orig_command;
//echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('".$text['message-confirm']."');if (confirm_response){send_cmd('call_center_exec.php?cmd=log+".$orig_command.")');}\">log_cmd</a>&nbsp;\n";
echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('".$text['message-confirm']."');if (confirm_response){send_cmd('call_center_exec.php?cmd=originate+".$orig_command.")');}\">".$text['label-eavesdrop']."</a>&nbsp;\n";
$xfer_command = $a_uuid." -bleg ".$_SESSION['user']['extension'][0]['user']." XML ".$_SESSION['domain_name'];
//$xfer_command = $a_uuid." ".$_SESSION['user']['extension'][0]['user']." XML default";
$xfer_command = urlencode($xfer_command);
echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('".$text['message-confirm']."');if (confirm_response){send_cmd('call_center_exec.php?cmd=uuid_transfer+".$xfer_command."');}\">".$text['label-transfer']."</a>&nbsp;\n";
}
else {
$orig_call="{origination_caller_id_name=c2c-".urlencode($name).",origination_caller_id_number=".$a_exten."}user/".$_SESSION['user']['extension'][0]['user']."@".$_SESSION['domain_name']." %26bridge(user/".$a_exten."@".$_SESSION['domain_name'].")";
echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('".$text['message-confirm']."');if (confirm_response){send_cmd('call_center_exec.php?cmd=originate+".$orig_call.")');}\">".$text['label-call']."</a>&nbsp;\n";
}
echo "</td>";
}
}
}
echo "</tr>\n";
if ($c==0) { $c=1; } else { $c=0; }
}
echo "</table>\n\n";
//add vertical spacing
echo "<br />";
echo "<br />";
echo "<br />";
echo "<br />";
//get the queue list
//send the event socket command and get the response
//callcenter_config queue list members [queue_name]
$switch_cmd = 'callcenter_config queue list members '.$queue_name;
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$result = str_to_named_array($event_socket_str, '|');
//show the title
$q_waiting=0;
$q_trying=0;
$q_answered=0;
echo "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
echo " <tr>\n";
echo " <td align='left'><b>".$text['label-queue'].": ".ucfirst($_GET[queue_name])."</b><br />\n";
echo " ".$text['description-queue']."<br />\n";
echo " </td>\n";
echo " <td align='right' valign='top'>";
foreach ($result as $row) {
$state = $row['state'];
$q_trying += ($state == "Trying") ? 1 : 0;
$q_waiting += ($state == "Waiting") ? 1 : 0;
$q_answered += ($state == "Answered") ? 1 : 0;
}
echo " <strong>".$text['label-waiting'].":</strong> <b>".$q_waiting."</b>&nbsp;&nbsp;&nbsp;";
echo " <strong>".$text['label-trying'].":</strong> <b>".$q_trying."</b>&nbsp;&nbsp;&nbsp; ";
echo " <strong>".$text['label-answered'].":</strong> <b>".$q_answered."</b>";
echo " </td>";
echo " </tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<th>".$text['label-time']."</th>\n";
//echo "<th>".$text['label-system']."</th>\n";
echo "<th>".$text['label-name']."</th>\n";
echo "<th>".$text['label-number']."</th>\n";
echo "<th>".$text['label-status']."</th>\n";
if ((if_group("admin") || if_group("superadmin"))) {
echo "<th>".$text['label-options']."</th>\n";
}
echo "<th>".$text['label-agent']."</th>\n";
echo "</tr>\n";
foreach ($result as $row) {
$queue = $row['queue'];
$system = $row['system'];
$uuid = $row['uuid'];
$session_uuid = $row['session_uuid'];
$caller_number = $row['cid_number'];
$caller_name = $row['cid_name'];
$system_epoch = $row['system_epoch'];
$joined_epoch = $row['joined_epoch'];
$rejoined_epoch = $row['rejoined_epoch'];
$bridge_epoch = $row['bridge_epoch'];
$abandoned_epoch = $row['abandoned_epoch'];
$base_score = $row['base_score'];
$skill_score = $row['skill_score'];
$serving_agent = $row['serving_agent'];
$serving_system = $row['serving_system'];
$state = $row['state'];
$joined_seconds = time() - $joined_epoch;
$joined_length_hour = floor($joined_seconds/3600);
$joined_length_min = floor($joined_seconds/60 - ($joined_length_hour * 60));
$joined_length_sec = $joined_seconds - (($joined_length_hour * 3600) + ($joined_length_min * 60));
$joined_length_min = sprintf("%02d", $joined_length_min);
$joined_length_sec = sprintf("%02d", $joined_length_sec);
$joined_length = $joined_length_hour.':'.$joined_length_min.':'.$joined_length_sec;
//$system_seconds = time() - $system_epoch;
//$system_length_hour = floor($system_seconds/3600);
//$system_length_min = floor($system_seconds/60 - ($system_length_hour * 60));
//$system_length_sec = $system_seconds - (($system_length_hour * 3600) + ($system_length_min * 60));
//$system_length_min = sprintf("%02d", $system_length_min);
//$system_length_sec = sprintf("%02d", $system_length_sec);
//$system_length = $system_length_hour.':'.$system_length_min.':'.$system_length_sec;
echo "<tr>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$joined_length."</td>\n";
//echo "<td valign='top' class='".$row_style[$c]."'>".$system_length."</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$caller_name."&nbsp;</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$caller_number."&nbsp;</td>\n";
echo "<td valign='top' class='".$row_style[$c]."'>".$state."</td>\n";
if (if_group("admin") || if_group("superadmin")) {
echo "<td valign='top' class='".$row_style[$c]."'>";
if ($state != "Abandoned") {
$q_caller_number = urlencode($caller_number);
$orig_command="{origination_caller_id_name=eavesdrop,origination_caller_id_number=".$q_caller_number."}user/".$_SESSION['user']['extension'][0]['user']."@".$_SESSION['domain_name']." %26eavesdrop(".$session_uuid.")";
//debug
//echo $orig_command;
//echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('".$text['message-confirm']."');if (confirm_response){send_cmd('call_center_exec.php?cmd=log+".$orig_command.")');}\">log_cmd</a>&nbsp;\n";
echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('".$text['message-confirm']."');if (confirm_response){send_cmd('call_center_exec.php?cmd=originate+".$orig_command.")');}\">".$text['label-eavesdrop']."</a>&nbsp;\n";
}
else {
echo "&nbsp;";
}
echo "</td>";
}
echo "<td valign='top' class='".$row_style[$c]."'>".$serving_agent."&nbsp;</td>\n";
echo "</tr>\n";
if ($c==0) { $c=1; } else { $c=0; }
}
echo "</table>\n";
//add vertical spacing
echo "<br />\n";
echo "<br />\n";
echo "<br />\n";
}
?>
+100 -148
View File
@@ -1,148 +1,100 @@
<?php
/* $Id$ */
/*
v_exec.php
Copyright (C) 2008 - 2019 Mark J Crane
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//http get variables set to php variables
if (count($_GET) > 0) {
$command = trim($_GET["command"]);
$uuid = trim($_GET["uuid"]);
$extension = trim($_GET["extension"]);
$caller_id_name = trim($_GET["extension"]);
$caller_id_number = trim($_GET["extension"]);
}
//validate the extension
if (!is_numeric($extension)) {
$extension = null;
}
//validate the uuid
if (!is_uuid($uuid)) {
$uuid = null;
}
//validate the caller_id_name
if (isset($caller_id_name) && strlen($caller_id_name)) {
$caller_id_name = substr($caller_id_name, 0, 10);
}
//validate the caller_id_number
if (!is_numeric($caller_id_number)) {
$caller_id_number = null;
}
//validate the command
switch ($command) {
case "eavesdrop":
$switch_command = "originate {origination_caller_id_name=eavesdrop,origination_caller_id_number=".$extension."}user/".$_SESSION['user']['extension'][0]['user']."@".$_SESSION['domain_name']." &eavesdrop(".$uuid.")";
break;
case "uuid_transfer":
$switch_command = "uuid_transfer ".$uuid." -bleg ".$_SESSION['user']['extension'][0]['user']." XML ".$_SESSION['domain_name'];
break;
case "bridge":
$switch_command = "originate {origination_caller_id_name=".$caller_id_name.",origination_caller_id_number=".$caller_id_number."}user/".$_SESSION['user']['extension'][0]['user']."@".$_SESSION['domain_name']." bridge(user/".$extension."@".$_SESSION['domain_name'].")";
break;
default:
echo "access denied";
exit;
}
//run the command
if (isset($switch_command)) {
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
$response = event_socket_request($fp, 'api '.$switch_command);
}
/*
//set the username
if (if_group("admin") || if_group("superadmin")) {
//use the username that was provided
}
else {
$username = $_SESSION['username'];
}
//get to php variables
if (count($_GET) > 0) {
if ($_GET['action'] == "user_status") {
//validate the user status
$user_status = $_GET['data'];
switch ($user_status) {
case "Available":
case "Available (On Demand)":
case "On Break":
case "Do Not Disturb":
case "Logged Out":
break;
default:
$user_status = null;
}
$user_status = $data;
$sql = "update v_users set ";
$sql .= "user_status = :user_status ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and username = '".$username."' ";
$parameters['user_status'] = trim($user_status, "'");
$database = new database;
$database->execute($sql, $parameters);
unset($sql, $parameters);
}
//fs cmd
if (strlen($switch_cmd) > 0) {
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//ensure the connection exists
if ($fp) {
//send the command
$switch_result = event_socket_request($fp, 'api '.$switch_cmd);
//set the user state
$cmd = "api callcenter_config agent set state ".$username."@".$_SESSION['domain_name']." Waiting";
$response = event_socket_request($fp, $cmd);
}
}
}
*/
?>
<?php
/* $Id$ */
/*
v_exec.php
Copyright (C) 2008 Mark J Crane
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//http get variables set to php variables
if (count($_GET)>0) {
$switch_cmd = trim($_GET["cmd"]);
$action = trim(check_str($_GET["action"]));
$data = trim(check_str($_GET["data"]));
$username = trim(check_str($_GET["username"]));
}
//authorized commands
if (stristr($switch_cmd, 'user_status') == true) {
//authorized;
} elseif (stristr($switch_cmd, 'callcenter_config') == true) {
//authorized;
} elseif (stristr($switch_cmd, 'eavesdrop') == true) {
//authorized;
} elseif (stristr($switch_cmd, 'bridge') == true) {
//authorized;
} elseif (stristr($switch_cmd, 'uuid_transfer') == true) {
//authorized;
} else {
//not found. this command is not authorized
echo "access denied";
exit;
}
//set the username
if (if_group("admin") || if_group("superadmin")) {
//use the username that was provided
}
else {
$username = $_SESSION['username'];
}
//get to php variables
if (count($_GET)>0) {
if ($action == "user_status") {
$user_status = $data;
$sql = "update v_users set ";
$sql .= "user_status = '".trim($user_status, "'")."' ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and username = '".$username."' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
}
//fs cmd
if (strlen($switch_cmd) > 0) {
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//ensure the connection exists
if ($fp) {
//send the command
$switch_result = event_socket_request($fp, 'api '.$switch_cmd);
//set the user state
$cmd = "api callcenter_config agent set state ".$username."@".$_SESSION['domain_name']." Waiting";
$response = event_socket_request($fp, $cmd);
}
}
}
?>
+107 -98
View File
@@ -17,96 +17,82 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
//check permissions
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_active_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//includes and title
require_once "resources/header.php";
$document['title'] = $text['title-active_call_center'];
require_once "resources/paging.php";
//get the variables
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search term
$search = strtolower($_GET["search"]);
if (strlen($search) > 0) {
$sql_search = " (";
$sql_search .= "lower(queue_name) like :search ";
$sql_search .= "or lower(queue_description) like :search ";
$sql_search .= ") ";
$parameters['search'] = '%'.$search.'%';
}
//show the content
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>\n";
echo "<tr>\n";
echo "<td width='50%' align=\"left\" nowrap=\"nowrap\"><b>".$text['header-active_call_center']."</b></td>\n";
echo "<td width='50%' align=\"right\">\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td align=\"left\" colspan='2'>\n";
echo $text['description-active_call_center']."<br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "</tr></table>\n";
//get the call center queue count
$sql = "select count(*) from v_call_center_queues ";
$sql .= "where domain_uuid = :domain_uuid ";
if (isset($sql_search)) {
$sql .= "and ".$sql_search;
}
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
//paging the records
$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50;
$param = "&search=".$search;
$page = is_numeric($_GET['page']) ? $_GET['page'] : 0;
list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page);
list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true);
$sql = "select * from v_call_center_queues ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$num_rows = count($result);
unset ($prep_statement, $result, $sql);
$rows_per_page = 100;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page, $var_3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
//get the call center queues
$sql = str_replace('count(*)', '*', $sql);
$sql .= order_by($order_by, $order);
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$call_center_queues = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
$sql = "select * from v_call_center_queues ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$sql .= " limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
unset ($prep_statement, $sql);
//include header
$document['title'] = $text['title-active_call_center'];
require_once "resources/header.php";
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['header-active_call_center']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
echo "<form id='form_search' class='inline' method='get'>\n";
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown='list_search_reset();'>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search','style'=>($search != '' ? 'display: none;' : null)]);
echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'call_center_queue.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo $text['description-active_call_center']."\n";
echo "<br /><br />\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
echo "<tr>\n";
echo th_order_by('queue_name', $text['label-queue_name'], $order_by, $order);
echo th_order_by('queue_extension', $text['label-extension'], $order_by, $order);
echo th_order_by('queue_strategy', $text['label-strategy'], $order_by, $order);
@@ -122,39 +108,62 @@
//echo th_order_by('queue_abandoned_resume_allowed', $text['label-abandoned_resume_allowed'], $order_by, $order);
//echo th_order_by('queue_tier_rule_wait_multiply_level', $text['label-tier_rule_wait_multiply_level'], $order_by, $order);
echo th_order_by('queue_description', $text['label-description'], $order_by, $order);
echo "<td class='list_control_icon'>\n";
//echo " <a href='call_center_queue_edit.php' alt='add'>$v_link_label_add</a>\n";
echo "</td>\n";
echo "</tr>\n";
if (is_array($call_center_queues)) {
$x = 0;
foreach($call_center_queues as $row) {
$list_row_url = PROJECT_PATH."/app/call_center_active/call_center_active.php?queue_name=".escape($row['call_center_queue_uuid'])."&name=".urlencode(escape($row['queue_name']));
echo "<tr class='list-row' href='".$list_row_url."'>\n";
echo " <td><a href='".$list_row_url."'>".escape($row['queue_name'])."</a></td>\n";
echo " <td>".escape($row['queue_extension'])."</td>\n";
echo " <td>".escape($row['queue_strategy'])."</td>\n";
//echo " <td>".escape($row[queue_moh_sound])."</td>\n";
//echo " <td>".escape($row[queue_record_template])."</td>\n";
//echo " <td>".escape($row[queue_time_base_score])."</td>\n";
//echo " <td>".escape($row[queue_max_wait_time])."</td>\n";
//echo " <td>".escape($row[queue_max_wait_time_with_no_agent])."</td>\n";
//echo " <td>".escape($row[queue_tier_rules_apply])."</td>\n";
//echo " <td>".escape($row[queue_tier_rule_wait_second])."</td>\n";
//echo " <td>".escape($row[queue_tier_rule_no_agent_no_wait])."</td>\n";
//echo " <td>".escape($row[queue_discard_abandoned_after])."</td>\n";
//echo " <td>".escape($row[queue_abandoned_resume_allowed])."</td>\n";
//echo " <td>".escape($row[queue_tier_rule_wait_multiply_level])."</td>\n";
echo " <td class='description overflow hide-xs'>".escape($row['queue_description'])."</td>\n";
echo "</tr>\n";
$x++;
}
unset($call_center_queues);
if ($result_count == 0) { //no results
}
else { //received results
foreach($result as $row) {
$tr_link = "href='".PROJECT_PATH."/app/call_center_active/call_center_active.php?queue_name=".$row[queue_name]."'";
echo "<tr ".$tr_link.">\n";
echo " <td valign='top' class='".$row_style[$c]."'><a href='".PROJECT_PATH."/app/call_center_active/call_center_active.php?queue_name=".$row[queue_name]."'>".$row[queue_name]."</a></td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_extension]."</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_strategy]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_moh_sound]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_record_template]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_time_base_score]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_max_wait_time]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_max_wait_time_with_no_agent]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_tier_rules_apply]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_tier_rule_wait_second]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_tier_rule_no_agent_no_wait]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_discard_abandoned_after]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_abandoned_resume_allowed]."</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_tier_rule_wait_multiply_level]."</td>\n";
echo " <td valign='top' class='row_stylebg'>".$row[queue_description]."&nbsp;</td>\n";
echo " <td class='list_control_icon'>\n";
echo " <a href='".PROJECT_PATH."/app/call_center_active/call_center_active.php?queue_name=".$row[queue_name]."' alt='".$text['button-view']."'>$v_link_label_view</a>\n";
//echo " <a href='call_center_queue_delete.php?id=".$row[call_center_queue_uuid]."' alt='delete' onclick=\"return confirm('Do you really want to delete this?')\">$v_link_label_delete</a>\n";
//echo " <input type='button' class='btn' name='' alt='edit' onclick=\"window.location='call_center_queue_edit.php?id=".$row[call_center_queue_uuid]."'\" value='e'>\n";
//echo " <input type='button' class='btn' name='' alt='delete' onclick=\"if (confirm('Are you sure you want to delete this?')) { window.location='call_center_queue_delete.php?id=".$row[call_center_queue_uuid]."' }\" value='x'>\n";
echo " </td>\n";
echo "</tr>\n";
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "<tr>\n";
echo "<td colspan='17' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap>$paging_controls</td>\n";
echo " <td width='33.3%' align='right'>\n";
//echo " <a href='call_center_queue_edit.php' alt='add'>$v_link_label_add</a>\n";
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>";
echo "<br><br>";
//show the footer
require_once "resources/footer.php";
?>
?>
+15 -55
View File
@@ -25,66 +25,26 @@
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>
+22 -158
View File
@@ -5,49 +5,37 @@
$apps[$x]['uuid'] = "95788e50-9500-079e-2807-fd530b0ea370";
$apps[$x]['category'] = "Switch";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.1";
$apps[$x]['version'] = "";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Queues for managing inbound calls and routing those calls to available agents.";
$apps[$x]['description']['en-gb'] = "Queues for managing inbound calls and routing those calls to available agents.";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "Warteschlangen um eingehende Anrufe zu verwalten und diese an verfügbare Agenten weiterzuleiten.";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "Warteschlangen um eingehende Anrufe zu verwalten und diese an verfügbare Agenten weiterzuleiten.";
$apps[$x]['description']['el-gr'] = "Ουρές για διαχείριση εισερχόμενων κλήσεων και δρομολόγησης των κλήσεων σε διαθέσιμους τηλεφωνητές/τηλεφωνήτριες.";
$apps[$x]['description']['es-cl'] = "Colas pra administar las llamadas entrantes y enviarlas a los agentes disponibles";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "Queues pour envoyer les appels entrants vers les agents disponibles.";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "Files d'attente d'appels entrants distribu%uFFFDs aux agents disponibles.";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "Wachtrijen voor beheer van inkomede gesprekken en routering naar beschikbare agenten.";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "As filas servem para gerenciar as chamadas que entram e encaminhar as mesmas para os agentes disponíveis.";
$apps[$x]['description']['fr-ca'] = "Queues pour envoyer les appels entrants vers les agents disponibles.";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "As filas servem para gerenciamento de chamadas de entrada e encaminhamento das mesmas para os agentes dispon%uFFFDveis.";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
$apps[$x]['description']['pt-br'] = "";
//destination details
$y=0;
$y = 0;
$apps[$x]['destinations'][$y]['type'] = "sql";
$apps[$x]['destinations'][$y]['label'] = "call_centers";
$apps[$x]['destinations'][$y]['name'] = "call_centers";
$apps[$x]['destinations'][$y]['sql'] = "select queue_name as name, queue_extension as destination, queue_extension as extension, queue_description as description from v_call_center_queues";
$apps[$x]['destinations'][$y]['sql'] = "select queue_extension as destination, queue_description as description from v_call_center_queues";
$apps[$x]['destinations'][$y]['where'] = "where domain_uuid = '\${domain_uuid}' ";
$apps[$x]['destinations'][$y]['order_by'] = "queue_name asc";
$apps[$x]['destinations'][$y]['field']['name'] = "queue_name";
$apps[$x]['destinations'][$y]['field']['destination'] = "queue_extension";
$apps[$x]['destinations'][$y]['field']['extension'] = "queue_extension";
$apps[$x]['destinations'][$y]['field']['description'] = "queue_description";
$apps[$x]['destinations'][$y]['select_value']['dialplan'] = "transfer:\${destination} XML \${context}";
$apps[$x]['destinations'][$y]['select_value']['ivr'] = "menu-exec-app:transfer \${destination} XML \${context}";
$apps[$x]['destinations'][$y]['select_label'] = "\${destination} \${name} \${description}";
//permission details
$y=0;
$y = 0;
$apps[$x]['permissions'][$y]['name'] = "call_center_queue_view";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "6c072b29-5b6c-49fc-008e-95e24c77de99";
$apps[$x]['permissions'][$y]['groups'][] = "agent";
@@ -66,11 +54,9 @@
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_all";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_agent_view";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "597c483a-51a9-f95a-8d54-ea7d87ada2b8";
$apps[$x]['permissions'][$y]['groups'][] = "agent";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
@@ -88,6 +74,7 @@
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_tier_view";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "6c072b29-5b6c-49fc-008e-95e24c77de99";
$apps[$x]['permissions'][$y]['groups'][] = "agent";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
@@ -119,74 +106,11 @@
$apps[$x]['permissions'][$y]['name'] = "call_center_log_delete";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_destinations";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_outbound_caller_id_name";
//$apps[$x]['permissions'][$y]['groups'][] = "admin";
//$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_outbound_caller_id_number";
//$apps[$x]['permissions'][$y]['groups'][] = "admin";
//$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_announce_position";
//$apps[$x]['permissions'][$y]['groups'][] = "admin";
//$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_announce_sound";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_center_announce_frequency";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
//default settings
$y = 0;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "8ebeb864-f03e-406c-b82f-6eb47cb1bd39";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "limit";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "call_center_queues";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "3";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "b32179ad-96a4-4d83-8677-1fd8fc5ef6df";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "call_center";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "agent_add_rows";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "5";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "533eac69-887f-47aa-bf27-0751797555f5";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "call_center";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "agent_edit_rows";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "1";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "bc73c8eb-f3eb-4182-adc0-9ac5aeedae2a";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "call_center";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "agent_contact_method";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "user";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Options: user (default)";
//cache details
$apps[$x]['cache']['key'] = "dialplan.\${domain_name}";
//schema details
$y=0;
$apps[$x]['db'][$y]['table']['name'] = "v_call_center_agents";
$apps[$x]['db'][$y]['table']['parent'] = "";
$z=0;
$y = 0; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = "v_call_center_agents";
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "id";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "call_center_agent_id";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "serial";
@@ -211,15 +135,6 @@
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "domain_uuid";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "user_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_users";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "user_uuid";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "v_id";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
@@ -276,15 +191,10 @@
$apps[$x]['db'][$y]['fields'][$z]['name'] = "agent_no_answer_delay_time";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "agent_record";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$y++;
$apps[$x]['db'][$y]['table']['name'] = "v_call_center_queues";
$apps[$x]['db'][$y]['table']['parent'] = "";
$z=0;
$y = 1; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = "v_call_center_queues";
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "id";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "call_center_queue_id";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "serial";
@@ -325,17 +235,12 @@
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_extension";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_greeting";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the greeting.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_strategy";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
@@ -352,10 +257,6 @@
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_time_base_score_sec";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Used to set the time base score of the Call Center to prioritize one call center over another.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_max_wait_time";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
@@ -400,18 +301,6 @@
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_outbound_caller_id_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_outbound_caller_id_number";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_announce_position";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_announce_sound";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
@@ -420,19 +309,13 @@
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_cc_exit_keys";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "queue_description";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$y++;
$apps[$x]['db'][$y]['table']['name'] = "v_call_center_tiers";
$apps[$x]['db'][$y]['table']['parent'] = "";
$z=0;
$y = 2; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = "v_call_center_tiers";
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "id";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "call_center_tier_id";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "serial";
@@ -457,25 +340,6 @@
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "domain_uuid";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_center_queue_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_call_center_queues";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "call_center_queue_uuid";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_center_agent_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "primary";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_call_center_agents";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "call_center_agent_uuid";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "v_id";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
@@ -497,4 +361,4 @@
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
?>
?>
+68 -178
View File
@@ -1,178 +1,68 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2018 - 2021
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
if ($domains_processed == 1) {
//list the missing call center queue and agent uuids
$sql = "select t.call_center_tier_uuid, t.call_center_queue_uuid, t.call_center_agent_uuid, t.queue_name, t.agent_name, d.domain_name, ";
$sql .= "(select call_center_queue_uuid from v_call_center_queues where replace(queue_name, ' ', '-') = t.queue_name and domain_uuid = t.domain_uuid) as queue_uuid, ";
$sql .= "(select call_center_agent_uuid from v_call_center_agents where agent_name = t.agent_name and domain_uuid = t.domain_uuid) as agent_uuid ";
$sql .= "from v_call_center_tiers as t, v_domains as d ";
$sql .= "where t.domain_uuid = d.domain_uuid ";
$sql .= "and (t.call_center_queue_uuid is null or t.call_center_agent_uuid is null) ";
$database = new database;
$tiers = $database->select($sql, null, 'all');
if (is_array($tiers) && @sizeof($tiers) != 0) {
foreach ($tiers as $index => &$row) {
if ($row['call_center_queue_uuid'] == null && $row['queue_uuid'] != null) {
$array['call_center_tiers'][$index]['call_center_queue_uuid'] = $row['queue_uuid'];
}
if ($row['call_center_agent_uuid'] == null && $row['agent_uuid'] != null) {
$array['call_center_tiers'][$index]['call_center_agent_uuid'] = $row['agent_uuid'];
}
if (is_array($array['call_center_tiers'][$index]) && @sizeof($array['call_center_tiers'][$index]) != 0) {
$array['call_center_tiers'][$index]['call_center_tier_uuid'] = $row['call_center_tier_uuid'];
}
}
if (is_array($array) && @sizeof($array) != 0) {
$p = new permissions;
$p->add('call_center_tier_edit', 'temp');
$database = new database;
$database->app_name = 'call_centers';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->save($array, false);
$response = $database->message;
unset($array);
$p->delete('call_center_tier_edit', 'temp');
}
}
unset($sql);
//update all callcenter dialplans to have the @domain in the queue name
$sql = "select q.domain_uuid, d.domain_name, q.call_center_queue_uuid, q.dialplan_uuid, ";
$sql .= "q.queue_name, q.queue_extension, q.queue_timeout_action, q.queue_cid_prefix, q.queue_cc_exit_keys, ";
$sql .= "q.queue_description, q.queue_time_base_score_sec, q.queue_greeting ";
$sql .= "from v_call_center_queues as q, v_domains as d ";
$sql .= "where q.domain_uuid = d.domain_uuid ";
$database = new database;
$call_center_queues = $database->select($sql, null, 'all');
$id = 0;
if (is_array($call_center_queues)) {
foreach ($call_center_queues as $row) {
//get the application and data
$action_array = explode(":",$row['queue_timeout_action']);
$queue_timeout_app = $action_array[0];
unset($action_array[0]);
$queue_timeout_data = implode($action_array);
//add the recording path if needed
if ($row['queue_greeting'] != '') {
if (file_exists($_SESSION['switch']['recordings']['dir'].'/'.$row['domain_name'].'/'.$row['queue_greeting'])) {
$queue_greeting_path = $_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/'.$row['queue_greeting'];
}
else {
$queue_greeting_path = trim($row['queue_greeting']);
}
}
//build the xml dialplan
$dialplan_xml = "<extension name=\"".$row["queue_name"]."\" continue=\"\" uuid=\"".$row["dialplan_uuid"]."\">\n";
$dialplan_xml .= " <condition field=\"destination_number\" expression=\"^([^#]+#)(.*)\$\" break=\"never\">\n";
$dialplan_xml .= " <action application=\"set\" data=\"caller_id_name=\$2\"/>\n";
$dialplan_xml .= " </condition>\n";
$dialplan_xml .= " <condition field=\"destination_number\" expression=\"^".$row["queue_extension"]."$\">\n";
$dialplan_xml .= " <action application=\"answer\" data=\"\"/>\n";
if (is_uuid($row['call_center_queue_uuid'])) {
$dialplan_xml .= " <action application=\"set\" data=\"call_center_queue_uuid=".$row['call_center_queue_uuid']."\"/>\n";
}
if (is_numeric($queue_extension)) {
$dialplan_xml .= " <action application=\"set\" data=\"queue_extension=".$row['queue_extension']."\"/>\n";
}
$dialplan_xml .= " <action application=\"set\" data=\"cc_export_vars=call_center_queue_uuid\"/>\n";
$dialplan_xml .= " <action application=\"set\" data=\"hangup_after_bridge=true\"/>\n";
if ($row['queue_time_base_score_sec'] != '') {
$dialplan_xml .= " <action application=\"set\" data=\"cc_base_score=".$row['queue_time_base_score_sec']."\"/>\n";
}
if ($row['queue_greeting_path'] != '') {
$greeting_array = explode(':', $row['queue_greeting_path']);
if (count($greeting_array) == 1) {
$dialplan_xml .= " <action application=\"playback\" data=\"".$row['queue_greeting_path']."\"/>\n";
}
else {
if ($greeting_array[0] == 'say' || $greeting_array[0] == 'tone_stream' || $greeting_array[0] == 'phrase') {
$dialplan_xml .= " <action application=\"".$greeting_array[0]."\" data=\"".$greeting_array[1]."\"/>\n";
}
}
}
if (strlen($row['queue_cid_prefix']) > 0) {
$dialplan_xml .= " <action application=\"set\" data=\"effective_caller_id_name=".$row['queue_cid_prefix']."#\${caller_id_name}\"/>\n";
}
if (strlen($row['queue_cc_exit_keys']) > 0) {
$dialplan_xml .= " <action application=\"set\" data=\"cc_exit_keys=".$row['queue_cc_exit_keys']."\"/>\n";
}
$dialplan_xml .= " <action application=\"callcenter\" data=\"".$row['queue_extension']."@".$row['domain_name']."\"/>\n";
//if ($destination->valid($queue_timeout_app.':'.$queue_timeout_data)) {
$dialplan_xml .= " <action application=\"".$queue_timeout_app."\" data=\"".$queue_timeout_data."\"/>\n";
//}
$dialplan_xml .= " </condition>\n";
$dialplan_xml .= "</extension>\n";
//build the dialplan array
$array['dialplans'][$id]["domain_uuid"] = $row["domain_uuid"];
$array['dialplans'][$id]["dialplan_uuid"] = $row["dialplan_uuid"];
$array['dialplans'][$id]["dialplan_name"] = $row["queue_name"];
$array['dialplans'][$id]["dialplan_number"] = $row["queue_extension"];
$array['dialplans'][$id]["dialplan_context"] = $row['domain_name'];
$array['dialplans'][$id]["dialplan_continue"] = "false";
$array['dialplans'][$id]["dialplan_xml"] = $dialplan_xml;
$array['dialplans'][$id]["dialplan_order"] = "230";
$array['dialplans'][$id]["dialplan_enabled"] = "true";
$array['dialplans'][$id]["dialplan_description"] = $row["queue_description"];
$array['dialplans'][$id]["app_uuid"] = "95788e50-9500-079e-2807-fd530b0ea370";
//increment the array id
$id++;
}
}
unset ($prep_statement);
//save the array to the database
if (is_array($array)) {
//add the dialplan permission
$p = new permissions;
$p->add("dialplan_add", "temp");
$p->add("dialplan_edit", "temp");
//save to the data
$database = new database;
$database->app_name = 'call_centers';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->save($array, false);
$message = $database->message;
//remove the temporary permission
$p->delete("dialplan_add", "temp");
$p->delete("dialplan_edit", "temp");
}
}
?>
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2015
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//process this only one time
if ($domains_processed == 1) {
//add switch call_center dir if it is missing
$sql = "select count(*) as num_rows from v_default_settings ";
$sql .= "where default_setting_category = 'switch' ";
$sql .= "and default_setting_subcategory = 'call_center' ";
$sql .= "and default_setting_name = 'dir' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] == 0) {
$sql = "insert into v_default_settings ";
$sql .= "(";
$sql .= "default_setting_uuid, ";
$sql .= "default_setting_category, ";
$sql .= "default_setting_subcategory, ";
$sql .= "default_setting_name, ";
$sql .= "default_setting_value, ";
$sql .= "default_setting_enabled, ";
$sql .= "default_setting_description ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'".uuid()."', ";
$sql .= "'switch', ";
$sql .= "'call_center', ";
$sql .= "'dir', ";
$sql .= "'".$_SESSION['switch']['conf']['dir']."/autoload_configs', ";
$sql .= "'true', ";
$sql .= "'' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
}
unset($prep_statement, $row);
}
}
?>
File diff suppressed because it is too large Load Diff
+35 -55
View File
@@ -1,58 +1,38 @@
<?php
$y=0;
$apps[$x]['menu'][$y]['title']['en-us'] = "Call Centers";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Call Centers";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "";
$apps[$x]['menu'][$y]['title']['de-at'] = "Callcenter";
$apps[$x]['menu'][$y]['title']['de-ch'] = "";
$apps[$x]['menu'][$y]['title']['de-de'] = "Callcenter";
$apps[$x]['menu'][$y]['title']['es-cl'] = "Centro de Llamadas";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "Centre d' appels";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "Centre d'appel";
$apps[$x]['menu'][$y]['title']['he-il'] = "";
$apps[$x]['menu'][$y]['title']['it-it'] = "Stato Agenti";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Call-Centers";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Call Center ";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Call Center";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "Centro de Chamadas";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Колл-центр";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Call Center";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "Кол-центр";
$apps[$x]['menu'][$y]['uuid'] = "6c072b29-5b6c-49fc-008e-95e24c77de99";
$apps[$x]['menu'][$y]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['path'] = "/app/call_centers/call_center_queues.php";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['menu'][$y]['title']['en-us'] = "Agent Status";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Agent Status";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "";
$apps[$x]['menu'][$y]['title']['de-at'] = "Agenten Status";
$apps[$x]['menu'][$y]['title']['de-ch'] = "";
$apps[$x]['menu'][$y]['title']['de-de'] = "Agenten Status";
$apps[$x]['menu'][$y]['title']['es-cl'] = "Estado de Agente";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "État de l'agent";
$apps[$x]['menu'][$y]['title']['he-il'] = "";
$apps[$x]['menu'][$y]['title']['it-it'] = "";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Agent status";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Status agenta";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Estado do agente";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "Estado do Agente";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Статус агента";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Agent Status";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "Статус оператора";
$apps[$x]['menu'][$y]['uuid'] = "597c483a-51a9-f95a-8d54-ea7d87ada2b8";
$apps[$x]['menu'][$y]['parent_uuid'] = "0438b504-8613-7887-c420-c837ffb20cb1";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['path'] = "/app/call_centers/call_center_agent_status.php";
$apps[$x]['menu'][$y]['groups'][] = "admin";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][0]['title']['en-us'] = "Call Center";
$apps[$x]['menu'][0]['title']['es-cl'] = "Centro de Llamadas";
$apps[$x]['menu'][0]['title']['fr-fr'] = "Centre d'appel";
$apps[$x]['menu'][0]['title']['fr-ca'] = "Centre d' appels";
$apps[$x]['menu'][0]['title']['pt-pt'] = "Centro de Chamadas";
$apps[$x]['menu'][0]['title']['pt-br'] = "Centro de chamadas";
$apps[$x]['menu'][0]['title']['pl'] = "Call Center ";
$apps[$x]['menu'][0]['title']['sv-se'] = "Call Center";
$apps[$x]['menu'][0]['title']['uk'] = "Кол-центр";
$apps[$x]['menu'][0]['title']['de-at'] = "Callcenter";
$apps[$x]['menu'][0]['uuid'] = "6c072b29-5b6c-49fc-008e-95e24c77de99";
$apps[$x]['menu'][0]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['path'] = "/app/call_centers/call_center_queues.php";
$apps[$x]['menu'][0]['groups'][] = "agent";
$apps[$x]['menu'][0]['groups'][] = "admin";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
?>
$apps[$x]['menu'][1]['title']['en-us'] = "Agent Status";
$apps[$x]['menu'][1]['title']['es-cl'] = "Estado de Agente";
$apps[$x]['menu'][1]['title']['fr-fr'] = "État de l'agent";
$apps[$x]['menu'][1]['title']['pt-pt'] = "Estado do Agente";
$apps[$x]['menu'][1]['title']['pt-br'] = "Estado do agente";
$apps[$x]['menu'][1]['title']['pl'] = "Status agenta";
$apps[$x]['menu'][1]['title']['sv-se'] = "Agent Status";
$apps[$x]['menu'][1]['title']['uk'] = "Статус оператора";
$apps[$x]['menu'][1]['title']['de-at'] = "Agenten Status";
$apps[$x]['menu'][1]['uuid'] = "597c483a-51a9-f95a-8d54-ea7d87ada2b8";
$apps[$x]['menu'][1]['parent_uuid'] = "0438b504-8613-7887-c420-c837ffb20cb1";
$apps[$x]['menu'][1]['category'] = "internal";
$apps[$x]['menu'][1]['path'] = "/app/call_centers/call_center_agent_status.php";
$apps[$x]['menu'][1]['groups'][] = "agent_admin";
$apps[$x]['menu'][1]['groups'][] = "admin";
$apps[$x]['menu'][1]['groups'][] = "superadmin";
?>
@@ -0,0 +1,95 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_agent_delete')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
if (count($_GET)>0) {
$id = check_str($_GET["id"]);
}
//get the agent details
$sql = "select * from v_call_center_agents ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_center_agent_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$agent_name = $row["agent_name"];
break; //limit to 1 row
}
unset ($prep_statement);
//delete the agent from the freeswitch
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//delete the agent over event socket
if ($fp) {
$cmd = "api callcenter_config agent del ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name'];
$response = event_socket_request($fp, $cmd);
}
//delete the agent from db
if (strlen($id)>0) {
//tiers table
$sql = "delete from v_call_center_tiers ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and agent_name = '$agent_name' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
unset($sql);
//agents table
$sql = "delete from v_call_center_agents ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_center_agent_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
unset($sql);
}
//synchronize configuration
save_call_center_xml();
//redirect the browser
$_SESSION["message"] = $text['message-delete'];
header("Location: call_center_agents.php");
return;
?>
+268 -285
View File
@@ -17,27 +17,23 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2020
Portions created by the Initial Developer are Copyright (C) 2008-2015
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Luis Daniel Lucio Quiroz <dlucio@okay.com.mx>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_center_agent_add') || permission_exists('call_center_agent_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_agent_add') || permission_exists('call_center_agent_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
@@ -47,298 +43,311 @@
if ($_GET["check"] == 'duplicate') {
//agent id
if ($_GET["agent_id"] != '') {
$sql = "select agent_name ";
$sql .= "from v_call_center_agents ";
$sql .= "where agent_id = :agent_id ";
$sql .= "and domain_uuid = :domain_uuid ";
if (is_uuid($_GET["agent_uuid"])) {
$sql .= " and call_center_agent_uuid <> :call_center_agent_uuid ";
$parameters['call_center_agent_uuid'] = $_GET["agent_uuid"];
$sql = "select ";
$sql .= "agent_name ";
$sql .= "from ";
$sql .= "v_call_center_agents ";
$sql .= "where ";
$sql .= "agent_id = '".check_str($_GET["agent_id"])."' ";
$sql .= "and domain_uuid = '".$domain_uuid."' ";
if ($_GET["agent_uuid"] != '') {
$sql .= " and call_center_agent_uuid <> '".check_str($_GET["agent_uuid"])."' ";
}
$parameters['agent_id'] = $_GET["agent_id"];
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$row = $database->select($sql, $parameters, 'row');
if (is_array($row) && sizeof($row) != 0 && $row['agent_name'] != '') {
echo $text['message-duplicate_agent_id'].(if_group("superadmin") ? ": ".$row["agent_name"] : null);
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['agent_name'] != '') {
echo $text['message-duplicate_agent_id'].((if_group("superadmin")) ? ": ".$row["agent_name"] : null);
}
}
unset($sql, $parameters);
unset($prep_statement);
}
exit;
}
//action add or update
if (is_uuid($_REQUEST["id"])) {
if (isset($_REQUEST["id"])) {
$action = "update";
$call_center_agent_uuid = $_REQUEST["id"];
$call_center_agent_uuid = check_str($_REQUEST["id"]);
}
else {
$action = "add";
}
//get http post variables and set them to php variables
if (is_array($_POST)) {
$call_center_agent_uuid = $_POST["call_center_agent_uuid"];
$user_uuid = $_POST["user_uuid"];
$agent_name = $_POST["agent_name"];
$agent_type = $_POST["agent_type"];
$agent_call_timeout = $_POST["agent_call_timeout"];
$agent_id = $_POST["agent_id"];
$agent_password = $_POST["agent_password"];
$agent_status = $_POST["agent_status"];
$agent_contact = $_POST["agent_contact"];
$agent_no_answer_delay_time = $_POST["agent_no_answer_delay_time"];
$agent_max_no_answer = $_POST["agent_max_no_answer"];
$agent_wrap_up_time = $_POST["agent_wrap_up_time"];
$agent_reject_delay_time = $_POST["agent_reject_delay_time"];
$agent_busy_delay_time = $_POST["agent_busy_delay_time"];
$agent_record = $_POST["agent_record"];
//$agent_logout = $_POST["agent_logout"];
if (count($_POST) > 0) {
$agent_name = check_str($_POST["agent_name"]);
$agent_type = check_str($_POST["agent_type"]);
$agent_call_timeout = check_str($_POST["agent_call_timeout"]);
$agent_id = check_str($_POST["agent_id"]);
$agent_password = check_str($_POST["agent_password"]);
$agent_contact = check_str($_POST["agent_contact"]);
$agent_status = check_str($_POST["agent_status"]);
//$agent_logout = check_str($_POST["agent_logout"]);
$agent_no_answer_delay_time = check_str($_POST["agent_no_answer_delay_time"]);
$agent_max_no_answer = check_str($_POST["agent_max_no_answer"]);
$agent_wrap_up_time = check_str($_POST["agent_wrap_up_time"]);
$agent_reject_delay_time = check_str($_POST["agent_reject_delay_time"]);
$agent_busy_delay_time = check_str($_POST["agent_busy_delay_time"]);
}
//process the user data and save it to the database
if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: call_center_agents.php');
exit;
}
$msg = '';
//check for all required data
$msg = '';
//if (strlen($call_center_agent_uuid) == 0) { $msg .= $text['message-required']." ".$text['label-call_center_agent_uuid']."<br>\n"; }
//if (strlen($domain_uuid) == 0) { $msg .= $text['message-required']." ".$text['label-domain_uuid']."<br>\n"; }
//if (strlen($user_uuid) == 0) { $msg .= $text['message-required']." ".$text['label-user_uuid']."<br>\n"; }
if (strlen($agent_name) == 0) { $msg .= $text['message-required']." ".$text['label-agent_name']."<br>\n"; }
if (strlen($agent_type) == 0) { $msg .= $text['message-required']." ".$text['label-agent_type']."<br>\n"; }
if (strlen($agent_call_timeout) == 0) { $msg .= $text['message-required']." ".$text['label-agent_call_timeout']."<br>\n"; }
//if (strlen($agent_id) == 0) { $msg .= $text['message-required']." ".$text['label-agent_id']."<br>\n"; }
//if (strlen($agent_password) == 0) { $msg .= $text['message-required']." ".$text['label-agent_password']."<br>\n"; }
//if (strlen($agent_status) == 0) { $msg .= $text['message-required']." ".$text['label-agent_status']."<br>\n"; }
if (strlen($agent_contact) == 0) { $msg .= $text['message-required']." ".$text['label-agent_contact']."<br>\n"; }
if (strlen($agent_no_answer_delay_time) == 0) { $msg .= $text['message-required']." ".$text['label-agent_no_answer_delay_time']."<br>\n"; }
if (strlen($agent_max_no_answer) == 0) { $msg .= $text['message-required']." ".$text['label-agent_max_no_answer']."<br>\n"; }
if (strlen($agent_wrap_up_time) == 0) { $msg .= $text['message-required']." ".$text['label-agent_wrap_up_time']."<br>\n"; }
if (strlen($agent_reject_delay_time) == 0) { $msg .= $text['message-required']." ".$text['label-agent_reject_delay_time']."<br>\n"; }
if (strlen($agent_busy_delay_time) == 0) { $msg .= $text['message-required']." ".$text['label-agent_busy_delay_time']."<br>\n"; }
//if (strlen($agent_logout) == 0) { $msg .= $text['message-required']." ".$text['label-agent_logout']."<br>\n"; }
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
require_once "resources/header.php";
require_once "resources/persist_form_var.php";
echo "<div align='center'>\n";
echo "<table><tr><td>\n";
echo $msg."<br />";
echo "</td></tr></table>\n";
persistformvar($_POST);
echo "</div>\n";
require_once "resources/footer.php";
return;
}
if ($action == "update") {
$call_center_agent_uuid = check_str($_POST["call_center_agent_uuid"]);
}
//add the call_center_agent_uuid
if (strlen($call_center_agent_uuid) == 0) {
$call_center_agent_uuid = uuid();
}
//get the users array
$sql = "select * from v_users ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "order by username asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$users = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//change the contact string to loopback - Not recommended added for backwards comptability causes multiple problems
if ($_SESSION['call_center']['agent_contact_method']['text'] == 'loopback') {
$agent_contact = str_replace("user/", "loopback/", $agent_contact);
$agent_contact = str_replace("@", "/", $agent_contact);
}
//prepare the array
$array['call_center_agents'][0]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['call_center_agents'][0]['call_center_agent_uuid'] = $call_center_agent_uuid;
$array['call_center_agents'][0]['agent_name'] = $agent_name;
$array['call_center_agents'][0]['agent_type'] = $agent_type;
$array['call_center_agents'][0]['agent_call_timeout'] = $agent_call_timeout;
$array['call_center_agents'][0]['user_uuid'] = $user_uuid;
$array['call_center_agents'][0]['agent_id'] = $agent_id;
$array['call_center_agents'][0]['agent_password'] = $agent_password;
$array['call_center_agents'][0]['agent_contact'] = $agent_contact;
$array['call_center_agents'][0]['agent_status'] = $agent_status;
$array['call_center_agents'][0]['agent_no_answer_delay_time'] = $agent_no_answer_delay_time;
$array['call_center_agents'][0]['agent_max_no_answer'] = $agent_max_no_answer;
$array['call_center_agents'][0]['agent_wrap_up_time'] = $agent_wrap_up_time;
$array['call_center_agents'][0]['agent_reject_delay_time'] = $agent_reject_delay_time;
$array['call_center_agents'][0]['agent_busy_delay_time'] = $agent_busy_delay_time;
$array['call_center_agents'][0]['agent_record'] = $agent_record;
if (is_uuid($user_uuid)) {
$array['users'][0]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['users'][0]['user_uuid'] = $user_uuid;
$array['users'][0]['user_status'] = $agent_status;
}
//save to the data
$database = new database;
$database->app_name = 'call_center';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->save($array);
//$message = $database->message;
//syncrhonize configuration
save_call_center_xml();
//clear the cache
$cache = new cache;
$cache->delete('configuration:callcenter.conf');
//check for all required data
//if (strlen($domain_uuid) == 0) { $msg .= $text['message-required']."domain_uuid<br>\n"; }
//if (strlen($agent_name) == 0) { $msg .= $text['message-required'].$text['label-agent_name']."<br>\n"; }
//if (strlen($agent_type) == 0) { $msg .= $text['message-required'].$text['label-type']."<br>\n"; }
//if (strlen($agent_call_timeout) == 0) { $msg .= $text['message-required'].$text['label-call_timeout']."<br>\n"; }
//if (strlen($agent_contact) == 0) { $msg .= $text['message-required'].$text['label-contact']."<br>\n"; }
//if (strlen($agent_status) == 0) { $msg .= $text['message-required'].$text['label-status']."<br>\n"; }
//if (strlen($agent_logout) == 0) { $msg .= $text['message-required'].$text['label-agent_logout']."<br>\n"; }
//if (strlen($agent_no_answer_delay_time) == 0) { $msg .= $text['message-required'].$text['label-no_answer_delay_time']."<br>\n"; }
//if (strlen($agent_max_no_answer) == 0) { $msg .= $text['message-required'].$text['label-max_no_answer']."<br>\n"; }
//if (strlen($agent_wrap_up_time) == 0) { $msg .= $text['message-required'].$text['label-wrap_up_time']."<br>\n"; }
//if (strlen($agent_reject_delay_time) == 0) { $msg .= $text['message-required'].$text['label-reject_delay_time']."<br>\n"; }
//if (strlen($agent_busy_delay_time) == 0) { $msg .= $text['message-required'].$text['label-busy_delay_time']."<br>\n"; }
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
require_once "resources/header.php";
require_once "resources/persist_form_var.php";
echo "<div align='center'>\n";
echo "<table><tr><td>\n";
echo $msg."<br />";
echo "</td></tr></table>\n";
persistformvar($_POST);
echo "</div>\n";
require_once "resources/footer.php";
return;
}
//get and then set the complete agent_contact with the call_timeout and when necessary confirm
//if you change this variable, also change resources/switch.php
$confirm = "group_confirm_file=custom/press_1_to_accept_this_call.wav,group_confirm_key=1,group_confirm_read_timeout=2000,leg_timeout=".$agent_call_timeout;
$tmp_confirm = "group_confirm_file=custom/press_1_to_accept_this_call.wav,group_confirm_key=1,group_confirm_read_timeout=2000,leg_timeout=".$agent_call_timeout;
if(strstr($agent_contact, '}') === FALSE) {
//not found
if(stristr($agent_contact, 'sofia/gateway') === FALSE) {
//add the call_timeout
$agent_contact = "{call_timeout=".$agent_call_timeout.",sip_invite_domain=".$_SESSION['domain_name']."}".$agent_contact;
$tmp_agent_contact = "{call_timeout=".$agent_call_timeout."}".$agent_contact;
}
else {
//add the call_timeout and confirm
$agent_contact = "{".$confirm.",call_timeout=".$agent_call_timeout.",sip_invite_domain=".$_SESSION['domain_name']."}".$agent_contact;
$tmp_agent_contact = $tmp_first.',call_timeout='.$agent_call_timeout.$tmp_last;
$tmp_agent_contact = "{".$tmp_confirm.",call_timeout=".$agent_call_timeout."}".$agent_contact;
echo "\n\n".$tmp_agent_contact."\n\n";
}
}
else {
$position = strrpos($agent_contact, "}");
$first = substr($agent_contact, 0, $position);
$last = substr($agent_contact, $position);
//add call_timeout and sip_invite_domain, only if missing
$call_timeout = (stristr($agent_contact, 'call_timeout') === FALSE) ? ',call_timeout='.$agent_call_timeout : null;
$sip_invite_domain = (stristr($agent_contact, 'sip_invite_domain') === FALSE) ? ',sip_invite_domain='.$_SESSION['domain_name'] : null;
//compose
//found
if(stristr($agent_contact, 'sofia/gateway') === FALSE) {
$agent_contact = $first.$sip_invite_domain.$call_timeout.$last;
//not found
if(stristr($agent_contact, 'call_timeout') === FALSE) {
//add the call_timeout
$tmp_pos = strrpos($agent_contact, "}");
$tmp_first = substr($agent_contact, 0, $tmp_pos);
$tmp_last = substr($agent_contact, $tmp_pos);
$tmp_agent_contact = $tmp_first.',call_timeout='.$agent_call_timeout.$tmp_last;
}
else {
//the string has the call timeout
$tmp_agent_contact = $agent_contact;
}
}
else {
$agent_contact = $first.','.$confirm.$sip_invite_domain.$call_timeout.$last;
//found
$tmp_pos = strrpos($agent_contact, "}");
$tmp_first = substr($agent_contact, 0, $tmp_pos);
$tmp_last = substr($agent_contact, $tmp_pos);
if(stristr($agent_contact, 'call_timeout') === FALSE) {
//add the call_timeout and confirm
$tmp_agent_contact = $tmp_first.','.$tmp_confirm.',call_timeout='.$agent_call_timeout.$tmp_last;
}
else {
//add confirm
$tmp_agent_contact = $tmp_first.','.$tmp_confirm.$tmp_last;
}
}
}
//set the user_status
$sql = "update v_users set ";
$sql .= "user_status = '".$agent_status."' ";
$sql .= "where domain_uuid = '".$domain_uuid."' ";
$sql .= "and username = '".$agent_name."' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
//add the agent
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//add the agent using event socket
if ($fp) {
//add the agent
$cmd = "api callcenter_config agent add ".$call_center_agent_uuid." ".$agent_type;
$cmd = "api callcenter_config agent add ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." ".$agent_type;
$response = event_socket_request($fp, $cmd);
usleep(200);
//agent set contact
$cmd = "api callcenter_config agent set contact ".$call_center_agent_uuid." ".$agent_contact;
$cmd = "api callcenter_config agent set contact ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." ".$tmp_agent_contact;
$response = event_socket_request($fp, $cmd);
usleep(200);
//agent set status
$cmd = "api callcenter_config agent set status ".$call_center_agent_uuid." '".$agent_status."'";
$cmd = "api callcenter_config agent set status ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." '".$agent_status."'";
$response = event_socket_request($fp, $cmd);
usleep(200);
//agent set reject_delay_time
$cmd = "api callcenter_config agent set reject_delay_time ".$call_center_agent_uuid." ".$agent_reject_delay_time;
$cmd = "api callcenter_config agent set reject_delay_time ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." ".$agent_reject_delay_time;
$response = event_socket_request($fp, $cmd);
usleep(200);
//agent set busy_delay_time
$cmd = "api callcenter_config agent set busy_delay_time ".$call_center_agent_uuid." ".$agent_busy_delay_time;
$cmd = "api callcenter_config agent set busy_delay_time ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." ".$agent_busy_delay_time;
$response = event_socket_request($fp, $cmd);
//agent set no_answer_delay_time
$cmd = "api callcenter_config agent set no_answer_delay_time ".$call_center_agent_uuid." ".$agent_no_answer_delay_time;
$cmd = "api callcenter_config agent set no_answer_delay_time ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." ".$agent_no_answer_delay_time;
$response = event_socket_request($fp, $cmd);
//agent set max_no_answer
$cmd = "api callcenter_config agent set max_no_answer ".$call_center_agent_uuid." ".$agent_max_no_answer;
$cmd = "api callcenter_config agent set max_no_answer ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." ".$agent_max_no_answer;
$response = event_socket_request($fp, $cmd);
//agent set wrap_up_time
$cmd = "api callcenter_config agent set wrap_up_time ".$call_center_agent_uuid." ".$agent_wrap_up_time;
$cmd = "api callcenter_config agent set wrap_up_time ".$agent_name."@".$_SESSION['domains'][$domain_uuid]['domain_name']." ".$agent_wrap_up_time;
$response = event_socket_request($fp, $cmd);
}
//redirect the user
if (isset($action)) {
if ($action == "add") {
message::add($text['message-add']);
}
if ($action == "update") {
message::add($text['message-update']);
}
header("Location: call_center_agents.php");
return;
}
} //(is_array($_POST) && strlen($_POST["persistformvar"]) == 0)
//add or update the database
if ($_POST["persistformvar"] != "true") {
if ($action == "add") {
//add the agent to the database
$call_center_agent_uuid = uuid();
$sql = "insert into v_call_center_agents ";
$sql .= "(";
$sql .= "domain_uuid, ";
$sql .= "call_center_agent_uuid, ";
$sql .= "agent_name, ";
$sql .= "agent_type, ";
$sql .= "agent_call_timeout, ";
$sql .= "agent_id, ";
$sql .= "agent_password, ";
$sql .= "agent_contact, ";
$sql .= "agent_status, ";
//$sql .= "agent_logout, ";
$sql .= "agent_no_answer_delay_time, ";
$sql .= "agent_max_no_answer, ";
$sql .= "agent_wrap_up_time, ";
$sql .= "agent_reject_delay_time, ";
$sql .= "agent_busy_delay_time ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'$domain_uuid', ";
$sql .= "'$call_center_agent_uuid', ";
$sql .= "'$agent_name', ";
$sql .= "'$agent_type', ";
$sql .= "'$agent_call_timeout', ";
$sql .= "'$agent_id', ";
$sql .= "'$agent_password', ";
$sql .= "'$agent_contact', ";
$sql .= "'$agent_status', ";
//$sql .= "'$agent_logout', ";
$sql .= "'$agent_no_answer_delay_time', ";
$sql .= "'$agent_max_no_answer', ";
$sql .= "'$agent_wrap_up_time', ";
$sql .= "'$agent_reject_delay_time', ";
$sql .= "'$agent_busy_delay_time' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
//syncrhonize configuration
save_call_center_xml();
$_SESSION["message"] = $text['message-add'];
header("Location: call_center_agents.php");
return;
} //if ($action == "add")
if ($action == "update") {
$sql = "update v_call_center_agents set ";
$sql .= "agent_name = '$agent_name', ";
$sql .= "agent_type = '$agent_type', ";
$sql .= "agent_call_timeout = '$agent_call_timeout', ";
$sql .= "agent_id = '$agent_id', ";
$sql .= "agent_password = '$agent_password', ";
$sql .= "agent_contact = '$agent_contact', ";
$sql .= "agent_status = '$agent_status', ";
//$sql .= "agent_logout = '$agent_logout', ";
$sql .= "agent_no_answer_delay_time = '$agent_no_answer_delay_time', ";
$sql .= "agent_max_no_answer = '$agent_max_no_answer', ";
$sql .= "agent_wrap_up_time = '$agent_wrap_up_time', ";
$sql .= "agent_reject_delay_time = '$agent_reject_delay_time', ";
$sql .= "agent_busy_delay_time = '$agent_busy_delay_time' ";
$sql .= "where domain_uuid = '$domain_uuid'";
$sql .= "and call_center_agent_uuid = '$call_center_agent_uuid'";
$db->exec(check_sql($sql));
unset($sql);
//syncrhonize configuration
save_call_center_xml();
$_SESSION["message"] = $text['message-update'];
header("Location: call_center_agents.php");
return;
} //if ($action == "update")
} //if ($_POST["persistformvar"] != "true")
} //(count($_POST)>0 && strlen($_POST["persistformvar"]) == 0)
//initialize the destinations object
$destination = new destinations;
//pre-populate the form
if (is_uuid($_GET["id"]) && $_POST["persistformvar"] != "true") {
if (count($_GET)>0 && $_POST["persistformvar"] != "true") {
$call_center_agent_uuid = $_GET["id"];
$sql = "select * from v_call_center_agents ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and call_center_agent_uuid = :call_center_agent_uuid ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['call_center_agent_uuid'] = $call_center_agent_uuid;
$database = new database;
$row = $database->select($sql, $parameters, 'row');
if (is_array($row) && @sizeof($row) != 0) {
$call_center_agent_uuid = $row["call_center_agent_uuid"];
$user_uuid = $row["user_uuid"];
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_center_agent_uuid = '$call_center_agent_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$agent_name = $row["agent_name"];
$agent_type = $row["agent_type"];
$agent_call_timeout = $row["agent_call_timeout"];
$agent_id = $row["agent_id"];
$agent_password = $row["agent_password"];
$agent_status = $row["agent_status"];
$agent_contact = $row["agent_contact"];
$agent_status = $row["agent_status"];
//$agent_logout = $row["agent_logout"];
$agent_no_answer_delay_time = $row["agent_no_answer_delay_time"];
$agent_max_no_answer = $row["agent_max_no_answer"];
$agent_wrap_up_time = $row["agent_wrap_up_time"];
$agent_reject_delay_time = $row["agent_reject_delay_time"];
$agent_busy_delay_time = $row["agent_busy_delay_time"];
$agent_record = $row["agent_record"];
//$agent_logout = $row["agent_logout"];
break; //limit to 1 row
}
unset($sql, $parameters, $row);
unset ($prep_statement);
}
//set default values
if (strlen($agent_type) == 0) { $agent_type = "callback"; }
if (strlen($agent_call_timeout) == 0) { $agent_call_timeout = "20"; }
if (strlen($agent_call_timeout) == 0) { $agent_call_timeout = "15"; }
if (strlen($agent_max_no_answer) == 0) { $agent_max_no_answer = "0"; }
if (strlen($agent_wrap_up_time) == 0) { $agent_wrap_up_time = "10"; }
if (strlen($agent_no_answer_delay_time) == 0) { $agent_no_answer_delay_time = "30"; }
if (strlen($agent_reject_delay_time) == 0) { $agent_reject_delay_time = "90"; }
if (strlen($agent_busy_delay_time) == 0) { $agent_busy_delay_time = "90"; }
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//show the header
require_once "resources/header.php";
if ($action == "add") {
$document['title'] = $text['title-call_center_agent_add'];
}
if ($action == "update") {
$document['title'] = $text['title-call_center_agent_edit'];
}
require_once "resources/header.php";
//get the list of users for this domain
$sql = "select * from v_users ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and user_enabled = 'true' ";
$sql .= "order by username asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$users = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//javascript to check for duplicates
?>
@@ -346,7 +355,7 @@
function check_duplicates() {
//check agent id
var agent_id = document.getElementById('agent_id').value;
$("#duplicate_agent_id_response").load("call_center_agent_edit.php?check=duplicate&agent_id="+agent_id+"&agent_uuid=<?php echo escape($call_center_agent_uuid); ?>", function() {
$("#duplicate_agent_id_response").load("call_center_agent_edit.php?check=duplicate&agent_id="+agent_id+"&agent_uuid=<?php echo $call_center_agent_uuid;?>", function() {
var duplicate_agent_id = false;
if ($("#duplicate_agent_id_response").html() != '') {
$('#agent_id').addClass('formfld_highlight_bad');
@@ -368,46 +377,52 @@
<?php
//show the content
echo "<form method='post' name='frm' id='frm' onsubmit='check_duplicates(); return false;'>\n";
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'>";
echo "<form method='post' name='frm' id='frm' action='' onsubmit='check_duplicates(); return false;'>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
if ($action == "add") {
echo "<b>".$text['header-call_center_agent_add']."</b>";
echo "<td align='left' width='30%' nowrap='nowrap'><b>".$text['header-call_center_agent_add']."</b></td>\n";
}
if ($action == "update") {
echo "<b>".$text['header-call_center_agent_edit']."</b>";
echo "<td align='left' width='30%' nowrap='nowrap'><b>".$text['header-call_center_agent_edit']."</b></td>\n";
}
echo "</div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>'call_center_agents.php']);
echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','style'=>'margin-left: 15px;']);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo "<td width='70%' align='right'>";
echo " <input type='button' class='btn' name='' alt='".$text['button-back']."' onclick=\"window.location='call_center_agents.php'\" value='".$text['button-back']."'>";
echo " <input type='submit' class='btn' value='".$text['button-save']."'>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td width='30%' class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-agent_name']."\n";
echo "</td>\n";
echo "<td width='70%' class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='agent_name' maxlength='255' value=\"".escape($agent_name)."\" />\n";
/*
echo "<td class='vtable' align='left'>\n";
//---- Begin Select List --------------------
$sql = "SELECT * FROM v_users ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and user_enabled = 'true' ";
$sql .= "order by username asc ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
echo "<select id=\"agent_name\" name=\"agent_name\" class='formfld'>\n";
echo "<option value=\"\"></option>\n";
if (is_array($users)) {
foreach($users as $field) {
if ($field[username] == $agent_name) {
echo "<option value='".escape($field[username])."' selected='selected'>".escape($field[username])."</option>\n";
}
else {
echo "<option value='".escape($field[username])."'>".escape($field[username])."</option>\n";
}
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
//$catcount = count($result);
foreach($result as $field) {
if ($field[username] == $agent_name) {
echo "<option value='".$field[username]."' selected='selected'>".$field[username]."</option>\n";
}
else {
echo "<option value='".$field[username]."'>".$field[username]."</option>\n";
}
}
echo "</select>";
*/
unset($sql, $result);
//---- End Select List --------------------
echo "<br />\n";
echo $text['description-agent_name']."\n";
echo "</td>\n";
@@ -418,7 +433,7 @@
echo " ".$text['label-type']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='agent_type' maxlength='255' value=\"".escape($agent_type)."\" pattern='^(callback|uuid-standby)$'>\n";
echo " <input class='formfld' type='text' name='agent_type' maxlength='255' value=\"$agent_type\" pattern='^(callback|uuid-standby)$'>\n";
echo "<br />\n";
echo $text['description-type']."\n";
echo "</td>\n";
@@ -429,38 +444,18 @@
echo " ".$text['label-call_timeout']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='agent_call_timeout' maxlength='255' min='1' step='1' value='".escape($agent_call_timeout)."'>\n";
echo " <input class='formfld' type='number' name='agent_call_timeout' maxlength='255' min='1' step='1' value='$agent_call_timeout'>\n";
echo "<br />\n";
echo $text['description-call_timeout']."\n";
echo "</td>\n";
echo "</tr>\n";
echo " <tr>";
echo " <td class='vncell' valign='top'>".$text['label-username']."</td>";
echo " <td class='vtable' align='left'>";
echo " <select name=\"user_uuid\" class='formfld' style='width: auto;'>\n";
echo " <option value=\"\"></option>\n";
foreach($users as $field) {
if ($user_uuid == $field['user_uuid']) {
echo " <option value='".escape($field['user_uuid'])."' selected='selected'>".escape($field['username'])."</option>\n";
}
else {
echo " <option value='".escape($field['user_uuid'])."' $selected>".escape($field['username'])."</option>\n";
}
}
echo " </select>";
unset($users);
echo " <br>\n";
echo " ".$text['description-users']."\n";
echo " </td>";
echo " </tr>";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-agent_id']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='agent_id' id='agent_id' maxlength='255' min='1' step='1' value='".escape($agent_id)."'>\n";
echo " <input class='formfld' type='number' name='agent_id' id='agent_id' maxlength='255' min='1' step='1' value='$agent_id'>\n";
echo " <div style='display: none;' id='duplicate_agent_id_response'></div>\n";
echo "<br />\n";
echo $text['description-agent_id']."\n";
@@ -472,7 +467,7 @@
echo " ".$text['label-agent_password']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='password' name='agent_password' autocomplete='off' onmouseover=\"this.type='text';\" onfocus=\"this.type='text';\" onmouseout=\"if (!\$(this).is(':focus')) { this.type='password'; }\" onblur=\"this.type='password';\" maxlength='255' min='1' step='1' value='".escape($agent_password)."'>\n";
echo " <input class='formfld' type='password' name='agent_password' autocomplete='off' onmouseover=\"this.type='text';\" onfocus=\"this.type='text';\" onmouseout=\"if (!\$(this).is(':focus')) { this.type='password'; }\" onblur=\"this.type='password';\" maxlength='255' min='1' step='1' value='$agent_password'>\n";
echo "<br />\n";
echo $text['description-agent_password']."\n";
echo "</td>\n";
@@ -495,7 +490,6 @@
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='agent_status'>\n";
echo " <option value=''></option>\n";
if ($agent_status == "Logged Out") {
echo " <option value='Logged Out' SELECTED >".$text['option-logged_out']."</option>\n";
}
@@ -531,7 +525,7 @@
echo " ".$text['label-no_answer_delay_time']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='agent_no_answer_delay_time' maxlength='255' min='0' step='1' value='".escape($agent_no_answer_delay_time)."'>\n";
echo " <input class='formfld' type='number' name='agent_no_answer_delay_time' maxlength='255' min='1' step='1' value='$agent_no_answer_delay_time'>\n";
echo "<br />\n";
echo $text['description-no_answer_delay_time']."\n";
echo "</td>\n";
@@ -542,7 +536,7 @@
echo " ".$text['label-max_no_answer']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='agent_max_no_answer' maxlength='255' min='0' step='1' value='".escape($agent_max_no_answer)."'>\n";
echo " <input class='formfld' type='number' name='agent_max_no_answer' maxlength='255' min='0' step='1' value='$agent_max_no_answer'>\n";
echo "<br />\n";
echo $text['description-max_no_answer']."\n";
echo "</td>\n";
@@ -553,7 +547,7 @@
echo " ".$text['label-wrap_up_time']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='agent_wrap_up_time' maxlength='255' min='0' step='1' value='".escape($agent_wrap_up_time)."'>\n";
echo " <input class='formfld' type='number' name='agent_wrap_up_time' maxlength='255' min='1' step='1' value='$agent_wrap_up_time'>\n";
echo "<br />\n";
echo $text['description-wrap_up_time']."\n";
echo "</td>\n";
@@ -564,7 +558,7 @@
echo " ".$text['label-reject_delay_time']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='agent_reject_delay_time' maxlength='255' min='0' step='1' value='".escape($agent_reject_delay_time)."'>\n";
echo " <input class='formfld' type='number' name='agent_reject_delay_time' maxlength='255' min='1' step='1' value='$agent_reject_delay_time'>\n";
echo "<br />\n";
echo $text['description-reject_delay_time']."\n";
echo "</td>\n";
@@ -575,50 +569,39 @@
echo " ".$text['label-busy_delay_time']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='agent_busy_delay_time' maxlength='255' min='1' step='1' value='".escape($agent_busy_delay_time)."'>\n";
echo " <input class='formfld' type='number' name='agent_busy_delay_time' maxlength='255' min='1' step='1' value='$agent_busy_delay_time'>\n";
echo "<br />\n";
echo $text['description-busy_delay_time']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-record_template']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='agent_record'>\n";
echo " <option value='true' ".($agent_record == "true" ? "selected='selected'" : '')." >".$text['option-true']."</option>\n";
echo " <option value='false' ".($agent_record != "true" ? "selected='selected'" : '').">".$text['option-false']."</option>\n";
echo " </select>\n";
echo "<br />\n";
echo $text['description-record_template']."\n";
echo "</td>\n";
echo "</tr>\n";
/*
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-agent_logout']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='agent_logout' maxlength='255' value='".escape($agent_logout)."'>\n";
echo " <input class='formfld' type='text' name='agent_logout' maxlength='255' value='$agent_logout'>\n";
echo "<br />\n";
echo $text['description-agent_logout']."\n";
echo "</td>\n";
echo "</tr>\n";
*/
echo "</table>";
echo "<br /><br />";
echo " <tr>\n";
echo " <td colspan='2' align='right'>\n";
if ($action == "update") {
echo "<input type='hidden' name='call_center_agent_uuid' value='".escape($call_center_agent_uuid)."'>\n";
echo " <input type='hidden' name='call_center_agent_uuid' value='$call_center_agent_uuid'>\n";
}
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo " <br />";
echo " <input type='submit' class='btn' value='".$text['button-save']."'>\n";
echo " </td>\n";
echo " </tr>";
echo "</table>";
echo "<br><br>";
echo "</form>";
//include the footer
//footer
require_once "resources/footer.php";
?>
?>
+183 -373
View File
@@ -17,415 +17,225 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
//check permissions
if (permission_exists('call_center_agent_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_agent_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the agents from the database
$sql = "select * from v_call_center_tiers ";
$sql .= "where domain_uuid = :domain_uuid ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$tiers = $database->select($sql, $parameters, 'all');
if (is_array($tiers) && count($tiers) == 0) {
$per_queue_login = true;
}
else {
$per_queue_login = false;
}
unset($sql, $parameters);
//includes and title
require_once "resources/header.php";
$document['title'] = $text['title-call_center_agent_status'];
require_once "resources/paging.php";
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//get the http post values and set them as php variables
if (count($_POST) > 0) {
//include the dnd php class
include PROJECT_PATH."/app/calls/resources/classes/do_not_disturb.php";
foreach($_POST['agents'] as $row) {
if (strlen($row['agent_status']) > 0) {
//agent set status
if ($fp) {
//set the user_status
$sql = "update v_users set ";
$sql .= "user_status = '".$row['agent_status']."' ";
$sql .= "where domain_uuid = '".$domain_uuid."' ";
$sql .= "and username = '".$row['agent_name']."' ";
//echo $sql."\n";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
//set the call center status
if ($row['agent_status'] == "Do Not Disturb") {
//set the default dnd action
$dnd_action = "add";
//set the call center status to Logged Out
$cmd = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domains'][$domain_uuid]['domain_name']." 'Logged Out'";
}
else {
$cmd = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domains'][$domain_uuid]['domain_name']." '".$row['agent_status']."'";
}
$response = event_socket_request($fp, $cmd);
//echo $cmd."\n";
usleep(200);
}
//loop through the list of assigned extensions
//foreach ($_SESSION['user']['extension'] as &$sub_row) {
// //update dnd
// $dnd = new do_not_disturb;
// //$dnd->debug = false;
// $dnd->domain_uuid = $domain_uuid;
// $dnd->domain_name = $_SESSION['domain_name'];
// $dnd->extension = $sub_row["user"];
// if ($row['status'] == "Do Not Disturb") {
// $dnd->enabled = "true";
// }
// else {
// $dnd->enabled = "false";
// }
// $dnd->set();
// unset($dnd);
//}
//unset ($prep_statement);
}
}
}
//get the agents from the database
$sql = "select * from v_call_center_agents ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "order by agent_name asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$agents = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
$sql .= "where domain_uuid = '$domain_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$agents = $prep_statement->fetchAll(PDO::FETCH_NAMED);
//get the agent list from event socket
$switch_cmd = 'callcenter_config agent list';
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$agent_list = csv_to_named_array($event_socket_str, '|');
//get the agent list from event socket
$switch_cmd = 'callcenter_config tier list';
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$call_center_tiers = csv_to_named_array($event_socket_str, '|');
//get the call center queues from the database
$sql = "select q.*, d.domain_name ";
$sql .= "from v_call_center_queues as q, v_domains as d ";
$sql .= "where q.domain_uuid = :domain_uuid ";
$sql .= "and d.domain_uuid = :domain_uuid ";
$sql .= "and q.domain_uuid = d.domain_uuid ";
$sql .= "order by queue_name asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$call_center_queues = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//view_array($call_center_queues, false);
//add the status to the call_center_queues array
$x = 0;
if (is_array($call_center_queues)) {
foreach ($call_center_queues as $queue) {
//set the queue id
$queue_id = $queue['queue_extension'].'@'.$queue['domain_name'];
//get the queue list from event socket
$switch_cmd = "callcenter_config queue list agents ".$queue_id;
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$queue_list = csv_to_named_array($event_socket_str, '|');
$call_center_queues[$x]['queue_list'] = $queue_list;
$x++;
}
}
$call_center_agents = csv_to_named_array($event_socket_str, '|');
//echo "<pre>\n";
//print_r($call_center_agents);
//echo "</pre>\n";
//get the agent status from mod_callcenter and update the agent status in the agents array
$x = 0;
if (is_array($agents)) {
foreach ($agents as $row) {
//add the domain name
$domain_name = $_SESSION['domains'][$row['domain_uuid']]['domain_name'];
$agents[$x]['domain_name'] = $domain_name;
//update the queue status
$i = 0;
if (is_array($call_center_queues)) {
foreach ($call_center_queues as $queue) {
$agents[$x]['queues'][$i]['agent_name'] = $row['agent_name'];
$agents[$x]['queues'][$i]['queue_name'] = $queue['queue_name'];
$agents[$x]['queues'][$i]['call_center_agent_uuid'] = $row['call_center_agent_uuid'];
$agents[$x]['queues'][$i]['call_center_queue_uuid'] = $queue['call_center_queue_uuid'];
$agents[$x]['queues'][$i]['queue_status'] = 'Logged Out';
if (is_array($queue['queue_list'])) {
foreach ($queue['queue_list'] as $queue_list) {
if ($row['call_center_agent_uuid'] == $queue_list['name']) {
$agents[$x]['queues'][$i]['queue_status'] = 'Available';
}
}
}
$i++;
}
}
//update the agent status
if (is_array($agent_list)) {
foreach ($agent_list as $r) {
if ($r['name'] == $row['call_center_agent_uuid']) {
$agents[$x]['agent_status'] = $r['status'];
}
}
}
//increment x
$x++;
}
}
//remove rows from the http post array where the status has not changed
if (is_array($_POST['agents']) && !$per_queue_login) {
foreach($_POST['agents'] as $key => $row) {
foreach($agents as $k => $field) {
if ($field['agent_name'] === $row['agent_name'] && $field['agent_status'] === $row['agent_status']) {
unset($_POST['agents'][$key]);
foreach ($agents as $row) {
//add the domain name
$domain_name = $_SESSION['domains'][$row['domain_uuid']]['domain_name'];
$agents[$x]['domain_name'] = $domain_name;
//update the agent status
foreach ($call_center_agents as $r) {
if ($r['name'] == $row[agent_name].'@'.$domain_name) {
$agents[$x]['agent_status'] = $r['status'];
}
}
}
//increment x
$x++;
}
//echo "<pre>\n";
//print_r($agents);
//echo "</pre>\n";
//use the http post array to change the status
if (is_array($_POST['agents'])) {
foreach($_POST['agents'] as $row) {
if (isset($row['agent_status'])) {
//agent set status
if ($fp) {
//set the user_status
if (!isset($row['queue_name'])) {
$array['users'][0]['user_uuid'] = $row['user_uuid'];
$array['users'][0]['user_status'] = $row['agent_status'];
$array['users'][0]['domain_uuid'] = $_SESSION['domain_uuid'];
$p = new permissions;
$p->add('user_edit', 'temp');
$database = new database;
$database->app_name = 'call_centers';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->save($array);
$response = $database->message;
unset($array);
$p->delete('user_edit', 'temp');
}
//validate the agent status
$agent_status = $row['agent_status'];
switch ($agent_status) {
case "Available" :
break;
case "Available (On Demand)" :
break;
case "On Break" :
break;
case "Do Not Disturb" :
break;
case "Logged Out" :
break;
default :
$agent_status = null;
}
//set the call center status
$command = '';
if (!isset($row['queue_name'])) {
if ($agent_status == "Do Not Disturb") {
//set the default dnd action
$dnd_action = "add";
//set the call center status to Logged Out
if (is_uuid($row['agent_uuid'])) {
$command = "api callcenter_config agent set status ".$row['agent_uuid']." 'Logged Out' ";
}
}
else {
if (is_uuid($row['agent_uuid'])) {
$command = "api callcenter_config agent set status ".$row['agent_uuid']." '".$agent_status."'";
}
}
$response = event_socket_request($fp, $command);
}
//echo $command."\n";
//get the queue_id
if (isset($row['queue_uuid']) && is_uuid($row['queue_uuid'])) {
if (is_array($call_center_queues)) {
foreach ($call_center_queues as $queue) {
if ($queue['call_center_queue_uuid'] == $row['queue_uuid']) {
$queue_id = $queue['queue_extension'].'@'.$queue['domain_name'];
}
}
}
}
//set the agent status to available and assign the agent to the queue with the tier
if (isset($row['queue_uuid']) && $row['agent_status'] == 'Available') {
//set the call center status
//$command = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domain_name']." '".$row['agent_status']."'";
//$response = event_socket_request($fp, $command);
//assign the agent to the queue
if (is_uuid($row['queue_uuid']) && is_uuid($row['agent_uuid'])) {
$command = "api callcenter_config tier add ".$queue_id." ".$row['agent_uuid']." 1 1";
//echo $command."<br />\n";
$response = event_socket_request($fp, $command);
}
}
//un-assign the agent from the queue
if (isset($row['queue_uuid']) && $row['agent_status'] == 'Logged Out') {
if (is_uuid($row['queue_uuid']) && is_uuid($row['agent_uuid'])) {
$command = "api callcenter_config tier del ".$queue_id." ".$row['agent_uuid'];
//echo $command."<br />\n";
$response = event_socket_request($fp, $command);
}
}
usleep(200);
//set the blf status
//get the agents from the database
$sql = "select agent_name from v_call_center_agents ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and call_center_agent_uuid = :call_center_agent_uuid ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['call_center_agent_uuid'] = $row['agent_uuid'];
$database = new database;
$agent_name = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
if ($row['agent_status'] == 'Available') {
$answer_state = 'confirmed';
}
else {
$answer_state = 'terminated';
}
$call_center_notify = new call_center_notify;
$call_center_notify->domain_name = $_SESSION['domain_name'];
$call_center_notify->agent_name = $agent_name[0]['agent_name'];
$call_center_notify->answer_state = $answer_state;
$call_center_notify->agent_uuid = $row['agent_uuid'];
$call_center_notify->send_call_center_notify();
unset($call_center_notify);
} //end fp
} //strlen
} //foreach
//send a message
message::add($text['confirm-add']);
header("Location: call_center_agent_status.php");
return;
} //post
//includes the header
$document['title'] = $text['title-call_center_agent_status'];
require_once "resources/header.php";
//radio button cycle script
echo "<script>\n";
echo " function get_selected(radio_group) {\n";
echo " for (var i = 0; i < radio_group.length; i++) {\n";
echo " if (radio_group[i].checked) { return i; }\n";
echo " }\n";
echo " return 0;\n";
echo " }\n";
echo " function cycle(radio_group_name) {\n";
echo " var radios = document.getElementsByName(radio_group_name);\n";
echo " var i = get_selected(radios);\n";
echo " if (i+1 == radios.length) {\n";
echo " radios[0].checked = true;\n";
echo " }\n";
echo " else {\n";
echo " radios[i+1].checked = true;\n";
echo " }\n";
echo " }\n";
echo "</script>\n";
//set the status on the user_array by using the extension as the key
//foreach ($call_center_agents as $row) {
// if (count($_SESSION['domains']) == 1) {
// //get the extension status from the call center agent list
// preg_match('/user\/(\d{2,7})/', $row['contact'], $matches);
// $extension = $matches[1];
// $user_array[$extension]['username'] = $tmp[0];
// if ($user_array[$extension]['user_status'] != "Do Not Disturb") {
// $user_array[$extension]['user_status'] = $row['status'];
// }
// } else {
// $tmp = explode('@',$row["name"]);
// if ($tmp[1] == $_SESSION['domain_name']) {
// //get the extension status from the call center agent list
// preg_match('/user\/(\d{2,7})/', $row['contact'], $matches);
// $extension = $matches[1];
// $user_array[$extension]['username'] = $tmp[0];
// if ($user_array[$extension]['user_status'] != "Do Not Disturb") {
// $user_array[$extension]['user_status'] = $row['status'];
// }
// }
// }
//}
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['header-call_center_agent_status']."</b></div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','collapse'=>'hide-xs','style'=>'margin-right: 15px;','link'=>'call_center_queues.php']);
echo button::create(['type'=>'button','label'=>$text['button-refresh'],'icon'=>$_SESSION['theme']['button_icon_refresh'],'collapse'=>'hide-xs','link'=>'call_center_agent_status.php']);
echo button::create(['type'=>'button','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','collapse'=>'hide-xs','style'=>'margin-left: 15px;','onclick'=>"list_form_submit('form_list');"]);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>\n";
echo "<tr>\n";
echo "<td width='50%' align='left' nowrap='nowrap'><b>".$text['header-call_center_agent_status']."</b></td>\n";
echo "<td width='50%' align='right'>\n";
echo " <input type='button' class='btn' name='' alt='".$text['button-back']."' onclick=\"window.location='call_center_queues.php'\" value='".$text['button-back']."'>\n";
echo " <input type='button' class='btn' name='' alt='".$text['button-refresh']."' onclick=\"window.location='call_center_agent_status.php'\" value='".$text['button-refresh']."'>\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td align='left' colspan='2'>\n";
echo $text['description-call_center_agent_status']."<br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "</tr></table>\n";
if (is_array($_POST['agents']) && !$per_queue_login) {
echo $text['description-call_center_agent_status']."\n";
echo "<br /><br />\n";
}
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
echo "<form id='form_list' method='post'>\n";
echo "<form method='post' name='frm' action=''>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<th>".$text['label-agent']."</th>\n";
echo "<th>".$text['label-status']."</th>\n";
echo "<th>".$text['label-options']."</th>\n";
echo "<tr>\n";
$x = 0;
foreach($agents as $row) {
$str = '';
$str .= "<tr >\n";
$str .= " <td valign='middle' class='".$row_style[$c]."'>".$row['agent_name']."&nbsp;</td>\n";
$str .= " <td valign='middle' class='".$row_style[$c]."'>".$row['agent_status']."&nbsp;</td>\n";
$str .= " <td valign='middle' class='".$row_style[$c]."'>";
$str .= " <input type='hidden' name='agents[".$x."][agent_name]' id='agent_".$x."_name' value='".$row['agent_name']."'>\n";
$str .= " <input type='hidden' name='agents[".$x."][id]' id='agent_".$x."_name' value='".$row['call_center_agent_uuid']."'>\n";
$str .= " <input type='radio' name='agents[".$x."][agent_status]' id='agent_".$x."_status_no_change' value='' checked='checked'><label for='agent_".$x."_status_no_change'>".$text['option-no_change']."</label>\n";
$str .= " <input type='radio' name='agents[".$x."][agent_status]' id='agent_".$x."_status_available' value='Available'><label for='agent_".$x."_status_available'>".$text['option-available']."</label>\n";
$str .= " <input type='radio' name='agents[".$x."][agent_status]' id='agent_".$x."_status_logged_out' value='Logged Out'><label for='agent_".$x."_status_logged_out'>".$text['option-logged_out']."</label>\n";
$str .= " <input type='radio' name='agents[".$x."][agent_status]' id='agent_".$x."_status_on_break' value='On Break'><label for='agent_".$x."_status_on_break'>".$text['option-on_break']."</label>\n";
//$str .= " <input type='radio' name='agents[".$x."][agent_status]' id='agent_".$x."_status_dnd' value='Do Not Disturb'><label for='agent_".$x."_status_dnd'>".$text['option-do_not_disturb']."</label>\n";
$str .= " </td>\n";
$str .= "</tr>\n";
if (count($_SESSION['domains']) > 1) {
if ($row['domain_name'] == $_SESSION['domain_name']) {
echo $str;
if ($c==0) { $c=1; } else { $c=0; }
}
}
else {
echo $str;
if ($c==0) { $c=1; } else { $c=0; }
}
$x++;
} //end foreach
unset($sql, $result, $row_count);
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
echo " <th class='pct-20'>".$text['label-agent']."</th>\n";
if (!$per_queue_login) {
echo " <th class='shrink'>".$text['label-status']."</th>\n";
}
echo " <th class='pct-20 hide-sm-dn'>&nbsp;</th>\n";
if ($per_queue_login) {
echo " <th class='pct-40'>".$text['label-options']."</th>\n";
}
echo "<tr>\n";
echo "<td colspan='11' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap>$paging_controls</td>\n";
echo " <td width='33.3%' align='right'>\n";
echo " <br />\n";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-update_status']."'>\n";
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
if (is_array($agents) && @sizeof($agents) != 0) {
$x = 0;
foreach ($agents as $row) {
$onclick = "onclick=\"cycle('agents[".$x."][agent_status]');\"";
$html = "<tr class='list-row'>\n";
$html .= " <td ".$onclick.">".escape($row['agent_name'])."&nbsp;</td>\n";
if (!$per_queue_login) {
$html .= " <td class='no-wrap'>";
$html .= " <input type='hidden' name='agents[".$x."][agent_name]' value='".escape($row['agent_name'])."'>\n";
$html .= " <input type='hidden' name='agents[".$x."][agent_uuid]' value='".escape($row['call_center_agent_uuid'])."'>\n";
$html .= " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Available' ".($row['agent_status'] == 'Available' ? "checked='checked'" : null).">&nbsp;".$text['option-available']."</label>\n";
$html .= " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Logged Out' ".($row['agent_status'] == 'Logged Out' ? "checked='checked'" : null).">&nbsp;".$text['option-logged_out']."</label>\n";
$html .= " <label style='margin: 0; cursor: pointer;'><input type='radio' name='agents[".$x."][agent_status]' value='On Break' ".($row['agent_status'] == 'On Break' ? "checked='checked'" : null).">&nbsp;".$text['option-on_break']."</label>\n";
//$html .= " <label><input type='radio' name='agents[".$x."][agent_status]' value='Do Not Disturb' ".($row['agent_status'] == 'Do Not Disturb' ? "checked='checked'" : null).">&nbsp;".$text['option-do_not_disturb']."</label>\n";
$html .= " </td>\n";
}
$html .= " <td ".$onclick." class='hide-sm-dn'>&nbsp;</td>\n";
if ($per_queue_login) {
$html .= " <td class='description'>";
if (is_array($row['queues'])) {
$html .= " <table class='list' >\n";
$html .= " <tr>\n";
$html .= " <th>".$text['label-queue']."</th>\n";
$html .= " <th>".$text['label-status']."</th>\n";
$html .= " <th>".$text['label-options']."</th>\n";
$html .= " </tr>\n";
if (is_array($row['queues'])) {
foreach ($row['queues'] as $queue) {
$x++;
$onclick = "onclick=\"cycle('agents[".$x."][agent_status]');\"";
$html .= " <tr class='list-row'>\n";
$html .= " <td ".$onclick." class='pct-80 no-wrap'>".$queue['queue_name']."</td>\n";
$html .= " <td>\n";
if ($queue['queue_status'] == "Available") {
$html .= " ".$text['option-available']."\n";
}
if ($queue['queue_status'] == "Logged Out") {
$html .= " ".$text['option-logged_out']."\n";
}
$html .= " </td>\n";
$html .= " <td class='no-wrap right'>";
$html .= " <input type='hidden' name='agents[".$x."][queue_name]' value='".escape($queue['queue_name'])."'>\n";
$html .= " <input type='hidden' name='agents[".$x."][agent_name]' value='".escape($row['agent_name'])."'>\n";
$html .= " <input type='hidden' name='agents[".$x."][user_uuid]' value='".escape($row['user_uuid'])."'>\n";
$html .= " <input type='hidden' name='agents[".$x."][queue_uuid]' value='".escape($queue['call_center_queue_uuid'])."'>\n";
$html .= " <input type='hidden' name='agents[".$x."][agent_uuid]' value='".escape($row['call_center_agent_uuid'])."'>\n";
$html .= " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Available' ".($queue['queue_status'] == 'Available' ? "checked='checked'" : null).">&nbsp;".$text['option-available']."</label>&nbsp;\n";
$html .= " <label style='margin: 0; cursor: pointer;'><input type='radio' name='agents[".$x."][agent_status]' value='Logged Out' ".($queue['queue_status'] == 'Logged Out' ? "checked='checked'" : null).">&nbsp;".$text['option-logged_out']."</label>\n";
$html .= " </td>\n";
$html .= " </tr>\n";
}
}
$html .= " </table>\n";
}
$html .= " </td>\n";
}
$html .= "</tr>\n";
if (count($_SESSION['domains']) > 1) {
if ($row['domain_name'] == $_SESSION['domain_name']) {
echo $html;
}
}
else {
echo $html;
}
$x++;
}
unset($agents);
}
echo "</table>\n";
echo "<br />\n";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</table>";
echo "<br><br>";
echo "</form>\n";
//show the footer
require_once "resources/footer.php";
?>
?>
+124 -194
View File
@@ -17,167 +17,96 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2018
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
//check permissions
if (permission_exists('call_center_agent_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_agent_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get posted data
if (is_array($_POST['call_center_agents'])) {
$action = $_POST['action'];
$search = $_POST['search'];
$call_center_agents = $_POST['call_center_agents'];
}
//includes and title
require_once "resources/header.php";
$document['title'] = $text['title-call_center_agents'];
require_once "resources/paging.php";
//process the http post data by action
if ($action != '' && is_array($call_center_agents) && @sizeof($call_center_agents) != 0) {
switch ($action) {
case 'delete':
if (permission_exists('call_center_agent_delete')) {
$obj = new call_center;
$obj->delete_agents($call_center_agents);
}
break;
}
header('Location: call_center_agents.php'.($search != '' ? '?search='.urlencode($search) : null));
exit;
}
//get http variables and set them to php variables
//get http values and set them to php variables
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search term
$search = strtolower($_GET["search"]);
if (strlen($search) > 0) {
$sql_search = " (";
$sql_search .= "lower(agent_name) like :search ";
$sql_search .= "or lower(agent_id) like :search ";
$sql_search .= ") ";
$parameters['search'] = '%'.$search.'%';
}
//show content
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>\n";
echo "<tr>\n";
echo "<td width='50%' align='left' nowrap='nowrap'><b>".$text['header-call_center_agents']."</b></td>\n";
echo "<td width='50%' align='right'>\n";
echo " <input type='button' class='btn' name='' alt='".$text['button-back']."' onclick=\"window.location='call_center_queues.php'\" value='".$text['button-back']."'>\n";
echo " <input type='button' class='btn' name='' alt='".$text['button-status']."' onclick=\"window.location='call_center_agent_status.php'\" value='".$text['button-status']."'>\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td align='left' colspan='2'>\n";
echo $text['description-call_center_agents']."<br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "</tr></table>\n";
//get total call center agent count from the database
$sql = "select count(*) from v_call_center_agents ";
$sql .= "where true ";
if ($_GET['show'] != "all" || !permission_exists('call_center_all')) {
$sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$sql = "select * from v_call_center_agents ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by) == 0) {
$order_by = 'agent_name';
$order = 'asc';
}
if (isset($sql_search)) {
$sql .= "and ".$sql_search;
}
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
//prepare to page the results
$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50;
$param = "&search=".urlencode($search);
if ($_GET['show'] == "all" && permission_exists('call_center_all')) {
$param .= "&show=all";
else {
$sql .= "order by $order_by $order ";
}
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$num_rows = count($result);
unset ($prep_statement, $result, $sql);
$rows_per_page = 100;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page);
list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true);
list($paging_controls, $rows_per_page, $var_3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
//get the list
$sql = str_replace('count(*)', '*', $sql);
$sql .= order_by($order_by, $order, 'agent_name', 'asc');
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$result = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
$sql = "select * from v_call_center_agents ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by) == 0) {
$order_by = 'agent_name';
$order = 'asc';
}
else {
$sql .= "order by $order_by $order ";
}
$sql .= " limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
unset ($prep_statement, $sql);
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//includes and title
$document['title'] = $text['title-call_center_agents'];
require_once "resources/header.php";
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
//show content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['header-call_center_agents']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>'call_center_queues.php','style'=>'margin-right: 15px;']);
if (permission_exists('call_center_imports')) {
echo button::create(['type'=>'button','label'=>$text['button-import'],'icon'=>$_SESSION['theme']['button_icon_import'],'link'=>PROJECT_PATH.'/app/call_center_imports/call_center_imports.php?import_type=call_center_agents']);
}
if ($num_rows) {
echo button::create(['type'=>'button','label'=>$text['button-status'],'icon'=>'user-clock','style'=>'margin-right: 15px;','link'=>'call_center_agent_status.php']);
}
if (permission_exists('call_center_agent_add')) {
echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','link'=>'call_center_agent_edit.php']);
}
if (permission_exists('call_center_agent_delete') && $result) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo "<form id='form_search' class='inline' method='get'>";
if (permission_exists('call_center_all')) {
if ($_GET['show'] == 'all') {
echo " <input type='hidden' name='show' value='all'>";
}
else {
echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?type=&show=all'.($search != '' ? "&search=".urlencode($search) : null)]);
}
}
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown='list_search_reset();'>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search','style'=>($search != '' ? 'display: none;' : null)]);
echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'call_center_agents.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if (permission_exists('call_center_agent_delete') && $result) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
echo $text['description-call_center_agents']."\n";
echo "<br /><br />\n";
echo "<form id='form_list' method='post'>\n";
echo "<input type='hidden' id='action' name='action' value=''>\n";
echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
if (permission_exists('call_center_agent_delete')) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".($result ?: "style='visibility: hidden;'").">\n";
echo " </th>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_center_all')) {
echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, $param, "class='shrink'");
}
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
//echo th_order_by('domain_uuid', 'domain_uuid', $order_by, $order);
echo th_order_by('agent_name', $text['label-agent_name'], $order_by, $order);
echo th_order_by('agent_id', $text['label-agent_id'], $order_by, $order);
@@ -189,86 +118,87 @@
//echo th_order_by('agent_wrap_up_time', $text['label-wrap_up_time'], $order_by, $order);
//echo th_order_by('agent_reject_delay_time', $text['label-reject_delay_time'], $order_by, $order);
//echo th_order_by('agent_busy_delay_time', $text['label-busy_delay_time'], $order_by, $order);
if (permission_exists('call_center_agent_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>&nbsp;</td>\n";
echo "<td class='list_control_icons'>";
if (permission_exists('call_center_agent_add')) {
echo "<a href='call_center_agent_edit.php' alt='".$text['button-add']."'>".$v_link_label_add."</a>";
}
echo "</td>\n";
echo "</tr>\n";
if (is_array($result)) {
$x = 0;
if ($result_count == 0) { //no results
}
else { //received results
foreach($result as $row) {
$tr_link = (permission_exists('call_center_agent_edit')) ? "href='call_center_agent_edit.php?id=".$row['call_center_agent_uuid']."'" : null;
echo "<tr ".$tr_link.">\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[domain_uuid]."</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>";
if (permission_exists('call_center_agent_edit')) {
$list_row_url = "call_center_agent_edit.php?id=".urlencode($row['call_center_agent_uuid']);
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
if (permission_exists('call_center_agent_delete')) {
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='call_center_agents[$x][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
echo " <input type='hidden' name='call_center_agents[$x][uuid]' value='".escape($row['call_center_agent_uuid'])."' />\n";
echo " </td>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_center_all')) {
if (strlen($_SESSION['domains'][$row['domain_uuid']]['domain_name']) > 0) {
$domain = $_SESSION['domains'][$row['domain_uuid']]['domain_name'];
}
else {
$domain = $text['label-global'];
}
echo " <td>".escape($domain)."</td>\n";
}
echo " <td>";
if (permission_exists('call_center_agent_edit')) {
echo "<a href='call_center_agent_edit.php?id=".escape($row['call_center_agent_uuid'])."'>".escape($row['agent_name'])."</a>";
echo "<a href='call_center_agent_edit.php?id=".$row['call_center_agent_uuid']."'>".$row['agent_name']."</a>";
}
else {
echo escape($row['agent_name']);
echo $row['agent_name'];
}
echo " </td>\n";
echo " <td>".escape($row['agent_id'])."</td>\n";
echo " <td>".escape($row['agent_type'])."</td>\n";
echo " <td>".escape($row['agent_call_timeout'])."</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['agent_id']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['agent_type']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['agent_call_timeout']."&nbsp;</td>\n";
$agent_contact = $row['agent_contact'];
// parse out gateway uuid
$bridge_statement = explode('/', $row['agent_contact']);
if ($bridge_statement[0] == 'sofia' && $bridge_statement[1] == 'gateway' && is_uuid($bridge_statement[2])) {
// retrieve gateway name from db
$sql = "select gateway from v_gateways ";
$sql .= "where gateway_uuid = :gateway_uuid ";
$parameters['gateway_uuid'] = $bridge_statement[2];
$database = new database;
$result = $database->select($sql, $parameters, 'all');
$sql = "select gateway from v_gateways where gateway_uuid = '".$bridge_statement[2]."' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
if (count($result) > 0) {
$gateway_name = $result[0]['gateway'];
$agent_contact = str_replace($bridge_statement[2], $gateway_name, $agent_contact);
}
unset($sql, $parameters, $bridge_statement);
unset ($prep_statement, $sql, $bridge_statement);
}
echo " <td>".escape($agent_contact)."</td>\n";
echo " <td>".escape($row['agent_max_no_answer'])."</td>\n";
echo " <td>".escape($row['agent_status'])."</td>\n";
//echo " <td>".$row[agent_wrap_up_time]."</td>\n";
//echo " <td>".$row[agent_reject_delay_time]."</td>\n";
//echo " <td>".$row[agent_busy_delay_time]."</td>\n";
if (permission_exists('call_center_agent_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>";
echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
echo " </td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$agent_contact."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['agent_max_no_answer']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['agent_status']."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[agent_wrap_up_time]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[agent_reject_delay_time]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[agent_busy_delay_time]."&nbsp;</td>\n";
echo " <td class='list_control_icons'>\n";
if (permission_exists('call_center_agent_edit')) {
echo "<a href='call_center_agent_edit.php?id=".$row['call_center_agent_uuid']."' alt='".$text['button-edit']."'>".$v_link_label_edit."</a>";
}
if (permission_exists('call_center_agent_delete')) {
echo "<a href='call_center_agent_delete.php?id=".$row['call_center_agent_uuid']."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete']."')\">".$v_link_label_delete."</a>";
}
//echo " <input type='button' class='btn' name='' alt='edit' onclick=\"window.location='call_center_agent_edit.php?id=".$row[call_center_agent_uuid]."'\" value='e'>\n";
//echo " <input type='button' class='btn' name='' alt='delete' onclick=\"if (confirm('Are you sure you want to delete this?')) { window.location='call_center_agent_delete.php?id=".$row[call_center_agent_uuid]."' }\" value='x'>\n";
echo " </td>\n";
echo "</tr>\n";
$x++;
}
unset($result);
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "<tr>\n";
echo "<td colspan='11' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap>$paging_controls</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_center_agent_add')) {
echo "<a href='call_center_agent_edit.php' alt='".$text['button-add']."'>".$v_link_label_add."</a>";
}
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
echo "</table>";
echo "<br><br>";
//show the footer
require_once "resources/footer.php";
?>
?>
@@ -0,0 +1,102 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_queue_delete')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get the id
if (count($_GET) > 0) {
$id = check_str($_GET["id"]);
}
if (strlen($id) > 0) {
//get the dialplan uuid
$sql = "select * from v_call_center_queues ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_center_queue_uuid = '$id' ";
$prep_statement = $db->prepare($sql);
$prep_statement->execute();
while($row = $prep_statement->fetch(PDO::FETCH_ASSOC)) {
$queue_name = $row['queue_name'];
$dialplan_uuid = $row['dialplan_uuid'];
}
//delete the tier from the database
$sql = "delete from v_call_center_tiers ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and queue_name = '$queue_name' ";
$db->query($sql);
unset($sql);
//delete the call center queue
$sql = "delete from v_call_center_queues ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and dialplan_uuid = '$dialplan_uuid' ";
$db->query($sql);
unset($sql);
//delete the dialplan entry
$sql = "delete from v_dialplans ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and dialplan_uuid = '$dialplan_uuid' ";
$db->query($sql);
unset($sql);
//delete the dialplan details
$sql = "delete from v_dialplan_details ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and dialplan_uuid = '$dialplan_uuid' ";
$db->query($sql);
unset($sql);
//clear the cache
$cache = new cache;
$cache->delete("memcache delete dialplan:".$_SESSION["context"]);
//synchronize configuration
save_dialplan_xml();
//apply settings reminder
$_SESSION["reload_xml"] = true;
}
//redirect the browser
$_SESSION["message"] = $text['message-delete'];
header("Location: call_center_queues.php");
return;
?>
File diff suppressed because it is too large Load Diff
+131 -212
View File
@@ -17,192 +17,110 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2020
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
//check permisission
if (permission_exists('call_center_queue_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_queue_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get posted data
if (is_array($_POST['call_center_queues'])) {
$action = $_POST['action'];
$search = $_POST['search'];
$call_center_queues = $_POST['call_center_queues'];
}
//process the http post data by action
if ($action != '' && is_array($call_center_queues) && @sizeof($call_center_queues) != 0) {
switch ($action) {
case 'copy':
if (permission_exists('call_center_queue_add')) {
$obj = new call_center;
$obj->copy_queues($call_center_queues);
}
break;
case 'delete':
if (permission_exists('call_center_queue_delete')) {
$obj = new call_center;
$obj->delete_queues($call_center_queues);
}
break;
}
header('Location: call_center_queues.php'.($search != '' ? '?search='.urlencode($search) : null));
exit;
}
//includes and title
require_once "resources/header.php";
$document['title'] = $text['title-call_center_queues'];
require_once "resources/paging.php";
//get http variables and set as php variables
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search term
$search = strtolower($_GET["search"]);
if (strlen($search) > 0) {
$sql_search = " (";
$sql_search .= "lower(queue_name) like :search ";
$sql_search .= "or lower(queue_description) like :search ";
$sql_search .= ") ";
$parameters['search'] = '%'.$search.'%';
}
//get total call center queues count from the database
$sql = "select count(*) from v_call_center_queues ";
$sql .= "where true ";
if ($_GET['show'] != "all" || !permission_exists('call_center_all')) {
$sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
}
if (isset($sql_search)) {
$sql .= "and ".$sql_search;
}
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
//prepare to page the results
$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50;
$param = "&search=".urlencode($search);
if ($_GET['show'] == "all" && permission_exists('call_center_all')) {
$param .= "&show=all";
}
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page);
list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true);
$offset = $rows_per_page * $page;
//get the list
$sql = str_replace('count(*)', '*', $sql);
$sql .= order_by($order_by, $order, 'queue_name', 'asc');
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$result = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//includes and title
$document['title'] = $text['title-call_center_queues'];
require_once "resources/header.php";
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['header-call_center_queues']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
if (permission_exists('call_center_imports')) {
echo button::create(['type'=>'button','label'=>$text['button-import'],'icon'=>$_SESSION['theme']['button_icon_import'],'link'=>PROJECT_PATH.'/app/call_center_imports/call_center_imports.php?import_type=call_center_queues']);
}
if (permission_exists('call_center_agent_view')) {
echo button::create(['type'=>'button','label'=>$text['button-agents'],'icon'=>'users','link'=>'call_center_agents.php']);
}
if (permission_exists('call_center_wallboard')) {
echo button::create(['type'=>'button','label'=>$text['button-wallboard'],'icon'=>'th','link'=>PROJECT_PATH.'/app/call_center_wallboard/call_center_wallboard.php']);
}
$margin_left = permission_exists('call_center_agent_view') || permission_exists('call_center_wallboard') ? 'margin-left: 15px;' : null;
if (permission_exists('call_center_queue_add') && (!is_numeric($_SESSION['limit']['call_center_queues']['numeric']) || $num_rows <= $_SESSION['limit']['call_center_queues']['numeric'])) {
echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','style'=>$margin_left,'link'=>'call_center_queue_edit.php']);
unset($margin_left);
}
if (permission_exists('call_center_queue_add') && $result && (!is_numeric($_SESSION['limit']['call_center_queues']['numeric']) || $num_rows <= $_SESSION['limit']['call_center_queues']['numeric'])) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none; '.$margin_left,'onclick'=>"modal_open('modal-copy','btn_copy');"]);
unset($margin_left);
}
if (permission_exists('call_center_queue_delete') && $result) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none; '.$margin_left,'onclick'=>"modal_open('modal-delete','btn_delete');"]);
unset($margin_left);
}
echo "<form id='form_search' class='inline' method='get'>\n";
if (permission_exists('call_center_all')) {
if ($_GET['show'] == 'all') {
echo " <input type='hidden' name='show' value='all'>";
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>\n";
echo "<tr>\n";
echo "<td width='50%' align='left' nowrap='nowrap'><b>".$text['header-call_center_queues']."</b></td>\n";
echo "<td width='50%' align='right'>\n";
echo " <input type='button' class='btn' value='".$text['button-agents']."' alt='".$text['button-agents']."' onclick=\"window.location='call_center_agents.php'\">\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td align='left' colspan='2'>\n";
echo $text['description-call_center_queues']."<br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "</tr></table>\n";
//get total call center queues count from the database
$sql = "select count(*) as num_rows from v_call_center_queues where domain_uuid = '".$_SESSION['domain_uuid']."' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
$total_call_center_queues = $row['num_rows'];
}
unset($prep_statement, $row);
//prepare to page the results (reuse $sql from above)
if (strlen($order_by) == 0) {
$order_by = 'queue_name';
$order = 'asc';
}
else {
echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?type=&show=all'.($search != '' ? "&search=".urlencode($search) : null)]);
$sql .= "order by $order_by $order ";
}
}
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search']);
//echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'call_center_queues.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$num_rows = count($result);
unset ($prep_statement, $result, $sql);
if (permission_exists('call_center_queue_add') && $result && (!is_numeric($_SESSION['limit']['call_center_queues']['numeric']) || $num_rows <= $_SESSION['limit']['call_center_queues']['numeric'])) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]);
}
if (permission_exists('call_center_queue_delete') && $result) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
$rows_per_page = 100;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page, $var_3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
echo $text['description-call_center_queues']."\n";
echo "<br /><br />\n";
$sql = "select * from v_call_center_queues ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by) == 0) {
$order_by = 'queue_name';
$order = 'asc';
}
else {
$sql .= "order by $order_by $order ";
}
$sql .= " limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
unset ($prep_statement, $sql);
echo "<form id='form_list' method='post'>\n";
echo "<input type='hidden' id='action' name='action' value=''>\n";
echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
if (permission_exists('call_center_queue_add') || permission_exists('call_center_queue_delete')) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".($result ?: "style='visibility: hidden;'").">\n";
echo " </th>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_center_all')) {
echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, $param, "class='shrink'");
}
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo th_order_by('queue_name', $text['label-queue_name'], $order_by, $order);
echo th_order_by('queue_extension', $text['label-extension'], $order_by, $order);
echo th_order_by('queue_strategy', $text['label-strategy'], $order_by, $order);
//echo th_order_by('queue_moh_sound', $text['label-music_on_hold'], $order_by, $order);
//echo th_order_by('queue_record_template', $text['label-record_template'], $order_by, $order);
//echo th_order_by('queue_time_base_score', $text['label-time_base_score'], $order_by, $order);
//echo th_order_by('queue_time_base_score_sec', $text['label-time_base_score_sec'], $order_by, $order);
//echo th_order_by('queue_max_wait_time', $text['label-max_wait_time'], $order_by, $order);
//echo th_order_by('queue_max_wait_time_with_no_agent', $text['label-max_wait_time_with_no_agent'], $order_by, $order);
echo th_order_by('queue_tier_rules_apply', $text['label-tier_rules_apply'], $order_by, $order);
@@ -211,77 +129,78 @@
//echo th_order_by('queue_discard_abandoned_after', $text['label-discard_abandoned_after'], $order_by, $order);
//echo th_order_by('queue_abandoned_resume_allowed', $text['label-abandoned_resume_allowed'], $order_by, $order);
//echo th_order_by('queue_tier_rule_wait_multiply_level', $text['label-tier_rule_wait_multiply_level'], $order_by, $order);
echo th_order_by('queue_description', $text['label-description'], $order_by, $order, null, "class='hide-sm-dn'");
if (permission_exists('call_center_queue_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>&nbsp;</td>\n";
echo th_order_by('queue_description', $text['label-description'], $order_by, $order);
echo "<td class='list_control_icons'>";
if (permission_exists('call_center_queue_add')) {
if ($_SESSION['limit']['call_center_queues']['numeric'] == '' || ($_SESSION['limit']['call_center_queues']['numeric'] != '' && $total_call_center_queues < $_SESSION['limit']['call_center_queues']['numeric'])) {
echo "<a href='call_center_queue_edit.php' alt='".$text['button-add']."'>".$v_link_label_add."</a>";
}
}
echo "</td>\n";
echo "</tr>\n";
if (is_array($result)) {
$x = 0;
if ($result_count > 0) {
foreach($result as $row) {
$tr_link = (permission_exists('call_center_queue_edit')) ? "href='call_center_queue_edit.php?id=".$row[call_center_queue_uuid]."'" : null;
echo "<tr ".$tr_link.">\n";
echo " <td valign='top' class='".$row_style[$c]."'>";
if (permission_exists('call_center_queue_edit')) {
$list_row_url = "call_center_queue_edit.php?id=".urlencode($row['call_center_queue_uuid']);
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
if (permission_exists('call_center_queue_add') || permission_exists('call_center_queue_delete')) {
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='call_center_queues[$x][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
echo " <input type='hidden' name='call_center_queues[$x][uuid]' value='".escape($row['call_center_queue_uuid'])."' />\n";
echo " </td>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_center_all')) {
if (strlen($_SESSION['domains'][$row['domain_uuid']]['domain_name']) > 0) {
$domain = $_SESSION['domains'][$row['domain_uuid']]['domain_name'];
}
else {
$domain = $text['label-global'];
}
echo " <td>".escape($domain)."</td>\n";
}
echo " <td>";
if (permission_exists('call_center_queue_edit')) {
echo " <a href='".$list_row_url."' title=\"".$text['button-edit']."\">".escape($row['queue_name'])."</a>";
echo "<a href='call_center_queue_edit.php?id=".$row[call_center_queue_uuid]."'>".$row[queue_name]."</a>";
}
else {
echo " ".escape($row[queue_name]);
echo $row[queue_name];
}
echo " </td>\n";
echo " <td>".escape($row['queue_extension'])."</td>\n";
echo " <td>".escape($row['queue_strategy'])."</td>\n";
//echo " <td>".escape($row[queue_moh_sound])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_record_template])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_time_base_score])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_time_base_score_sec])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_max_wait_time])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_max_wait_time_with_no_agent])."&nbsp;</td>\n";
echo " <td>".ucwords(escape($row['queue_tier_rules_apply']))."</td>\n";
//echo " <td>".escape($row[queue_tier_rule_wait_second])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_tier_rule_no_agent_no_wait])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_discard_abandoned_after])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_abandoned_resume_allowed])."&nbsp;</td>\n";
//echo " <td>".escape($row[queue_tier_rule_wait_multiply_level])."&nbsp;</td>\n";
echo " <td class='description overflow hide-sm-dn'>".escape($row['queue_description'])."</td>\n";
if (permission_exists('call_center_queue_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>";
echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
echo " </td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_extension]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_strategy]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_moh_sound]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_record_template]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_time_base_score]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_max_wait_time]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_max_wait_time_with_no_agent]."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".ucwords($row[queue_tier_rules_apply])."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_tier_rule_wait_second]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_tier_rule_no_agent_no_wait]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_discard_abandoned_after]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_abandoned_resume_allowed]."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row[queue_tier_rule_wait_multiply_level]."&nbsp;</td>\n";
echo " <td valign='top' class='row_stylebg'>".$row[queue_description]."&nbsp;</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_center_queue_edit')) {
echo "<a href='call_center_queue_edit.php?id=".$row[call_center_queue_uuid]."' alt='".$text['button-edit']."'>$v_link_label_edit</a>";
}
if (permission_exists('call_center_queue_delete')) {
echo "<a href='call_center_queue_delete.php?id=".$row[call_center_queue_uuid]."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete']."')\">$v_link_label_delete</a>";
}
echo " </td>\n";
echo "</tr>\n";
$x++;
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "<tr>\n";
echo "<td colspan='17' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap>$paging_controls</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_center_queue_add')) {
if ($_SESSION['limit']['call_center_queues']['numeric'] == '' || ($_SESSION['limit']['call_center_queues']['numeric'] != '' && $total_call_center_queues < $_SESSION['limit']['call_center_queues']['numeric'])) {
echo "<a href='call_center_queue_edit.php' alt='".$text['button-add']."'>".$v_link_label_add."</a>";
}
unset($result);
}
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "</table>";
echo "<br><br>";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
//show the footer
require_once "resources/footer.php";
?>
+394
View File
@@ -0,0 +1,394 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_tier_add') || permission_exists('call_center_tier_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//set tier uuid
$call_center_tier_uuid = check_str($_REQUEST["id"]);
//get http post variables and set them to php variables
if (count($_POST)>0) {
$agent_name = check_str($_POST["agent_name"]);
$queue_name = check_str($_POST["queue_name"]);
$tier_level = check_str($_POST["tier_level"]);
$tier_position = check_str($_POST["tier_position"]);
}
if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
$msg = '';
$call_center_tier_uuid = check_str($_POST["call_center_tier_uuid"]);
//check for all required data
//if (strlen($domain_uuid) == 0) { $msg .= $text['message-required']."domain_uuid<br>\n"; }
//if (strlen($agent_name) == 0) { $msg .= $text['message-required'].$text['label-agent_name']."<br>\n"; }
//if (strlen($queue_name) == 0) { $msg .= $text['message-required'].$text['label-queue_name']."<br>\n"; }
//if (strlen($tier_level) == 0) { $msg .= $text['message-required'].$text['label-tier_level']."<br>\n"; }
//if (strlen($tier_position) == 0) { $msg .= $text['message-required'].$text['label-tier_position']."<br>\n"; }
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
require_once "resources/header.php";
require_once "resources/persist_form_var.php";
echo "<div align='center'>\n";
echo "<table><tr><td>\n";
echo $msg."<br />";
echo "</td></tr></table>\n";
persistformvar($_POST);
echo "</div>\n";
require_once "resources/footer.php";
return;
}
//add the agent
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//add the agent using event socket
if ($fp) {
//get the domain using the $domain_uuid
$tmp_domain = $_SESSION['domains'][$domain_uuid]['domain_name'];
//syntax
//callcenter_config tier add [queue_name] [agent_name] [level] [position]
//callcenter_config tier set state [queue_name] [agent_name] [state]
//callcenter_config tier set level [queue_name] [agent_name] [level]
//callcenter_config tier set position [queue_name] [agent_name] [position]
//add the agent
$cmd = "api callcenter_config tier add ".$queue_name."@".$tmp_domain." ".$agent_name."@".$tmp_domain." ".$tier_level." ".$tier_position;
$response = event_socket_request($fp, $cmd);
usleep(200);
//agent set level
$cmd = "api callcenter_config tier set level ".$queue_name."@".$tmp_domain." ".$agent_name."@".$tmp_domain." ".$tier_level;
$response = event_socket_request($fp, $cmd);
usleep(200);
//agent set position
$cmd = "api callcenter_config tier set position ".$queue_name."@".$tmp_domain." ".$agent_name."@".$tmp_domain." ".$tier_position;
$response = event_socket_request($fp, $cmd);
usleep(200);
}
//update the database
$sql = "update v_call_center_tiers set ";
$sql .= "domain_uuid = '$domain_uuid', ";
$sql .= "agent_name = '$agent_name', ";
$sql .= "queue_name = '$queue_name', ";
$sql .= "tier_level = '$tier_level', ";
$sql .= "tier_position = '$tier_position' ";
$sql .= "where call_center_tier_uuid = '$call_center_tier_uuid'";
$db->exec(check_sql($sql));
unset($sql);
//syncrhonize configuration
save_call_center_xml();
//look up queue uuid by queue name (ugh)
$sql = "select call_center_queue_uuid from v_call_center_queues where queue_name = '".$queue_name."'";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$queue_uuid = $row["call_center_queue_uuid"];
break;
}
unset($prep_statement);
$_SESSION["message"] = $text['message-update'];
header("Location: call_center_queue_edit.php?id=".$queue_uuid);
return;
} //(count($_POST)>0 && strlen($_POST["persistformvar"]) == 0)
//pre-populate the form
if (count($_GET)>0 && $_POST["persistformvar"] != "true") {
$sql = "select * from v_call_center_tiers ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_center_tier_uuid = '$call_center_tier_uuid' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$agent_name = $row["agent_name"];
$queue_name = $row["queue_name"];
$tier_level = $row["tier_level"];
$tier_position = $row["tier_position"];
break; //limit to 1 row
}
unset ($prep_statement);
}
//show the header
require_once "resources/header.php";
$document['title'] = $text['title-call_center_tier_edit'];
//show the content
echo "<form method='post' name='frm' action=''>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td align='left' width='30%' nowrap='nowrap'><b>".$text['header-call_center_tier_edit']."</b></td>\n";
echo "<td width='70%' align='right'>";
echo " <input type='button' class='btn' alt='".$text['button-back']."' onclick='history.back();' value='".$text['button-back']."'>";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-save']."'>\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td align='left' colspan='2'>\n";
echo $text['description-call_center_tiers']."<br /><br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-agent_name']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
//---- Begin Select List --------------------
$sql = "SELECT * FROM v_users ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and user_enabled = 'true' ";
$sql .= "order by username asc ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
echo "<select id=\"agent_name\" name=\"agent_name\" class='formfld'>\n";
echo "<option value=\"\"></option>\n";
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
//$catcount = count($result);
foreach($result as $field) {
if ($field[username] == $agent_name) {
echo "<option value='".$field['username']."' selected='selected'>".$field['username']."</option>\n";
}
else {
echo "<option value='".$field['username']."'>".$field['username']."</option>\n";
}
}
echo "</select>";
unset($sql, $result);
//---- End Select List --------------------
echo "<br />\n";
echo $text['description-agent']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-queue_name']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
//---- Begin Select List --------------------
$sql = "SELECT * FROM v_call_center_queues ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "order by queue_name asc ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
echo "<select id=\"queue_name\" name=\"queue_name\" class='formfld'>\n";
echo "<option value=\"\"></option>\n";
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
//$catcount = count($result);
foreach($result as $field) {
if ($field[queue_name] == $queue_name) {
echo "<option value='".$field['queue_name']."' selected='selected'>".$field['queue_name']."</option>\n";
}
else {
echo "<option value='".$field['queue_name']."'>".$field['queue_name']."</option>\n";
}
}
echo "</select>";
unset($sql, $result);
//---- End Select List --------------------
echo "<br />\n";
echo $text['description-options']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-tier_level']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='tier_level'>\n";
//echo " <option value=''></option>\n";
if ($tier_level == "0") {
echo " <option value='0' selected='selected' >0</option>\n";
}
else {
echo " <option value='0'>0</option>\n";
}
if ($tier_level == "1") {
echo " <option value='1' selected='selected' >1</option>\n";
}
else {
echo " <option value='1'>1</option>\n";
}
if ($tier_level == "2") {
echo " <option value='2' selected='selected' >2</option>\n";
}
else {
echo " <option value='2'>2</option>\n";
}
if ($tier_level == "3") {
echo " <option value='3' selected='selected' >3</option>\n";
}
else {
echo " <option value='3'>3</option>\n";
}
if ($tier_level == "4") {
echo " <option value='4' selected='selected' >4</option>\n";
}
else {
echo " <option value='4'>4</option>\n";
}
if ($tier_level == "5") {
echo " <option value='5' selected='selected' >5</option>\n";
}
else {
echo " <option value='5'>5</option>\n";
}
if ($tier_level == "6") {
echo " <option value='6' selected='selected' >6</option>\n";
}
else {
echo " <option value='6'>6</option>\n";
}
if ($tier_level == "7") {
echo " <option value='7' selected='selected' >7</option>\n";
}
else {
echo " <option value='7'>7</option>\n";
}
if ($tier_level == "8") {
echo " <option value='8' selected='selected' >8</option>\n";
}
else {
echo " <option value='8'>8</option>\n";
}
if ($tier_level == "9") {
echo " <option value='9' selected='selected' >9</option>\n";
}
else {
echo " <option value='9'>9</option>\n";
}
echo " </select>\n";
echo "<br />\n";
echo $text['description-tier_level']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".$text['label-tier_position']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='tier_position'>\n";
//echo " <option value=''></option>\n";
if ($tier_position == "1") {
echo " <option value='1' selected='selected' >1</option>\n";
}
else {
echo " <option value='1'>1</option>\n";
}
if ($tier_position == "2") {
echo " <option value='2' selected='selected' >2</option>\n";
}
else {
echo " <option value='2'>2</option>\n";
}
if ($tier_position == "3") {
echo " <option value='3' selected='selected' >3</option>\n";
}
else {
echo " <option value='3'>3</option>\n";
}
if ($tier_position == "4") {
echo " <option value='4' selected='selected' >4</option>\n";
}
else {
echo " <option value='4'>4</option>\n";
}
if ($tier_position == "5") {
echo " <option value='5' selected='selected' >5</option>\n";
}
else {
echo " <option value='5'>5</option>\n";
}
if ($tier_position == "6") {
echo " <option value='6' selected='selected' >6</option>\n";
}
else {
echo " <option value='6'>6</option>\n";
}
if ($tier_position == "7") {
echo " <option value='7' selected='selected' >7</option>\n";
}
else {
echo " <option value='7'>7</option>\n";
}
if ($tier_position == "8") {
echo " <option value='8' selected='selected' >8</option>\n";
}
else {
echo " <option value='8'>8</option>\n";
}
if ($tier_position == "9") {
echo " <option value='9' selected='selected' >9</option>\n";
}
else {
echo " <option value='9'>9</option>\n";
}
echo " </select>\n";
echo "<br />\n";
echo $text['description-tier_position']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo " <td colspan='2' align='right'>\n";
echo " <input type='hidden' name='call_center_tier_uuid' value='$call_center_tier_uuid'>\n";
echo " <br>";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-save']."'>\n";
echo " </td>\n";
echo "</tr>";
echo "</table>";
echo "</form>";
require_once "resources/footer.php";
?>
+29 -60
View File
@@ -17,73 +17,42 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_center_queue_add') || permission_exists('call_center_queue_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
//includes
include "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_center_queue_add') || permission_exists('call_center_queue_edit')) {
//access granted
}
else {
echo "access denied";
exit;
}
//get the variables
$cmd = $_GET['cmd'];
//pre-populate the form
if (is_array($_GET) && is_uuid($_GET["id"]) && $_POST["persistformvar"] != "true") {
$call_center_queue_uuid = $_GET["id"];
$sql = "select queue_extension from v_call_center_queues ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and call_center_queue_uuid = :call_center_queue_uuid ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['call_center_queue_uuid'] = $call_center_queue_uuid;
$database = new database;
$queue_extension = $database->select($sql, $parameters, 'column');
unset($sql, $parameters);
}
//validate the variables
switch ($cmd) {
case "load":
//allow the command
break;
case "unload":
//allow the command
break;
case "reload":
//allow the command
break;
default:
unset($cmd);
}
$cmd = $_GET['cmd'];
$rdr = $_GET['rdr'];
//connect to event socket
if (isset($queue_extension) && isset($cmd)) {
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
$response = event_socket_request($fp, 'api reloadxml');
$response = event_socket_request($fp, 'api callcenter_config queue '.$cmd. ' '.$queue_extension."@".$_SESSION["domain_name"]);
fclose($fp);
}
else {
$response = '';
}
}
//send the redirect
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
$response = event_socket_request($fp, 'api reloadxml');
$response = event_socket_request($fp, $cmd);
fclose($fp);
}
else {
$response = '';
}
if ($rdr == "false") {
//redirect false
echo $response;
}
else {
$_SESSION["message"] = $response;
header("Location: call_center_queues.php?savemsg=".urlencode($response));
?>
}
?>
+224 -640
View File
@@ -1,640 +1,224 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2015 - 2021
All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
/**
* cache class provides an abstracted cache
*
* @method string dialplan - builds the dialplan for call center
*/
//define the call center class
if (!class_exists('call_center')) {
class call_center {
/**
* define the variables
*/
public $domain_uuid;
public $call_center_queue_uuid;
public $dialplan_uuid;
public $queue_name;
public $queue_description;
public $destination_number;
public $queue_cc_exit_keys;
/**
* declare private variables
*/
private $app_name;
private $app_uuid;
private $permission_prefix;
private $list_page;
private $table;
private $uuid_prefix;
/**
* Called when the object is created
*/
public function __construct() {
//assign private variables
$this->app_name = 'call_center';
$this->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
}
/**
* Called when there are no references to a particular object
* unset the variables used in the class
*/
public function __destruct() {
foreach ($this as $key => $value) {
unset($this->$key);
}
}
/**
* Add a dialplan for call center
* @var string $domain_uuid the multi-tenant id
* @var string $value string to be cached
*/
public function dialplan() {
//delete previous dialplan
if (is_uuid($this->dialplan_uuid)) {
//build delete array
$array['dialplans'][0]['dialplan_uuid'] = $this->dialplan_uuid;
$array['dialplans'][0]['domain_uuid'] = $this->domain_uuid;
$array['dialplan_details'][0]['dialplan_uuid'] = $this->dialplan_uuid;
$array['dialplan_details'][0]['domain_uuid'] = $this->domain_uuid;
//grant temporary permissions
$p = new permissions;
$p->add('dialplan_delete', 'temp');
$p->add('dialplan_detail_delete', 'temp');
//execute delete
$database = new database;
$database->app_name = 'call_centers';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->delete($array);
unset($array);
//revoke temporary permissions
$p->delete('dialplan_delete', 'temp');
$p->delete('dialplan_detail_delete', 'temp');
}
//build the dialplan array
$dialplan["app_uuid"] = "95788e50-9500-079e-2807-fd530b0ea370";
$dialplan["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_name"] = ($this->queue_name != '') ? $this->queue_name : format_phone($this->destination_number);
$dialplan["dialplan_number"] = $this->destination_number;
$dialplan["dialplan_context"] = $_SESSION['domain_name'];
$dialplan["dialplan_continue"] = "false";
$dialplan["dialplan_order"] = "210";
$dialplan["dialplan_enabled"] = "true";
$dialplan["dialplan_description"] = $this->queue_description;
$dialplan_detail_order = 10;
//add the public condition
$y = 1;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "condition";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "\${caller_id_name}";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "^([^#]+#)(.*)$";
$dialplan["dialplan_details"][$y]["dialplan_detail_break"] = "never";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "1";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "set";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "caller_id_name=$2";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "1";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "condition";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "destination_number";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "^".$this->destination_number."\$";
$dialplan["dialplan_details"][$y]["dialplan_detail_break"] = "";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "answer";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "set";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "hangup_after_bridge=true";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
if (strlen($this->queue_cid_prefix) > 0) {
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "set";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "effective_caller_id_name=".$this->queue_cid_prefix."#\${caller_id_name}";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
}
if (strlen($this->queue_greeting) > 0) {
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "sleep";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "1000";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
}
if (strlen($this->queue_greeting) > 0) {
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "playback";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "".$this->queue_greeting;
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
}
if (strlen($this->queue_cc_exit_keys) > 0) {
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "set";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "cc_exit_keys=".$this->queue_cc_exit_keys;
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
}
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "callcenter";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = $this->queue_name.'@'.$_SESSION["domain_name"];
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
if (strlen($this->queue_timeout_action) > 0) {
$action_array = explode(":",$this->queue_timeout_action);
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = $action_array[0];
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = substr($this->queue_timeout_action, strlen($action_array[0])+1, strlen($this->queue_timeout_action));
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
}
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "hangup";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
//prepare the array
$array["dialplans"][0] = $dialplan;
//add temporary permissions
$p = new permissions;
$p->add("dialplan_add", 'temp');
$p->add("dialplan_detail_add", 'temp');
$p->add("dialplan_edit", 'temp');
$p->add("dialplan_detail_edit", 'temp');
//save the dialplan
$database = new database;
$database->app_name = 'call_centers';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->save($array);
$dialplan_response = $database->message;
$this->dialplan_uuid = $dialplan_response['uuid'];
unset($array);
//remove temporary permissions
$p->delete("dialplan_add", 'temp');
$p->delete("dialplan_detail_add", 'temp');
$p->delete("dialplan_edit", 'temp');
$p->delete("dialplan_detail_edit", 'temp');
//build call center queue update array
$array['call_center_queues'][0]['call_center_queue_uuid'] = $this->call_center_queue_uuid;
$array['call_center_queues'][0]['dialplan_uuid'] = $this->dialplan_uuid;
//grant temporary permissions
$p = new permissions;
$p->add('call_center_queue_edit', 'temp');
//execute update
$database = new database;
$database->app_name = 'call_centers';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('call_center_queue_edit', 'temp');
//clear the cache
$cache = new cache;
$cache->delete("dialplan:".$_SESSION['domain_name']);
//return the dialplan_uuid
return $dialplan_response;
}
/**
* delete records
*/
public function delete_queues($records) {
//assign private variables
$this->permission_prefix = 'call_center_queue_';
$this->list_page = 'call_center_queues.php';
$this->table = 'call_center_queues';
$this->uuid_prefix = 'call_center_queue_';
if (permission_exists($this->permission_prefix.'delete')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//delete multiple records
if (is_array($records) && @sizeof($records) != 0) {
//filter out unchecked, build where clause for below
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//get necessary details
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select ".$this->uuid_prefix."uuid as uuid, dialplan_uuid, queue_name, queue_extension from v_".$this->table." ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
foreach ($rows as $row) {
$call_center_queues[$row['uuid']]['dialplan_uuid'] = $row['dialplan_uuid'];
$call_center_queues[$row['uuid']]['queue_name'] = $row['queue_name'];
$call_center_queues[$row['uuid']]['queue_extension'] = $row['queue_extension'];
}
}
unset($sql, $parameters, $rows, $row);
}
//build the delete array
$x = 0;
foreach ($call_center_queues as $call_center_queue_uuid => $call_center_queue) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $call_center_queue_uuid;
$array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['dialplans'][$x]['dialplan_uuid'] = $call_center_queue['dialplan_uuid'];
$array['dialplans'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['dialplan_details'][$x]['dialplan_uuid'] = $call_center_queue['dialplan_uuid'];
$array['dialplan_details'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['call_center_tiers'][$x][$this->uuid_prefix.'uuid'] = $call_center_queue_uuid;
$array['call_center_tiers'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$x++;
$array['call_center_tiers'][$x]['queue_name'] = $call_center_queue['queue_extension']."@".$_SESSION['domain_name'];
$array['call_center_tiers'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$x++;
}
//delete the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//delete the queue in the switch
if ($fp) {
foreach ($uuids as $uuid) {
$cmd = "api callcenter_config queue unload ".$call_center_queues[$uuid]['queue_extension']."@".$_SESSION["domin_name"];
$response = event_socket_request($fp, $cmd);
}
}
//grant temporary permissions
$p = new permissions;
$p->add('call_center_tier_delete', 'temp');
$p->add('dialplan_delete', 'temp');
$p->add('dialplan_detail_delete', 'temp');
//execute delete
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->delete($array);
unset($array);
//revoke temporary permissions
$p->delete('call_center_tier_delete', 'temp');
$p->delete('dialplan_delete', 'temp');
$p->delete('dialplan_detail_delete', 'temp');
//clear the cache
$cache = new cache;
$cache->delete("dialplan:".$_SESSION["domain_name"]);
remove_config_from_cache('configuration:callcenter.conf');
//clear the destinations session array
if (isset($_SESSION['destinations']['array'])) {
unset($_SESSION['destinations']['array']);
}
//synchronize configuration
save_call_center_xml();
//apply settings reminder
$_SESSION["reload_xml"] = true;
//set message
message::add($text['message-delete']);
}
unset($records);
}
}
}
public function delete_agents($records) {
//assign private variables
$this->permission_prefix = 'call_center_agent_';
$this->list_page = 'call_center_agents.php';
$this->table = 'call_center_agents';
$this->uuid_prefix = 'call_center_agent_';
if (permission_exists($this->permission_prefix.'delete')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//delete multiple records
if (is_array($records) && @sizeof($records) != 0) {
//filter out unchecked
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = $record['uuid'];
}
}
//build the delete array
if (is_array($uuids) && @sizeof($uuids) != 0) {
foreach ($uuids as $x => $uuid) {
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $uuid;
$array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['call_center_tiers'][$x]['call_center_agent_uuid'] = $uuid;
$array['call_center_tiers'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
}
}
//delete the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//delete the agent in the switch
if ($fp) {
foreach ($uuids as $uuid) {
$cmd = "api callcenter_config agent del ".$uuid;
$response = event_socket_request($fp, $cmd);
}
}
//grant temporary permissions
$p = new permissions;
$p->add('call_center_tier_delete', 'temp');
//execute delete
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->delete($array);
unset($array);
//revoke temporary permissions
$p->delete('call_center_tier_delete', 'temp');
//synchronize configuration
save_call_center_xml();
remove_config_from_cache('configuration:callcenter.conf');
//set message
message::add($text['message-delete']);
}
unset($records);
}
}
}
/**
* copy records
*/
public function copy_queues($records) {
//assign private variables
$this->permission_prefix = 'call_center_queue_';
$this->list_page = 'call_center_queues.php';
$this->table = 'call_center_queues';
$this->uuid_prefix = 'call_center_queue_';
if (permission_exists($this->permission_prefix.'add')) {
//add multi-lingual support
$language = new text;
$text = $language->get();
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: '.$this->list_page);
exit;
}
//copy the checked records
if (is_array($records) && @sizeof($records) != 0) {
//get checked records
foreach ($records as $x => $record) {
if ($record['checked'] == 'true' && is_uuid($record['uuid'])) {
$uuids[] = "'".$record['uuid']."'";
}
}
//create insert array from existing data
if (is_array($uuids) && @sizeof($uuids) != 0) {
//primary table
$sql = "select * from v_".$this->table." ";
$sql .= "where ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") ";
$database = new database;
$rows = $database->select($sql, $parameters, 'all');
if (is_array($rows) && @sizeof($rows) != 0) {
$y = 0;
foreach ($rows as $x => $row) {
$new_call_center_queue_uuid = uuid();
$new_dialplan_uuid = uuid();
//copy data
$array[$this->table][$x] = $row;
//overwrite
$array[$this->table][$x][$this->uuid_prefix.'uuid'] = $new_call_center_queue_uuid;
$array[$this->table][$x]['dialplan_uuid'] = $new_dialplan_uuid;
$array[$this->table][$x]['queue_description'] = trim($row['queue_description'].' ('.$text['label-copy'].')');
//call center tiers sub table
$sql_2 = "select * from v_call_center_tiers where call_center_queue_uuid = :call_center_queue_uuid";
$parameters_2['call_center_queue_uuid'] = $row['call_center_queue_uuid'];
$database = new database;
$rows_2 = $database->select($sql_2, $parameters_2, 'all');
if (is_array($rows_2) && @sizeof($rows_2) != 0) {
foreach ($rows_2 as $row_2) {
//copy data
$array['call_center_tiers'][$y] = $row_2;
//overwrite
$array['call_center_tiers'][$y]['call_center_tier_uuid'] = uuid();
$array['call_center_tiers'][$y]['call_center_queue_uuid'] = $new_call_center_queue_uuid;
$y++;
}
}
unset($sql_2, $parameters_2, $rows_2, $row_2);
//call center queue dialplan record
$sql_3 = "select * from v_dialplans where dialplan_uuid = :dialplan_uuid";
$parameters_3['dialplan_uuid'] = $row['dialplan_uuid'];
$database = new database;
$dialplan = $database->select($sql_3, $parameters_3, 'row');
if (is_array($dialplan) && @sizeof($dialplan) != 0) {
//copy data
$array['dialplans'][$x] = $dialplan;
//overwrite
$array['dialplans'][$x]['dialplan_uuid'] = $new_dialplan_uuid;
$dialplan_xml = $dialplan['dialplan_xml'];
$dialplan_xml = str_replace($row['call_center_queue_uuid'], $new_call_center_queue_uuid, $dialplan_xml); //replace source call_center_queue_uuid with new
$dialplan_xml = str_replace($dialplan['dialplan_uuid'], $new_dialplan_uuid, $dialplan_xml); //replace source dialplan_uuid with new
$array['dialplans'][$x]['dialplan_xml'] = $dialplan_xml;
$array['dialplans'][$x]['dialplan_description'] = trim($dialplan['dialplan_description'].' ('.$text['label-copy'].')');
}
unset($sql_3, $parameters_3, $dialplan);
}
}
unset($sql, $parameters, $rows, $row);
}
//save the changes and set the message
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('call_center_tier_add', 'temp');
$p->add('dialplan_add', 'temp');
//save the array
$database = new database;
$database->app_name = $this->app_name;
$database->app_uuid = $this->app_uuid;
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('call_center_tier_add', 'temp');
$p->delete('dialplan_add', 'temp');
//apply settings reminder
$_SESSION["reload_xml"] = true;
//clear the cache
$cache = new cache;
$cache->delete("dialplan:".$_SESSION["domain_name"]);
//set message
message::add($text['message-copy']);
}
unset($records);
}
}
} //method
} //class
}
/*
$o = new call_center;
$c->domain_uuid = "";
$c->dialplan_uuid = "";
$c->queue_name = "";
$c->queue_cid_prefix = "";
$c->queue_timeout_action = "";
$c->queue_description = "";
$c->destination_number = "";
$c->queue_cc_exit_keys = "";
$c->dialplan();
*/
?>
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2015
All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
/**
* cache class provides an abstracted cache
*
* @method string dialplan - builds the dialplan for call center
*/
//define the call center class
if (!class_exists('call_center')) {
class call_center {
/**
* define the variables
*/
public $domain_uuid;
public $call_center_queue_uuid;
public $dialplan_uuid;
public $queue_name;
public $queue_description;
public $destination_number;
/**
* Called when the object is created
*/
public function __construct() {
//place holder
}
/**
* Called when there are no references to a particular object
* unset the variables used in the class
*/
public function __destruct() {
foreach ($this as $key => $value) {
unset($this->$key);
}
}
/**
* Add a dialplan for call center
* @var string $domain_uuid the multi-tenant id
* @var string $value string to be cached
*/
public function dialplan() {
//delete previous dialplan
if (strlen($this->dialplan_uuid) > 0) {
//delete the previous dialplan
$sql = "delete from v_dialplans ";
$sql .= "where dialplan_uuid = '".$this->dialplan_uuid."' ";
$sql .= "and domain_uuid = '".$this->domain_uuid."' ";
$this->db->exec($sql);
$sql = "delete from v_dialplan_details ";
$sql .= "where dialplan_uuid = '".$this->dialplan_uuid."' ";
$sql .= "and domain_uuid = '".$this->domain_uuid."' ";
$this->db->exec($sql);
unset($sql);
}
unset($prep_statement);
//build the dialplan array
$dialplan["app_uuid"] = "95788e50-9500-079e-2807-fd530b0ea370";
$dialplan["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_name"] = ($this->queue_name != '') ? $this->queue_name : format_phone($this->destination_number);
$dialplan["dialplan_number"] = $this->destination_number;
$dialplan["dialplan_context"] = $_SESSION['context'];
$dialplan["dialplan_continue"] = "false";
$dialplan["dialplan_order"] = "210";
$dialplan["dialplan_enabled"] = "true";
$dialplan["dialplan_description"] = $this->queue_description;
$dialplan_detail_order = 10;
//add the public condition
$y = 1;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "condition";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "\${caller_id_name}";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "^([^#]+#)(.*)$";
$dialplan["dialplan_details"][$y]["dialplan_detail_break"] = "never";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "1";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "set";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "caller_id_name=$2";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "1";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "condition";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "destination_number";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "^".$this->destination_number."\$";
$dialplan["dialplan_details"][$y]["dialplan_detail_break"] = "";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "answer";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "set";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "hangup_after_bridge=true";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
if (strlen($this->queue_cid_prefix) > 0) {
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "set";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "effective_caller_id_name=".$this->queue_cid_prefix."#\${caller_id_name}";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
}
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "callcenter";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = $this->queue_name.'@'.$_SESSION["domain_name"];
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
if (strlen($this->queue_timeout_action) > 0) {
$action_array = explode(":",$this->queue_timeout_action);
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = $action_array[0];
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = substr($this->queue_timeout_action, strlen($action_array[0])+1, strlen($this->queue_timeout_action));
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
$y++;
}
$dialplan["dialplan_details"][$y]["domain_uuid"] = $this->domain_uuid;
$dialplan["dialplan_details"][$y]["dialplan_detail_tag"] = "action";
$dialplan["dialplan_details"][$y]["dialplan_detail_type"] = "hangup";
$dialplan["dialplan_details"][$y]["dialplan_detail_data"] = "";
$dialplan["dialplan_details"][$y]["dialplan_detail_group"] = "2";
$dialplan["dialplan_details"][$y]["dialplan_detail_order"] = $y * 10;
//add the dialplan permission
$p = new permissions;
$p->add("dialplan_add", 'temp');
$p->add("dialplan_detail_add", 'temp');
$p->add("dialplan_edit", 'temp');
$p->add("dialplan_detail_edit", 'temp');
//save the dialplan
$orm = new orm;
$orm->name('dialplans');
$orm->save($dialplan);
$dialplan_response = $orm->message;
$this->dialplan_uuid = $dialplan_response['uuid'];
//if new dialplan uuid then update the call center queue
$sql = "update v_call_center_queues ";
$sql .= "set dialplan_uuid = '".$this->dialplan_uuid."' ";
$sql .= "where call_center_queue_uuid = '".$this->call_center_queue_uuid."' ";
$sql .= "and domain_uuid = '".$this->domain_uuid."' ";
$this->db->exec($sql);
unset($sql);
//remove the temporary permission
$p->delete("dialplan_add", 'temp');
$p->delete("dialplan_detail_add", 'temp');
$p->delete("dialplan_edit", 'temp');
$p->delete("dialplan_detail_edit", 'temp');
//synchronize the xml config
save_dialplan_xml();
//clear the cache
$cache = new cache;
$cache->delete("dialplan:".$_SESSION['context']);
//return the dialplan_uuid
return $dialplan_response;
}
}
}
/*
$o = new call_center;
$c->domain_uuid = "";
$c->dialplan_uuid = "";
$c->queue_name = "";
$c->queue_cid_prefix = "";
$c->queue_timeout_action = "";
$c->queue_description = "";
$c->destination_number = "";
$c->dialplan();
*/
?>
@@ -1,209 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2017-2019
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_center_queue_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get($_SESSION['domain']['language']['code'], 'app/call_centers');
//get http variables and set as php variables
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//setup the event socket connection
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
//get the http post values and set them as php variables
if (count($_POST) > 0) {
foreach ($_POST['agents'] as $row) {
if (strlen($row['agent_status']) > 0) {
//agent set status
if ($fp) {
// update the database
$array['call_center_agents'][0]['call_center_agent_uuid'] = $row['id'];
$array['call_center_agents'][0]['domain_uuid'] = $_SESSION['user']['domain_uuid'];
$array['call_center_agents'][0]['agent_status'] = $row['agent_status'];
$database = new database;
$database->app_name = 'call_centers_dashboard';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$database->save($array);
//set the call center status
$cmd = "api callcenter_config agent set status ".$row['id']." '".$row['agent_status']."'";
$response = event_socket_request($fp, $cmd);
//set the agent status to available and assign the agent to the queue with the tier
if ($row['agent_status'] == 'Available') {
//assign the agent to the queue
$cmd = "api callcenter_config tier add ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']." 1 1";
$response = event_socket_request($fp, $cmd);
}
//un-assign the agent from the queue
if ($row['agent_status'] == 'Logged Out') {
$cmd = "api callcenter_config tier del ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id'];
$response = event_socket_request($fp, $cmd);
}
usleep(200);
unset($parameters);
}
}
}
//redirect
header('Location: '.PROJECT_PATH.'/core/dashboard/');
exit;
}
//get the agent list from event socket
$switch_cmd = 'callcenter_config tier list';
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$call_center_tiers = csv_to_named_array($event_socket_str, '|');
//get the call center queues from the database
$sql = "select * from v_call_center_queues ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "order by queue_extension asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$call_center_queues = $database->select($sql, $parameters, 'all');
$num_rows = !is_array($call_center_queues) ? 0 : @sizeof($call_center_queues);
unset($sql, $parameters);
//get the agents from the database
$sql = "select * from v_call_center_agents ";
$sql .= "where user_uuid = :user_uuid ";
$sql .= "and domain_uuid = :domain_uuid";
$parameters['user_uuid'] = $_SESSION['user_uuid'];
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$agents = $database->select($sql, $parameters, 'all');
if (count($agents) > 0) {
$agent = $agents[0];
}
unset($sql, $parameters);
//update the queue status
$x = 0;
foreach ($call_center_queues as $queue) {
$call_center_queues[$x]['queue_status'] = 'Logged Out';
foreach ($call_center_tiers as $tier) {
if ($queue['queue_extension'] .'@'. $_SESSION['user']['domain_name'] == $tier['queue'] && $agent['call_center_agent_uuid'] == $tier['agent']) {
$call_center_queues[$x]['queue_status'] = $agent['agent_status'];
}
}
$x++;
}
//includes the header
require_once "resources/header.php";
//radio button cycle script
echo "<script>\n";
echo " function get_selected(radio_group) {\n";
echo " for (var i = 0; i < radio_group.length; i++) {\n";
echo " if (radio_group[i].checked) { return i; }\n";
echo " }\n";
echo " return 0;\n";
echo " }\n";
echo " function cycle(radio_group_name) {\n";
echo " var radios = document.getElementsByName(radio_group_name);\n";
echo " var i = get_selected(radios);\n";
echo " if (i+1 == radios.length) {\n";
echo " radios[0].checked = true;\n";
echo " }\n";
echo " else {\n";
echo " radios[i+1].checked = true;\n";
echo " }\n";
echo " }\n";
echo "</script>\n";
//show the content
echo "<div class='action_bar sub'>\n";
echo " <div class='heading'><b>".$text['header-call_center_queues'].($agent['agent_name'] != '' ? "&nbsp;&nbsp;&nbsp;</b> Agent: <strong>".$agent['agent_name']."</strong>" : "</b>")."</div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'collapse'=>false,'onclick'=>"list_form_submit('form_list_call_center_agent_dashboard');"]);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo "<form id='form_list_call_center_agent_dashboard' method='post'>\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
echo " <th>".$text['label-queue_name']."</th>\n";
echo " <th class='shrink'>".$text['label-status']."</th>\n";
// echo " <th>".$text['label-options']."</th>\n";
echo "</tr>\n";
if (is_array($call_center_queues) && @sizeof($call_center_queues) != 0) {
$x = 0;
foreach ($call_center_queues as $row) {
$onclick = "onclick=\"cycle('agents[".$x."][agent_status]');\"";
echo "<tr class='list-row'>\n";
echo " <td ".$onclick.">".escape($row['queue_name'])."</td>\n";
// echo " <td>";
// if ($row['queue_status'] == "Available") {
// echo $text['option-available'];
// }
// if ($row['queue_status'] == "Logged Out") {
// echo $text['option-logged_out'];
// }
// echo " </td>\n";
echo " <td class='no-wrap right'>\n";
echo " <input type='hidden' name='agents[".$x."][queue_extension]' value='".escape($row['queue_extension'])."'>\n";
echo " <input type='hidden' name='agents[".$x."][agent_name]' value='".escape($agent['agent_name'])."'>\n";
echo " <input type='hidden' name='agents[".$x."][id]' value='".escape($agent['call_center_agent_uuid'])."'>\n";
echo " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Available' ".($row['queue_status'] == 'Available' ? "checked='checked'" : null).">&nbsp;".$text['option-available']."</label>\n";
echo " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Logged Out' ".($row['queue_status'] == 'Logged Out' ? "checked='checked'" : null).">&nbsp;".$text['option-logged_out']."</label>\n";
echo " <label style='margin: 0; cursor: pointer;'><input type='radio' name='agents[".$x."][agent_status]' value='On Break' ".($row['queue_status'] == 'On Break' ? "checked='checked'" : null).">&nbsp;".$text['option-on_break']."</label>\n";
echo " </td>\n";
echo "</tr>\n";
$x++;
}
unset($call_center_queues);
}
echo "</table>\n";
echo "<br />\n";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
?>
@@ -1,14 +0,0 @@
<?php
$array['dashboard'][$x]['dashboard_uuid'] = '9083305a-ebb4-4b67-bb9b-8c09cf030261';
$array['dashboard'][$x]['dashboard_name'] = 'Call Center Agents';
$array['dashboard'][$x]['dashboard_path'] = 'app/call_centers/resources/dashboard/call_center_agents.php';
$array['dashboard'][$x]['dashboard_order'] = '180';
$array['dashboard'][$x]['dashboard_enabled'] = 'false';
$array['dashboard'][$x]['dashboard_description'] = 'Status for agent in a call center.';
$y = 0;
$array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_group_uuid'] = '22d8937c-a9b3-4458-b34c-0ebeda15ffad';
$array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_uuid'] = '9083305a-ebb4-4b67-bb9b-8c09cf030261';
$array['dashboard'][$x]['dashboard_groups'][$y]['group_name'] = 'agent';
?>
+15 -55
View File
@@ -25,66 +25,26 @@
*/
// make sure the PATH_SEPARATOR is defined
umask(2);
if (!defined("PATH_SEPARATOR")) {
if (strpos($_ENV["OS"], "Win") !== false) {
define("PATH_SEPARATOR", ";");
} else {
define("PATH_SEPARATOR", ":");
}
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html';
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]);
if(PHP_SAPI == 'cli'){
chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME));
$script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]);
$dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME));
if (file_exists('/project_root.php')) {
$path = '/';
} else {
$i = 1;
$path = '';
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
}
$_SERVER["DOCUMENT_ROOT"] = $path;
}else{
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
// try to detect if a project path is being used
if (!defined('PROJECT_PATH')) {
if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) {
define('PROJECT_PATH', '/fusionpbx');
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) {
define('PROJECT_PATH', '');
} else {
$dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME)));
$i = 1;
$path = $_SERVER["DOCUMENT_ROOT"];
while ($i < count($dirs)) {
$path .= '/' . $dirs[$i];
if (file_exists($path. '/project_root.php')) {
break;
}
$i++;
}
if(!file_exists($path. '/project_root.php')){
die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance");
}
$project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path);
define('PROJECT_PATH', $project_path);
}
$_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]);
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>
+34 -100
View File
@@ -5,64 +5,36 @@
$apps[$x]['uuid'] = "b1b70f85-6b42-429b-8c5a-60c8b02b7d14";
$apps[$x]['category'] = "";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.0";
$apps[$x]['version'] = "";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Direct calls between two destinations by calling a feature code.";
$apps[$x]['description']['en-gb'] = "Direct calls between two destinations by calling a feature code.";
$apps[$x]['description']['ar-eg'] = "";
$apps[$x]['description']['de-at'] = "Anrufe zwischen zwei Ziele anhand eines Funktions-Codes steuern.";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-de'] = "Anrufe zwischen zwei Ziele anhand eines Funktions-Codes steuern.";
$apps[$x]['description']['en-us'] = "";
$apps[$x]['description']['es-cl'] = "";
$apps[$x]['description']['es-mx'] = "";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "";
$apps[$x]['description']['he-il'] = "";
$apps[$x]['description']['it-it'] = "";
$apps[$x]['description']['nl-nl'] = "Directe oproepen tussen twee bestemmingen via een feature code.";
$apps[$x]['description']['pl-pl'] = "";
$apps[$x]['description']['pt-br'] = "";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "";
$apps[$x]['description']['ro-ro'] = "";
$apps[$x]['description']['ru-ru'] = "";
$apps[$x]['description']['sv-se'] = "";
$apps[$x]['description']['uk-ua'] = "";
$apps[$x]['description']['pt-br'] = "";
//destination details
$y=0;
$y = 0;
$apps[$x]['destinations'][$y]['type'] = "sql";
$apps[$x]['destinations'][$y]['label'] = "call_flows";
$apps[$x]['destinations'][$y]['name'] = "call_flows";
$apps[$x]['destinations'][$y]['sql'] = "select call_flow_name as name, call_flow_uuid as uuid, call_flow_extension as destination, call_flow_context as context from v_call_flows ";
$apps[$x]['destinations'][$y]['where'] = "where domain_uuid = '\${domain_uuid}' and call_flow_enabled = 'true' ";
$apps[$x]['destinations'][$y]['where'] = "where domain_uuid = '\${domain_uuid}' ";
$apps[$x]['destinations'][$y]['order_by'] = "call_flow_name asc";
$apps[$x]['destinations'][$y]['field']['call_flow_uuid'] = "call_flow_uuid";
$apps[$x]['destinations'][$y]['field']['context'] = "call_flow_context";
$apps[$x]['destinations'][$y]['field']['name'] = "call_flow_name";
$apps[$x]['destinations'][$y]['field']['destination'] = "destination";
$apps[$x]['destinations'][$y]['field']['extension'] = "destination";
$apps[$x]['destinations'][$y]['field']['context'] = "context";
$apps[$x]['destinations'][$y]['select_value']['dialplan'] = "transfer:\${destination} XML \${context}";
$apps[$x]['destinations'][$y]['select_value']['ivr'] = "menu-exec-app:transfer \${destination} XML \${context}";
$apps[$x]['destinations'][$y]['select_label'] = "\${destination} \${name}";
$y++;
$apps[$x]['destinations'][$y]['type'] = "sql";
$apps[$x]['destinations'][$y]['label'] = "call_flows";
$apps[$x]['destinations'][$y]['name'] = "call_flows";
$apps[$x]['destinations'][$y]['sql'] = "select call_flow_name as name, call_flow_uuid as uuid, call_flow_extension as extension, call_flow_feature_code as destination, call_flow_context as context from v_call_flows ";
$apps[$x]['destinations'][$y]['where'] = "where domain_uuid = '\${domain_uuid}' and call_flow_enabled = 'true' ";
$apps[$x]['destinations'][$y]['order_by'] = "call_flow_extension asc";
$apps[$x]['destinations'][$y]['field']['uuid'] = "uuid";
$apps[$x]['destinations'][$y]['field']['name'] = "name";
$apps[$x]['destinations'][$y]['field']['destination'] = "destination";
$apps[$x]['destinations'][$y]['field']['extension'] = "extension";
$apps[$x]['destinations'][$y]['field']['context'] = "context";
$apps[$x]['destinations'][$y]['field']['destination'] = "call_flow_extension";
$apps[$x]['destinations'][$y]['select_value']['dialplan'] = "transfer:\${destination} XML \${context}";
$apps[$x]['destinations'][$y]['select_value']['ivr'] = "menu-exec-app:transfer \${destination} XML \${context}";
$apps[$x]['destinations'][$y]['select_label'] = "\${destination} \${name}";
//permission details
$y=0;
$y = 0;
$apps[$x]['permissions'][$y]['name'] = "call_flow_view";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "b0939384-7055-44e8-8b4c-9f72293e1878";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
@@ -80,25 +52,11 @@
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_flow_all";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_flow_context";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "call_flow_destinations";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['groups'][] = "admin";
$y++;
//cache details
$apps[$x]['cache']['key'] = "dialplan.\${call_flow_context}";
//schema details
$y=0;
$apps[$x]['db'][$y]['table']['name'] = "v_call_flows";
$apps[$x]['db'][$y]['table']['parent'] = "";
$z=0;
$y = 0; //table array index
$z = 0; //field array index
$apps[$x]['db'][$y]['table'] = "v_call_flows";
$apps[$x]['db'][$y]['fields'][$z]['name'] = "domain_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
@@ -117,85 +75,61 @@
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "";
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_dialplans";
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "dialplan_uuid";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the name.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the name.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_extension";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the extension number.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the extension number.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_feature_code";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the feature code.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the feature code.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_context";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the context.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the context.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_status";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the status.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Select the status.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_pin_number";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the PIN number.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the PIN number.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_label";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the label.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_sound";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the sound.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the label.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_app";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the application.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the application.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_data";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the application data.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the application data.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_flow_alternate_label";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "call_flow_anti_label";
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_anti_label";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the alternate label.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the alternate label.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_alternate_sound";
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_anti_app";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the alternate sound.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the alternate application.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_flow_alternate_app";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "call_flow_anti_app";
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_anti_data";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the alternate application.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name']['text'] = "call_flow_alternate_data";
$apps[$x]['db'][$y]['fields'][$z]['name']['deprecated'] = "call_flow_anti_data";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the alernate application data.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_enabled";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select whether to enable or disable the call flow";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the alernate application data.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow_description";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the description.";
$apps[$x]['db'][$y]['fields'][$z]['description']['en'] = "Enter the description.";
$z++;
?>
-38
View File
@@ -1,38 +0,0 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2020
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//process this only one time
if ($domains_processed == 1) {
//update the dialplan order
$database = new database;
$sql = "update v_call_flows set call_flow_enabled = 'true' where call_flow_enabled is null;\n";
$database->execute($sql);
unset($sql);
}
?>
File diff suppressed because it is too large Load Diff
+15 -28
View File
@@ -1,31 +1,18 @@
<?php
$y=0;
$apps[$x]['menu'][$y]['title']['en-us'] = "Call Flows";
$apps[$x]['menu'][$y]['title']['en-gb'] = "Call Flows";
$apps[$x]['menu'][$y]['title']['ar-eg'] = "";
$apps[$x]['menu'][$y]['title']['de-at'] = "Anruf Steuerung";
$apps[$x]['menu'][$y]['title']['de-ch'] = "";
$apps[$x]['menu'][$y]['title']['de-de'] = "Anruf Steuerung";
$apps[$x]['menu'][$y]['title']['es-cl'] = "Flujo de Llamada";
$apps[$x]['menu'][$y]['title']['es-mx'] = "";
$apps[$x]['menu'][$y]['title']['fr-ca'] = "Circulation d'Appel";
$apps[$x]['menu'][$y]['title']['fr-fr'] = "cinématiques d'Appel";
$apps[$x]['menu'][$y]['title']['he-il'] = "";
$apps[$x]['menu'][$y]['title']['it-it'] = "Deviatori di Chiamata";
$apps[$x]['menu'][$y]['title']['nl-nl'] = "Oproep besturing";
$apps[$x]['menu'][$y]['title']['pl-pl'] = "Przepływ rozmów";
$apps[$x]['menu'][$y]['title']['pt-br'] = "Fluxo de chamadas";
$apps[$x]['menu'][$y]['title']['pt-pt'] = "";
$apps[$x]['menu'][$y]['title']['ro-ro'] = "";
$apps[$x]['menu'][$y]['title']['ru-ru'] = "Переключатель вызовов";
$apps[$x]['menu'][$y]['title']['sv-se'] = "Samtalsflöden";
$apps[$x]['menu'][$y]['title']['uk-ua'] = "Потоки дзвінків";
$apps[$x]['menu'][$y]['uuid'] = "b0939384-7055-44e8-8b4c-9f72293e1878";
$apps[$x]['menu'][$y]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['path'] = "/app/call_flows/call_flows.php";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
$apps[$x]['menu'][$y]['groups'][] = "admin";
$apps[$x]['menu'][0]['title']['en-us'] = "Call Flows";
$apps[$x]['menu'][0]['title']['es-cl'] = "Flujo de Llamada";
$apps[$x]['menu'][0]['title']['fr-fr'] = "cinématiques d'Appel";
$apps[$x]['menu'][0]['title']['fr-ca'] = "Circulation d'Appel";
$apps[$x]['menu'][0]['title']['pl'] = "Przepływ rozmów";
$apps[$x]['menu'][0]['title']['sv-se'] = "Samtalsflöden";
$apps[$x]['menu'][0]['title']['uk'] = "Потоки дзвінків";
$apps[$x]['menu'][0]['title']['de-at'] = "Anruf Steuerung";
$apps[$x]['menu'][0]['uuid'] = "b0939384-7055-44e8-8b4c-9f72293e1878";
$apps[$x]['menu'][0]['parent_uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['path'] = "/app/call_flows/call_flows.php";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
$apps[$x]['menu'][0]['groups'][] = "admin";
?>
?>
+98
View File
@@ -0,0 +1,98 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_flow_delete')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
if (count($_GET)>0) {
$id = check_str($_GET["id"]);
}
if (strlen($id)>0) {
//get the dialplan uuid
$sql = "select * from v_call_flows ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_flow_uuid = '$id' ";
$prep_statement = $db->prepare($sql);
$prep_statement->execute();
while($row = $prep_statement->fetch(PDO::FETCH_ASSOC)) {
$dialplan_uuid = $row['dialplan_uuid'];
}
//delete call_flow
$sql = "delete from v_call_flows ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and call_flow_uuid = '$id' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
unset($sql);
//delete the dialplan entry
$sql = "delete from v_dialplans ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and dialplan_uuid = '$dialplan_uuid' ";
$db->query($sql);
unset($sql);
//delete the dialplan details
$sql = "delete from v_dialplan_details ";
$sql .= "where domain_uuid = '$domain_uuid' ";
$sql .= "and dialplan_uuid = '$dialplan_uuid' ";
$db->query($sql);
unset($sql);
//syncrhonize configuration
save_dialplan_xml();
//apply settings reminder
$_SESSION["reload_xml"] = true;
//delete the dialplan context from memcache
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
if ($fp) {
$switch_cmd = "memcache delete dialplan:".$_SESSION["context"]."@".$_SESSION['domain_name'];
$switch_result = event_socket_request($fp, 'api '.$switch_cmd);
}
}
$_SESSION["message"] = $text['message-delete'];
header("Location: call_flows.php");
return;
?>
File diff suppressed because it is too large Load Diff
+122 -253
View File
@@ -17,287 +17,156 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2020
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes
require_once "root.php";
require_once "resources/require.php";
require_once "resources/paging.php";
require_once "resources/check_auth.php";
//check permissions
if (permission_exists('call_flow_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (permission_exists('call_flow_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//get posted data
if (is_array($_POST['call_flows'])) {
$action = $_POST['action'];
$search = $_POST['search'];
$call_flows = $_POST['call_flows'];
$toggle_field = $_POST['toggle_field'];
}
require_once "resources/header.php";
$document['title'] = $text['title-call_flows'];
//process the http post data by action
if ($action != '' && is_array($call_flows) && @sizeof($call_flows) != 0) {
switch ($action) {
case 'copy':
if (permission_exists('call_flow_add')) {
$obj = new call_flows;
$obj->copy($call_flows);
}
break;
case 'toggle':
if (permission_exists('call_flow_edit')) {
$obj = new call_flows;
$obj->toggle_field = $toggle_field;
$obj->toggle($call_flows);
}
break;
case 'delete':
if (permission_exists('call_flow_delete')) {
$obj = new call_flows;
$obj->delete($call_flows);
}
break;
}
header('Location: call_flows.php'.($search != '' ? '?search='.urlencode($search) : null));
exit;
}
require_once "resources/paging.php";
//get variables used to control the order
$order_by = $_GET["order_by"];
$order = $_GET["order"];
//add the search term
$search = strtolower($_GET["search"]);
if (strlen($search) > 0) {
$sql_search = "and (";
$sql_search .= "lower(call_flow_name) like :search ";
$sql_search .= "or lower(call_flow_extension) like :search ";
$sql_search .= "or lower(call_flow_feature_code) like :search ";
$sql_search .= "or lower(call_flow_context) like :search ";
$sql_search .= "or lower(call_flow_pin_number) like :search ";
$sql_search .= "or lower(call_flow_label) like :search ";
$sql_search .= "or lower(call_flow_alternate_label) like :search ";
$sql_search .= "or lower(call_flow_description) like :search ";
$sql_search .= ") ";
$parameters['search'] = '%'.$search.'%';
}
//prepare to page the results
$sql = "select count(*) from v_call_flows ";
$sql .= "where true ";
if ($_GET['show'] != "all" || !permission_exists('call_flow_all')) {
$sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
}
$sql .= $sql_search;
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
//prepare to page the results
$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50;
$param = "&search=".urlencode($search);
if ($_GET['show'] == "all" && permission_exists('call_flow_all')) {
$param .= "&show=all";
}
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page);
list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true);
$offset = $rows_per_page * $page;
//get the list
$sql = str_replace('count(*)', '*', $sql);
$sql .= order_by($order_by, $order, 'call_flow_name', 'asc');
$sql .= limit_offset($rows_per_page, $offset);
$database = new database;
$call_flows = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//include header
$document['title'] = $text['title-call_flows'];
require_once "resources/header.php";
//javascript for toggle select box
echo "<script language='javascript' type='text/javascript'>\n";
echo " function toggle_select() {\n";
echo " $('#call_flow_feature').fadeToggle(400, function() {\n";
echo " document.getElementById('call_flow_feature').selectedIndex = 0;\n";
echo " document.getElementById('call_flow_feature').focus();\n";
echo " });\n";
echo " }\n";
echo "</script>\n";
//show the content
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-call_flows']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
echo "<table width='100%' cellpadding='0' cellspacing='0 border='0'>\n";
echo " <tr>\n";
echo " <td width='50%' align='left' nowrap='nowrap'><b>".$text['header-call_flows']."</b></td>\n";
echo " <td width='50%' align='right'>&nbsp;</td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td align='left' colspan='2'>\n";
echo " ".$text['description-call_flows']."<br /><br />\n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
//prepare to page the results
$sql = "select count(*) as num_rows from v_call_flows ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] > 0) {
$num_rows = $row['num_rows'];
}
else {
$num_rows = '0';
}
}
//prepare to page the results
$rows_per_page = 10;
$param = "";
$page = $_GET['page'];
if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; }
list($paging_controls, $rows_per_page, $var3) = paging($num_rows, $param, $rows_per_page);
$offset = $rows_per_page * $page;
//get the list
$sql = "select * from v_call_flows ";
$sql .= "where domain_uuid = '$domain_uuid' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$sql .= "limit $rows_per_page offset $offset ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll();
$result_count = count($result);
unset ($prep_statement, $sql);
$c = 0;
$row_style["0"] = "row_style0";
$row_style["1"] = "row_style1";
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo th_order_by('call_flow_status', $text['label-status'], $order_by, $order);
//echo th_order_by('call_flow_name', $text['label-name'], $order_by, $order);
echo th_order_by('call_flow_extension', $text['label-extension'], $order_by, $order);
echo th_order_by('call_flow_feature_code', $text['label-feature_code'], $order_by, $order);
//echo "<th>".$text['label-destination']."</th>\n";
//echo "<th>".$text['label-alternate_destination']."</th>\n";
echo th_order_by('call_flow_description', $text['label-description'], $order_by, $order);
echo "<td class='list_control_icons'>";
if (permission_exists('call_flow_add')) {
echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','link'=>'call_flow_edit.php']);
}
if (permission_exists('call_flow_add') && $call_flows) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
}
if (permission_exists('call_flow_edit') && $call_flows) {
echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','style'=>'display: none;','onclick'=>"toggle_select(); this.blur();"]);
echo "<select class='formfld' style='display: none; width: auto;' id='call_flow_feature' onchange=\"if (this.selectedIndex != 0) { modal_open('modal-toggle','btn_toggle'); }\">";
echo " <option value='' selected='selected'>".$text['label-select']."</option>";
echo " <option value='call_flow_status'>".$text['label-call_flow_status']."</option>";
echo " <option value='call_flow_enabled'>".$text['label-enabled']."</option>";
echo " </select>";
}
if (permission_exists('call_flow_delete') && $call_flows) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo "<form id='form_search' class='inline' method='get'>\n";
if (permission_exists('call_flow_all')) {
if ($_GET['show'] == 'all') {
echo " <input type='hidden' name='show' value='all'>";
}
else {
echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?type=&show=all'.($search != '' ? "&search=".urlencode($search) : null)]);
}
}
echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search']);
//echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'call_flows.php','style'=>($search == '' ? 'display: none;' : null)]);
if ($paging_controls_mini != '') {
echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>";
}
echo " </form>\n";
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if (permission_exists('call_flow_add') && $call_flows) {
echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]);
}
if (permission_exists('call_flow_edit') && $call_flows) {
echo modal::create(['id'=>'modal-toggle','type'=>'toggle','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_toggle','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); document.getElementById('toggle_field').value = document.getElementById('call_flow_feature').options[document.getElementById('call_flow_feature').selectedIndex].value; list_action_set('toggle'); list_form_submit('form_list');"])]);
}
if (permission_exists('call_flow_delete') && $call_flows) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
echo $text['description-call_flows']."\n";
echo "<br /><br />\n";
echo "<form id='form_list' method='post'>\n";
echo "<input type='hidden' id='action' name='action' value=''>\n";
echo "<input type='hidden' id='toggle_field' name='toggle_field' value=''>\n";
echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
if (permission_exists('call_flow_add') || permission_exists('call_flow_edit') || permission_exists('call_flow_delete')) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".($call_flows ?: "style='visibility: hidden;'").">\n";
echo " </th>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_flow_all')) {
echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, $param, "class='shrink'");
}
echo th_order_by('call_flow_name', $text['label-call_flow_name'], $order_by, $order);
echo th_order_by('call_flow_extension', $text['label-call_flow_extension'], $order_by, $order);
echo th_order_by('call_flow_feature_code', $text['label-call_flow_feature_code'], $order_by, $order);
echo th_order_by('call_flow_status', $text['label-call_flow_status'], $order_by, $order);
if (permission_exists('call_flow_context')) {
echo th_order_by('call_flow_context', $text['label-call_flow_context'], $order_by, $order);
}
echo th_order_by('call_flow_enabled', $text['label-enabled'], $order_by, $order, null, "class='center'");
echo th_order_by('call_flow_description', $text['label-call_flow_description'], $order_by, $order, null, "class='hide-sm-dn'");
if (permission_exists('call_flow_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>&nbsp;</td>\n";
echo "<a href='call_flow_edit.php' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
echo "</td>\n";
echo "</tr>\n";
if (is_array($call_flows)) {
$x = 0;
foreach ($call_flows as $row) {
if (permission_exists('call_flow_edit')) {
$list_row_url = "call_flow_edit.php?id=".urlencode($row['call_flow_uuid']);
}
echo "<tr class='list-row' href='".$list_row_url."'>\n";
if (permission_exists('call_flow_add') || permission_exists('call_flow_edit') || permission_exists('call_flow_delete')) {
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='call_flows[$x][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
echo " <input type='hidden' name='call_flows[$x][uuid]' value='".escape($row['call_flow_uuid'])."' />\n";
echo " </td>\n";
}
if ($_GET['show'] == "all" && permission_exists('call_flow_all')) {
if (strlen($_SESSION['domains'][$row['domain_uuid']]['domain_name']) > 0) {
$domain = $_SESSION['domains'][$row['domain_uuid']]['domain_name'];
}
else {
$domain = $text['label-global'];
}
echo " <td>".escape($domain)."</td>\n";
}
echo " <td><a href='".$list_row_url."'>".escape($row['call_flow_name'])."</a>&nbsp;</td>\n";
echo " <td>".escape($row['call_flow_extension'])."&nbsp;</td>\n";
echo " <td>".escape($row['call_flow_feature_code'])."&nbsp;</td>\n";
$status_label = $row['call_flow_status'] != 'false' ? $row['call_flow_label'] : $row['call_flow_alternate_label'];
if (permission_exists('call_flow_edit')) {
echo " <td class='no-link'>";
echo button::create(['type'=>'submit','class'=>'link','label'=>escape($status_label),'title'=>$text['button-toggle'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('toggle'); document.getElementById('toggle_field').value = 'call_flow_status'; list_form_submit('form_list')"]);
if ($result_count > 0) {
foreach($result as $row) {
$tr_link = (permission_exists('call_flow_edit')) ? "href='call_flow_edit.php?id=".$row['call_flow_uuid']."'" : null;
echo "<tr ".$tr_link.">\n";
echo " <td valign='top' class='".$row_style[$c]."'>";
if ($row['call_flow_status'] != "false") {
echo $row['call_flow_label'];
}
else {
echo " <td>";
echo escape($status_label);
echo $row['call_flow_anti_label'];
}
echo "&nbsp;\n";
echo " </td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row['call_flow_name']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['call_flow_extension']."&nbsp;</td>\n";
echo " <td valign='top' class='".$row_style[$c]."'>".$row['call_flow_feature_code']."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row['call_flow_app']." ".$row['call_flow_data']."&nbsp;</td>\n";
//echo " <td valign='top' class='".$row_style[$c]."'>".$row['call_flow_anti_app']." ".$row['call_flow_anti_data']."&nbsp;</td>\n";
echo " <td valign='top' class='row_stylebg' width='30%'>".$row['call_flow_description']."&nbsp;</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_flow_edit')) {
echo "<a href='call_flow_edit.php?id=".$row['call_flow_uuid']."' alt='".$text['button-edit']."'>$v_link_label_edit</a>";
}
if (permission_exists('call_flow_delete')) {
echo "<a href='call_flow_delete.php?id=".$row['call_flow_uuid']."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete']."')\">$v_link_label_delete</a>";
}
echo " </td>\n";
if (permission_exists('call_flow_context')) {
echo " <td>".escape($row['call_flow_context'])."&nbsp;</td>\n";
}
if (permission_exists('call_flow_edit')) {
echo " <td class='no-link center'>";
echo button::create(['type'=>'submit','class'=>'link','label'=>$text['label-'.($row['call_flow_enabled'] == "true" ? 'true' : 'false')],'title'=>$text['button-toggle'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('toggle'); document.getElementById('toggle_field').value = 'call_flow_enabled'; list_form_submit('form_list')"]);
}
else {
echo " <td class='center'>";
echo escape($row['call_flow_enabled']);
}
echo " <td class='description overflow hide-sm-dn'>".escape($row['call_flow_description'])."&nbsp;</td>\n";
if (permission_exists('call_flow_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') {
echo " <td class='action-button'>";
echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
echo " </td>\n";
}
echo "</tr>\n";
$x++;
}
unset($call_flows);
if ($c==0) { $c=1; } else { $c=0; }
} //end foreach
unset($sql, $result, $row_count);
} //end if results
echo "<tr>\n";
echo "<td colspan='10' align='left'>\n";
echo " <table width='100%' cellpadding='0' cellspacing='0'>\n";
echo " <tr>\n";
echo " <td width='33.3%' nowrap>&nbsp;</td>\n";
echo " <td width='33.3%' align='center' nowrap>$paging_controls</td>\n";
echo " <td class='list_control_icons'>";
if (permission_exists('call_flow_add')) {
echo "<a href='call_flow_edit.php' alt='".$text['button-add']."'>$v_link_label_add</a>";
}
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
echo "<div align='center'>".$paging_controls."</div>\n";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
echo "</table>";
echo "<br /><br />";
//include the footer
require_once "resources/footer.php";
?>
?>

Some files were not shown because too many files have changed in this diff Show More