From ba77cea0fd72da5e00ea56e97b4871819ca7450a Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Wed, 27 Nov 2019 08:41:56 -0600 Subject: [PATCH 01/92] Remove build.xml form component build sequence. --- build.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/build.xml b/build.xml index 78a96bdcdd..5a2bd4ffe7 100644 --- a/build.xml +++ b/build.xml @@ -106,6 +106,7 @@ + From c3a2fa133f8031bf8f3a246471d5a95a502f90bd Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Wed, 27 Nov 2019 08:47:54 -0600 Subject: [PATCH 02/92] Naming of arrays not set right for rendering. --- biblestudy.script.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/biblestudy.script.php b/biblestudy.script.php index 599c1b2fbe..cddd946d88 100755 --- a/biblestudy.script.php +++ b/biblestudy.script.php @@ -832,7 +832,7 @@ private function installSubextensions($parent) $count = $db->loadResult(); $installer = new JInstaller; $result = $installer->install($path); - $status->modulesarray[] = array( + $status->modules[] = array( 'name' => 'mod_' . $module, 'client' => $folder, 'result' => $result @@ -950,7 +950,7 @@ private function installSubextensions($parent) $count = $db->loadResult(); $installer = new JInstaller; $result = $installer->install($path); - $status->pluginsarray[] = array( + $status->plugins[] = array( 'name' => 'plg_' . $plugin, 'group' => $folder, 'result' => $result @@ -1013,7 +1013,7 @@ private function uninstallSubextensions($parent) { $installer = new JInstaller; $result = $installer->uninstall('module', $id, 1); - $this->status->modulesarray[] = array( + $this->status->modules[] = array( 'name' => 'mod_' . $module, 'client' => $folder, 'result' => $result @@ -1047,7 +1047,7 @@ private function uninstallSubextensions($parent) { $installer = new JInstaller; $result = $installer->uninstall('plugin', $id, 1); - $this->status->pluginsarray[] = array( + $this->status->plugins[] = array( 'name' => 'plg_' . $plugin, 'group' => $folder, 'result' => $result From 25e83e0be2702f1ceed8dc3392d348d2d8e2fee8 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Wed, 27 Nov 2019 09:20:38 -0600 Subject: [PATCH 03/92] Add Languages en-GB to install of xml. --- biblestudy.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/biblestudy.xml b/biblestudy.xml index 6c8fdd6fdc..8501a416d2 100644 --- a/biblestudy.xml +++ b/biblestudy.xml @@ -20,6 +20,10 @@ install/sql/install.sql + + + en-GB/en-GB.com_biblestudy.ini + https://www.christianwebministries.org/index.php?option=com_ars&view=update&task=stream&format=xml&id=1&dummy=extension.xml From 6c5a16312524f843001ed4bc26c4df09fc9157c4 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Wed, 27 Nov 2019 09:38:14 -0600 Subject: [PATCH 04/92] Add Dev Setup Symbolic Link creator for development site on local computer. --- build.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/build.xml b/build.xml index 5a2bd4ffe7..c937b4fa41 100644 --- a/build.xml +++ b/build.xml @@ -203,6 +203,27 @@ + + + + + + + + + + + + + + + + + + + + + From 044232560b2906af96aa9860930d5b93d897c884 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Wed, 27 Nov 2019 09:40:21 -0600 Subject: [PATCH 05/92] Add missing dev.init to setup_Symbolic_Links --- build.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/build.xml b/build.xml index c937b4fa41..dff8f1de07 100644 --- a/build.xml +++ b/build.xml @@ -222,6 +222,7 @@ + From 2f13fed72a9e32e3d823e34f1e86dd984146c665 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Sat, 7 Dec 2019 12:20:05 -0600 Subject: [PATCH 06/92] Add missing dev.init to setup_Symbolic_Links --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index dff8f1de07..0589fbd475 100644 --- a/build.xml +++ b/build.xml @@ -210,7 +210,7 @@ - + From 56d29e7e5fe465866d7f0a376c82a4c07b441a08 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Fri, 20 Dec 2019 18:32:45 -0600 Subject: [PATCH 07/92] Upgrade Fontawesome to 5.12.0 and fix JS. --- admin/helpers/html/biblestudy.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/helpers/html/biblestudy.php b/admin/helpers/html/biblestudy.php index 3859b05412..a9e1f56dc0 100644 --- a/admin/helpers/html/biblestudy.php +++ b/admin/helpers/html/biblestudy.php @@ -105,13 +105,13 @@ public static function loadCss($params, $url = null, $extra = null) if ($extra === 'font-awesome') { - JHtml::script('https://use.fontawesome.com/releases/v5.3.1/js/all.js', + JHtml::script('https://use.fontawesome.com/releases/v5.12.0/js/all.js', [], - ['integrity' => 'sha384-kW+oWsYx3YpxvjtZjFXqazFpA7UP/MbiY4jvs+RWZo2+N94PFZ36T6TFkc9O3qoB', 'crossorigin' => 'anonymous', 'defer' => 'defer'] + ['defer' => 'defer'] ); - JHtml::script('https://use.fontawesome.com/releases/v5.4.2/js/v4-shims.js', + JHtml::script('https://use.fontawesome.com/releases/v5.12.0/js/v4-shims.js', [], - ['integrity' => 'sha384-kW+oWsYx3YpxvjtZjFXqazFpA7UP/MbiY4jvs+RWZo2+N94PFZ36T6TFkc9O3qoB', 'crossorigin' => 'anonymous', 'defer' => 'defer'] + ['defer' => 'defer'] ); } } From 8cf44816013dd325b24b83757f3578d5ee2780c0 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Fri, 20 Dec 2019 18:37:27 -0600 Subject: [PATCH 08/92] Remove old todo's --- admin/addons/addon.php | 1 - admin/addons/servers/legacy/includes/js/moxie.js | 11 +---------- admin/install/updates/7.1.0.php | 1 - admin/install/updates/9.1.4.php | 2 -- 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/admin/addons/addon.php b/admin/addons/addon.php index dd26118fe2..aa28e3dcf6 100644 --- a/admin/addons/addon.php +++ b/admin/addons/addon.php @@ -91,7 +91,6 @@ public function getType() if (!preg_match('/JBSMAddon(.*)/i', get_class($this), $r)) { - // @TODO Changed to a localized exception throw new Exception(JText::sprintf('JBS_CMN_CANT_ADDON_CLASS_NAME', $this->type), 500); } diff --git a/admin/addons/servers/legacy/includes/js/moxie.js b/admin/addons/servers/legacy/includes/js/moxie.js index 97dcd6e574..34cb2bd3e6 100755 --- a/admin/addons/servers/legacy/includes/js/moxie.js +++ b/admin/addons/servers/legacy/includes/js/moxie.js @@ -1162,7 +1162,6 @@ define("moxie/core/utils/Env", [ Env.log = function() { function logObj(data) { - // TODO: this should recursively print out the object in a pretty way console.appendChild(document.createTextNode(data + "\n")); } @@ -2970,7 +2969,7 @@ define('moxie/file/FileInput', [ */ 'change', - 'cancel', // TODO: might be useful + 'cancel', /** Dispatched when mouse cursor enters file-picker area. Can be used to style element @@ -5263,14 +5262,6 @@ define("moxie/xhr/XMLHttpRequest", [ } } - /* - function _toASCII(str, AllowUnassigned, UseSTD3ASCIIRules) { - // TODO: http://tools.ietf.org/html/rfc3490#section-4.1 - return str.toLowerCase(); - } - */ - - function _doXHR(data) { var self = this; diff --git a/admin/install/updates/7.1.0.php b/admin/install/updates/7.1.0.php index c7940dee61..796408bb96 100644 --- a/admin/install/updates/7.1.0.php +++ b/admin/install/updates/7.1.0.php @@ -15,7 +15,6 @@ * * @package Proclaim.Admin * @since 7.1.0 - * @todo need to update JError as it has been deprecated, but is still used in Joomla 3.3 */ class Migration710 { diff --git a/admin/install/updates/9.1.4.php b/admin/install/updates/9.1.4.php index c48c627afd..393f281bd4 100644 --- a/admin/install/updates/9.1.4.php +++ b/admin/install/updates/9.1.4.php @@ -108,8 +108,6 @@ protected function deleteUnexistingFiles() * @since 9.1.3 * * @return void - * - * @todo Need to do this for Admin and Media; */ protected function updateFA() { From 94dd336debee5611027e90190bf3be76793203d7 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Fri, 20 Dec 2019 18:44:02 -0600 Subject: [PATCH 09/92] Missing JBS_ADDON_LEGACY_PARAMETERS --- .../servers/legacy/language/en-GB/en-GB.jbs_addon_legacy.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/admin/addons/servers/legacy/language/en-GB/en-GB.jbs_addon_legacy.ini b/admin/addons/servers/legacy/language/en-GB/en-GB.jbs_addon_legacy.ini index 3bfc69d128..dea34befaf 100644 --- a/admin/addons/servers/legacy/language/en-GB/en-GB.jbs_addon_legacy.ini +++ b/admin/addons/servers/legacy/language/en-GB/en-GB.jbs_addon_legacy.ini @@ -23,3 +23,4 @@ JBS_ADDON_LEGACY_BUTTON_TEXT="Button Text" JBS_ADDON_LEGACY_BUTTON_TEXT_DESC="If you choose only a button, enter text for that button" JBS_ADDON_LEGACY_DOWNLOAD_USE_BUTTON="Default Download Icon" JBS_ADDON_LEGACY_DOWNLOAD_USE_BUTTON_DESC="Choose whether to use a button/icon or image for the default download icon. Button/icon overrides image choice" +JBS_ADDON_LEGACY_PARAMETERS="Default Actions" \ No newline at end of file From 6ae6a5e3777161766e6ae91e7e084d971a180be8 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Sat, 7 Mar 2020 17:59:46 -0600 Subject: [PATCH 10/92] #808 Fixes Controller designation. --- admin/views/messages/tmpl/default.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/views/messages/tmpl/default.php b/admin/views/messages/tmpl/default.php index 14e5c3a1a3..43f7efa0a2 100644 --- a/admin/views/messages/tmpl/default.php +++ b/admin/views/messages/tmpl/default.php @@ -135,8 +135,8 @@ published === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'positions'); - JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'positions'); + JHtml::_('actionsdropdown.' . ((int) $item->published === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'messages'); + JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'messages'); echo JHtml::_('actionsdropdown.render', $this->escape($item->studytitle)); } ?> From 4bac7c76205d19f15d1ac0d9281044384adce073 Mon Sep 17 00:00:00 2001 From: Brent Cordis Date: Sat, 7 Mar 2020 18:02:54 -0600 Subject: [PATCH 11/92] Adding missing files to Repository --- .gitignore | 1 + build/com_proclaim-9.2.1/LICENSE.txt | 674 + build/com_proclaim-9.2.1/README.md | 76 + build/com_proclaim-9.2.1/admin/access.xml | 187 + .../com_proclaim-9.2.1/admin/addons/addon.php | 202 + .../addons/servers/legacy/fields/docman.php | 74 + .../addons/servers/legacy/fields/plupload.php | 89 + .../servers/legacy/fields/virtuemart.php | 82 + .../servers/legacy/includes/js/Moxie.swf | Bin 0 -> 29910 bytes .../servers/legacy/includes/js/Moxie.xap | Bin 0 -> 63118 bytes .../servers/legacy/includes/js/i18n/ar.js | 2 + .../servers/legacy/includes/js/i18n/az.js | 2 + .../servers/legacy/includes/js/i18n/be_BY.js | 2 + .../servers/legacy/includes/js/i18n/bg.js | 2 + .../servers/legacy/includes/js/i18n/bs.js | 2 + .../servers/legacy/includes/js/i18n/ca.js | 2 + .../servers/legacy/includes/js/i18n/cs.js | 2 + .../servers/legacy/includes/js/i18n/cy.js | 2 + .../servers/legacy/includes/js/i18n/da.js | 2 + .../servers/legacy/includes/js/i18n/de.js | 2 + .../servers/legacy/includes/js/i18n/el.js | 2 + .../servers/legacy/includes/js/i18n/en.js | 2 + .../servers/legacy/includes/js/i18n/es.js | 2 + .../servers/legacy/includes/js/i18n/et.js | 2 + .../servers/legacy/includes/js/i18n/fa.js | 2 + .../servers/legacy/includes/js/i18n/fi.js | 2 + .../servers/legacy/includes/js/i18n/fr.js | 2 + .../servers/legacy/includes/js/i18n/he.js | 2 + .../servers/legacy/includes/js/i18n/hr.js | 2 + .../servers/legacy/includes/js/i18n/hu.js | 2 + .../servers/legacy/includes/js/i18n/hy.js | 2 + .../servers/legacy/includes/js/i18n/id.js | 2 + .../servers/legacy/includes/js/i18n/it.js | 2 + .../servers/legacy/includes/js/i18n/ja.js | 2 + .../servers/legacy/includes/js/i18n/ka.js | 2 + .../servers/legacy/includes/js/i18n/kk.js | 2 + .../servers/legacy/includes/js/i18n/km.js | 2 + .../servers/legacy/includes/js/i18n/ko.js | 2 + .../servers/legacy/includes/js/i18n/ku_IQ.js | 2 + .../servers/legacy/includes/js/i18n/lt.js | 2 + .../servers/legacy/includes/js/i18n/lv.js | 2 + .../servers/legacy/includes/js/i18n/ms.js | 2 + .../servers/legacy/includes/js/i18n/nl.js | 2 + .../servers/legacy/includes/js/i18n/pl.js | 2 + .../servers/legacy/includes/js/i18n/pt_BR.js | 2 + .../servers/legacy/includes/js/i18n/ro.js | 2 + .../servers/legacy/includes/js/i18n/ru.js | 2 + .../servers/legacy/includes/js/i18n/sk.js | 2 + .../servers/legacy/includes/js/i18n/sq.js | 2 + .../servers/legacy/includes/js/i18n/sr.js | 2 + .../servers/legacy/includes/js/i18n/sv.js | 2 + .../servers/legacy/includes/js/i18n/th_TH.js | 2 + .../servers/legacy/includes/js/i18n/tr.js | 2 + .../servers/legacy/includes/js/i18n/uk_UA.js | 2 + .../servers/legacy/includes/js/i18n/vi.js | 2 + .../servers/legacy/includes/js/i18n/zh_CN.js | 2 + .../servers/legacy/includes/js/i18n/zh_TW.js | 2 + .../css/jquery.plupload.queue.css | 185 + .../jquery.plupload.queue/img/backgrounds.gif | Bin 0 -> 2977 bytes .../img/buttons-disabled.png | Bin 0 -> 1292 bytes .../js/jquery.plupload.queue/img/buttons.png | Bin 0 -> 1439 bytes .../js/jquery.plupload.queue/img/delete.gif | Bin 0 -> 180 bytes .../js/jquery.plupload.queue/img/done.gif | Bin 0 -> 1024 bytes .../js/jquery.plupload.queue/img/error.gif | Bin 0 -> 994 bytes .../js/jquery.plupload.queue/img/throbber.gif | Bin 0 -> 1922 bytes .../js/jquery.plupload.queue/img/transp50.png | Bin 0 -> 399 bytes .../jquery.plupload.queue.js | 428 + .../jquery.plupload.queue.min.js | 1 + .../css/jquery.ui.plupload.css | 375 + .../js/jquery.ui.plupload/img/loading.gif | Bin 0 -> 4023 bytes .../js/jquery.ui.plupload/img/plupload.png | Bin 0 -> 6597 bytes .../jquery.ui.plupload/jquery.ui.plupload.js | 1343 ++ .../jquery.ui.plupload.min.js | 1 + .../servers/legacy/includes/js/legacy.js | 119 + .../servers/legacy/includes/js/moxie.js | 11156 ++++++++++++++++ .../servers/legacy/includes/js/moxie.min.js | 16 + .../legacy/includes/js/plupload.dev.js | 2347 ++++ .../legacy/includes/js/plupload.full.min.js | 29 + .../legacy/includes/js/plupload.min.js | 13 + .../language/en-GB/en-GB.jbs_addon_legacy.ini | 25 + .../admin/addons/servers/legacy/legacy.php | 133 + .../admin/addons/servers/legacy/legacy.png | Bin 0 -> 1109 bytes .../admin/addons/servers/legacy/legacy.xml | 98 + .../admin/addons/servers/legacy/media.xml | 122 + .../addons/servers/local/fields/jbsmmedia.php | 270 + .../addons/servers/local/fields/plupload.php | 92 + .../language/en-GB/en-GB.jbs_addon_local.ini | 28 + .../addons/servers/local/language/local.php | 137 + .../admin/addons/servers/local/local.php | 137 + .../admin/addons/servers/local/local.png | Bin 0 -> 2174 bytes .../admin/addons/servers/local/local.xml | 89 + .../admin/addons/servers/local/media.xml | 107 + .../admin/addons/servers/server.php | 144 + .../en-GB/en-GB.jbs_addon_youtube.ini | 31 + .../admin/addons/servers/youtube/media.xml | 87 + .../admin/addons/servers/youtube/youtube.php | 137 + .../admin/addons/servers/youtube/youtube.png | Bin 0 -> 1604 bytes .../admin/addons/servers/youtube/youtube.xml | 65 + build/com_proclaim-9.2.1/admin/api.php | 116 + build/com_proclaim-9.2.1/admin/biblestudy.php | 68 + build/com_proclaim-9.2.1/admin/config.xml | 88 + build/com_proclaim-9.2.1/admin/controller.php | 95 + .../admin/controllers/admin.php | 889 ++ .../admin/controllers/assets.php | 179 + .../admin/controllers/comment.php | 98 + .../admin/controllers/comments.php | 38 + .../admin/controllers/cpanel.php | 22 + .../admin/controllers/install.php | 147 + .../admin/controllers/location.php | 58 + .../admin/controllers/locations.php | 71 + .../admin/controllers/mediafile.php | 301 + .../admin/controllers/mediafiles.php | 107 + .../admin/controllers/message.php | 234 + .../admin/controllers/messages.php | 71 + .../admin/controllers/messagetype.php | 40 + .../admin/controllers/messagetypes.php | 37 + .../admin/controllers/podcast.php | 22 + .../admin/controllers/podcasts.php | 37 + .../admin/controllers/serie.php | 89 + .../admin/controllers/series.php | 71 + .../admin/controllers/server.php | 91 + .../admin/controllers/servers.php | 38 + .../admin/controllers/teacher.php | 58 + .../admin/controllers/teachers.php | 72 + .../admin/controllers/template.php | 111 + .../admin/controllers/templatecode.php | 47 + .../admin/controllers/templatecodes.php | 38 + .../admin/controllers/templates.php | 473 + .../admin/controllers/topic.php | 22 + .../admin/controllers/topics.php | 38 + .../admin/controllers/upload.php | 273 + .../admin/help/en-GB/biblestudy.html | 8 + .../admin/help/en-GB/templatecodehelp.html | 508 + .../admin/helpers/alias.php | 134 + .../admin/helpers/biblestudyhelper.php | 797 ++ .../admin/helpers/dbhelper.php | 619 + .../admin/helpers/defaulttemplatecode.php | 15 + .../admin/helpers/helper.php | 366 + .../admin/helpers/html/biblestudy.php | 480 + .../admin/helpers/html/bsmedia.php | 113 + .../admin/helpers/html/fancybox.php | 76 + .../admin/helpers/html/icon.php | 297 + .../admin/helpers/html/jwplayer.php | 277 + .../admin/helpers/image.php | 82 + .../admin/helpers/imagelib.php | 212 + .../admin/helpers/params.php | 194 + .../admin/helpers/searchfilters.php | 44 + .../admin/helpers/tagDefinitions.helper.php | 20 + .../com_proclaim-9.2.1/admin/helpers/tags.php | 46 + .../admin/helpers/template.php | 270 + .../admin/helpers/thumbnail.php | 110 + .../admin/helpers/translated.php | 153 + .../admin/helpers/uploadscript.php | 118 + .../admin/install/sql/install-defaults.sql | 310 + .../admin/install/sql/install.sql | 786 ++ .../admin/install/sql/uninstall-dbtables.sql | 27 + .../admin/install/sql/uninstall.sql | 3 + .../admin/install/sql/updates/mysql/6.1.1.sql | 8 + .../admin/install/sql/updates/mysql/6.1.2.sql | 9 + .../admin/install/sql/updates/mysql/6.1.3.sql | 9 + .../admin/install/sql/updates/mysql/6.1.4.sql | 9 + .../admin/install/sql/updates/mysql/6.2.2.sql | 9 + .../admin/install/sql/updates/mysql/6.2.3.sql | 8 + .../admin/install/sql/updates/mysql/7.0.0.sql | 9 + .../install/sql/updates/mysql/7.0.1.1.sql | 10 + .../admin/install/sql/updates/mysql/7.0.1.sql | 8 + .../admin/install/sql/updates/mysql/7.0.2.sql | 301 + .../admin/install/sql/updates/mysql/7.0.3.sql | 8 + .../admin/install/sql/updates/mysql/7.0.4.sql | 8 + .../admin/install/sql/updates/mysql/7.1.0.sql | 138 + .../admin/install/sql/updates/mysql/7.1.1.sql | 8 + .../admin/install/sql/updates/mysql/7.1.2.sql | 8 + .../admin/install/sql/updates/mysql/7.1.3.sql | 10 + .../admin/install/sql/updates/mysql/8.0.0.sql | 38 + .../admin/install/sql/updates/mysql/8.0.8.sql | 8 + .../admin/install/sql/updates/mysql/9.0.0.sql | 80 + .../admin/install/sql/updates/mysql/9.0.1.sql | 8 + .../install/sql/updates/mysql/9.0.10.sql | 8 + .../install/sql/updates/mysql/9.0.11.sql | 8 + .../install/sql/updates/mysql/9.0.12.sql | 11 + .../install/sql/updates/mysql/9.0.13.sql | 8 + .../install/sql/updates/mysql/9.0.14.sql | 8 + .../install/sql/updates/mysql/9.0.15.sql | 8 + .../install/sql/updates/mysql/9.0.17.sql | 8 + .../admin/install/sql/updates/mysql/9.0.2.sql | 8 + .../admin/install/sql/updates/mysql/9.0.8.sql | 8 + .../admin/install/sql/updates/mysql/9.0.9.sql | 8 + .../admin/install/sql/updates/mysql/9.1.0.sql | 8 + .../admin/install/sql/updates/mysql/9.1.1.sql | 8 + .../admin/install/sql/updates/mysql/9.1.2.sql | 8 + .../admin/install/sql/updates/mysql/9.1.3.sql | 8 + .../admin/install/sql/updates/mysql/9.1.4.sql | 8 + .../admin/install/sql/updates/mysql/9.1.5.sql | 8 + .../admin/install/updates/6.1.1.php | 81 + .../admin/install/updates/6.1.2.php | 46 + .../admin/install/updates/6.1.3.php | 287 + .../admin/install/updates/6.1.4.php | 136 + .../admin/install/updates/6.2.2.php | 76 + .../admin/install/updates/6.2.3.php | 95 + .../admin/install/updates/7.0.0.php | 850 ++ .../admin/install/updates/7.0.1.php | 115 + .../admin/install/updates/7.0.2.php | 76 + .../admin/install/updates/7.1.0.php | 97 + .../admin/install/updates/8.0.0.php | 259 + .../admin/install/updates/9.0.0.php | 1380 ++ .../admin/install/updates/9.0.1.php | 146 + .../admin/install/updates/9.1.4.php | 120 + .../admin/install/updates/9.1.5.php | 65 + .../language/cs-CZ/cs-CZ.com_biblestudy.ini | 242 + .../cs-CZ/cs-CZ.com_biblestudy.sys.ini | 31 + .../language/de-DE/de-DE.com_biblestudy.ini | 1543 +++ .../de-DE/de-DE.com_biblestudy.sys.ini | 78 + .../language/en-GB/en-GB.com_biblestudy.ini | 1838 +++ .../en-GB/en-GB.com_biblestudy.sys.ini | 97 + .../language/es-ES/es-ES.com_biblestudy.ini | 12 + .../es-ES/es-ES.com_biblestudy.sys.ini | 31 + .../language/hu-HU/hu-HU.com_biblestudy.ini | 209 + .../hu-HU/hu-HU.com_biblestudy.sys.ini | 31 + .../language/nl-NL/nl-NL.com_biblestudy.ini | 214 + .../language/no-NO/no-NO.com_biblestudy.ini | 215 + .../no-NO/no-NO.com_biblestudy.sys.ini | 31 + build/com_proclaim-9.2.1/admin/lib/assets.php | 380 + build/com_proclaim-9.2.1/admin/lib/backup.php | 516 + build/com_proclaim-9.2.1/admin/lib/debug.php | 254 + .../admin/lib/piconvert.php | 1087 ++ .../com_proclaim-9.2.1/admin/lib/restore.php | 529 + .../admin/lib/ssconvert.php | 843 ++ build/com_proclaim-9.2.1/admin/lib/stats.php | 729 + .../com_proclaim-9.2.1/admin/lib/version.php | 133 + .../com_proclaim-9.2.1/admin/models/admin.php | 697 + .../admin/models/archive.php | 110 + .../admin/models/assets.php | 520 + .../admin/models/comment.php | 319 + .../admin/models/comments.php | 172 + .../admin/models/cpanel.php | 132 + build/com_proclaim-9.2.1/admin/models/dir.php | 284 + .../admin/models/fields/booklist.php | 47 + .../admin/models/fields/elementoptions.php | 55 + .../admin/models/fields/filesize.php | 71 + .../admin/models/fields/filters.php | 165 + .../admin/models/fields/icontype.php | 107 + .../admin/models/fields/linkoptions.php | 57 + .../admin/models/fields/listoptions.php | 75 + .../admin/models/fields/loadlanguagefile.php | 70 + .../admin/models/fields/locationlist.php | 43 + .../admin/models/fields/locations.php | 64 + .../admin/models/fields/locationslist.php | 60 + .../admin/models/fields/mediafile.php | 77 + .../admin/models/fields/mediafileimages.php | 213 + .../admin/models/fields/messagetypelist.php | 64 + .../admin/models/fields/mimetype.php | 55 + .../models/fields/modal/seriesdetail.php | 118 + .../admin/models/fields/modal/study.php | 122 + .../models/fields/modal/studydetails.php | 119 + .../models/fields/modal/teacherdisplay.php | 119 + .../admin/models/fields/modal/templates.php | 63 + .../admin/models/fields/modal/upload.php | 81 + .../admin/models/fields/rowoptions.php | 54 + .../admin/models/fields/serieslinkoptions.php | 49 + .../admin/models/fields/serieslist.php | 59 + .../admin/models/fields/seriesoptions.php | 70 + .../admin/models/fields/server.php | 185 + .../admin/models/fields/servertype.php | 59 + .../admin/models/fields/spanoptions.php | 59 + .../models/fields/teacherlinkoptions.php | 49 + .../admin/models/fields/teacherlist.php | 61 + .../admin/models/fields/templatelist.php | 69 + .../admin/models/fields/topics.php | 45 + .../admin/models/fields/topicslist.php | 88 + .../admin/models/fields/upload.php | 85 + .../admin/models/fields/yearlist.php | 43 + .../admin/models/forms/admin.xml | 409 + .../admin/models/forms/archive.xml | 16 + .../admin/models/forms/comment.xml | 48 + .../admin/models/forms/filter_comments.xml | 52 + .../admin/models/forms/filter_locations.xml | 42 + .../admin/models/forms/filter_mediafiles.xml | 61 + .../admin/models/forms/filter_messages.xml | 97 + .../models/forms/filter_messagetypes.xml | 52 + .../admin/models/forms/filter_podcasts.xml | 52 + .../admin/models/forms/filter_series.xml | 52 + .../admin/models/forms/filter_servers.xml | 40 + .../admin/models/forms/filter_teachers.xml | 52 + .../models/forms/filter_templatecodes.xml | 33 + .../admin/models/forms/filter_templates.xml | 33 + .../admin/models/forms/filter_topics.xml | 33 + .../admin/models/forms/location.xml | 43 + .../admin/models/forms/mediafile.xml | 51 + .../admin/models/forms/message.xml | 191 + .../admin/models/forms/messagetype.xml | 44 + .../admin/models/forms/podcast.xml | 112 + .../admin/models/forms/serie.xml | 69 + .../admin/models/forms/server.xml | 39 + .../admin/models/forms/teacher.xml | 95 + .../admin/models/forms/template.xml | 1817 +++ .../admin/models/forms/templatecode.xml | 48 + .../admin/models/forms/topic.xml | 15 + .../admin/models/forms/upload.xml | 11 + .../admin/models/install.php | 1555 +++ .../admin/models/location.php | 133 + .../admin/models/locations.php | 212 + .../admin/models/mediafile.php | 841 ++ .../admin/models/mediafiles.php | 380 + .../admin/models/message.php | 709 + .../admin/models/messages.php | 325 + .../admin/models/messagetype.php | 170 + .../admin/models/messagetypes.php | 207 + .../admin/models/podcast.php | 132 + .../admin/models/podcasts.php | 191 + .../com_proclaim-9.2.1/admin/models/serie.php | 456 + .../admin/models/series.php | 272 + .../admin/models/server.php | 333 + .../admin/models/servers.php | 214 + .../admin/models/teacher.php | 310 + .../admin/models/teachers.php | 188 + .../admin/models/template.php | 185 + .../admin/models/templatecode.php | 196 + .../admin/models/templatecodes.php | 120 + .../admin/models/templates.php | 177 + .../com_proclaim-9.2.1/admin/models/topic.php | 121 + .../admin/models/topics.php | 160 + .../admin/postinstall/template.php | 80 + .../com_proclaim-9.2.1/admin/tables/admin.php | 231 + .../admin/tables/comment.php | 178 + .../admin/tables/location.php | 166 + .../admin/tables/mediafile.php | 312 + .../admin/tables/message.php | 491 + .../admin/tables/messagetype.php | 179 + .../admin/tables/podcast.php | 362 + .../com_proclaim-9.2.1/admin/tables/serie.php | 174 + .../admin/tables/server.php | 200 + .../admin/tables/studytopics.php | 141 + .../admin/tables/teacher.php | 161 + .../admin/tables/template.php | 222 + .../admin/tables/templatecode.php | 286 + .../com_proclaim-9.2.1/admin/tables/topic.php | 271 + .../admin/views/admin/tmpl/edit.php | 634 + .../admin/views/admin/tmpl/edit_jwplayer.php | 53 + .../admin/views/admin/view.html.php | 389 + .../admin/views/archive/tmpl/edit.php | 58 + .../admin/views/archive/view.html.php | 64 + .../admin/views/assets/tmpl/edit.php | 140 + .../admin/views/assets/tmpl/fix.php | 71 + .../admin/views/assets/view.html.php | 194 + .../admin/views/backup/tmpl/edit.php | 103 + .../admin/views/backup/view.html.php | 188 + .../admin/views/comment/tmpl/edit.php | 161 + .../admin/views/comment/view.html.php | 141 + .../admin/views/comments/tmpl/default.php | 182 + .../views/comments/tmpl/default_batch.php | 38 + .../admin/views/comments/view.html.php | 218 + .../admin/views/cpanel/tmpl/default.php | 255 + .../admin/views/cpanel/view.html.php | 121 + .../admin/views/database/tmpl/edit.php | 95 + .../admin/views/database/view.html.php | 312 + .../admin/views/dir/tmpl/default.php | 16 + .../admin/views/dir/tmpl/default_dirs.php | 85 + .../admin/views/dir/tmpl/default_files.php | 69 + .../admin/views/dir/tmpl/default_footer.php | 26 + .../admin/views/dir/tmpl/default_header.php | 59 + .../admin/views/dir/view.html.php | 197 + .../admin/views/install/tmpl/default.php | 92 + .../views/install/tmpl/install_finished.php | 131 + .../admin/views/install/view.html.php | 324 + .../admin/views/location/tmpl/edit.php | 138 + .../admin/views/location/view.html.php | 151 + .../admin/views/locations/tmpl/default.php | 177 + .../locations/tmpl/default_batch_body.php | 22 + .../locations/tmpl/default_batch_footer.php | 20 + .../admin/views/locations/view.html.php | 215 + .../admin/views/mediafile/tmpl/edit.php | 164 + .../mediafile/tmpl/edit_converter_body.php | 28 + .../mediafile/tmpl/edit_converter_footer.php | 19 + .../admin/views/mediafile/view.html.php | 182 + .../admin/views/mediafiles/tmpl/default.php | 219 + .../mediafiles/tmpl/default_batch_body.php | 49 + .../mediafiles/tmpl/default_batch_footer.php | 20 + .../admin/views/mediafiles/view.html.php | 233 + .../admin/views/message/tmpl/edit.php | 399 + .../admin/views/message/view.html.php | 193 + .../admin/views/messages/tmpl/default.php | 218 + .../messages/tmpl/default_batch_body.php | 44 + .../messages/tmpl/default_batch_footer.php | 20 + .../admin/views/messages/tmpl/modal.php | 167 + .../admin/views/messages/view.html.php | 264 + .../admin/views/messagetype/tmpl/edit.php | 111 + .../admin/views/messagetype/view.html.php | 141 + .../admin/views/messagetypes/tmpl/default.php | 161 + .../views/messagetypes/tmpl/default_batch.php | 39 + .../admin/views/messagetypes/tmpl/modal.php | 113 + .../admin/views/messagetypes/view.html.php | 213 + .../admin/views/migrate/tmpl/edit.php | 97 + .../admin/views/migrate/view.html.php | 379 + .../admin/views/podcast/tmpl/edit.php | 295 + .../admin/views/podcast/view.html.php | 148 + .../admin/views/podcasts/tmpl/default.php | 185 + .../admin/views/podcasts/view.html.php | 181 + .../admin/views/serie/tmpl/edit.php | 166 + .../admin/views/serie/view.html.php | 142 + .../admin/views/series/tmpl/default.php | 220 + .../admin/views/series/tmpl/default_batch.php | 43 + .../admin/views/series/tmpl/modal.php | 106 + .../admin/views/series/view.html.php | 215 + .../admin/views/server/tmpl/edit.php | 164 + .../admin/views/server/view.html.php | 161 + .../admin/views/servers/tmpl/default.php | 147 + .../admin/views/servers/tmpl/modal.php | 70 + .../admin/views/servers/tmpl/types.php | 48 + .../admin/views/servers/view.html.php | 188 + .../admin/views/teacher/tmpl/edit.php | 323 + .../admin/views/teacher/view.html.php | 145 + .../admin/views/teachers/tmpl/default.php | 256 + .../views/teachers/tmpl/default_batch.php | 38 + .../admin/views/teachers/tmpl/modal.php | 67 + .../admin/views/teachers/view.html.php | 208 + .../admin/views/template/tmpl/edit.php | 935 ++ .../admin/views/template/view.html.php | 161 + .../admin/views/templatecode/tmpl/edit.php | 131 + .../admin/views/templatecode/view.html.php | 173 + .../views/templatecodes/tmpl/default.php | 178 + .../admin/views/templatecodes/view.html.php | 218 + .../admin/views/templates/tmpl/default.php | 165 + .../views/templates/tmpl/default_export.php | 59 + .../admin/views/templates/view.html.php | 198 + .../admin/views/topic/tmpl/edit.php | 110 + .../admin/views/topic/view.html.php | 148 + .../admin/views/topics/tmpl/default.php | 170 + .../admin/views/topics/view.html.php | 198 + .../admin/views/upload/tmpl/default.php | 23 + .../views/upload/tmpl/default_navigator.php | 20 + .../views/upload/tmpl/default_uploader.php | 85 + .../admin/views/upload/view.html.php | 108 + .../com_proclaim-9.2.1/biblestudy.script.php | 1061 ++ build/com_proclaim-9.2.1/biblestudy.xml | 91 + build/com_proclaim-9.2.1/build.xml | 264 + build/com_proclaim-9.2.1/copyright.txt | 26 + .../com_proclaim-9.2.1/media/backup/.htaccess | 9 + .../com_proclaim-9.2.1/media/backup/temp.sql | 0 .../media/backup/web.config | 16 + .../media/css/biblegateway-print.css | 162 + .../media/css/biblestudy-debug.css | 41 + .../media/css/biblestudy.css | 790 ++ .../media/css/biblestudy.css.map | 1 + .../media/css/biblestudy.min.css | 1 + .../media/css/bsmImport.css | 7 + .../media/css/bsms.fancybox.css | 36 + .../com_proclaim-9.2.1/media/css/general.css | 314 + .../media/css/general.css.map | 1 + .../media/css/general.min.css | 1 + .../media/css/general.min.min.css | 1 + build/com_proclaim-9.2.1/media/css/icons.css | 71 + .../com_proclaim-9.2.1/media/css/podcast.css | 58 + .../media/css/token-input-facebook.css | 116 + .../media/css/token-input-jbs.css | 116 + .../media/fancybox/jquery.fancybox.min.css | 1 + .../media/fancybox/jquery.fancybox.min.js | 12 + .../com_proclaim-9.2.1/media/images/1bad.png | Bin 0 -> 1200 bytes build/com_proclaim-9.2.1/media/images/bar.gif | Bin 0 -> 43 bytes .../media/images/bible2015.png | Bin 0 -> 25777 bytes .../media/images/biblemenu.png | Bin 0 -> 20281 bytes .../media/images/billy_sunday11.jpg | Bin 0 -> 10689 bytes .../com_proclaim-9.2.1/media/images/blank.gif | Bin 0 -> 43 bytes build/com_proclaim-9.2.1/media/images/cd.png | Bin 0 -> 3604 bytes .../media/images/delicious.png | Bin 0 -> 4299 bytes .../media/images/done-icon.jpg | Bin 0 -> 25265 bytes .../media/images/download.png | Bin 0 -> 3859 bytes build/com_proclaim-9.2.1/media/images/dvd.png | Bin 0 -> 3428 bytes .../media/images/emailButton.png | Bin 0 -> 428 bytes .../media/images/facebook.png | Bin 0 -> 4478 bytes build/com_proclaim-9.2.1/media/images/go.png | Bin 0 -> 1736 bytes .../com_proclaim-9.2.1/media/images/good.png | Bin 0 -> 1531 bytes .../media/images/icons/backuprestore.png | Bin 0 -> 7320 bytes .../media/images/icons/copydatabase.png | Bin 0 -> 2224 bytes .../media/images/icons/export.png | Bin 0 -> 6494 bytes .../media/images/icons/folder.png | Bin 0 -> 6467 bytes .../images/icons/icon-48-administration.png | Bin 0 -> 6708 bytes .../media/images/icons/icon-48-biblebooks.png | Bin 0 -> 5406 bytes .../media/images/icons/icon-48-comments.png | Bin 0 -> 5571 bytes .../media/images/icons/icon-48-css.png | Bin 0 -> 6689 bytes .../media/images/icons/icon-48-download.png | Bin 0 -> 6640 bytes .../media/images/icons/icon-48-folder.png | Bin 0 -> 7320 bytes .../media/images/icons/icon-48-locations.png | Bin 0 -> 6400 bytes .../images/icons/icon-48-mediaimages.png | Bin 0 -> 5852 bytes .../images/icons/icon-48-messagetype.png | Bin 0 -> 5557 bytes .../media/images/icons/icon-48-mimetype.png | Bin 0 -> 5659 bytes .../media/images/icons/icon-48-mp3.png | Bin 0 -> 11515 bytes .../media/images/icons/icon-48-podcast.png | Bin 0 -> 5788 bytes .../media/images/icons/icon-48-series.png | Bin 0 -> 7120 bytes .../media/images/icons/icon-48-servers.png | Bin 0 -> 7697 bytes .../media/images/icons/icon-48-social.png | Bin 0 -> 7023 bytes .../media/images/icons/icon-48-studies.png | Bin 0 -> 6242 bytes .../media/images/icons/icon-48-teachers.png | Bin 0 -> 7002 bytes .../media/images/icons/icon-48-templates.png | Bin 0 -> 7200 bytes .../media/images/icons/icon-48-topics.png | Bin 0 -> 6333 bytes .../images/icons/icon-administration.png | Bin 0 -> 1145 bytes .../media/images/icons/icon-comments.png | Bin 0 -> 1068 bytes .../media/images/icons/icon-css.png | Bin 0 -> 1027 bytes .../media/images/icons/icon-download.png | Bin 0 -> 1135 bytes .../media/images/icons/icon-folder.png | Bin 0 -> 1177 bytes .../media/images/icons/icon-locations.png | Bin 0 -> 1139 bytes .../media/images/icons/icon-mediaimages.png | Bin 0 -> 1073 bytes .../media/images/icons/icon-messagetype.png | Bin 0 -> 1061 bytes .../media/images/icons/icon-mimetype.png | Bin 0 -> 1049 bytes .../media/images/icons/icon-mp3.png | Bin 0 -> 7103 bytes .../media/images/icons/icon-play.png | Bin 0 -> 1286 bytes .../media/images/icons/icon-podcast.png | Bin 0 -> 1048 bytes .../media/images/icons/icon-reset.png | Bin 0 -> 1063 bytes .../media/images/icons/icon-series.png | Bin 0 -> 1145 bytes .../media/images/icons/icon-servers.png | Bin 0 -> 1084 bytes .../media/images/icons/icon-social.png | Bin 0 -> 1146 bytes .../media/images/icons/icon-studies.png | Bin 0 -> 1037 bytes .../media/images/icons/icon-teachers.png | Bin 0 -> 1182 bytes .../media/images/icons/icon-templates.png | Bin 0 -> 1162 bytes .../media/images/icons/icon-topics.png | Bin 0 -> 1127 bytes .../media/images/icons/icon-xml.png | Bin 0 -> 934 bytes .../media/images/icons/import.png | Bin 0 -> 7866 bytes .../media/images/icons/migrate.png | Bin 0 -> 6889 bytes .../media/images/images.jpg | Bin 0 -> 2649 bytes .../media/images/loading.gif | Bin 0 -> 3951 bytes .../com_proclaim-9.2.1/media/images/logo.png | Bin 0 -> 26599 bytes .../media/images/m4v-icon24.jpg | Bin 0 -> 11146 bytes .../images/menu/icon-16-administration.png | Bin 0 -> 3516 bytes .../media/images/menu/icon-16-biblebooks.png | Bin 0 -> 3232 bytes .../media/images/menu/icon-16-biblemenu.png | Bin 0 -> 3364 bytes .../media/images/menu/icon-16-comments.png | Bin 0 -> 3355 bytes .../media/images/menu/icon-16-css.png | Bin 0 -> 3441 bytes .../media/images/menu/icon-16-download.png | Bin 0 -> 6261 bytes .../media/images/menu/icon-16-folder.png | Bin 0 -> 3647 bytes .../media/images/menu/icon-16-locations.png | Bin 0 -> 3496 bytes .../media/images/menu/icon-16-mediaimages.png | Bin 0 -> 3425 bytes .../media/images/menu/icon-16-messagetype.png | Bin 0 -> 3445 bytes .../media/images/menu/icon-16-mimetype.png | Bin 0 -> 3385 bytes .../media/images/menu/icon-16-mp3.png | Bin 0 -> 6928 bytes .../media/images/menu/icon-16-podcast.png | Bin 0 -> 3473 bytes .../media/images/menu/icon-16-series.png | Bin 0 -> 3559 bytes .../media/images/menu/icon-16-servers.png | Bin 0 -> 3419 bytes .../media/images/menu/icon-16-social.png | Bin 0 -> 3539 bytes .../media/images/menu/icon-16-studies.png | Bin 0 -> 3400 bytes .../media/images/menu/icon-16-teachers.png | Bin 0 -> 3616 bytes .../media/images/menu/icon-16-templates.png | Bin 0 -> 3643 bytes .../media/images/menu/icon-16-topics.png | Bin 0 -> 3490 bytes build/com_proclaim-9.2.1/media/images/mp3.png | Bin 0 -> 3421 bytes .../media/images/multiple.png | Bin 0 -> 2479 bytes .../media/images/myspace.png | Bin 0 -> 6100 bytes .../media/images/openbible.gif | Bin 0 -> 1913 bytes .../media/images/openbible.png | Bin 0 -> 5073 bytes .../media/images/openbible_1.png | Bin 0 -> 5073 bytes .../com_proclaim-9.2.1/media/images/pdf16.png | Bin 0 -> 739 bytes .../com_proclaim-9.2.1/media/images/pdf24.png | Bin 0 -> 1170 bytes .../media/images/pdf_button.png | Bin 0 -> 582 bytes .../media/images/podcast-audio16.gif | Bin 0 -> 592 bytes .../media/images/podcast-audio16.png | Bin 0 -> 843 bytes .../media/images/podcast-audio24.gif | Bin 0 -> 763 bytes .../media/images/podcast-audio24.png | Bin 0 -> 3685 bytes .../media/images/podcast-video16.gif | Bin 0 -> 612 bytes .../media/images/podcast-video16.png | Bin 0 -> 811 bytes .../media/images/podcast-video24.gif | Bin 0 -> 798 bytes .../media/images/podcast-video24.png | Bin 0 -> 3687 bytes .../media/images/printButton.png | Bin 0 -> 379 bytes .../media/images/proclaim.jpg | Bin 0 -> 10979 bytes .../media/images/progress-bar-back.gif | Bin 0 -> 10819 bytes .../media/images/progress-bar-finish.png | Bin 0 -> 2205 bytes .../media/images/progress-bar.gif | Bin 0 -> 10819 bytes .../media/images/progressbar.gif | Bin 0 -> 120 bytes .../media/images/progressbg_black.gif | Bin 0 -> 1626 bytes .../media/images/progressbg_green.gif | Bin 0 -> 1308 bytes .../media/images/progressbg_orange.gif | Bin 0 -> 1308 bytes .../media/images/progressbg_red.gif | Bin 0 -> 1308 bytes .../media/images/progressbg_yellow.gif | Bin 0 -> 1308 bytes .../media/images/realplayer16.gif | Bin 0 -> 623 bytes .../media/images/realplayer16.png | Bin 0 -> 842 bytes .../media/images/realplayer24.gif | Bin 0 -> 816 bytes .../media/images/realplayer24.png | Bin 0 -> 3892 bytes .../media/images/showhide.gif | Bin 0 -> 218 bytes .../media/images/speaker16.gif | Bin 0 -> 580 bytes .../media/images/speaker16.png | Bin 0 -> 703 bytes .../media/images/speaker24.gif | Bin 0 -> 761 bytes .../media/images/speaker24.png | Bin 0 -> 3962 bytes .../media/images/square.gif | Bin 0 -> 46 bytes .../media/images/streamingaudio16.gif | Bin 0 -> 568 bytes .../media/images/streamingaudio16.png | Bin 0 -> 725 bytes .../media/images/streamingaudio24.gif | Bin 0 -> 730 bytes .../media/images/streamingaudio24.png | Bin 0 -> 4262 bytes .../media/images/streamingvideo16.gif | Bin 0 -> 576 bytes .../media/images/streamingvideo16.png | Bin 0 -> 773 bytes .../media/images/streamingvideo24.gif | Bin 0 -> 723 bytes .../media/images/streamingvideo24.png | Bin 0 -> 1976 bytes .../media/images/textfile16.gif | Bin 0 -> 630 bytes .../media/images/textfile16.png | Bin 0 -> 798 bytes .../media/images/textfile24.gif | Bin 0 -> 825 bytes .../media/images/textfile24.png | Bin 0 -> 4426 bytes .../media/images/tooltip/bubble.gif | Bin 0 -> 1535 bytes .../media/images/tooltip/bubble_filler.gif | Bin 0 -> 71 bytes .../media/images/trans16.gif | Bin 0 -> 55 bytes .../media/images/trans24.gif | Bin 0 -> 63 bytes .../media/images/twitter.png | Bin 0 -> 3986 bytes .../media/images/video16.gif | Bin 0 -> 650 bytes .../media/images/video16.png | Bin 0 -> 1002 bytes .../media/images/video24.gif | Bin 0 -> 909 bytes .../media/images/video24.png | Bin 0 -> 4198 bytes .../media/images/vimeo24.png | Bin 0 -> 1418 bytes .../media/images/windows-media16.gif | Bin 0 -> 648 bytes .../media/images/windows-media16.png | Bin 0 -> 1057 bytes .../media/images/windows-media24.gif | Bin 0 -> 900 bytes .../media/images/windows-media24.png | Bin 0 -> 4193 bytes .../media/images/youtube24.png | Bin 0 -> 4512 bytes build/com_proclaim-9.2.1/media/js/assat.js | 54 + .../media/js/biblestudy-ui.js | 74 + .../com_proclaim-9.2.1/media/js/biblestudy.js | 236 + .../com_proclaim-9.2.1/media/js/bsmImport.js | 112 + build/com_proclaim-9.2.1/media/js/fancybox.js | 60 + build/com_proclaim-9.2.1/media/js/filesize.js | 11 + .../media/js/jquery.mousewheel.pack.js | 14 + .../media/js/mediafile/submitbutton.js | 22 + .../com_proclaim-9.2.1/media/js/modernizr.js | 4 + .../com_proclaim-9.2.1/media/js/noconflict.js | 1 + .../media/js/plugins/SWFObject License.txt | 4 + .../media/js/plugins/jquery.tokeninput.js | 1106 ++ .../media/js/plugins/swfupload.cookies.js | 53 + .../media/js/plugins/swfupload.queue.js | 98 + .../media/js/plugins/swfupload.speed.js | 342 + .../media/js/plugins/swfupload.swfobject.js | 111 + .../media/js/views/mediafilesedit.js | 176 + .../media/js/views/studieslist.js | 28 + .../media/less/biblestudy.less | 896 ++ .../media/less/general.less | 308 + .../media/player/jw-icons.ttf | Bin 0 -> 5412 bytes .../media/player/jw-icons.woff | Bin 0 -> 5488 bytes .../media/player/jwplayer.flash.swf | Bin 0 -> 95794 bytes .../media/player/jwplayer.js | 7 + .../media/player/jwplayer.loader.swf | Bin 0 -> 992 bytes .../media/player/polyfills.base64.js | 1 + .../player/polyfills.intersection-observer.js | 1 + .../media/player/polyfills.promise.js | 1 + .../media/player/polyfills.vttrenderer.js | 1 + .../media/player/provider.cast.js | 1 + .../media/player/provider.flash.js | 1 + .../media/player/provider.hlsjs.js | 8 + .../media/player/provider.html5.js | 1 + .../media/player/provider.shaka.js | 5 + .../media/player/provider.youtube.js | 1 + .../media/player/skins/beelden.css | 1 + .../media/player/skins/bekle.css | 1 + .../media/player/skins/five.css | 1 + .../media/player/skins/glow.css | 1 + .../media/player/skins/roundster.css | 1 + .../media/player/skins/seven.css | 1 + .../media/player/skins/six.css | 1 + .../media/player/skins/stormtrooper.css | 1 + .../media/player/skins/vapor.css | 1 + .../media/player/vttparser.js | 1 + .../modules/site/mod_biblestudy/helper.php | 396 + .../language/en-GB/en-GB.mod_biblestudy.ini | 11 + .../en-GB/en-GB.mod_biblestudy.sys.ini | 10 + .../site/mod_biblestudy/mod_biblestudy.php | 144 + .../site/mod_biblestudy/mod_biblestudy.xml | 464 + .../modules/site/mod_biblestudy/script.php | 192 + .../site/mod_biblestudy/tmpl/default.php | 12 + .../site/mod_biblestudy/tmpl/default_main.php | 57 + .../mod_biblestudy/tmpl/default_simple.php | 48 + .../de-DE/de-DE.mod_biblestudy_podcast.ini | 9 + .../de-DE.mod_biblestudy_podcast.sys.ini | 8 + .../en-GB/en-GB.mod_biblestudy_podcast.ini | 9 + .../en-GB.mod_biblestudy_podcast.sys.ini | 8 + .../mod_biblestudy_podcast.php | 39 + .../mod_biblestudy_podcast.xml | 60 + .../mod_biblestudy_podcast/tmpl/default.php | 13 + .../plugins/finder/biblestudy/biblestudy.php | 374 + .../plugins/finder/biblestudy/biblestudy.xml | 16 + .../de-DE/de-DE.plg_finder_biblestudy.ini | 13 + .../de-DE/de-DE.plg_finder_biblestudy.sys.ini | 9 + .../en-GB/en-GB.plg_finder_biblestudy.ini | 13 + .../en-GB/en-GB.plg_finder_biblestudy.sys.ini | 9 + .../biblestudysearch/biblestudysearch.php | 262 + .../biblestudysearch/biblestudysearch.xml | 48 + .../de-DE.plg_search_biblestudysearch.sys.ini | 8 + .../en-GB.plg_search_biblestudysearch.sys.ini | 10 + .../plugins/system/jbsbackup/jbsbackup.php | 381 + .../plugins/system/jbsbackup/jbsbackup.xml | 454 + .../de-DE/de-DE.plg_system_jbsbackup.sys.ini | 11 + .../en-GB/en-GB.plg_system_jbsbackup.sys.ini | 11 + .../plugins/system/jbsbackup/script.php | 140 + .../jbsbackup/sql/uninstall.mysql.utf8.sql | 2 + .../plugins/system/jbspodcast/jbspodcast.php | 325 + .../plugins/system/jbspodcast/jbspodcast.xml | 462 + .../de-DE/de-DE.plg_system_jbspodcast.sys.ini | 11 + .../en-GB/en-GB.plg_system_jbspodcast.sys.ini | 11 + .../plugins/system/jbspodcast/script.php | 140 + .../jbspodcast/sql/uninstall.mysql.utf8.sql | 2 + build/com_proclaim-9.2.1/site/biblestudy.php | 31 + build/com_proclaim-9.2.1/site/controller.php | 346 + .../site/controllers/commentform.php | 273 + .../site/controllers/commentlist.php | 61 + .../site/controllers/mediafileform.php | 333 + .../site/controllers/mediafilelist.php | 61 + .../site/controllers/messageform.php | 199 + .../site/controllers/messagelist.php | 61 + .../site/controllers/seriesdisplay.php | 22 + .../site/controllers/seriesdisplays.php | 38 + .../site/controllers/sermon.php | 396 + .../site/controllers/sermons.php | 81 + .../site/controllers/teacher.php | 36 + .../site/controllers/teachers.php | 38 + .../site/helpers/custom.php | 165 + .../site/helpers/landing.php | 1265 ++ .../com_proclaim-9.2.1/site/helpers/media.php | 1247 ++ .../site/helpers/podcastsubscribe.php | 195 + .../site/helpers/relatedstudies.php | 990 ++ .../com_proclaim-9.2.1/site/helpers/route.php | 207 + .../site/helpers/serieslist.php | 278 + .../site/helpers/showscripture.php | 204 + .../site/helpers/teacher.php | 399 + .../com_proclaim-9.2.1/site/lib/download.php | 161 + build/com_proclaim-9.2.1/site/lib/images.php | 364 + build/com_proclaim-9.2.1/site/lib/listing.php | 2811 ++++ .../site/lib/pagebuilder.php | 435 + build/com_proclaim-9.2.1/site/lib/podcast.php | 639 + .../site/models/commentform.php | 119 + .../site/models/commentlist.php | 85 + .../site/models/forms/comment.xml | 48 + .../site/models/forms/filter_messagelist.xml | 110 + .../site/models/forms/filter_sermons.xml | 124 + .../site/models/forms/filter_serverslist.xml | 63 + .../site/models/forms/mediafile.xml | 53 + .../site/models/forms/message.xml | 180 + .../site/models/landingpage.php | 167 + .../site/models/mediafileform.php | 92 + .../site/models/mediafilelist.php | 83 + .../site/models/messageform.php | 121 + .../site/models/messagelist.php | 120 + .../site/models/podcastdisplay.php | 249 + .../site/models/podcastlist.php | 247 + .../com_proclaim-9.2.1/site/models/popup.php | 62 + .../site/models/seriesdisplay.php | 255 + .../site/models/seriesdisplays.php | 320 + .../com_proclaim-9.2.1/site/models/sermon.php | 357 + .../site/models/sermons.php | 908 ++ .../site/models/serverslist.php | 25 + .../site/models/teacher.php | 138 + .../site/models/teachers.php | 144 + build/com_proclaim-9.2.1/site/router.php | 112 + .../site/sef_ext/com_biblestudy.php | 137 + .../site/views/commentform/tmpl/edit.php | 154 + .../site/views/commentform/view.html.php | 120 + .../site/views/commentlist/metadata.xml | 8 + .../site/views/commentlist/tmpl/default.php | 212 + .../site/views/commentlist/tmpl/default.xml | 10 + .../views/commentlist/tmpl/default_batch.php | 38 + .../site/views/commentlist/view.html.php | 155 + .../site/views/landingpage/metadata.xml | 8 + .../site/views/landingpage/tmpl/default.php | 174 + .../site/views/landingpage/tmpl/default.xml | 50 + .../site/views/landingpage/view.html.php | 99 + .../site/views/latest/metadata.xml | 8 + .../site/views/latest/tmpl/default.php | 11 + .../site/views/latest/tmpl/default.xml | 23 + .../site/views/latest/view.html.php | 48 + .../site/views/mediafileform/metadata.xml | 5 + .../site/views/mediafileform/tmpl/edit.php | 177 + .../site/views/mediafileform/tmpl/edit.xml | 6 + .../tmpl/edit_converter_body.php | 28 + .../tmpl/edit_converter_footer.php | 19 + .../site/views/mediafileform/view.html.php | 235 + .../site/views/mediafilelist/metadata.xml | 8 + .../site/views/mediafilelist/tmpl/default.php | 201 + .../site/views/mediafilelist/tmpl/default.xml | 7 + .../site/views/mediafilelist/view.html.php | 196 + .../site/views/messageform/metadata.xml | 6 + .../site/views/messageform/tmpl/edit.php | 504 + .../site/views/messageform/tmpl/edit.xml | 5 + .../site/views/messageform/view.html.php | 225 + .../site/views/messagelist/metadata.xml | 8 + .../site/views/messagelist/tmpl/default.php | 196 + .../site/views/messagelist/tmpl/default.xml | 71 + .../site/views/messagelist/tmpl/modal.php | 101 + .../site/views/messagelist/view.html.php | 221 + .../site/views/podcastdisplay/metadata.xml | 8 + .../views/podcastdisplay/tmpl/default.php | 94 + .../views/podcastdisplay/tmpl/default.xml | 71 + .../site/views/podcastdisplay/view.html.php | 186 + .../site/views/podcastlist/metadata.xml | 8 + .../site/views/podcastlist/tmpl/default.php | 75 + .../site/views/podcastlist/tmpl/default.xml | 71 + .../site/views/podcastlist/view.html.php | 79 + .../site/views/popup/metadata.xml | 6 + .../site/views/popup/tmpl/default.php | 71 + .../site/views/popup/view.html.php | 351 + .../site/views/seriesdisplay/metadata.xml | 8 + .../site/views/seriesdisplay/tmpl/default.php | 24 + .../site/views/seriesdisplay/tmpl/default.xml | 64 + .../seriesdisplay/tmpl/default_custom.php | 61 + .../views/seriesdisplay/tmpl/default_main.php | 49 + .../site/views/seriesdisplay/view.html.php | 264 + .../site/views/seriesdisplays/metadata.xml | 8 + .../views/seriesdisplays/tmpl/default.php | 24 + .../views/seriesdisplays/tmpl/default.xml | 45 + .../seriesdisplays/tmpl/default_custom.php | 115 + .../seriesdisplays/tmpl/default_main.php | 105 + .../site/views/seriesdisplays/view.html.php | 216 + .../site/views/sermon/metadata.xml | 8 + .../site/views/sermon/tmpl/default.php | 72 + .../site/views/sermon/tmpl/default.xml | 32 + .../sermon/tmpl/default_commentsform.php | 240 + .../site/views/sermon/tmpl/default_footer.php | 11 + .../views/sermon/tmpl/default_footerlink.php | 48 + .../site/views/sermon/tmpl/default_header.php | 11 + .../site/views/sermon/tmpl/default_main.php | 113 + .../site/views/sermon/tmpl/default_simple.php | 23 + .../site/views/sermon/view.html.php | 571 + .../site/views/sermons/metadata.xml | 8 + .../site/views/sermons/tmpl/default.php | 29 + .../site/views/sermons/tmpl/default.xml | 115 + .../site/views/sermons/tmpl/default_easy.php | 81 + .../views/sermons/tmpl/default_formfooter.php | 18 + .../views/sermons/tmpl/default_formheader.php | 20 + .../site/views/sermons/tmpl/default_main.php | 134 + .../views/sermons/tmpl/default_simple.php | 78 + .../site/views/sermons/view.html.php | 405 + .../site/views/serverslist/tmpl/modal.php | 64 + .../site/views/serverslist/view.html.php | 225 + .../site/views/squeezeBox/tmpl/default.php | 31 + .../site/views/squeezeBox/view.html.php | 22 + .../site/views/teacher/metadata.xml | 8 + .../site/views/teacher/tmpl/default.php | 20 + .../site/views/teacher/tmpl/default.xml | 51 + .../site/views/teacher/tmpl/default_main.php | 53 + .../site/views/teacher/view.html.php | 333 + .../site/views/teachers/metadata.xml | 8 + .../site/views/teachers/tmpl/default.php | 20 + .../site/views/teachers/tmpl/default.xml | 42 + .../site/views/teachers/tmpl/default_main.php | 50 + .../site/views/teachers/view.html.php | 263 + .../site/views/terms/metadata.xml | 6 + .../site/views/terms/view.html.php | 177 + 834 files changed, 113526 insertions(+) create mode 100644 build/com_proclaim-9.2.1/LICENSE.txt create mode 100644 build/com_proclaim-9.2.1/README.md create mode 100644 build/com_proclaim-9.2.1/admin/access.xml create mode 100644 build/com_proclaim-9.2.1/admin/addons/addon.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/docman.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/plupload.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/virtuemart.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/Moxie.swf create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/Moxie.xap create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ar.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/az.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/be_BY.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bg.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bs.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ca.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cs.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cy.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/da.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/de.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/el.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/en.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/es.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/et.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fa.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fi.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fr.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/he.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hr.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hu.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hy.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/id.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/it.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ja.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ka.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/kk.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/km.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ko.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ku_IQ.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lt.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lv.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ms.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/nl.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pl.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pt_BR.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ro.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ru.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sk.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sq.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sr.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sv.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/th_TH.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/tr.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/uk_UA.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/vi.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_CN.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_TW.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/css/jquery.plupload.queue.css create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/backgrounds.gif create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/buttons-disabled.png create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/buttons.png create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/delete.gif create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/done.gif create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/error.gif create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/throbber.gif create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/transp50.png create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/jquery.plupload.queue.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/jquery.plupload.queue.min.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/css/jquery.ui.plupload.css create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/img/loading.gif create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/img/plupload.png create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/jquery.ui.plupload.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/jquery.ui.plupload.min.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/legacy.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.min.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.dev.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.full.min.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.min.js create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/language/en-GB/en-GB.jbs_addon_legacy.ini create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.png create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.xml create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/legacy/media.xml create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/fields/jbsmmedia.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/fields/plupload.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/language/en-GB/en-GB.jbs_addon_local.ini create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/language/local.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/local.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/local.png create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/local.xml create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/local/media.xml create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/server.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/youtube/language/en-GB/en-GB.jbs_addon_youtube.ini create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/youtube/media.xml create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.php create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.png create mode 100644 build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.xml create mode 100644 build/com_proclaim-9.2.1/admin/api.php create mode 100644 build/com_proclaim-9.2.1/admin/biblestudy.php create mode 100644 build/com_proclaim-9.2.1/admin/config.xml create mode 100644 build/com_proclaim-9.2.1/admin/controller.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/admin.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/assets.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/comment.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/comments.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/cpanel.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/install.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/location.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/locations.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/mediafile.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/mediafiles.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/message.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/messages.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/messagetype.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/messagetypes.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/podcast.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/podcasts.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/serie.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/series.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/server.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/servers.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/teacher.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/teachers.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/template.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/templatecode.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/templatecodes.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/templates.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/topic.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/topics.php create mode 100644 build/com_proclaim-9.2.1/admin/controllers/upload.php create mode 100644 build/com_proclaim-9.2.1/admin/help/en-GB/biblestudy.html create mode 100644 build/com_proclaim-9.2.1/admin/help/en-GB/templatecodehelp.html create mode 100644 build/com_proclaim-9.2.1/admin/helpers/alias.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/biblestudyhelper.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/dbhelper.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/defaulttemplatecode.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/helper.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/html/biblestudy.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/html/bsmedia.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/html/fancybox.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/html/icon.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/html/jwplayer.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/image.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/imagelib.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/params.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/searchfilters.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/tagDefinitions.helper.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/tags.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/template.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/thumbnail.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/translated.php create mode 100644 build/com_proclaim-9.2.1/admin/helpers/uploadscript.php create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/install-defaults.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/install.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/uninstall-dbtables.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/uninstall.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.1.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.2.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.3.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.4.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.2.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.3.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.0.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.1.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.2.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.3.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.4.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.0.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.1.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.2.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.3.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.0.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.8.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.0.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.1.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.10.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.11.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.12.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.13.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.14.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.15.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.17.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.2.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.8.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.9.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.0.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.1.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.2.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.3.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.4.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.5.sql create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/6.1.1.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/6.1.2.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/6.1.3.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/6.1.4.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/6.2.2.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/6.2.3.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/7.0.0.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/7.0.1.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/7.0.2.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/7.1.0.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/8.0.0.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/9.0.0.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/9.0.1.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/9.1.4.php create mode 100644 build/com_proclaim-9.2.1/admin/install/updates/9.1.5.php create mode 100644 build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/nl-NL/nl-NL.com_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/admin/lib/assets.php create mode 100644 build/com_proclaim-9.2.1/admin/lib/backup.php create mode 100644 build/com_proclaim-9.2.1/admin/lib/debug.php create mode 100644 build/com_proclaim-9.2.1/admin/lib/piconvert.php create mode 100644 build/com_proclaim-9.2.1/admin/lib/restore.php create mode 100644 build/com_proclaim-9.2.1/admin/lib/ssconvert.php create mode 100644 build/com_proclaim-9.2.1/admin/lib/stats.php create mode 100644 build/com_proclaim-9.2.1/admin/lib/version.php create mode 100644 build/com_proclaim-9.2.1/admin/models/admin.php create mode 100644 build/com_proclaim-9.2.1/admin/models/archive.php create mode 100644 build/com_proclaim-9.2.1/admin/models/assets.php create mode 100644 build/com_proclaim-9.2.1/admin/models/comment.php create mode 100644 build/com_proclaim-9.2.1/admin/models/comments.php create mode 100644 build/com_proclaim-9.2.1/admin/models/cpanel.php create mode 100644 build/com_proclaim-9.2.1/admin/models/dir.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/booklist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/elementoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/filesize.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/filters.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/icontype.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/linkoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/listoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/loadlanguagefile.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/locationlist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/locations.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/locationslist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/mediafile.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/mediafileimages.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/messagetypelist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/mimetype.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/modal/seriesdetail.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/modal/study.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/modal/studydetails.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/modal/teacherdisplay.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/modal/templates.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/modal/upload.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/rowoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/serieslinkoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/serieslist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/seriesoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/server.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/servertype.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/spanoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/teacherlinkoptions.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/teacherlist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/templatelist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/topics.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/topicslist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/upload.php create mode 100644 build/com_proclaim-9.2.1/admin/models/fields/yearlist.php create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/admin.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/archive.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/comment.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_comments.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_locations.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_mediafiles.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_messages.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_messagetypes.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_podcasts.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_series.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_servers.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_teachers.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_templatecodes.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_templates.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/filter_topics.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/location.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/mediafile.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/message.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/messagetype.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/podcast.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/serie.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/server.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/teacher.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/template.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/templatecode.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/topic.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/forms/upload.xml create mode 100644 build/com_proclaim-9.2.1/admin/models/install.php create mode 100644 build/com_proclaim-9.2.1/admin/models/location.php create mode 100644 build/com_proclaim-9.2.1/admin/models/locations.php create mode 100644 build/com_proclaim-9.2.1/admin/models/mediafile.php create mode 100644 build/com_proclaim-9.2.1/admin/models/mediafiles.php create mode 100644 build/com_proclaim-9.2.1/admin/models/message.php create mode 100644 build/com_proclaim-9.2.1/admin/models/messages.php create mode 100644 build/com_proclaim-9.2.1/admin/models/messagetype.php create mode 100644 build/com_proclaim-9.2.1/admin/models/messagetypes.php create mode 100644 build/com_proclaim-9.2.1/admin/models/podcast.php create mode 100644 build/com_proclaim-9.2.1/admin/models/podcasts.php create mode 100644 build/com_proclaim-9.2.1/admin/models/serie.php create mode 100644 build/com_proclaim-9.2.1/admin/models/series.php create mode 100644 build/com_proclaim-9.2.1/admin/models/server.php create mode 100644 build/com_proclaim-9.2.1/admin/models/servers.php create mode 100644 build/com_proclaim-9.2.1/admin/models/teacher.php create mode 100644 build/com_proclaim-9.2.1/admin/models/teachers.php create mode 100644 build/com_proclaim-9.2.1/admin/models/template.php create mode 100644 build/com_proclaim-9.2.1/admin/models/templatecode.php create mode 100644 build/com_proclaim-9.2.1/admin/models/templatecodes.php create mode 100644 build/com_proclaim-9.2.1/admin/models/templates.php create mode 100644 build/com_proclaim-9.2.1/admin/models/topic.php create mode 100644 build/com_proclaim-9.2.1/admin/models/topics.php create mode 100644 build/com_proclaim-9.2.1/admin/postinstall/template.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/admin.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/comment.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/location.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/mediafile.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/message.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/messagetype.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/podcast.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/serie.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/server.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/studytopics.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/teacher.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/template.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/templatecode.php create mode 100644 build/com_proclaim-9.2.1/admin/tables/topic.php create mode 100644 build/com_proclaim-9.2.1/admin/views/admin/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/admin/tmpl/edit_jwplayer.php create mode 100644 build/com_proclaim-9.2.1/admin/views/admin/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/archive/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/archive/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/assets/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/assets/tmpl/fix.php create mode 100644 build/com_proclaim-9.2.1/admin/views/assets/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/backup/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/backup/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/comment/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/comment/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/comments/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/comments/tmpl/default_batch.php create mode 100644 build/com_proclaim-9.2.1/admin/views/comments/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/cpanel/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/cpanel/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/database/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/database/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/dir/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/dir/tmpl/default_dirs.php create mode 100644 build/com_proclaim-9.2.1/admin/views/dir/tmpl/default_files.php create mode 100644 build/com_proclaim-9.2.1/admin/views/dir/tmpl/default_footer.php create mode 100644 build/com_proclaim-9.2.1/admin/views/dir/tmpl/default_header.php create mode 100644 build/com_proclaim-9.2.1/admin/views/dir/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/install/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/install/tmpl/install_finished.php create mode 100644 build/com_proclaim-9.2.1/admin/views/install/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/location/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/location/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/locations/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/locations/tmpl/default_batch_body.php create mode 100644 build/com_proclaim-9.2.1/admin/views/locations/tmpl/default_batch_footer.php create mode 100644 build/com_proclaim-9.2.1/admin/views/locations/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafile/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafile/tmpl/edit_converter_body.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafile/tmpl/edit_converter_footer.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafile/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafiles/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafiles/tmpl/default_batch_body.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafiles/tmpl/default_batch_footer.php create mode 100644 build/com_proclaim-9.2.1/admin/views/mediafiles/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/message/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/message/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messages/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messages/tmpl/default_batch_body.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messages/tmpl/default_batch_footer.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messages/tmpl/modal.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messages/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messagetype/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messagetype/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messagetypes/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messagetypes/tmpl/default_batch.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messagetypes/tmpl/modal.php create mode 100644 build/com_proclaim-9.2.1/admin/views/messagetypes/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/migrate/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/migrate/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/podcast/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/podcast/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/podcasts/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/podcasts/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/serie/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/serie/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/series/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/series/tmpl/default_batch.php create mode 100644 build/com_proclaim-9.2.1/admin/views/series/tmpl/modal.php create mode 100644 build/com_proclaim-9.2.1/admin/views/series/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/server/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/server/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/servers/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/servers/tmpl/modal.php create mode 100644 build/com_proclaim-9.2.1/admin/views/servers/tmpl/types.php create mode 100644 build/com_proclaim-9.2.1/admin/views/servers/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/teacher/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/teacher/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/teachers/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/teachers/tmpl/default_batch.php create mode 100644 build/com_proclaim-9.2.1/admin/views/teachers/tmpl/modal.php create mode 100644 build/com_proclaim-9.2.1/admin/views/teachers/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/template/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/template/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/templatecode/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/templatecode/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/templatecodes/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/templatecodes/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/templates/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/templates/tmpl/default_export.php create mode 100644 build/com_proclaim-9.2.1/admin/views/templates/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/topic/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/admin/views/topic/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/topics/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/topics/view.html.php create mode 100644 build/com_proclaim-9.2.1/admin/views/upload/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/admin/views/upload/tmpl/default_navigator.php create mode 100644 build/com_proclaim-9.2.1/admin/views/upload/tmpl/default_uploader.php create mode 100644 build/com_proclaim-9.2.1/admin/views/upload/view.html.php create mode 100644 build/com_proclaim-9.2.1/biblestudy.script.php create mode 100644 build/com_proclaim-9.2.1/biblestudy.xml create mode 100644 build/com_proclaim-9.2.1/build.xml create mode 100644 build/com_proclaim-9.2.1/copyright.txt create mode 100644 build/com_proclaim-9.2.1/media/backup/.htaccess create mode 100644 build/com_proclaim-9.2.1/media/backup/temp.sql create mode 100644 build/com_proclaim-9.2.1/media/backup/web.config create mode 100644 build/com_proclaim-9.2.1/media/css/biblegateway-print.css create mode 100644 build/com_proclaim-9.2.1/media/css/biblestudy-debug.css create mode 100644 build/com_proclaim-9.2.1/media/css/biblestudy.css create mode 100644 build/com_proclaim-9.2.1/media/css/biblestudy.css.map create mode 100644 build/com_proclaim-9.2.1/media/css/biblestudy.min.css create mode 100644 build/com_proclaim-9.2.1/media/css/bsmImport.css create mode 100644 build/com_proclaim-9.2.1/media/css/bsms.fancybox.css create mode 100644 build/com_proclaim-9.2.1/media/css/general.css create mode 100644 build/com_proclaim-9.2.1/media/css/general.css.map create mode 100644 build/com_proclaim-9.2.1/media/css/general.min.css create mode 100644 build/com_proclaim-9.2.1/media/css/general.min.min.css create mode 100644 build/com_proclaim-9.2.1/media/css/icons.css create mode 100644 build/com_proclaim-9.2.1/media/css/podcast.css create mode 100644 build/com_proclaim-9.2.1/media/css/token-input-facebook.css create mode 100644 build/com_proclaim-9.2.1/media/css/token-input-jbs.css create mode 100644 build/com_proclaim-9.2.1/media/fancybox/jquery.fancybox.min.css create mode 100644 build/com_proclaim-9.2.1/media/fancybox/jquery.fancybox.min.js create mode 100644 build/com_proclaim-9.2.1/media/images/1bad.png create mode 100644 build/com_proclaim-9.2.1/media/images/bar.gif create mode 100644 build/com_proclaim-9.2.1/media/images/bible2015.png create mode 100644 build/com_proclaim-9.2.1/media/images/biblemenu.png create mode 100644 build/com_proclaim-9.2.1/media/images/billy_sunday11.jpg create mode 100644 build/com_proclaim-9.2.1/media/images/blank.gif create mode 100644 build/com_proclaim-9.2.1/media/images/cd.png create mode 100644 build/com_proclaim-9.2.1/media/images/delicious.png create mode 100644 build/com_proclaim-9.2.1/media/images/done-icon.jpg create mode 100644 build/com_proclaim-9.2.1/media/images/download.png create mode 100644 build/com_proclaim-9.2.1/media/images/dvd.png create mode 100644 build/com_proclaim-9.2.1/media/images/emailButton.png create mode 100644 build/com_proclaim-9.2.1/media/images/facebook.png create mode 100644 build/com_proclaim-9.2.1/media/images/go.png create mode 100644 build/com_proclaim-9.2.1/media/images/good.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/backuprestore.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/copydatabase.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/export.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/folder.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-administration.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-biblebooks.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-comments.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-css.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-download.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-folder.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-locations.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-mediaimages.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-messagetype.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-mimetype.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-mp3.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-podcast.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-series.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-servers.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-social.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-studies.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-teachers.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-templates.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-48-topics.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-administration.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-comments.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-css.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-download.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-folder.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-locations.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-mediaimages.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-messagetype.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-mimetype.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-mp3.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-play.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-podcast.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-reset.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-series.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-servers.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-social.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-studies.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-teachers.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-templates.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-topics.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/icon-xml.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/import.png create mode 100644 build/com_proclaim-9.2.1/media/images/icons/migrate.png create mode 100644 build/com_proclaim-9.2.1/media/images/images.jpg create mode 100644 build/com_proclaim-9.2.1/media/images/loading.gif create mode 100644 build/com_proclaim-9.2.1/media/images/logo.png create mode 100644 build/com_proclaim-9.2.1/media/images/m4v-icon24.jpg create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-administration.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-biblebooks.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-biblemenu.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-comments.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-css.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-download.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-folder.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-locations.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-mediaimages.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-messagetype.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-mimetype.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-mp3.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-podcast.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-series.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-servers.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-social.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-studies.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-teachers.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-templates.png create mode 100644 build/com_proclaim-9.2.1/media/images/menu/icon-16-topics.png create mode 100644 build/com_proclaim-9.2.1/media/images/mp3.png create mode 100644 build/com_proclaim-9.2.1/media/images/multiple.png create mode 100644 build/com_proclaim-9.2.1/media/images/myspace.png create mode 100644 build/com_proclaim-9.2.1/media/images/openbible.gif create mode 100644 build/com_proclaim-9.2.1/media/images/openbible.png create mode 100644 build/com_proclaim-9.2.1/media/images/openbible_1.png create mode 100644 build/com_proclaim-9.2.1/media/images/pdf16.png create mode 100644 build/com_proclaim-9.2.1/media/images/pdf24.png create mode 100644 build/com_proclaim-9.2.1/media/images/pdf_button.png create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-audio16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-audio16.png create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-audio24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-audio24.png create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-video16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-video16.png create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-video24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/podcast-video24.png create mode 100644 build/com_proclaim-9.2.1/media/images/printButton.png create mode 100644 build/com_proclaim-9.2.1/media/images/proclaim.jpg create mode 100644 build/com_proclaim-9.2.1/media/images/progress-bar-back.gif create mode 100644 build/com_proclaim-9.2.1/media/images/progress-bar-finish.png create mode 100644 build/com_proclaim-9.2.1/media/images/progress-bar.gif create mode 100644 build/com_proclaim-9.2.1/media/images/progressbar.gif create mode 100644 build/com_proclaim-9.2.1/media/images/progressbg_black.gif create mode 100644 build/com_proclaim-9.2.1/media/images/progressbg_green.gif create mode 100644 build/com_proclaim-9.2.1/media/images/progressbg_orange.gif create mode 100644 build/com_proclaim-9.2.1/media/images/progressbg_red.gif create mode 100644 build/com_proclaim-9.2.1/media/images/progressbg_yellow.gif create mode 100644 build/com_proclaim-9.2.1/media/images/realplayer16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/realplayer16.png create mode 100644 build/com_proclaim-9.2.1/media/images/realplayer24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/realplayer24.png create mode 100644 build/com_proclaim-9.2.1/media/images/showhide.gif create mode 100644 build/com_proclaim-9.2.1/media/images/speaker16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/speaker16.png create mode 100644 build/com_proclaim-9.2.1/media/images/speaker24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/speaker24.png create mode 100644 build/com_proclaim-9.2.1/media/images/square.gif create mode 100644 build/com_proclaim-9.2.1/media/images/streamingaudio16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/streamingaudio16.png create mode 100644 build/com_proclaim-9.2.1/media/images/streamingaudio24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/streamingaudio24.png create mode 100644 build/com_proclaim-9.2.1/media/images/streamingvideo16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/streamingvideo16.png create mode 100644 build/com_proclaim-9.2.1/media/images/streamingvideo24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/streamingvideo24.png create mode 100644 build/com_proclaim-9.2.1/media/images/textfile16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/textfile16.png create mode 100644 build/com_proclaim-9.2.1/media/images/textfile24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/textfile24.png create mode 100644 build/com_proclaim-9.2.1/media/images/tooltip/bubble.gif create mode 100644 build/com_proclaim-9.2.1/media/images/tooltip/bubble_filler.gif create mode 100644 build/com_proclaim-9.2.1/media/images/trans16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/trans24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/twitter.png create mode 100644 build/com_proclaim-9.2.1/media/images/video16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/video16.png create mode 100644 build/com_proclaim-9.2.1/media/images/video24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/video24.png create mode 100644 build/com_proclaim-9.2.1/media/images/vimeo24.png create mode 100644 build/com_proclaim-9.2.1/media/images/windows-media16.gif create mode 100644 build/com_proclaim-9.2.1/media/images/windows-media16.png create mode 100644 build/com_proclaim-9.2.1/media/images/windows-media24.gif create mode 100644 build/com_proclaim-9.2.1/media/images/windows-media24.png create mode 100644 build/com_proclaim-9.2.1/media/images/youtube24.png create mode 100644 build/com_proclaim-9.2.1/media/js/assat.js create mode 100644 build/com_proclaim-9.2.1/media/js/biblestudy-ui.js create mode 100644 build/com_proclaim-9.2.1/media/js/biblestudy.js create mode 100644 build/com_proclaim-9.2.1/media/js/bsmImport.js create mode 100644 build/com_proclaim-9.2.1/media/js/fancybox.js create mode 100644 build/com_proclaim-9.2.1/media/js/filesize.js create mode 100644 build/com_proclaim-9.2.1/media/js/jquery.mousewheel.pack.js create mode 100644 build/com_proclaim-9.2.1/media/js/mediafile/submitbutton.js create mode 100644 build/com_proclaim-9.2.1/media/js/modernizr.js create mode 100644 build/com_proclaim-9.2.1/media/js/noconflict.js create mode 100644 build/com_proclaim-9.2.1/media/js/plugins/SWFObject License.txt create mode 100644 build/com_proclaim-9.2.1/media/js/plugins/jquery.tokeninput.js create mode 100644 build/com_proclaim-9.2.1/media/js/plugins/swfupload.cookies.js create mode 100644 build/com_proclaim-9.2.1/media/js/plugins/swfupload.queue.js create mode 100644 build/com_proclaim-9.2.1/media/js/plugins/swfupload.speed.js create mode 100644 build/com_proclaim-9.2.1/media/js/plugins/swfupload.swfobject.js create mode 100644 build/com_proclaim-9.2.1/media/js/views/mediafilesedit.js create mode 100644 build/com_proclaim-9.2.1/media/js/views/studieslist.js create mode 100644 build/com_proclaim-9.2.1/media/less/biblestudy.less create mode 100644 build/com_proclaim-9.2.1/media/less/general.less create mode 100644 build/com_proclaim-9.2.1/media/player/jw-icons.ttf create mode 100644 build/com_proclaim-9.2.1/media/player/jw-icons.woff create mode 100644 build/com_proclaim-9.2.1/media/player/jwplayer.flash.swf create mode 100644 build/com_proclaim-9.2.1/media/player/jwplayer.js create mode 100644 build/com_proclaim-9.2.1/media/player/jwplayer.loader.swf create mode 100644 build/com_proclaim-9.2.1/media/player/polyfills.base64.js create mode 100644 build/com_proclaim-9.2.1/media/player/polyfills.intersection-observer.js create mode 100644 build/com_proclaim-9.2.1/media/player/polyfills.promise.js create mode 100644 build/com_proclaim-9.2.1/media/player/polyfills.vttrenderer.js create mode 100644 build/com_proclaim-9.2.1/media/player/provider.cast.js create mode 100644 build/com_proclaim-9.2.1/media/player/provider.flash.js create mode 100644 build/com_proclaim-9.2.1/media/player/provider.hlsjs.js create mode 100644 build/com_proclaim-9.2.1/media/player/provider.html5.js create mode 100644 build/com_proclaim-9.2.1/media/player/provider.shaka.js create mode 100644 build/com_proclaim-9.2.1/media/player/provider.youtube.js create mode 100644 build/com_proclaim-9.2.1/media/player/skins/beelden.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/bekle.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/five.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/glow.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/roundster.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/seven.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/six.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/stormtrooper.css create mode 100644 build/com_proclaim-9.2.1/media/player/skins/vapor.css create mode 100644 build/com_proclaim-9.2.1/media/player/vttparser.js create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/helper.php create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/language/en-GB/en-GB.mod_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/language/en-GB/en-GB.mod_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/mod_biblestudy.php create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/mod_biblestudy.xml create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/script.php create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/tmpl/default_main.php create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy/tmpl/default_simple.php create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy_podcast/language/de-DE/de-DE.mod_biblestudy_podcast.ini create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy_podcast/language/de-DE/de-DE.mod_biblestudy_podcast.sys.ini create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy_podcast/language/en-GB/en-GB.mod_biblestudy_podcast.ini create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy_podcast/language/en-GB/en-GB.mod_biblestudy_podcast.sys.ini create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy_podcast/mod_biblestudy_podcast.php create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy_podcast/mod_biblestudy_podcast.xml create mode 100644 build/com_proclaim-9.2.1/modules/site/mod_biblestudy_podcast/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/plugins/finder/biblestudy/biblestudy.php create mode 100644 build/com_proclaim-9.2.1/plugins/finder/biblestudy/biblestudy.xml create mode 100644 build/com_proclaim-9.2.1/plugins/finder/biblestudy/language/de-DE/de-DE.plg_finder_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/plugins/finder/biblestudy/language/de-DE/de-DE.plg_finder_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/finder/biblestudy/language/en-GB/en-GB.plg_finder_biblestudy.ini create mode 100644 build/com_proclaim-9.2.1/plugins/finder/biblestudy/language/en-GB/en-GB.plg_finder_biblestudy.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/search/biblestudysearch/biblestudysearch.php create mode 100644 build/com_proclaim-9.2.1/plugins/search/biblestudysearch/biblestudysearch.xml create mode 100644 build/com_proclaim-9.2.1/plugins/search/biblestudysearch/language/de-DE/de-DE.plg_search_biblestudysearch.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/search/biblestudysearch/language/en-GB/en-GB.plg_search_biblestudysearch.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbsbackup/jbsbackup.php create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbsbackup/jbsbackup.xml create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbsbackup/language/de-DE/de-DE.plg_system_jbsbackup.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbsbackup/language/en-GB/en-GB.plg_system_jbsbackup.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbsbackup/script.php create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbsbackup/sql/uninstall.mysql.utf8.sql create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbspodcast/jbspodcast.php create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbspodcast/jbspodcast.xml create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbspodcast/language/de-DE/de-DE.plg_system_jbspodcast.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbspodcast/language/en-GB/en-GB.plg_system_jbspodcast.sys.ini create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbspodcast/script.php create mode 100644 build/com_proclaim-9.2.1/plugins/system/jbspodcast/sql/uninstall.mysql.utf8.sql create mode 100644 build/com_proclaim-9.2.1/site/biblestudy.php create mode 100644 build/com_proclaim-9.2.1/site/controller.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/commentform.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/commentlist.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/mediafileform.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/mediafilelist.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/messageform.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/messagelist.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/seriesdisplay.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/seriesdisplays.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/sermon.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/sermons.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/teacher.php create mode 100644 build/com_proclaim-9.2.1/site/controllers/teachers.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/custom.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/landing.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/media.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/podcastsubscribe.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/relatedstudies.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/route.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/serieslist.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/showscripture.php create mode 100644 build/com_proclaim-9.2.1/site/helpers/teacher.php create mode 100644 build/com_proclaim-9.2.1/site/lib/download.php create mode 100644 build/com_proclaim-9.2.1/site/lib/images.php create mode 100644 build/com_proclaim-9.2.1/site/lib/listing.php create mode 100644 build/com_proclaim-9.2.1/site/lib/pagebuilder.php create mode 100644 build/com_proclaim-9.2.1/site/lib/podcast.php create mode 100644 build/com_proclaim-9.2.1/site/models/commentform.php create mode 100644 build/com_proclaim-9.2.1/site/models/commentlist.php create mode 100644 build/com_proclaim-9.2.1/site/models/forms/comment.xml create mode 100644 build/com_proclaim-9.2.1/site/models/forms/filter_messagelist.xml create mode 100644 build/com_proclaim-9.2.1/site/models/forms/filter_sermons.xml create mode 100644 build/com_proclaim-9.2.1/site/models/forms/filter_serverslist.xml create mode 100644 build/com_proclaim-9.2.1/site/models/forms/mediafile.xml create mode 100644 build/com_proclaim-9.2.1/site/models/forms/message.xml create mode 100644 build/com_proclaim-9.2.1/site/models/landingpage.php create mode 100644 build/com_proclaim-9.2.1/site/models/mediafileform.php create mode 100644 build/com_proclaim-9.2.1/site/models/mediafilelist.php create mode 100644 build/com_proclaim-9.2.1/site/models/messageform.php create mode 100644 build/com_proclaim-9.2.1/site/models/messagelist.php create mode 100644 build/com_proclaim-9.2.1/site/models/podcastdisplay.php create mode 100644 build/com_proclaim-9.2.1/site/models/podcastlist.php create mode 100644 build/com_proclaim-9.2.1/site/models/popup.php create mode 100644 build/com_proclaim-9.2.1/site/models/seriesdisplay.php create mode 100644 build/com_proclaim-9.2.1/site/models/seriesdisplays.php create mode 100644 build/com_proclaim-9.2.1/site/models/sermon.php create mode 100644 build/com_proclaim-9.2.1/site/models/sermons.php create mode 100644 build/com_proclaim-9.2.1/site/models/serverslist.php create mode 100644 build/com_proclaim-9.2.1/site/models/teacher.php create mode 100644 build/com_proclaim-9.2.1/site/models/teachers.php create mode 100644 build/com_proclaim-9.2.1/site/router.php create mode 100644 build/com_proclaim-9.2.1/site/sef_ext/com_biblestudy.php create mode 100644 build/com_proclaim-9.2.1/site/views/commentform/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/site/views/commentform/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/commentlist/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/commentlist/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/commentlist/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/commentlist/tmpl/default_batch.php create mode 100644 build/com_proclaim-9.2.1/site/views/commentlist/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/landingpage/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/landingpage/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/landingpage/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/landingpage/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/latest/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/latest/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/latest/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/latest/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/mediafileform/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/mediafileform/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/site/views/mediafileform/tmpl/edit.xml create mode 100644 build/com_proclaim-9.2.1/site/views/mediafileform/tmpl/edit_converter_body.php create mode 100644 build/com_proclaim-9.2.1/site/views/mediafileform/tmpl/edit_converter_footer.php create mode 100644 build/com_proclaim-9.2.1/site/views/mediafileform/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/mediafilelist/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/mediafilelist/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/mediafilelist/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/mediafilelist/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/messageform/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/messageform/tmpl/edit.php create mode 100644 build/com_proclaim-9.2.1/site/views/messageform/tmpl/edit.xml create mode 100644 build/com_proclaim-9.2.1/site/views/messageform/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/messagelist/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/messagelist/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/messagelist/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/messagelist/tmpl/modal.php create mode 100644 build/com_proclaim-9.2.1/site/views/messagelist/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/podcastdisplay/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/podcastdisplay/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/podcastdisplay/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/podcastdisplay/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/podcastlist/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/podcastlist/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/podcastlist/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/podcastlist/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/popup/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/popup/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/popup/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplay/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplay/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplay/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplay/tmpl/default_custom.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplay/tmpl/default_main.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplay/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplays/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplays/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplays/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplays/tmpl/default_custom.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplays/tmpl/default_main.php create mode 100644 build/com_proclaim-9.2.1/site/views/seriesdisplays/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default_commentsform.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default_footer.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default_footerlink.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default_header.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default_main.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/tmpl/default_simple.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermon/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/tmpl/default_easy.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/tmpl/default_formfooter.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/tmpl/default_formheader.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/tmpl/default_main.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/tmpl/default_simple.php create mode 100644 build/com_proclaim-9.2.1/site/views/sermons/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/serverslist/tmpl/modal.php create mode 100644 build/com_proclaim-9.2.1/site/views/serverslist/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/squeezeBox/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/squeezeBox/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/teacher/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/teacher/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/teacher/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/teacher/tmpl/default_main.php create mode 100644 build/com_proclaim-9.2.1/site/views/teacher/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/teachers/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/teachers/tmpl/default.php create mode 100644 build/com_proclaim-9.2.1/site/views/teachers/tmpl/default.xml create mode 100644 build/com_proclaim-9.2.1/site/views/teachers/tmpl/default_main.php create mode 100644 build/com_proclaim-9.2.1/site/views/teachers/view.html.php create mode 100644 build/com_proclaim-9.2.1/site/views/terms/metadata.xml create mode 100644 build/com_proclaim-9.2.1/site/views/terms/view.html.php diff --git a/.gitignore b/.gitignore index d3bd6b285b..bed1a78111 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ build/reports/phpcs-checkstyle.xml build/reports/project-size.txt /libraries/vendor/ composer.lock +/libraries/vendor/ diff --git a/build/com_proclaim-9.2.1/LICENSE.txt b/build/com_proclaim-9.2.1/LICENSE.txt new file mode 100644 index 0000000000..94a9ed024d --- /dev/null +++ b/build/com_proclaim-9.2.1/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/build/com_proclaim-9.2.1/README.md b/build/com_proclaim-9.2.1/README.md new file mode 100644 index 0000000000..b2393256bc --- /dev/null +++ b/build/com_proclaim-9.2.1/README.md @@ -0,0 +1,76 @@ +CWM Proclaim +================== + +Status +----------- + + + + + + + + + + + + + + + + + + + + + + +
CodeBranchVersionRelease DateJoomla Version
Development9.3.0TBD3.8+
Master9.2.1Oct 31, 20193.8+
+ +*NOTE:* The master branch will always reflect the current, released stable version. Only bug fixes and minor updates should be applied to the master branch. New features are to be introduced into the development branch only. + +Overview +-------- +Proclaim is a Joomla!® component written by a team of webservants to further the teaching of God's Word. The component displays information about your church's Bible Studies or sermons in a wide variety of ways. Proclaim is flexible, customizable, and powerful. Easy to configure templates give you the maximum amount of choices. Show only what you want in whatever way you want. + +Embed YouTube videos, play audio, show study notes - even create your own html display pages. You can have multiple locations, series, podcasting, and sharing with social media sites. Please see the example pages for just some of what Bible Study can do for your church - and the best part is the component is completely free. Support is top notch, and also free. Bottom line: we want to help you spread the gospel. + +Contributing +------------ +We appreciate contributions in varioius capacities, below are some ways that you can contribute to this project + +###Setup +1. [Fork this repository.][fork] +2. Load dev dependencies with [Composer][composer]: `php composer.phar install --dev` +3. [Set up your dev environment][setup] + +###Development +1. [Create a topic branch.][branch] +2. Implement your feature or bug fix. +3. If you implemented a new feature or added an extra functionality, create/update unit tests for that feature +4. Run `bin/phing build` +5. If not building sucessfully, go back to step **1** +6. Add your files to repositiory: `git add .` +7. Commit your files: `git commit -m "Implemented feature [x]"` +8. Push your changes: `git push` +9. [Submit a pull request][pr] + +Please **make sure to make specific contributions** when submitting pull requests. For example, if fixing bugs across multiple features of the component, create a branch for each fix, and submit a separate pull request for each fix separately, instead of fixing everything in `master`, and then just trying to pull your `master` branch into `Joomla-Bible-Study:master`. + + +###Translation +The language files periodically need to be updated as the component matures. To submit changes ot add new languages, follow the same procedures as above in order to submit a [pull][pr] request. + +###Testing +For every major release, we prefer to have an approximate 2 week testing window. If you would like to help in testing and giving us feedback on the most recent versions of the component, let us know + +[fork]: http://help.github.com/fork-a-repo/ +[branch]: http://learn.github.com/p/branching.html +[pr]: http://help.github.com/send-pull-requests/ +[phing]: http://www.phing.info/ +[setup]: https://github.com/Joomla-Bible-Study/Joomla-Bible-Study/wiki/Setting-up-your-development-environment +[composer]: https://getcomposer.org/download/ + +Reporting Issues and requesting features +---------------------------------------- +Use the **Issues** section for reporting bugs, or requesting features. Please make sure that when bugs are reported, you include steps to reproduce them. diff --git a/build/com_proclaim-9.2.1/admin/access.xml b/build/com_proclaim-9.2.1/admin/access.xml new file mode 100644 index 0000000000..b9080c34cf --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/access.xml @@ -0,0 +1,187 @@ + + +
+ + + + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+ +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+ +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ +
+
diff --git a/build/com_proclaim-9.2.1/admin/addons/addon.php b/build/com_proclaim-9.2.1/admin/addons/addon.php new file mode 100644 index 0000000000..dd26118fe2 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/addon.php @@ -0,0 +1,202 @@ +type)) + { + if (array_key_exists('type', $config)) + { + $this->type = $config['type']; + } + else + { + $this->type = $this->getType(); + } + } + + if (empty($this->xml)) + { + $this->xml = $this->getXml(); + + if ($this->xml) + { + $this->name = $this->xml->name->__toString(); + $this->description = $this->xml->description->__toString(); + $this->config = $this->xml->config; + } + } + } + + /** + * Gets the type of addon loaded based on the class name + * + * @return string + * + * @throws Exception + * @since 9.0.0 + */ + public function getType() + { + if (empty($this->type)) + { + $r = null; + + if (!preg_match('/JBSMAddon(.*)/i', get_class($this), $r)) + { + // @TODO Changed to a localized exception + throw new Exception(JText::sprintf('JBS_CMN_CANT_ADDON_CLASS_NAME', $this->type), 500); + } + + $this->type = strtolower($r[1]); + } + + return $this->type; + } + + /** + * Loads the addon configuration from the xml file + * + * @return bool|SimpleXMLElement + * + * @throws Exception + * @since 9.0.0 + */ + public function getXml() + { + $path = JPath::find(BIBLESTUDY_PATH_ADMIN . '/addons/servers/' . $this->type, $this->type . '.xml'); + + if ($path) + { + $xml = simplexml_load_file($path); + } + else + { + throw new Exception(JText::_('JBS_CMN_COULD_NOT_LOAD_ADDON_CONFIGURATION'), 404); + } + + return $xml; + } + + /** + * Returns a Addon object, always creating it + * + * @param string $type ? + * @param array $config ? + * + * @return boolean + * + * @since 9.0.0 + */ + public static function getInstance($type, $config = array()) + { + $type = strtolower(preg_replace('/[^A-Z0-9_\.-]/i', '', $type)); + $addonClass = "JBSMAddon" . ucfirst($type); + + if (!class_exists($addonClass)) + { + jimport('joomla.filesystem.path'); + $path = JPath::find(BIBLESTUDY_PATH_ADMIN . '/addons/servers/' . $type . '/', $type . '.php'); + + if ($path) + { + require_once $path; + + if (!class_exists($addonClass)) + { + JLog::add(JText::sprintf('JBS_CMN_CANT_ADDON_LOAD_CLASS_NAME', $addonClass), JLog::WARNING, 'jerror'); + + return false; + } + } + else + { + return false; + } + } + + return new $addonClass($config); + } + + /** + * Render Fields for general view. + * + * @param object $media_form Media files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + abstract protected function renderGeneral($media_form, $new); + + /** + * Render Layout and fields + * + * @param object $media_form Media files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + abstract protected function render($media_form, $new); + + /** + * Upload + * + * @param JInput $target URL + * + * @return mixed + * + * @since 9.0.0 + */ + abstract protected function upload($target); +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/docman.php b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/docman.php new file mode 100644 index 0000000000..707b417ae1 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/docman.php @@ -0,0 +1,74 @@ +getQuery(true); + $query->select('dm.docman_document_id, dm.title'); + $query->from('#__docman_documents AS dm'); + $query->order('dm.docman_document_id DESC'); + $db->setQuery((string) $query); + $docs = $db->loadObjectList(); + $options = array(); + + if ($docs) + { + $options[] = JHtml::_('select.option', '-1', JText::_('JBS_MED_DOCMAN_SELECT')); + + foreach ($docs as $doc) + { + $options[] = JHtml::_('select.option', $doc->id, $doc->title); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/plupload.php b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/plupload.php new file mode 100644 index 0000000000..0433d5d3d5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/plupload.php @@ -0,0 +1,89 @@ +addScript(JUri::root() . 'administrator/components/com_biblestudy/addons/servers/legacy/includes/js/plupload.full.min.js'); + $document->addScript(JUri::root() . 'administrator/components/com_biblestudy/addons/servers/legacy/includes/js/legacy.js'); + $view = $app->input->get('view'); + $admin = JBSMParams::getAdmin(); + + if (isset($this->form->s_params['uploadpath'])) + { + $upload = $this->form->s_params['uploadpath']; + } + else + { + $upload = $admin->params->get('uploadpath', '/images/biblestudy/media/'); + } + + $document->addScriptDeclaration(' + jQuery(document).ready(function() { + uploader.setOption("url", "index.php?option=com_biblestudy&task=' . $view . '.xhr&' . JSession::getFormToken() . '=1"); + uploader.bind("BeforeUpload", function() { + uploader.setOption("multipart_params", { + handler: "' . $this->element["handler"] . '", + path: "' . $upload . '" + }); + }); + uploader.init(); + }); + '); + + $class = $this->element['class'] ? ' class="' . (string) $this->element['class'] . ' span12"' : ''; + + $html = '
+ + + + Add File + + + + Upload + +
+ '; + $html .= ' + '; + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/virtuemart.php b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/virtuemart.php new file mode 100644 index 0000000000..e6187c77d2 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/fields/virtuemart.php @@ -0,0 +1,82 @@ +get('site', 'en-GB'); + $lang = strtolower(strtr($siteLang, '-', '_')); + define('VMLANG', $lang); + + // Check to see if component installed + jimport('joomla.filesystem.folder'); + + if (!JFolder::exists(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_virtuemart')) + { + return JText::_('JBS_CMN_VIRTUEMART_NOT_INSTALLED'); + } + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('v.virtuemart_product_id, v.product_name'); + $query->from('#__virtuemart_products_' . VMLANG . ' AS v'); + $query->select('p.product_sku'); + $query->join('LEFT', '#__virtuemart_products as p ON v.virtuemart_product_id = p.virtuemart_product_id'); + $query->order('v.virtuemart_product_id DESC'); + $db->setQuery((string) $query); + $products = $db->loadObjectList(); + $options = array(); + + if ($products) + { + foreach ($products as $product) + { + $options[] = JHtml::_('select.option', $product->virtuemart_product_id, $product->product_name . ' (' . $product->product_sku . ')'); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/Moxie.swf b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/Moxie.swf new file mode 100644 index 0000000000000000000000000000000000000000..e477cf9326ec212859ed21cc1ba4e19296dc5270 GIT binary patch literal 29910 zcmV)4K+3;ES5pch(*OW?+N`?=d{o8u2YzSn+t|Y4YKRA3mvc%A_e%CV*l>e0fL0zidKBeBZH0$pI>Y@#a`t zXQD0IQA~AzAlj8Ua_rdDs4dNzK|8x*5jkW_^Q2%T*dFXi#3xOjI2i-AG*1mhW9|OL zQU1=(NL#a?hMTl(LOdL8K4GbUNpM0a;*W=?P3kA4K8dzOBzRO=OEeHHu8IVg6(3Yw z*56-JTO>r>(!bE7vbO1`-V>Xn?UOoV(Uz`etSN+{WasQIG(=}tAkr2O2V+Ndb)3)< zU209yk0qMsSkRw{4x~uqs6FEEXzlX129K(oC)+Z0xki5?c+_0~^5Q86xr?WiPCnRL z24Sa7+Kt;O3=Z%prNa5KI!!6(eSLk4>?%%J2MG4UQHuO``?tTYnTr#D+CDeBtSzWK zGWg4+q5z?UV*d8vWW}jWRE|^@p}R4Kt=LsypwyRd3N6Pml&c%}S+Q}SzCQK0M;wp# zsZaE&$v$;wpZZ##`f8v0PM`WkpZZFlx~orpy-$6zPd)X{>%%KnTr{I+-KOWn%d0j# zC!W0Q{O80cXYy;$<|{Vxm5=gOkMfi8|3-evYJT}@zWHpv@*2MC8ou@#zU~^n{u+KN zs@wR<+xVJo{FH5c-8Q~{8$Wd$S4#dm_|{qPoOIrFYiC~~--We)QTBy@_U-d0e?R@X z=-dsre)R418(onv0?DtZAMwcMN83t1nf^fWGk-nl=y#?!-V}SQ;rj0BM_m*QU9s`Q z>4#5h-2Cp}UzxtX%=bZZbno0G*_KN<^n z%lg{Fccx>rS6=$$qtjn}f&O`B$mP7edd3<<5lft)tbL z8I4AQ{titFf#_=MNT>jPURQe{7}Gt07eX zCaWscMa+yu1ExjY5lrM(wMBxp!B8+3>}U>(3W%(|eOX&-9eJMlv1n^77>~;ZM+q#^GGzF8e&*KRYOOlt-UP~Y_SF#Fm(Rx`uh2G z34fx?synJZm9bbfCM))a+Bvns6T5=(1T>*59+cP|ueYr3K(BY=l3=sG06d7sRII}> zv#rA)TV5OVw*+HmW?}ZqWo@DP{#ZO1%dbwYDdu154@81?Yg?_sXuCew51uc}E00E^ zvHF<5BToAVp~TXLpBE`H;Gg>YTmYvwuA^S3pU%^;-2Q_uFke#i!<6$9&PW8c7VcS zh&R+0v$){Qv{dPsEn1{+1R!7Hp3$396VCpbxsoAZ0mJrf` z)h+L6E&$oofhY%--clBy>5m5wIY{$T&7{GkygNOW19_gmTfHblI(2ta!)xu#30}#j zIbdC|BN!WGF>U}ZC+v@>%fqbpvPeXdWbkntt)7%jc)QwKRDkA^3I^3 z#PCMoB!exwmD#YTNF7M*&3-Jbg^D(BJlYj&4#sWX&L~tq7}MhLl0n@oGovkD+1{C0 zZnni!T5QKLr;4^j)Upg3{C8{6fKN=sqRRy}+tLiyydCf(f)bY(N|2ZvZD|WZ;>Zp- zcSo4jB=QT|f=hF0fK1Iu83avY%uJi`wzapa-aw1Cw5=r(*2BTJ)^I|!2NQm$w-aI) zj4cVymS-H#jYRz|Rk3Kh?CD6?h>r!CO2(47GN`nrGqCgOj!@Lr0_RPf&IbYllj$-< z)+;+mYFjeh@+_)!)wHTKDJ`(m9}D)6FxVT5!axPl z(t=RJcvl3<9l*#sRJkjmMhpQbuZN%sg*LG*O-r0@WMs1QY!rOT_Y1 zdXQeQhOjM`fX)W}u^caPrA|tWJ=&30Z8O@DvZZ#*j6{No;4tq%@y$rD=}kl}Ez4Ut zcg}3YTPedUm2x1;=EYHlqb(56s0?l5c5gfO*#^F$F>IZzDR(^&B96Bf6$xUo=53C4bdUv$!=}ZdBXQ{xa=iV_Eb#VkqaGFnVXKblGuY8$w=z0DXFQll ztzQ6!AQ7 zm+Y0&MhA%#)oIc}-j*ml8r(+E-=1c#*K(X?@wsUZn$)+tqq8fKo0cqDGriC^@>?x7 zxPb_)Lfr6nw!w(NngzNNiD-vT4Z*k|XJVwNX}PpSkY8L3;>+ z#_oY`>K^C}sniJb=EzKVTiZhFthNwE0Fj6cQykueJR%q?3W@@mLG1lS(Sle9qHK+l z7G-BT_DCb_HS=d#CNef+_ef`If1AFjt#y&VRX?^~3Rc4cD-X3K0uk@AHY;yfkWb=w zbeErE9<;~xV=KzNv+F@GbN$$|R8{6KObF=?&W1F!`#b6bkzw&fi?^lO8|i9CNQYR- z+YzJr<3oSfu*4sM7Re6&KkDHBeTSmdK+R$Jl7U@@@1ZHHlmCx9`S;W*k9g6)H3LUO zJ#4u023rxe6;OM5s$xaO6J4qQS&f8qr3)qCq_t&;VFa(O}fhnmOgzh6Q?1 zp1xgrXsOCWvedgDn`0GQ+7ONAXMzE%4zBB|J2saiFN(|(<1#Y$# zOpL%Q#G;*sw_V2OL*XOZp&Ml(SS09tY`Kh4mh0_SX0;m4{*H!@mMG=5!Ir4#LIt*@ zCF+FrwW1p9xgoAwZe0sSU;|{jfE+f3Y;xXs*dK#u(1Y!PDBNi)+-|(tkKidD>}>Pv zZ5>!c!XAiGaMJil`La{CP!YB^q5qVjN8#|dSL1OND@HT92fTB#GG;*czx*^jkjl0Q`Y{x(;}X{DXx zh<+pfyS6;IJgY=rI;P3g;UyuCOEc7xV^!+G{)h%gA4>>`M5l&+0l4{Aa-@DszO7&_ z;{xTXhiC0&V2d-$XGxJ9ktL|Rw+-&+b^jGn)VGB~Ml=+H;g5@izcp?{La#V+QD0qE zB`OzISE;k+*J%lI6$Z$tGldh@^;2()lk3T)u(YbeV-1v(ay#`HPX_|IldewLH&$L< zZPZoHnp-)qUd%kUzEZ23?WwI7b3F5AX?2w9b@jE?^JWd*lLLWc(7iI)HoR7}oda#5 zt1KDd{H!uXmac5aA+^p9??Fq!IGQ{gJDDW}2cXW8hQe}ld&%;gXe)FmQipqGup|A# z1)Z0T<(a8Q$@;9Azcbv{Tu!b znYn$dkzj`kQ(M^27Js}sFfkP%xw6zu%2Is)Jrhp-9pTU{mCeRa{KEnENM86m1(BjU zDocp>Op!x=F?F}kg_g7i)6W7bVm5P*r>vr`zO1%BPd+qIv>;WeI(zD#iuuIR>daAs0E9ZJ@k9AegTTnKqy26Y7)>l%yz3$j~^<@hsX}M?ad~dmD zUe%oH@_KtZvI)ku%DMCFkChvR+K39zyh^=cULEvH_sp-HS6ShlT?ro4)_H3y%PXrF zR8|;eGvz`YUd!W^!vVw{-j-mdqFd#>YH*}7LnEsd8LC{`Rh6e3;sY3JaZcAt3C7N>{i##j#e8nZBAu< zWkG+an2rVW`%zZhjzOvyRp!XfmVdN0$C{;zJJW@7D~4;alvesIE#4W#n#q#q!CEwT zMNq0EoL*Nsr?R|0pCbJ>GTw0n0L=-#ylh^1<(z(WGsRJn{Dygz3+IC#5<&}cR#eZb zt}mP8omV-ltRClP&Z;dtwywNv4s2%S{OYm-y4zVE7`iC6&`FLo<((yhXl7T)V8W>tDCz?<@Vqi%LtEo3DRIyJM>n`TCH+&~0aA)Q`pFt4nl0(+|WkX+BIwAT@`EYjB6VXODd_s*%Ts@MEf z&66#46nh|m37VA)%gP~P)%9jPjT5nGG-0={40O@4L*H=KCc~t5#UgC_sMIHv{?8|6 zbq7wGQd)Y*q(B!eSX+l7pC>#aJ>C_-y(lm2k9(HVYeFZ&oaKWDJONL&-aJbNA}g%i zdVV5y``h5j_Zdhe*#fJEYotXu;!g(IEBkSL>TXYXdP2Ua>b1ev%4MBq({YQJE}qzU zKuM0jrKKEP4)~i-(5Fr%<rnuCV4gVhx(a(X@MBr4r6-_`}Dj|)QPWCb_6JcJf|R)~|Jluw;1j*qr=sKF%( zH5xcRcfdwnzhg_`p1G;DdtjYmc0LofBP( z8!PSwtdy6QvZ;u*phzuo7G`ZMu3Ij~==8TN3dW+gF6eQyzca`eAHa&)7#N>OTS7;0 z(3%LdBlWoTRBt_F*wQa>Dx8-|FH96_B7RQ^jlC-#EcbW9f&@ipS3IoKV9mkY0WbCf z{?Du8vL|9FIoq>t7W8IntHf2V1%jYiUm>K%A43sZjx5fWQJN+dmTu0&M8 z9EOB^GPGWGZ1Xct9I^#@CmZaLF;t*I`UW0~S#lRM=n_KTkjQEHTX?|lN@3GbROX(>J_0$exhzD9s8Bmge zmv6$+c+jNxSZT6yqW!O?B7yKaC+iv2iVGn8YP)|~{%&u>YJ0F9SGVQ_h1c`jmIWhm zy-o@^Z*As*W|Ov5M?sH4rOJ+$9Dn~4sm-7IY@l0y#7@slmNp66WIo+F$h`Sm_%}@J&#@T+*YtZasiPN*g*mEh){Fp0A<4N-|H(_te!}T%jw6-W;JV z7d1^hVEW=o`;(=bK(=b!{)?wi9AEOcl5xCbvYCkkO?nN*Iw3vH2=C!R=$$w9=t*x< z>Gx0TmDH5JT0V_6%%^xKTwd0g9*A+5gRL zuH0mS6%2tS^TkQG-Z)_-t@q$ekV#*5@?zQVukoz$EQ~sPc6=(q~kks zG#i~e`iSCC>Nt-aotHhu)Z$^;KWm8MAQBVe@?`9pmzTI+F2zbm$kzb{x4uu36*p@= zbLMzG3o2_Z?Nzi5?8|qDotAKXc=Xx6Ia73PC<{1*%&}p+!4fAc*E+gb?$YaUR z4OQ}{p~;^}@bMGv!SrP+&fMw|<0qQ!{$}}|DQ;`EZe4LR5NvJhK*xxU-Wce6rU9cz z2)kumD0;}nflHfDgp0Lf;YEn~|y8FA`?C>Y<){H%p|8KFbb=F@jRc+$@0mZ8&R%)_H6 z*weP}z$rZ1X$z%3?DP56sju>>`=@Emt9` zXIIp!<+bHTpesP{w|2{b%7EXpa^O*GN3aFwmy@+|TY9N7Qj#B04-&huq~oV z9kE}M_8u9pyR8qs>q=?mIc@(olGbeZ7)w9vvJ(w76cau2qNIk z;hbPUp^jrmU&pNZbtz1B1)HeO>WmAZCl8^Ml~Gr-RNyN4m@;CI*f}zcuu(U9!lC}9 zd6m}M=35_VU6_V^Yd=PhN?)S_Y|~^dMD1WuJg$I6n#DHXpOt-!qDhoOyU;M>vL`y#qQ`PYmT{e z9{?rIn=^+*(fVkpRgoa&R7K>*vI}BT~mPVX}Gt2uXpnt~uC|j*iG!IxDb5#J7v0 z(RTS6)0Vzy+50bHW*xny(p4)De3}DXqN|0hOHNibpUTmW)^wXAyDs9jvt~LPI~10`!P}>gDoknsOyX-O!;k%O2&LYv8V%ijNZ32PXady zTZMmlM829;McSee+-8#I`YtdP7S>UPz`J;9&`+d!<&kJt%kp$p!^T>I`=$FAhaz3+ z{>A%O6d!zOX=(9<;zK8wmi}cNQ57#GUJfLiSA5VRM0W5&L^ZZN8jb9U?3m&M50|4I zbTHBFd(0k4Kr=hLlHz;WS~y?@ z8T8~mqyJNJXljXRN3!pL{zxVSm(#h>Pb=v+qBPi1{{zjREOF}pz5AZK z{^3FGX~c&A?_K|7FGv6XHfl!N|M&p+G)ndVSwjA3q{{!366ox|ct*D@rRQ}Q4s&rnI`TKIVaUl z{_7%^!=^Y6VSms4N3Fw95B}#OmTMlqf-wwm*h;p@Jc6CfKsogkwusr-B)f;LW<-0` z8n!5B1{+=*T+61fW3+?{R=Xaw<)<=KPGjtJX7|=sp25zu0srV zsKE|1*x?47YOrYrJJQgPGT02mUS4R(^j{%Wwl8SL){`-j2) zX|NT{U@HNu04D=ZVaDjy%n)l(UI$pujFM9UrvXj}oB=o!a2DWfzy`oMpgR|E9^ib` zYmAZ$kX;D42yijr62PSx_A+LSxdLz{U?X4?0K<>D3UD>xTEKOH&4B9xHvnz~U^;da z;AX%rfLj4u0Jov-b^zuYa|d860P~Hx6M(tL+y%HBa1Y>Kz#z(s(I0ha(S1zZNW zoEz*4ZVb7S8)6eT4!;_34d7b9b$~A8@Xg4s2iySC8v!=~ZU)=}xD~L48;9KnxE*i@ zU@PEGz+Hg50rvpz1>6U?AMgO+LBKw^NaUY^I3G*fa-GCm{dqMv)wy}d771NB0SCPF2cpdNtNZtgz1$Y~< z3-Au$U9`OicpvZq;6va(27Che6!00~bHKj=|KY~0F9BZxz6N{)z^Tvr7C9tf)_0)! z9_1eZ{{{RA_zCbc;1|HJfZsr~LWLr$M)k>n)v7URE$Zt5rvgp`oDMh>a5mr^z4N347dbvDc~}|<$x;yR{}NyHUX{zTn)Gea4q0Ez-GYpfExfe0&W7_47dew zt7^>K0=Nz3+W~g~wgT=1+y%HBa1Y>KzRzgcY-&RP!s9nZKyaP=5n%g)mnN zGONNkdVz8D$;eIttOl$R<}_xm70g@*SPwWAFoT(km{EH=2+jbUDNKVK##zEJ&IW7{ zBUEz%R(cNF&K2f-6c^zPh0%B+Jl;isi-nhZ%O5E^|aK2FL{} z*No(v&!PC0nrpV1M&Jc3^hIF=;Qs!F3@-2`WJxfy8+orVFBf@6;ANDz3o~k(D_Op| z0m{;n|J!f0;-cJX|3TE6)Pq7U{S$leEh0FuW6@C^Z4*N1?Q03QQBLHnnG&j6pJ z{%^p4g!vwZ`U1nVuY~y}m1>P6+!T{QZs*0o#40=oOhbjfPMr+Jq9kIxJonE zP*`;`35?5(xJJ0lqg_T|nYl)DnQJu{;s(uJ>@w%O%u|7BLEAL*bC9kOF7sx=MLgW`|hITRX^?)^iOEmLRbPvE- z2QJgh6;!@lGXjqah!U1@1!%5BpN*P%HMK=xkbv5xnU~Q9?m+oYz}P0z|bDh zMiiJ2Y6a%QfEA*^d<^*mq5x(HR8Ih&1UvUq19k!40q$MEdw}-=9{@fCd<6Iy@QG$PK1Kc+Xg>%1TQfgo zLq`lVSE|Fz73wg!9nJiP4L9MN%_ECO6q#RWMdoTz1PfLK2}4)7+*Rxw6u#9^_>PkA zQTstNH*s^s2y@X0tb2s{IL8uyLc`CRS+tk=G~#IX3#z{YegpJrBld<^>E<>*9HONg z!S%x6CnG>V1!aV7K^)h@eT-m|Lr9RX2KqA12wu$0=Xj3!G9PKe^NuJsU)GAvb$YQ; zyIu#kij9*_(~Xl(2b=-8LzvsqewJQro=$BWbn_gPckyC#4f1mV=b`UO=j+g+V)H`O zF9KWu*bf`{RfpNen)(1Mj1i+C=D0tc3^>Iw_ti&?Ha}xSP4{r~WOZM2HDIke@*_@v zE6JGkC!8p7#l{>Cp{S~=D0UPTp(rX-6;wHqNnGk5XY_})OsMpivubJ_AXSB{ibk1| z^$&yUx}w-H8dEVyRwGwb0~50WJ!qW%1g%WaC_=GuyFDkznpP&NPKgau3lk+%RR;W{ zRms6K15;ujNTg^?%@GDhSM7ENP^pf7C@HeU9S*x)VY_vsv20eJT43sLjdj|VLy`Pc zOrUcCX@Wd}nOYj#ZM6LCjv_^vwHK8s;Nt++;$*C)QafYLOv0^0;f%ScRHC9|4$Y(Q#(S2Luhd>M6~+c- zxAzkb*cfrdl0V{y6fQ}{nVAwsVvmtM{-8aKJ(!Xq197<-4h>3=sbCM*AlzaQ%>ZT; z?!GHiE{9Is#=t4rWoRm)!;=H-{*POdDn*Z3f=XiDFPCa1MSodu7($2O zWiD!C z&_o+d0<*i6J^v#GkO}rA?5U3W9zzoccIgzgqZ#3CRePdC0$83;BcYbOjmcC z$8O&fE9LrAOXm`>MlRH}Xr>s;O#?Klh5!BW+f$NjhXm=wM43R;Ay6c5(q#(4+pAP%Y86+Gn8lT8v$=9)HR*c|9kBWrrc9s1 zlo@lGQZ|n%Gd)ZxpU;$vqnT1!%ap3RTyt;bFM2%*7;E54^#XEJ$8e=)-Y8|x{87r> zg`>=3rIsDbl%p3NW{y(Y3y-6XE+&v8nu75CP$v>I0 zbOm%|*-9kKS0Op+WOlf@pK=i!eF~$2SIcw_lRRE4E9<0~uP0xvoJ#36jGe}a-KWcz zGZ@W%CL_Of7L!Xl+sZar**Tc!ALk;eNbdn=f^r`- z@0Hyqax~q?$mQJ+PjU}~gx|{^Abx2o+2BqO=+#yYzhbiar7pnEUtMfx&(8R>Sm9jiK6`IwF0 zAy>6irmx8KRhhmf)7L@#Dtkkg-<0WFGJRX7yU_X?dqzvz0N+B<5-o4CuaLgQzDD{s`v&PQ_ASzP*mp?Z zW#1!xkNtr3efD3ZAFvnulV3WhDxSDPOYD zt2oh|jMT8Hr*OHL)tvabhNrpu1zU^qJ`Tq^WFwXJT#D+ch~K_qry>2CosRSyb_UXK z*_lYcV`m}#o=)%w++msWU$z11kL({>;up`U^WB>96bpq`$EXk@m5Rkgnht zb6VvkNLTSok)F&iLwX9o9O-I)1=2PAN~CM~Mx^WbCZy~6RoK^5D~N6r1$WLklxE5MtUEA1nK?! zQKS#>$B;fq8-0iu+09DjS#G1@9^;Rr;c@;1(kJ+nNT1|SA$^KJjr3{$4AN)#Hl*A5 zi%^#;zEB|EMHHx>p|bb5&egM2_CD8Db%V-2;JQ%H zRaqhXkSNYqS&{uCbQYr`)BD{EWNwy+7wJW1oL>m#z3e++~jbg1hYd ze#u=qC1Z`R&>!aTYfPY<>Ngl)x2xY`cs)n`j_aE4P`~H8uIH*haNW@J)bYwBAG^SFY%A>-{f5b@G_D>ke(A1wXl98|e-LM*ep=p@ zA5D{^!Z}%8u1ObeV)_c)6NW1*RhidY36^B+3>w6x!oGgS z_?gy-XIUe{-krv+9*f`)yU(Y3Aaf{}W4jLJ3XJhOzY-I?!8d|CZ}MGS-6YAbl4Ms)viCTV#s}v4sf8 zJJ=$j{PnI_A;$!{0_$<14bDNo$EcIQhy5Cm2J=dv(ptD73PlO)jN?jixQ<-qk>+%y4h%) zCVM19`+BBvjOM#h4c(;rZ&s;%iyFFB^>0yqx2d7q)zBR(MoE>os_uWQRd=c^KE7Ei z=^KtH+BYTB7SKxA#;UtiR`n%kG!^Ew^{i?(ow%cz0W)CR8*>MA-;{t+^$}-PcdM)b zSE8PPar`~%xGAR1wX?6!X4-5%%{QgTy&!atTJ)A5@}VGQMDlqKxz1tGa(w zXEH()&3$Moz)dWfLWD;X>n0~dC7%0LPUR`d(0;P4HSS-tzv6$JCw*FIhWlrAqh~Aw z&xCH+^FL?F(qpi*(je<@XF=A}&V#JCT@A8;Xcs}|n-XLZMoU^v%^2ZrE-`Mls$D}# za}_E|sv$`&0A4jgO|=5lst2&?eTd4cW4WoK@Hy62J*e{8&f(Y!^>+WNZgfZ7748|n z14Cc)2JRWlowzI0YDtmV%-yZT3zLYb1Gi7s#$aHPsc8LLeHrFZ7LO>RsGMY&NiTX zLeHy2f*Y9WTu41%P@8q%pwN3fpcmnmU7|P<82Ft12<99KL}}>5G=e)FisGb_N^_Q| zHhsjMeSPYNzCQeaeP16c0ny#NfV)oT8&BW+?9bB-PZ-tm9Qr^lD*t=QqPamH+8lckMG)n}Ia4lng} ztEIjkKrdhv{$Hq!l>fpSR$wxw3N=}ZqFq&mM%o=3*DduT2YP)Vj{OH-b0AX*-Q#~* z1!WHBLL1&s>B82>&PMI{?drHOI35QPjLaGeT%vO5W$SFlt^!f6fJ@Bt?NEJ>solPv zs%H$1ou@(%_L2-yh#?9wlzFdD92neXbh*fFynp;u8bIKncPV zlig#+_ViYh91hl)ZVbZkPG5!Z1J(B-b~UlaDIh09FtaucO&`gbd8uy@{$I#Rgq`SG zNQ-q~1s`(v`D*w>nr5g_H9Z&8^n@qVEY&1h!&D}bjitVdWN30tDOr-?7+nko^5gXA ze4&bwNh69llml#N`h=G#{!eJ&5h_>3{>jpAm#QdkHoKcnZ=*ARc29aT)pFQwYNkY@_Jui_p0$O7|C(&8^o%fjg6mhs6yxy-Zg$hvqr`SOSfq@ zk?M$v_ZBu)EQNPo-K=%H5EnHltF}Xqb+}5y=^>j5Cka=H?r?bUYvXzXTIfHjFJ~*_ z5yk0Nl-`07iqaj>s=lyf6-A52{~y)4TYZY5yKaQE8#cWg)9=HwaGW1NgyVabUc$KadNUG+I<7XUR121bnRE-|;z;<~XfWwjF}_bozJ zHm(NIXaQUDq;#k|U>Wu&)!&~~e}8ErR+Bn8WhZxXx6BnfEApH347)7yB`!) zKM^enC5TCUAlN+!!4MIGfZ{M&VW|oPCZKJ=U;!qv;u+8O5tB6QnlU^;7^vwO`cPPIz8(0aEr8Fw)FE>OZ#vF3xweUhi8y2bB<)ADwP zNJVgmFEk);hoS8dxI*3H`JoIRlMX2~9g8|FQ!7L5@Jy{7wW%uC4GQeK!IOCQ_vOUh)lmq^qU4nFbo=Wy@ zr#xe6afox(;2gQHZgO8^nB~6qUA42Cp9>&~B*j)Fcq8H1C zT%HTLOonQxwlQ4e{0OeiXaCb~=M3m}j_h_Db<5pa;H7{NYwHc2N4p>aB-x-UWb1r^ z{f%$7g)R^qnsFNqnEnd{T{pADtQ*o1st%nihwxlDaCOy~25YLiNYG6bW_?^QM)cjo zwiZlGFPJb`Y;WjdA(wl}faP8ys9_TZBd^^1oAk;(K6R_S&-aAO>5kLmGq+m9_qZ3y z$>^4x>s_Mo*Bsz17yQ?k~d`0dKY1w*0GkQGZ zc~8}R1!p+J%+ZZcQV#>fD7_m_;CvAuPhMnPi4x!04M!jmnpDZMcpR3lgafzQB62eX zCe+thpuk_*U{dnn`x|o?C;_b|mrGA%5)a82*`3X#o1yA}i6NwgyabjHEWqTwBq$s6 zNcs+iy4%3L9*cWK(YrBVYyu16^r=%oR9z;x#Y@=_DoR>_5=$}z9B#(dry(|Yp=P4^r?wrp1V+ORQgMi0aP z3vG05$VK~X;(}#Lt2r}l2M~+u-E6oZF4WH^j*z(dX3X{xPd16rRU&k?2wg)vuAwfY zEWXiM%lLga!fT1}FRE(T_Dhy#YgDA_x_*tiMuh9(_hhIshem~^_R&$5u$xznr!yHh zVAxd`&>7CvK{=da;$-D~#T`k88r&Vp&@m0X>N8HqK97ESv=_F&Icxj5_uY6J8CmsT?05O(_-+@oFF0XvFUjNIwFUU-gD8b{WQR8Z^n zZB|1!2;Yt3YAW3%d^d}$J+}zn=t{Ln?3fytiZQy;xvEv^EiNt|b%umA3Tp9E4q z7s+VEr;YLNLQ~_SnnjA$J0g6}(EEJGe9sZoFsf#hvSO6H*;6C)1Te92hx}2@jY8qN zax?v4Pq|(wVv%yIP_!*VxlPcojkXHK7^T$G8&xK1s!PAa+$sL(9mbw|hgk^ndJ~TQ z0P84r2>IsZ-f1n+T`6Cj+^-1VwLG*zZ4lNGH6TVao|aLi9f7+GR&q}vrE8ew?n~t; zz7;%lri!btWNZ&Pjqa+u1O=qMe@2_HLsCIiCLOh>$cgb`-OcZaaz65m6@^DyKo0E|2gFv&w# z<_$ITxGEd}Y|qpldQ24TWxd;2n`lt>nz3MfkRRZGNR0G6F1REcgLTLU(@515g2{Jd z*_)UJQEabiSFANfxDRgIgWzALuBx` zI2mfZAnjJ0E|8CM-JwQ#Fiqhm+Lu#KP~%MN-C~2=Y;(E`5E69zo)n>{gm164#c3^W zZ0^R{ISU8yJx+v%)it zH=aP~MoOAyEcTp$7@t3ft#RdfY|WuGF&wLr8P}@`!?Bb1pK1akg!#qQ>h^QXDeE3{_>{aE;AoI#GV9X8Qao`g-rT#!30SMfRE zSocM|AY+6j5IXl#$eWB7EJw8rENIZ-r2K|vv#nR*U3TohbN^=1v_mw)>cP^zii5w} z_nIs;T|H-~;C{4OzGp{|4<>SlAa5fHQNF5crzDj{MBf-AZz#pFpQ%*dRKl;WdR?%y zOBBx=f(HbK&I4O}N)%AYYKDXex-nQ!TFg=QyeX8XS4Fq~RcmRWh3DHcz95&}GfhmG zn-T3n`y1ctCrUNVc}wtd&dYJoH(G7CjCawi8oEf5TjpSV?48Ns?uLydKdQH${R5PMD6ZhQoXDjl}8ojZ> zB_j|ghf1nwqs-NATF9I~_`H?0I+rlnZ$_cN{an&Tn8U*@8yuiiXVJV~g z3z5>!{FHXSBivsKvad@DhDs%US6JxKd!oc%^{(KUq(m#xONQ)O)=N*-cqw6VhA8yNDSPy@Wwx z=wd)ST0-9u_jn5FS4Ip&y{;mulnY3so3hZ{d02WW@28fMdZV;PpesvO=hT`ktW_a7 zCHgHE>ns8b$F~&hExnn&C7aZ0FN2Ia`&%WSfSaY{AY5WHTtd+FfsnuX_z)IC9PJnm0m8PKV{(icGgp~ok8m8i4Nnyh-M7? zac~V=NoG*&^?ZzrbI2zz$5j0U_Hi)0q5Cm)FhtLH9nXwGPiG+xcUwgF0$S4c?$nC9 zL!XMO&jdXNw$c}n%Jk~%u=?(vsxX%Um?Unj>m?`BEp253uc_liCH+W1gk~UK8c%b| z>vWi|ZWC^Y-P~%HVTRI8($W_|Ab0hFj$1X1a5&pZ(IqVxwvK}XDe3n9nQbfR}uFe+;b{t&hKUA zcD~=840Z1OP}a9vjjv`^h^SVv-&w+YQ(uP{ z(HGy|)R*D8NJVezt1x{Q)U1l?JP@gFRfKa4Qp2ifbcZjoSrt9=CE1W)k`0?W;_SXY zqo}WMY+v7@eSH;ueaH3n9pBftvab&fJ)YBe=7f82gyF?Ko}=k#+es!;AMd=@Wuzm0 z7ye?vT{wqsAB)f)&B5)X#=3p{M7NH2|L_*_GgUv}4H_;XO+WGyCHy0A`iWlKf8tF) z^AaBZnJy=tqz8HQivEiTFG+TL{zl&AM8Xb|Z|mV@N%yZ=O)*-vha|bf*B<(b54WCw z5P%;pG^>{QM3wG7hYp>JeuC1XhhgGr3=Gxv93*fepdlTO{?PVBWa^u3_;2XS>ck+e#b{#R@YcO~Vp{*Gj5De(cPb0UKKA4PKf zj?jtYAKls0>pzj6Nk`E~>-JxHl;0!#6b$@&gin2@~=D7=&Y5yH$#nZ#lNc7-r zD*dApPk$4X_K8hhI|vq-aQ>AVN=r+W9?vRG#c{@ZHilzKdiXl=(bTioiS+74 zd%-z|PQ=kk-;|B8&eFM&L^@{ey69X*{(ObLN-QPW4li{!QPs1GQRijASwd1AUgoSI z>o%RbFKHG~*?>ryI4B#`G*x988^xuK;x;kjxxPNWsju(0zCM(GcZJ*&_m*N;>J$Q6&qnm{-Nkyzv#;Jx?CRbaUe*hCrFZlmr!Q`|kk<`p z38(y6ln99K8mFLrTEmtoLpSvGVFQ09GeqW4E-t*(GRuEUo8{G7wpn(NS#C%B-*cGI z0vWT+Lu<5*Sw2OR>?89m_0TfUmRbIV%hUg$7u_$5%#Rl~ zt`4tfJ<@DWPMOUfGMhVkFBnf|c3h9IF6$L^t%lfKesu_~)6g^76JEz)=1!&ARxnzV zgUr%etir#ZJ{hiLDl=?YsBazXe`kL!SO&)u>h06M%hS zw>Z90qPb;J@=D_)X6^g2_sE*WA~JJezw-DRxH&1zbtd%bp3!CDg7bu4t2 zMo%(S?0;rj$ujRuXG3eKag6^gO?Ka)xlhw>vd$nGTEkXl-0C`3b&jU2O3me)Lfo$U zf@9IS(#Wi1o=q_8=}IzmHS=7>FuYvy)x>Xcnnu51K39`JK)XZG--tbf7|yPo%yb0n zb1B%(g;P0$r6XJ_Bgl=&#hoXA0(H7Jley2(s?OJV)diZ;z$oy|-ER5b(2Q#O zdkUkkpax0CnG{j4X7mxYp6vR`EY!!tXJMJAGcv{UcW0+F&xM*ozW|l!i?oyoQZ00` zW{DtCU82z@QP>E>T^v50WN8hfUk%ac*wnN18m<3XdM(qizrCzR%PNpd>JELV);QG^ z(K^Pt{KlL0aJin*uMDbd#+10Dta!}7;URW8BFo~e%o01OqQ}5XQa1fEx+46 z&5|y9t^q&0LzihJL-bsf-e{Tu)b6<)LwAR+(B$@rRX-D}e)rs-5}l*-`04h9IcDI3>{fAbP*#nk@h(k52#&|s#z}RvQ%x87P?Aq z&#Dd%U5(o1shZ`Vu1M9c(L&dv@k&|6>}N5}(DX~>XU@VM@<%oFsd8syVNIa|Opot6 zEwowlU$6C~G{C==e$ktJ-ze;9s0HD#AJ7sM}Z_uUjCX8)pqKoU$TM#Ev&M56{R!^@ z*0X;jEcLHf;I+H`pVnsGL>F088c1ivAx z`aYj=4ppsQTwkzk!g%>v6q)CtIze)3fYd342TQt&u^BMgj z_DJ8Yn&(!oPKh;H&MFDbD_!`FJs-F%cLG%z%)&_ zT_gJ6!3(W-@Xg%vg89}vcz*xyW5I@GD8onc{9s67N-}E-8I92I8C(?<8SbPi{g~qb z>-VmrcW*gXgop0X8n@EV)^s9~KYLxT)oj&d7(qYj_?PvQ4mdRTCT#&v`8VtBt!U_O z9}~XkS>IPcdkRa@V^HW1IWy~dFOv0h_iGsUPjpVRKExCpM3!MKb6-V$T-N8A)GFOq zS^n|P%mUM2QlL7G7il#YX;ORo72@LmS^js|8M&4w>H0Tw_vdPgzi@P$IZK@mq${I$ zDQP3~HRC)fZE4M&aejJ0`J^XB!gC8}85cJ|y`>%kD;+i@tzRc+DY|^icQ|f_?=Dns z)f9CzS8mc2k*{pg6fIx5OQT-}U&u7Ork^J5nY~#jgJ!s|(X!&co$hNj+#IgcnzdA5 z)2#QTc)VG2U$6CUOmmq2B*U_ECcRzCzsevxXTadmPcF2L?i;j?0Ye(RjqV#YLIos- z3?3E9&C%a#JZAl^Mt8wtgx}e{$g0-_68n?pf)JswTynBbQ-e) z{)-v?wrdDNfqS*gZ@Y34?Vn7VdkM>BHuFd;-iN;5&O;Zg?%QPHBGnCr9~!z(b8n^m ze$9Os3}MOF?9_Kx2qL!fGKYv#l9Gex}ACcMNE>2iv}R*usknG zce0VGnrSa5ovqtJ;m3AqwQrJEdt~}2cy$AQrPWP8(@NXvH!M3%zu4Y{i>PT|B@KXs zez&!A;Bu0?F9!(cnV5rY`R&{i<(k{A0MmId8fZZ~QhWY?s{0b?IEp0E&aA5J*4>gN z;RD$MvWyVb$e43D1`oqD9{*)D$J#T)UumRj=nBD*X`?A0XFo3bKxd$B< zKCuCF7>qF%U@(W>)r}+@usO|b%nj!1jfkwO?v@42?Av+o|7W)5@O@{Y)ih^mAQ zJB|5Cu?cU(AslxMOaVi2HC`DF<6&tLlHc-+bOy%UED#VVL+0uWhcjuIwKaRx34|)| zx?FkF@pR*dcp!CFOedoK^9{7;!L;9U!m%}*<)>$}v$EN(B+K_we^;pk)?1mPP|fc? zoZq1anBQsRo3uX4U9FFP?4xBY2y4g@YRW%lDAE3DLy7d;4JFfSYGU^z_dutoKMv5z zm68h9Bc5AP;tgJ)ZWYoav=r{-@f&g%#&D)NCQEmSfD=e)U$mT%NH)}(G^FTk#?kb1w1U7n5@<>@&@;a}syl;qVvLo7bYgwQ9qxB#Jk5V;jAB=2|0 z%}1W56SXwXz37mEqWEo0FV^(A8f`w%lBlJQat$^<{DR0ngs@R($AWns5(~M3##oU< zGVF;ArYySMXq%$}gCH6oiV2_qn_&ocB7 zPl2szr_mPt1v@j)Id0H$46-gN#{r$rM0XjqjG{Hsw3@fGSzPbeu}(C)S)vzab!7H$ z^6&fZ^9*^sJVBl)Pm(9g@5xi-sq!=!(uHYZk(OL)QunUzWsxkFC9+hO$#PjC!?IFV z$uY88*2r3Uh#V`&733c;C&)u(ot!8q$$EL1JX{_jr8MPad8BNRN6AKcw6tVI9wVFN z6nU(iDv!(MUi>#|fd5ba!8pk>93Qu{0uzxtaJANeIcj;wJw0JOf1k^FV&=xxD?my^=zaG&Rss={G8$2;8em+ za1WMoH_KV!+(YFZi967Jxf7!MSo|1eo~^=(4Y22Jzy<4Gsz^|!hxZNiF4eo*!63t# z(=oX^V%mWF-*kza)O`%?TqU)F!%&FQAnW7y(#>FC0Sa+32I30aqERx!v6{BDHI)BB(EBbYD1RT?BkG zq_F;Qa4zfIwoNR4xi(XqJ_^d1p2pp{2au$38?2q1&7zL|R;Gn?<91SNnJ|bvHhD}S zqbTJv0saKhFmE_zWdIjrZevyb5!kZ{GbRKe9~2mX)`~*StJ+ajcLRqUjWK}(B4h1` zy{dh;;Y9CKU|oTqF>IZ{_bafWz=MWu0667DAA!OE9#rrbxgEshFqTl^HZ1YH8O6E63Nq%@oUI-tzGpG zrosG}bT}QE;G;N{IwTc;kXb`U8l>7`BMlpEx0T|KwNcMlI}OU8i9XEvOar$#Cj-Sf z2*svvM?0Gbap*qIbQmM^T^mT`S6VhP2Q@)EH?biaRh{FZ>zW5x06L!GQ7$T5ps{1s zPmsZ)(UzgH3#{TKC0xNCzT1fJG2FllMt$?c9Cr3CXxRt@88{F;WN>U9NDLq&Zo8_i z+n6wPxX z9xoZzX=xaaIL@A68r1XxCC1T_G&TWNqgb_NXK5HGMsxrx328`yDNPnNdYZ0Nl|2&- zW31E5Fl=5i0^@;~$he?asi_O?nQ)*y$+VzuEP+O*a?`jx7GpLN`k=?t)b_diTA~YW zNq=s{Lkq}%xfR4v^8sxblrZQlNZ;Te-+|5Uh!W+U$-)zQ48`?oqnNwrjZ2fpq}s6L}oPo!9? z`56!ct~$s`37K~X);3m#+?!o^!8HxNl4#+72n1Sp&=qcC2W#C<7qN-$to13@@-#cB zpr@Ihc#5??;i*|Co?vZHFi*$2ErSP00BC!P#T|}H)#UEv&{Mwun(?}!zhMMeFz}`k z;K9IKMnKa`O5QdCy3n)?3sxH90UgKTB$AOr@GF8}G5kv4R|>zf`p&voIqE)EV6w2& zR=FNEh~YUOH4U2rm>HEfoHj>uqa1BM{fWL~FpRc?RcRKm4V;D0k<7*ekC8`T)gxH+`sW{Al(|D>L<^|3hVuW#8p3TBPJR9c#|HME`j!$6@=z+ofOZF;K z9(D0TWrk>N@MVo*Ul#Z*cZOaAjOI2>yfaT0*u|z50c)buVMN0)&809%ipB7EEXaDt zfoxgY2twl+5DHHLQS&4Sm${MOlRp9>v>b%VS`ZeGlfRTd1u?Y>-b{d>C4VpfQJw=S zkAPg$aXOD9@ME0rned%cMLHV6j=#aAU!P^(Y=vyiFd7 z4j4|aoZ2nVQywLN$0ZlM5`rj4WPm#^hvtJv2kh3v&_P2Cb7k5O7y~>FLi_q`mW1B1 zAhO098)Xc_HBhHB-M6t2K3RnuA&CqAtA0eekx#kt*HXUo8z^T@dXv#4;2CTRH5JVY zK}mv+k6;Ny)*L%7{2O8dcCoZ%`HcYo@x%ijz3>d-Q-*r`pnz2TS(SL_Uyyi!4}@UW zhib0RW(QzpgwQ-<3!Wv${D0H&VbDF$YAKyj8ldK2u!;TxDP%zEiR6U=xu63^OZ|-c z0O0lBsnVb4zXB`%g)yKHXjq(M3jozVh(}VqclPjru!RiQ_TyO(?1s-V9k$G~VFrNw z`Vv&=wM zk{6j63;hOc5?M<%#EgcRXov+HVxfjuQA4b_Ay(25D{Y9CHN?srVigUsa6_!JAy(B8 z8`BW0Ziv;u@U4a4A@~e0gMHPpA&f1HfglFDJBAMi_H@LG@r8L%p_0b*gQ1X?&~guI zxM_`pp^!F&FPaC{-L&FhD5MQ$Yypua@PM~+>=}41#V5R%DZ1?vyR^IA%ZP71I1|h4 z^6sYM-i}y>A_JI(3NM+UH%bm}YA+NNH?MisB#wXBJqpE7x*kP|Qjoy0PH`Z-e+f`m%klu)pLu3fH`a=e4?OIrk z{{HK%-*0~&*>5M0)^8{0_glz=PRZ}LLa5hoVGr7n-*1IbuiwUc(E9v-D}?@6`mO$( z`Yl}0Z&UuZ{nk*>Z(|GkEmY8NC;R<2;Pu$K)MK@D)9To@sI6|-;u1!G$$ATuW8!J# z#0wVsmq<1`AJ%}##O4oh`3S4W47Hd<)#JwnZvpjS1rHziLEa;f7YED9%M4u>{SHg3 zQ3)#5BSh)a^x`OxR)D>-pb%aFbdzWY1EI)QXptiyJ%g#pB*JZ8l20B)pj8>Ftq(H? zS_**!%z;LFGn;iW$qD`y(*|z8&S|0h2tg2No$ygCS3CxFebS| zUM?u4q?RZNkHGTEcVT%oAB)+;YTqcRkc(#TccFQ0G-4`8V0rz!u)Hw}G0<>(X$1Zf z$HX|*Sf!&4fKhv18*Ol$Q8?yaW5EjDxR)*nNsb|L7JlV;BnA|9*2jcxnC~$a4x)A3 zhl~TerTD<{#6=t+o{m^JR3Cx|&Lw2wrlA%9CLnB?9uQCcw~k>Or08nYm!OFlDlTWSd3i)sX$_^d;wTDh^j_r z07N~=mzfScRw&$yIYS`eqEuKk5TaZmmCF@5VVzoA`7$5?39n~%BQ#IAq7m8ZSUD<3 z6s7DSA{;1(#Sh~8YTwRgTY?a*SP=~}keE}pff2o4mHaZg-Cse~3StRy2uY}&MO8Rs zOfatsfxzp`DAA1!Qy1#wg~w+gmW#Nk9k z3^o!1gmQo)1o&^zeP1wJZvx4^w+RIF-tMMyySTU8>|{N}Fn)=#6&M?)*h-A0n6EIV z5@V_;W{evHY&SC4p_+E!_VFw>RPz%W{co^7kRFWzJj$YrM!aIgOGUgg2N1l1lb^B&Ai5Gz zR6%Wyl|KMfV?h3G2ZV=%3|uXznsb9W$?I<_*m3Wo92Umoc-SnYS`?IWt!bIz07=#nXfbR4Q9T{OqiqZGxGyxe#p#^nE5d?KVjyl%>0a*2blReo7Kw_ zud43T{GQMCKJ?t)Z|(Zma$V1{!!;V^2K7C`E&>#<=b@-1B-r%=hQJS?>x0nw{|1BL zaO!%%T@9U11HkS2A{Yk8LHEChqX2u}Vbt$Z9uHNQCe+X$1Gy3K-`W3N?Em#4@GbrS z?VbMyt^tuTxCXqH3%;FO84l!vU*v*c=7L}0<*6eBWjdYR3_9{W^oSp;I;j+|Nw zJ7!DJTyUh*ha1cg+RnoJ<9IpO+e4sK^P4P?YJLa)q?@0kt^Q3WLb|cSRlTaG&0MLh z?Qz^^H$r_8#=6^|<*2;uzV$C|e~!C*cq%fU z>K@;Rw;pf#mnL7imnOA!i9u}3x9R>IU3FcFY7|#$tyiHM#Z`EB@=l>H#y%g(*DjJn z>Jpu(Me%Ol+30@CL@v7LaivZ$k9URfm^MC_cSW-XDmc8yJV)NM0*Nl3q67HE0*;sM z4jvuPMZE7b!_bYtL#GE<@Bn(!OvNE_{9=xEKcL~8wcl{8xq5mgseq^Am%2y7XvE$) z3`rk~=^0yZznG)SDIooTX+R))SWCq(A!N-9IZt6AaY>F6NckaEg-%ntI9{BgI>krC z$5tTlV(v!V2Jnwb<~avx{S(mo1E8UC5Rz;ea?)5h4>6VF5)PaxSx{r?&_-pdja-ik z^9o4#gs|3mEl}xUeJF<&QhiELm;jr59(QKP zbg~Y@I@x->Q((GGe2#$N66-yq8Vh&d>of5#(R{JscsQ1>-3EiSxrbvh2S`4`W{5AK z>cv|YO5R7IRt(`43dT9G#`U3dkxN8x^IXAl>HXwxYQXwA_1PqaRc1k0xJ_Yka|GOU zUlgQcGV7(20fo{{_a)Ocx50oCg`_X7l8~=CNb?nA+;cJrZ4jzLW9{nUjL?Cf}-)G|*vPI|^X zp*7DJ=m2d#F9Q5$jEeu8u`Ce49Ri*OLU-{j;DVFC<-ZEgrNWtUsbDUSOSw_18|c9w zdpVaZdYNFI9~px#)Eh#1QA2(PH6-$)h6{2X6dlvadBD3y8h#o0!AyGBh~A{@9Wi6n zs8=ycP}Dw%+6PhlFlwKhD>!NtsEbJuZt$oL_b5D`YpKMusu`6WJ=m0} z7F)oZ(~SGegIxmciH4WlTiP!dYH1%^mzaYwm-9URsx7X5)t_K3)%0npDZuH-pUR&A z_f!Ua*LYcscPt}St^Op^_-8a#t1CEe17nruxl*#~1M2#?r(|^{7rJizJm>2-B}36= z_yv|hCw_&nJ~OJ1MfLkD#f3xY5v-4=qgy#czhDrQdUxaSg+rN;M!<91dbv`dLXDNH z@V3t|@Jk=?wvdN{y7605puq3S5KdaDB9zt*6-bL!- zTp1J4GJ(v9Xhh*hffj2=wl79RH*o`&rA1tM*d~2$U!lIKy7?Nx(vidP;dx-l0Ix*a z?8wdGGjcda!^pxrkCtn+bmWLk^EI00se!B0gZZSEq7pgrC8F|F`p8C*^i>=?XdBU` zf&&G%-U19+L|Y+4{jeskjKZP<_~}LsxHKo5Mc;aqwZYFyhY$r>fwvpGd}QVw>SzF& zyCf=fH(x6PM6rZ0l8j-q9)swc`etsFX!>TiZ9?RM82=QvE!HY84g{bTCqpZ?F4ATN z+81dQAGS#c+)Z8_K9!D!a6z94Or&TLO*KFi&V-At!ph2&`%m(E50x7QapqWuZKBu|a9At9d+|#aO79mWu{n z9gsVA2n$EsDPF+M-r~=-8{D~eXkFq~9H8ACl~9o-UZO>++LvgpOEo#QeJPIA9xh-q zOioQfn^{Jm8< zN9$J+F_SBExfMu2AII+^m$cl*+intQeu?%xJP5Ggwyx%F@E=NDqIDFVPjvWh2~PqJv8+o@{|mZQH}+%d}~I{74y? z+sw$4EH9dT5KA99#e2<9U&RP30kO8SvD5fpv3Z-i%>=yUW%K8=+#oX2*7}^Stgps-M2p}2h zet{J-mO)bj-hP3mxwi`RjMgjAGPhfxW$sE2Lp<0re@T^T0TCGNz`cktYoDemNGOMr%!);uALXR^fI-1p%{T9)p&tJW)K1_Q2=<%Bhj zsFHRRf%HaXAyDzu+QZl2IejX+nFpq$5B2rjS6;jeH`cqL!lLA>ypdQ$192{m!?`$S z&<7^4A9r(WzVN=FRX_cFJd`I`e3eMW@8R*)BKi>Ln4jEYO>s~UYl!r)>ZjL*$fn#{ zAY9LvB}%W6#n*_o()CpxXlrgUzdX|GIG?p?ZW?j|yGlfF6AVa01K!KTnaY43zdu#( zdch+1yihPhqfSEud} z_|>U9VGxVJ-PA~z6*dyp{>o8WBojsHn4gjfqj^lsP#?s6%f zc*^&IVs;Nvd=JrggWRp zKZqPWs_Hk6b0-zF)>7dj7?}{5?(TNz)Rddd>)=h)iix{8&L-T{09gsAUt{USaTjU{2BN`Np zHu7MFA-Y0^#w9VMey)2pHi8*EtSeSR->fL5?-rK%&FN+iuhD=_m8G^$1T@CVk%21@ z!J{~hiS1%c4NWx{)eQ}lWwZua;yMgJR_g&cRGF!MfLW^->1svg3Di{9_ z8YYgQLGoTQ5Gf?%Ss)|J6hHmfB80}rga;#B%kbRo8xc(%i72EH<-bF#BdD(s`Bp&w zvu{T}DwU6oMrG)~K;>fxQ~B7aRIWx-`Tz^yJ+>W;l}l!qyQcL2f?iAAHx_O~g9G=C zhkuTaP~A5Ty$wp;ebZ5IQX1|XeXvs&xo-k*`(?5F7W8fNL!^@)3YAaj$Yw)-_f;1D z-|$s7^;Pz;ud^3?o!#+uc5F7=fj8)qtwxUucBu@&tmz^@eWhJpc+he$x4pF(?d9x} zCD!#~_0ps9Zm_ zw1hk}l!i*MZwZNYgXqTUHOBP%@jgRi>uMP=l(acTiPfce6^_|vW4hxQ z`Ar)G#Wp)wnZp{)G;ie`m%mN4qZF&%L!FI0$d3om709KjgCba1bDUSo+OM07c+z@L zH?M@pjl#SN9ybYdAv|st<{j|(vxrPi!onXpG6~E1%pmMxk%lC2Igz81)-58^n1tOf za&!{*xrmjtxPhP^G1IVK_Yt!D3E4&=jimK}kRoYqLcuy|Jt$^|fO<^7nbJQ*>9uDitlh$@24@p`(gdCf+Qhw>xSPIbW5DjUfFe79zX+1-w4^mk}RLZcB;iR>bFzga? z9Q2crbxG?vAtxoR=Y_0KTDyh(LDJeIfe*6f-sGLj=D?;J2}n*AUx7?^2`f z7c+I}UyOW@BHyRT4-m<^Jn)AE{s_UhkDmGtVSOyDPlWZUus*{g*9+@_us#>o7sC1y z`@b}CFIU3KX8$~Ii|~yW>OtC>fabJ$^2!#@U5|qQ3noBy?1p6kQQ#N0wu;HCksDUY=Hf!4FwX_lXp74Y z;P>{!>g9=%;cH;MXq{uI+=)3xOP7(Bf#xoQhaVX=3P0SnRiFpea348YMG&SScS@2& z$o0XTR&Q9HbV{XBnY#hRsp?SOG{r->emWq-m+=1xkbkCO$vhw2=uew_KDfu_9C9E0 zWoB){#%xxbn$4b*&HhU^yHQEEk5Gey7>V`4s$4JdObcQj9U1eOh(1O!TRFNWJ<^ZC zlXNsHYk6EmABPkz*NC*LxH{8%Y$T>_BD#$*0qX;ps&X+yM%s0yv5gm)y*%NMpeJYq z6~q5u9R?$4JVZXpb2qzBao?gnh0^HL9J{t&9o{>MZ5+h#CwMB8c$(u!cz5trbDHi1 zx04j#=sT%RK}?3D*$)00#6Ls$XBhwNq%1r9OEDh0rRHD)cl*t2kv|K?9Mpp_>tvH;~3Qa8v_8X>RMJ;@kN_Es>#yK1nsSwDPmK zk5OCN&;JbNFLU#s>Ou$U{;^&`m7#%Kuy2B(5)S!iEl;^;Er-`7p2nErypgxF@PK9) z_dXo@w43ROx9z^v-TjautXT2pP) zAx&cedT_v1Rl}q=X{|SFP2-xzH%-74hc?wUO~k;YruwGC@{+oNS>qBnJ7V0+JvSA5c-vWcR1DR8%|CZc<<1=^!#cVL ZF&Cr9`@lK>`p4g%AD9NA{{-b?AHb^|E{^~J literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/Moxie.xap b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/Moxie.xap new file mode 100644 index 0000000000000000000000000000000000000000..fc7fbfe4b24cfbb901d5f05f760b0996493207a5 GIT binary patch literal 63118 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

ohC;)+F&1(P3t&|kXtQOoB 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 Ug!->zP~VIFcmE literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ar.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ar.js new file mode 100644 index 0000000000..dc348395db --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ar.js @@ -0,0 +1,2 @@ +// Arabic (ar) +plupload.addI18n({"Stop Upload":"أيقاف التحميل","Upload URL might be wrong or doesn't exist.":"عنوان التحميل ربما يكون خاطئ أو غير متوفر","tb":"تيرابايت","Size":"الحجم","Close":"أغلاق","Init error.":"خطأ في تهيئة","Add files to the upload queue and click the start button.":"أضف ملفات إلى القائمة إنتظار التحميل ثم أضغط على زر البداية","Filename":"أسم الملف","Image format either wrong or not supported.":"صيغة الصورة أما خطاء أو غير مدعومه","Status":"الحالة","HTTP Error.":"خطأ في برتوكول نقل الملفات","Start Upload":"أبدا التحميل","mb":"ميجابايت","kb":"كيلوبايت","Duplicate file error.":"خطاء في تكرار الملف","File size error.":"خطأ في حجم الملف","N/A":"لا شي","gb":"جيجابايت","Error: Invalid file extension:":"خطاء : أمتداد الملف غير صالح :","Select files":"أختر الملفات","%s already present in the queue.":"%s الملف موجود بالفعل في قائمة الانتظار","File: %s":"ملف: %s","b":"بايت","Uploaded %d/%d files":"تحميل %d/%d ملف","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"العناصر المقبوله لتحميل هي %d ملف في هذا الوقت. الملفات الاضافية أزيلة.","%d files queued":"%d الملفات في قائمة الانتظار","File: %s, size: %d, max file size: %d":"ملف: %s, أقصى حجم للملف: %d, حجم: %d","Drag files here.":"سحب الملف هنا","Runtime ran out of available memory.":"الذاكرة المتوفره أنتهت لمدة التشغيل","File count error.":"خطاء في عد الملفات","File extension error.":"خطأ في أمتداد الملف","Error: File too large:":" خطاء : حجم الملف كبير :","Add Files":"أضف ملفات"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/az.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/az.js new file mode 100644 index 0000000000..5930cbb2f5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/az.js @@ -0,0 +1,2 @@ +// Azerbaijani (az) +plupload.addI18n({"Stop Upload":"Yükləməni saxla","Upload URL might be wrong or doesn't exist.":"Yükləmə ünvanı səhvdir və ya mövcud deyil","tb":"tb","Size":"Həcm","Close":"Bağla","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Faylları əlavə edin və yüklə düyməsinə klikləyin.","Filename":"Faylın adı","Image format either wrong or not supported.":"Şəklin formatı uyğun deyil və ya dəstəklənmir.","Status":"Status","HTTP Error.":"HTTP xətası.","Start Upload":"Yüklə","mb":"mb","kb":"kb","Duplicate file error.":"Bu fayl artıq növbədə var.","File size error.":"Fayl həcmi xətası.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Xəta: Yanlış fayl uzantısı:","Select files":"Faylları seçin","%s already present in the queue.":"%s artıq növbədə var.","File: %s":"Fayl: %s","b":"b","Uploaded %d/%d files":"%d/%d fayl yüklənib","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"Növbədə %d fayl var","File: %s, size: %d, max file size: %d":"Fayl: %s, həcm: %d, max fayl həcmi: %d","Drag files here.":"Faylları bura çəkin.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Fayl sayı çox böyükdür.","File extension error.":"Fayl uzantısı xətası.","Error: File too large:":"Xəta:Fayl həcmi çox böyükdür.","Add Files":"Fayl əlavə et"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/be_BY.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/be_BY.js new file mode 100644 index 0000000000..656a4e523d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/be_BY.js @@ -0,0 +1,2 @@ +// Belarusian (Belarus) (be_BY) +plupload.addI18n({"Stop Upload":"","Upload URL might be wrong or doesn't exist.":"","tb":"","Size":"","Close":"","Init error.":"","Add files to the upload queue and click the start button.":"","Filename":"","Image format either wrong or not supported.":"","Status":"","HTTP Error.":"","Start Upload":"","mb":"","kb":"","Duplicate file error.":"","File size error.":"","N/A":"","gb":"","Error: Invalid file extension:":"","Select files":"","%s already present in the queue.":"","File: %s":"","b":"","Uploaded %d/%d files":"","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"","%d files queued":"","File: %s, size: %d, max file size: %d":"","Drag files here.":"","Runtime ran out of available memory.":"","File count error.":"","File extension error.":"","Error: File too large:":"","Add Files":""}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bg.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bg.js new file mode 100644 index 0000000000..e16bdb0f08 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bg.js @@ -0,0 +1,2 @@ +// Bulgarian (bg) +plupload.addI18n({"Stop Upload":"Спрете качването","Upload URL might be wrong or doesn't exist.":"URL за качване може да е грешен или да не съществува.","tb":"tb","Size":"Размер","Close":"Затвори","Init error.":"Грешка: инициализиране.","Add files to the upload queue and click the start button.":"Добавете файлове в опашката за качване, и щракнете бутона старт.","Filename":"Име на файла","Image format either wrong or not supported.":"Формата на изображението или е объркан, или не се поддържа.","Status":"Статус","HTTP Error.":"Грешка: HTTP .","Start Upload":"Започнете качването","mb":"mb","kb":"kb","Duplicate file error.":"Грешка: файла е вече качен на сървъра.","File size error.":"Грешка: размер на файла.","N/A":"не приложимо","gb":"gb","Error: Invalid file extension:":"Грешка: Невалидно разширение на файл:","Select files":"Изберете файлове","%s already present in the queue.":"%s вече го има в опашката.","File: %s":"Файл: %s","b":"b","Uploaded %d/%d files":"Качени %d/%d файла","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Елемента за качване приема само %d файл(а) наведнъж. Допълнителните файлове бяха отстранени.","%d files queued":"%d файла в опашката","File: %s, size: %d, max file size: %d":"Файл: %s, размер: %d, максимален размер: %d","Drag files here.":"Довлечете файловете тук.","Runtime ran out of available memory.":"Недостатъчна свободна памет.","File count error.":"Грешка в броя на файловете.","File extension error.":"Грешка: разширение на файла.","Error: File too large:":"Грешка: Файла е твърде голям:","Add Files":"Добавете файлове"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bs.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bs.js new file mode 100644 index 0000000000..27fe009339 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/bs.js @@ -0,0 +1,2 @@ +// Bosnian (bs) +plupload.addI18n({"Stop Upload":"Prekini dodavanje","Upload URL might be wrong or doesn't exist.":"URL za dodavanje je neispravan ili ne postoji.","tb":"tb","Size":"Veličina","Close":"Zatvori","Init error.":"Inicijalizacijska greška.","Add files to the upload queue and click the start button.":"Dodajte datoteke u red i kliknite na dugme za pokretanje.","Filename":"Naziv datoteke","Image format either wrong or not supported.":"Format slike je neispravan ili nije podržan.","Status":"Status","HTTP Error.":"HTTP greška.","Start Upload":"Započni dodavanje","mb":"mb","kb":"kb","Duplicate file error.":"Dupla datoteka.","File size error.":"Greška u veličini datoteke.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Greška! Neispravan ekstenzija datoteke:","Select files":"Odaberite datoteke","%s already present in the queue.":"%s se već nalazi u redu.","File: %s":"Datoteka: %s","b":"b","Uploaded %d/%d files":"Dodano %d/%d datoteka","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Dodavanje trenutno dozvoljava samo %d datoteka istovremeno. Dodatne datoteke su uklonjene.","%d files queued":"%d datoteka čeka","File: %s, size: %d, max file size: %d":"Datoteka: %s, veličina: %d, maksimalna veličina: %d","Drag files here.":"Dovucite datoteke ovdje.","Runtime ran out of available memory.":"Nema više dostupne memorije.","File count error.":"Greška u brojanju datoeka.","File extension error.":"Greška u ekstenziji datoteke.","Error: File too large:":"Greška! Datoteka je prevelika:","Add Files":"Dodaj datoteke"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ca.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ca.js new file mode 100644 index 0000000000..f45ed97533 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ca.js @@ -0,0 +1,2 @@ +// Catalan (ca) +plupload.addI18n({"Stop Upload":"Parar pujada","Upload URL might be wrong or doesn't exist.":"La URL de càrrega no és correcte o bé no existeix.","tb":"Tb","Size":"Tamany","Close":"Tancar","Init error.":"Error d´inicialització.","Add files to the upload queue and click the start button.":"Afegeixi els fitxers a la cua de pujada i cliqui el botó Iniciar","Filename":"Nom de fitxer","Image format either wrong or not supported.":"Format d'imatge incorrecte o no suportat.","Status":"Estat","HTTP Error.":"Error HTTP.","Start Upload":"Començar pujada","mb":"Mb","kb":"Kb","Duplicate file error.":"Error per duplicitat de fitxer.","File size error.":"Error en la mida del fitxer.","N/A":"N/D","gb":"Gb","Error: Invalid file extension:":"Error: Extensió de fitxer no vàlida:","Select files":"Seleccionar fitxers","%s already present in the queue.":"%s ja existeix a la cua.","File: %s":"Fitxer: %s","b":"b","Uploaded %d/%d files":"Pujats %d/%d fitxers","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"La càrrega d'elements tan sols accepta %d fitxer(s) alhora. Els fitxers sobrants seran descartats.","%d files queued":"%d fitxers en cua","File: %s, size: %d, max file size: %d":"Fitxer: %s, mida: %d, mida màxima de fitxer: %d","Drag files here.":"Arrossegui fitxers aquí","Runtime ran out of available memory.":"L'execució ha arribat al límit de memòria.","File count error.":"Error en el recompte de fitxers","File extension error.":"Error en l´extensió del fitxer.","Error: File too large:":"Error: Fitxer massa gran:","Add Files":"Afegir fitxers"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cs.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cs.js new file mode 100644 index 0000000000..82c21ed09c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cs.js @@ -0,0 +1,2 @@ +// Czech (cs) +plupload.addI18n({"Stop Upload":"Zastavit nahrávání","Upload URL might be wrong or doesn't exist.":"URL uploadu je možná špatně, nebo neexistuje.","tb":"tb","Size":"Velikost","Close":"Zavřít","Init error.":"Chyba inicializace.","Add files to the upload queue and click the start button.":"Přidejte soubory do fronty a pak spusťte nahrávání.","Filename":"Název souboru","Image format either wrong or not supported.":"Špatný, nebo nepodporovaný formát obrázku.","Status":"Stav","HTTP Error.":"Chyba HTTP.","Start Upload":"Spustit nahrávání","mb":"mb","kb":"kb","Duplicate file error.":"Chyba - duplikovaný soubor.","File size error.":"Chyba velikosti souboru.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Chyba: Neplatná koncovka souboru:","Select files":"Vyberte soubory","%s already present in the queue.":"%s je již zařazen ve frontě.","File: %s":"Soubor: %s","b":"b","Uploaded %d/%d files":"Nahráno %d/%d souborů","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload akceptuje pouze %d soubor(ů) najednou. Další soubory byly odstraněny.","%d files queued":"%d souborů ve frontě","File: %s, size: %d, max file size: %d":"Soubor: %s, velikost: %d, maximální velikost souboru: %d","Drag files here.":"Sem přetáhněte soubory.","Runtime ran out of available memory.":"Běh skriptu přesáhl dostupnou paměť.","File count error.":"Chyba v počtu souborů.","File extension error.":"Chyba přípony souboru.","Error: File too large:":"Chyba: Soubor je příliš veliký:","Add Files":"Přidat soubory"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cy.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cy.js new file mode 100644 index 0000000000..54a60c0268 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/cy.js @@ -0,0 +1,2 @@ +// Welsh (cy) +plupload.addI18n({"Stop Upload":"Atal Lanlwytho","Upload URL might be wrong or doesn't exist.":"URL y lanlwythiad ynb anghywir neu ddim yn bodoli.","tb":"tb","Size":"Maint","Close":"Cau","Init error.":"Gwall cych.","Add files to the upload queue and click the start button.":"Ychwanegwch ffeiliau i'r ciw lanlwytho a chlicio'r botwm dechrau.","Filename":"Enw'r ffeil","Image format either wrong or not supported.":"Fformat delwedd yn anghywir neu heb ei gynnal.","Status":"Statws","HTTP Error.":"Gwall HTTP.","Start Upload":"Dechrau Lanlwytho","mb":"mb","kb":"kb","Duplicate file error.":"Gwall ffeil ddyblyg.","File size error.":"Gwall maint ffeil.","N/A":"Dd/A","gb":"gb","Error: Invalid file extension:":"Gwall: estyniad ffeil annilys:","Select files":"Dewis ffeiliau","%s already present in the queue.":"%s yn y ciw yn barod.","File: %s":"Ffeil: %s","b":"b","Uploaded %d/%d files":"Lanlwythwyd %d/%d ffeil","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Mae'r elfen lanlwytho yn derbyn %d ffeil ar y tro. Caiff ffeiliau ychwanegol eu tynnu.","%d files queued":"%d ffeil mewn ciw","File: %s, size: %d, max file size: %d":"Ffeil: %s, maint: %d, maint mwyaf ffeil: %d","Drag files here.":"Llusgwch ffeiliau yma.","Runtime ran out of available memory.":"Allan o gof.","File count error.":"Gwall cyfri ffeiliau.","File extension error.":"Gwall estyniad ffeil.","Error: File too large:":"Gwall: Ffeil yn rhy fawr:","Add Files":"Ychwanegu Ffeiliau"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/da.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/da.js new file mode 100644 index 0000000000..9a4f62fead --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/da.js @@ -0,0 +1,2 @@ +// Danish (da) +plupload.addI18n({"Stop Upload":"Stop upload","Upload URL might be wrong or doesn't exist.":"Upload URL kan være forkert eller ikke eksisterende.","tb":"tb","Size":"Størrelse","Close":"Luk","Init error.":"Opstarts fejl.","Add files to the upload queue and click the start button.":"Tilføj filer til køen og klik Start upload knappen.","Filename":"Filnavn","Image format either wrong or not supported.":"Billede format er enten forkert eller ikke understøttet.","Status":"Status","HTTP Error.":"HTTP fejl.","Start Upload":"Start upload","mb":"mb","kb":"kb","Duplicate file error.":"Filen findes allerede.","File size error.":"Filstørrelse fejl.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Fejl: Ugyldigt fil format:","Select files":"Vælg filer","%s already present in the queue.":"%s findes allerede i køen.","File: %s":"Fil: %s","b":"b","Uploaded %d/%d files":"Uploaded %d/%d filer","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload accepterer kun %d fil(er) af gangen. Ekstra filer blev skippet.","%d files queued":"%d filer i kø","File: %s, size: %d, max file size: %d":"Fil: %s, størrelse: %d, maks. filstørrelse: %d","Drag files here.":"Træk filer her.","Runtime ran out of available memory.":"Runtime mangler tilgængelige hukommelse.","File count error.":"Fil antal fejl.","File extension error.":"Fil format fejl.","Error: File too large:":"Fejl: Filen er for stor:","Add Files":"Tilføj filer"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/de.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/de.js new file mode 100644 index 0000000000..c738343def --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/de.js @@ -0,0 +1,2 @@ +// German (de) +plupload.addI18n({"Stop Upload":"Hochladen stoppen","Upload URL might be wrong or doesn't exist.":"Upload-URL ist falsch oder existiert nicht.","tb":"TB","Size":"Größe","Close":"Schließen","Init error.":"Initialisierungsfehler","Add files to the upload queue and click the start button.":"Dateien hinzufügen und auf 'Hochladen' klicken.","Filename":"Dateiname","Image format either wrong or not supported.":"Bildformat falsch oder nicht unterstützt.","Status":"Status","HTTP Error.":"HTTP-Fehler","Start Upload":"Hochladen beginnen","mb":"MB","kb":"KB","Duplicate file error.":"Datei bereits hochgeladen","File size error.":"Fehler bei Dateigröße","N/A":"Nicht verfügbar","gb":"GB","Error: Invalid file extension:":"Fehler: Ungültige Dateiendung:","Select files":"Dateien auswählen","%s already present in the queue.":"%s ist bereits in der Warteschlange","File: %s":"Datei: %s","b":"B","Uploaded %d/%d files":"%d/%d Dateien wurden hochgeladen","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Pro Durchgang können nur %d Datei(en) akzeptiert werden. Überzählige Dateien wurden ignoriert.","%d files queued":"%d Dateien in der Warteschlange","File: %s, size: %d, max file size: %d":"Datei: %s, Größe: %d, maximale Dateigröße: %d","Drag files here.":"Dateien hier hin ziehen.","Runtime ran out of available memory.":"Nicht genügend Speicher verfügbar.","File count error.":"Fehlerhafte Dateianzahl.","File extension error.":"Fehler bei Dateiendung","Error: File too large:":"Fehler: Datei zu groß:","Add Files":"Dateien hinzufügen"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/el.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/el.js new file mode 100644 index 0000000000..1cabee897b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/el.js @@ -0,0 +1,2 @@ +// Greek (el) +plupload.addI18n({"Stop Upload":"Ακύρωση Μεταφόρτωσης","Upload URL might be wrong or doesn't exist.":"Το URL μεταφόρτωσης είναι λάθος ή δεν υπάρχει.","tb":"tb","Size":"Μέγεθος","Close":"Κλείσιμο","Init error.":"Σφάλμα αρχικοποίησης.","Add files to the upload queue and click the start button.":"Προσθέστε αρχεία στην ουρά μεταφόρτωσης και πατήστε το κουμπί εκκίνησης.","Filename":"Όνομα Αρχείου","Image format either wrong or not supported.":"Ο τύπος εικόνας είναι λάθος ή δεν υποστηρίζεται.","Status":"Κατάσταση","HTTP Error.":"Σφάλμα HTTP.","Start Upload":"Εκκίνηση Μεταφόρτωσης","mb":"mb","kb":"kb","Duplicate file error.":"Το αρχείο έχει ξαναπροστεθεί.","File size error.":"Σφάλμα με το μέγεθος του αρχείου.","N/A":"Δεν ισχύει","gb":"gb","Error: Invalid file extension:":"Σφάλμα: Μη έγκυρος τύπος αρχείου:","Select files":"Επιλέξτε Αρχεία","%s already present in the queue.":"Το «%s» βρίσκεται ήδη στην ουρά.","File: %s":"Αρχείο: %s","b":"b","Uploaded %d/%d files":"Μεταφορτώθηκαν %d/%d αρχεία","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Μπορείτε να μεταφορτώσετε μεχρι και %d αρχείο/α κάθε φορά. Τα επιπλέον αρχεία αφαιρέθηκαν.","%d files queued":"%d αρχεία στην ουρά","File: %s, size: %d, max file size: %d":"Αρχείο: %s, μέγεθος: %d, μέγιστο μέγεθος αρχείου: %d","Drag files here.":"Σύρετε αρχεία εδώ","Runtime ran out of available memory.":"Δεν υπάρχει αρκετή διαθέσιμη μνήμη.","File count error.":"Σφάλμα με τον αριθμό αρχείων.","File extension error.":"Σφάλμα με τον τύπο αρχείου.","Error: File too large:":"Σφάλμα: Πολύ μεγάλο αρχείο:","Add Files":"Προσθέστε Αρχεία"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/en.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/en.js new file mode 100644 index 0000000000..6ab3e2e08d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/en.js @@ -0,0 +1,2 @@ +// English (en) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Size","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Add files to the upload queue and click the start button.","Filename":"Filename","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","mb":"mb","kb":"kb","Duplicate file error.":"Duplicate file error.","File size error.":"File size error.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Select files","%s already present in the queue.":"%s already present in the queue.","File: %s":"File: %s","b":"b","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"File: %s, size: %d, max file size: %d","Drag files here.":"Drag files here.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/es.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/es.js new file mode 100644 index 0000000000..72b0367ed3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/es.js @@ -0,0 +1,2 @@ +// Spanish (es) +plupload.addI18n({"Stop Upload":"Detener Subida.","Upload URL might be wrong or doesn't exist.":"URL de carga inexistente.","tb":"TB","Size":"Tamaño","Close":"Cerrar","Init error.":"Error de inicialización.","Add files to the upload queue and click the start button.":"Agregue archivos a la lista de subida y pulse clic en el botón de Iniciar carga","Filename":"Nombre de archivo","Image format either wrong or not supported.":"Formato de imagen no soportada.","Status":"Estado","HTTP Error.":"Error de HTTP.","Start Upload":"Iniciar carga","mb":"MB","kb":"KB","Duplicate file error.":"Error, archivo duplicado","File size error.":"Error de tamaño de archivo.","N/A":"No disponible","gb":"GB","Error: Invalid file extension:":"Error: Extensión de archivo inválida:","Select files":"Elija archivos","%s already present in the queue.":"%s ya se encuentra en la lista.","File: %s":"Archivo: %s","b":"B","Uploaded %d/%d files":"Subidos %d/%d archivos","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Se aceptan sólo %d archivo(s) al tiempo. Más, no se tienen en cuenta.","%d files queued":"%d archivos en cola.","File: %s, size: %d, max file size: %d":"Archivo: %s, tamaño: %d, tamaño máximo de archivo: %d","Drag files here.":"Arrastre archivos aquí","Runtime ran out of available memory.":"No hay memoria disponible.","File count error.":"Error en contador de archivos.","File extension error.":"Error de extensión de archivo.","Error: File too large:":"Error: archivo demasiado grande:","Add Files":"Agregar archivos"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/et.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/et.js new file mode 100644 index 0000000000..3e145b10e7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/et.js @@ -0,0 +1,2 @@ +// Estonian (et) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Üleslaadimise URL võib olla vale või seda pole.","tb":"","Size":"Suurus","Close":"Sulge","Init error.":"Lähtestamise viga.","Add files to the upload queue and click the start button.":"Lisa failid üleslaadimise järjekorda ja klõpsa alustamise nupule.","Filename":"Failinimi","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Olek","HTTP Error.":"HTTP ühenduse viga.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"Failisuuruse viga.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vali faile","%s already present in the queue.":"","File: %s":"Fail: %s","b":"","Uploaded %d/%d files":"Üles laaditud %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Üleslaadimise element saab vastu võtta ainult %d faili ühe korraga. Ülejäänud failid jäetakse laadimata.","%d files queued":"Järjekorras on %d faili","File: %s, size: %d, max file size: %d":"","Drag files here.":"Lohista failid siia.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Failide arvu viga.","File extension error.":"Faililaiendi viga.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fa.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fa.js new file mode 100644 index 0000000000..e3246cc959 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fa.js @@ -0,0 +1,2 @@ +// Persian (fa) +plupload.addI18n({"Stop Upload":"توقف انتقال","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"ترابایت","Size":"سایز","Close":"بستن","Init error.":"خطا در استارت اسکریپت","Add files to the upload queue and click the start button.":"اضافه کنید فایل ها را به صف آپلود و دکمه شروع را کلیک کنید.","Filename":"نام فایل","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"وضعیت","HTTP Error.":"HTTP خطای","Start Upload":"شروع انتقال","mb":"مگابایت","kb":"کیلوبایت","Duplicate file error.":"خطای فایل تکراری","File size error.":"خطای سایز فایل","N/A":"N/A","gb":"گیگابایت","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"انتخاب فایل","%s already present in the queue.":"%s در لیست آپلود وجود دارد.","File: %s":" فایل ها : %s","b":"بایت","Uploaded %d/%d files":"منتقل شد %d/%d از فایلها","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"عنصر بارگذار فقط %d فایل رو در یک زمان می پذیرد. سایر فایل ها مجرد از این موضوع هستند.","%d files queued":"%d فایل در صف","File: %s, size: %d, max file size: %d":"فایل: %s, اندازه: %d, محدودیت اندازه فایل: %d","Drag files here.":"بکشید فایل ها رو به اینجا","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"خطای تعداد فایل","File extension error.":"خطا پیشوند فایل","Error: File too large:":"Error: File too large:","Add Files":"افزودن فایل"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fi.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fi.js new file mode 100644 index 0000000000..e16ebecf8f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fi.js @@ -0,0 +1,2 @@ +// Finnish (fi) +plupload.addI18n({"Stop Upload":"Pysäytä lähetys","Upload URL might be wrong or doesn't exist.":"Lähetyksen URL-osoite saattaa olla väärä tai sitä ei ole olemassa.","tb":"TB","Size":"Koko","Close":"Sulje","Init error.":"Init virhe.","Add files to the upload queue and click the start button.":"Lisää tiedostoja lähetysjonoon ja klikkaa aloita-nappia.","Filename":"Tiedostonimi","Image format either wrong or not supported.":"Kuvaformaatti on joko väärä tai ei tuettu.","Status":"Tila","HTTP Error.":"HTTP-virhe.","Start Upload":"Aloita lähetys","mb":"MB","kb":"kB","Duplicate file error.":"Tuplatiedostovirhe.","File size error.":"Tiedostokokovirhe.","N/A":"N/A","gb":"GB","Error: Invalid file extension:":"Virhe: Virheellinen tiedostopääte:","Select files":"Valitse tiedostoja","%s already present in the queue.":"%s on jo jonossa.","File: %s":"Tiedosto: %s","b":"B","Uploaded %d/%d files":"Lähetetty %d/%d tiedostoa","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Vain %d tiedosto(a) voidaan lähettää kerralla. Ylimääräiset tiedostot ohitettiin.","%d files queued":"%d tiedostoa jonossa","File: %s, size: %d, max file size: %d":"Tiedosto: %s, koko: %d, suurin sallittu tiedostokoko: %d","Drag files here.":"Raahaa tiedostot tähän.","Runtime ran out of available memory.":"Toiminnon käytettävissä oleva muisti loppui kesken.","File count error.":"Tiedostolaskentavirhe.","File extension error.":"Tiedostopäätevirhe.","Error: File too large:":"Virhe: Liian suuri tiedosto:","Add Files":"Lisää tiedostoja"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fr.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fr.js new file mode 100644 index 0000000000..7f2a765b41 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/fr.js @@ -0,0 +1,2 @@ +// French (fr) +plupload.addI18n({"Stop Upload":"Arrêter l'envoi.","Upload URL might be wrong or doesn't exist.":"L'URL d'envoi est soit erronée soit n'existe pas.","tb":"To","Size":"Taille","Close":"Fermer","Init error.":"Erreur d'initialisation.","Add files to the upload queue and click the start button.":"Ajoutez des fichiers à la file d'attente de téléchargement et appuyez sur le bouton 'Démarrer l'envoi'","Filename":"Nom du fichier","Image format either wrong or not supported.":"Le format d'image est soit erroné soit pas géré.","Status":"État","HTTP Error.":"Erreur HTTP.","Start Upload":"Démarrer l'envoi","mb":"Mo","kb":"Ko","Duplicate file error.":"Erreur: Fichier déjà sélectionné.","File size error.":"Erreur de taille de fichier.","N/A":"Non applicable","gb":"Go","Error: Invalid file extension:":"Erreur: Extension de fichier non valide:","Select files":"Sélectionnez les fichiers","%s already present in the queue.":"%s déjà présent dans la file d'attente.","File: %s":"Fichier: %s","b":"o","Uploaded %d/%d files":"%d fichiers sur %d ont été envoyés","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Que %d fichier(s) peuvent être envoyé(s) à la fois. Les fichiers supplémentaires ont été ignorés.","%d files queued":"%d fichiers en attente","File: %s, size: %d, max file size: %d":"Fichier: %s, taille: %d, taille max. d'un fichier: %d","Drag files here.":"Déposez les fichiers ici.","Runtime ran out of available memory.":"Le traitement a manqué de mémoire disponible.","File count error.":"Erreur: Nombre de fichiers.","File extension error.":"Erreur d'extension de fichier","Error: File too large:":"Erreur: Fichier trop volumineux:","Add Files":"Ajouter des fichiers"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/he.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/he.js new file mode 100644 index 0000000000..710334780f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/he.js @@ -0,0 +1,2 @@ +// Hebrew (he) +plupload.addI18n({"Stop Upload":"בטל העלאה","Upload URL might be wrong or doesn't exist.":"כתובת URL שגויה או לא קיימת.","tb":"tb","Size":"גודל","Close":"סגור","Init error.":"שגיאת איתחול","Add files to the upload queue and click the start button.":"הוסף קבצים לרשימה ולחץ על כפתור שליחה להתחלת פעולות העלאה","Filename":"שם קובץ","Image format either wrong or not supported.":"תמונה פגומה או סוג תמונה לא נתמך","Status":"אחוז","HTTP Error.":"שגיאת פרוטוקול","Start Upload":"שליחה","mb":"MB","kb":"KB","Duplicate file error.":"קובץ כפול","File size error.":"גודל קובץ חורג מהמותר","N/A":"שגיאה","gb":"GB","Error: Invalid file extension:":"שגיאה: סוג קובץ לא נתמך:","Select files":"בחר קבצים","%s already present in the queue.":"%sקובץ נמצא כבר ברשימת הקבצים.","File: %s":"קובץ: %s","b":"B","Uploaded %d/%d files":"מעלה: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"אלמנטי ההעלאה מקבלים רק %d קובץ(ים) בפעם אחת. קבצים נוספים הוסרו.","%d files queued":"%d קבצים נותרו","File: %s, size: %d, max file size: %d":"קובץ: %s, גודל: %d, גודל מקסימלי: %d","Drag files here.":"גרור קבצים לכאן","Runtime ran out of available memory.":"שגיאת מחסור בזיכרון","File count error.":"שגיאת מספר קבצים","File extension error.":"קובץ זה לא נתמך","Error: File too large:":"שגיאה: קובץ חורג מהגודל המותר:","Add Files":"הוסף קבצים"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hr.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hr.js new file mode 100644 index 0000000000..626dded437 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hr.js @@ -0,0 +1,2 @@ +// Croatian (hr) +plupload.addI18n({"Stop Upload":"Zaustavi upload.","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Veličina","Close":"Zatvori","Init error.":"Greška inicijalizacije.","Add files to the upload queue and click the start button.":"Dodajte datoteke u listu i kliknite Upload.","Filename":"Ime datoteke","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP greška.","Start Upload":"Pokreni upload.","mb":"mb","kb":"kb","Duplicate file error.":"Pogreška dvostruke datoteke.","File size error.":"Greška veličine datoteke.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Pogreška: Nevažeći nastavak datoteke:","Select files":"Odaberite datoteke:","%s already present in the queue.":"%s je već prisutan u listi čekanja.","File: %s":"Datoteka: %s","b":"b","Uploaded %d/%d files":"Uploadano %d/%d datoteka","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d datoteka na čekanju.","File: %s, size: %d, max file size: %d":"Datoteka: %s, veličina: %d, maksimalna veličina: %d","Drag files here.":"Dovucite datoteke ovdje","Runtime ran out of available memory.":"Runtime aplikaciji je ponestalo memorije.","File count error.":"Pogreška u broju datoteka.","File extension error.":"Pogreška u nastavku datoteke.","Error: File too large:":"Pogreška: Datoteka je prevelika:","Add Files":"Dodaj datoteke"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hu.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hu.js new file mode 100644 index 0000000000..ad233566f0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hu.js @@ -0,0 +1,2 @@ +// Hungarian (hu) +plupload.addI18n({"Stop Upload":"Feltöltés leállítása","Upload URL might be wrong or doesn't exist.":"A feltöltő URL hibás vagy nem létezik.","tb":"TB","Size":"Méret","Close":"Bezárás","Init error.":"Init hiba.","Add files to the upload queue and click the start button.":"A fájlok feltöltési sorhoz való hozzáadása után az Indítás gombra kell kattintani.","Filename":"Fájlnév","Image format either wrong or not supported.":"Rossz vagy nem támogatott képformátum.","Status":"Állapot","HTTP Error.":"HTTP-hiba.","Start Upload":"Feltöltés indítása","mb":"MB","kb":"kB","Duplicate file error.":"Duplikáltfájl-hiba.","File size error.":"Hibás fájlméret.","N/A":"Nem elérhető","gb":"GB","Error: Invalid file extension:":"Hiba: érvénytelen fájlkiterjesztés:","Select files":"Fájlok kiválasztása","%s already present in the queue.":"%s már szerepel a listában.","File: %s":"Fájl: %s","b":"b","Uploaded %d/%d files":"Feltöltött fájlok: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"A feltöltés egyszerre csak %d fájlt fogad el, a többi fájl nem lesz feltöltve.","%d files queued":"%d fájl sorbaállítva","File: %s, size: %d, max file size: %d":"Fájl: %s, méret: %d, legnagyobb fájlméret: %d","Drag files here.":"Ide lehet húzni a fájlokat.","Runtime ran out of available memory.":"Futásidőben elfogyott a rendelkezésre álló memória.","File count error.":"A fájlok számával kapcsolatos hiba.","File extension error.":"Hibás fájlkiterjesztés.","Error: File too large:":"Hiba: a fájl túl nagy:","Add Files":"Fájlok hozzáadása"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hy.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hy.js new file mode 100644 index 0000000000..ddf432df9e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/hy.js @@ -0,0 +1,2 @@ +// Armenian (hy) +plupload.addI18n({"Stop Upload":"Կանգնեցնել","Upload URL might be wrong or doesn't exist.":"Ավեցաված URL-ը սխալ է կամ գոյություն չունի։","tb":"տբ","Size":"Չափ","Close":"Փակել","Init error.":"Ստեղծման սխալ","Add files to the upload queue and click the start button.":"Ավելացրեք ֆայլեր ցուցակում և սեղմեք \"Վերբեռնել\"։","Filename":"Ֆայլի անուն","Image format either wrong or not supported.":"Նկարի ֆորմատը սխալ է կամ չի ընդունվում։","Status":"Կարգավիճակ","HTTP Error.":"HTTP սխալ","Start Upload":"Վերբեռնել","mb":"մբ","kb":"կբ","Duplicate file error.":"Ֆայլի կրկնման սխալ","File size error.":"Ֆայլի չափի սխալ","N/A":"N/A","gb":"գբ","Error: Invalid file extension:":"Սխալ։ Ֆայլի ընդլայնումը սխալ է։","Select files":"Ընտրեք ֆայլերը","%s already present in the queue.":"%s ֆայլը արդեն ավելացված է ցուցակում.","File: %s":"Ֆայլ: %s","b":"բ","Uploaded %d/%d files":"Վերբեռնվել են %d/%d ֆայլերը","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Վերբեռնիչը միանգամից ըդունում է միայն %d ֆայլ(եր). Ավելորդ ֆայլերը հեռացվել են.","%d files queued":"ցուցակում կա %d ֆայլ","File: %s, size: %d, max file size: %d":"Ֆայլ: %s, չափ: %d, ֆայլի մաքսիմում չափ: %d","Drag files here.":"Տեղափոխեք ֆայլերը այստեղ","Runtime ran out of available memory.":"Օպերատիվ հիշողության անբավարարուտյուն.","File count error.":"Ֆայլերի քանակի սխալ","File extension error.":"Ֆայլի ընդլայնման սխալ","Error: File too large:":"Սխալ։ Ֆայլի չափը մեծ է։","Add Files":"Ավելացնել ֆայլեր"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/id.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/id.js new file mode 100644 index 0000000000..2921c27d17 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/id.js @@ -0,0 +1,2 @@ +// Indonesian (id) +plupload.addI18n({"Stop Upload":"Hentikan Upload","Upload URL might be wrong or doesn't exist.":"Alamat URL untuk upload tidak benar atau tidak ada","tb":"tb","Size":"Ukuran","Close":"Tutup","Init error.":"Kesalahan pada Init","Add files to the upload queue and click the start button.":"Tambahkan file kedalam antrian upload dan klik tombol Mulai","Filename":"Nama File","Image format either wrong or not supported.":"Kesalahan pada jenis gambar atau jenis file tidak didukung","Status":"Status","HTTP Error.":"HTTP Bermasalah","Start Upload":"Mulai Upload","mb":"mb","kb":"kb","Duplicate file error.":"Terjadi duplikasi file","File size error.":"Kesalahan pada ukuran file","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Kesalahan: Ekstensi file tidak dikenal","Select files":"Pilih file","%s already present in the queue.":"%s sudah ada dalam daftar antrian","File: %s":"File: %s","b":"b","Uploaded %d/%d files":"File terupload %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Tempat untuk upload hanya menerima %d file(s) dalam setiap upload. File lainnya tidak akan disertakan","%d files queued":"%d file dalam antrian","File: %s, size: %d, max file size: %d":"File: %s, ukuran: %d, maksimum ukuran file: %d","Drag files here.":"Tarik file kesini","Runtime ran out of available memory.":"Tidak cukup memori","File count error.":"Kesalahan pada jumlah file","File extension error.":"Kesalahan pada ekstensi file","Error: File too large:":"Kesalahan: File terlalu besar","Add Files":"Tambah File"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/it.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/it.js new file mode 100644 index 0000000000..66c9f9df07 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/it.js @@ -0,0 +1,2 @@ +// Italian (it) +plupload.addI18n({"Stop Upload":"Ferma Upload","Upload URL might be wrong or doesn't exist.":"URL di Upload errata o non esistente","tb":"tb","Size":"Dimensione","Close":"Chiudi","Init error.":"Errore inizializzazione.","Add files to the upload queue and click the start button.":"Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.","Filename":"Nome file","Image format either wrong or not supported.":"Formato immagine errato o non supportato.","Status":"Stato","HTTP Error.":"Errore HTTP.","Start Upload":"Inizia Upload","mb":"mb","kb":"kb","Duplicate file error.":"Errore file duplicato.","File size error.":"Errore dimensione file.","N/A":"N/D","gb":"gb","Error: Invalid file extension:":"Errore: Estensione file non valida:","Select files":"Seleziona i files","%s already present in the queue.":"%s già presente nella coda.","File: %s":"File: %s","b":"byte","Uploaded %d/%d files":"Caricati %d/%d file","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d file in coda","File: %s, size: %d, max file size: %d":"File: %s, dimensione: %d, dimensione max file: %d","Drag files here.":"Trascina i files qui.","Runtime ran out of available memory.":"Runtime ha esaurito la memoria disponibile.","File count error.":"File count error.","File extension error.":"Errore estensione file.","Error: File too large:":"Errore: File troppo grande:","Add Files":"Aggiungi file"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ja.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ja.js new file mode 100644 index 0000000000..28486992ee --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ja.js @@ -0,0 +1,2 @@ +// Japanese (ja) +plupload.addI18n({"Stop Upload":"アップロード停止","Upload URL might be wrong or doesn't exist.":"アップロード先の URL が存在しません","tb":"TB","Size":"サイズ","Close":"閉じる","Init error.":"イニシャライズエラー","Add files to the upload queue and click the start button.":"ファイルをアップロードキューに追加してスタートボタンをクリックしてください","Filename":"ファイル名","Image format either wrong or not supported.":"画像形式が間違っているかサポートされていません","Status":"ステータス","HTTP Error.":"HTTP エラー","Start Upload":"アップロード開始","mb":"MB","kb":"KB","Duplicate file error.":"重複ファイルエラー","File size error.":"ファイルサイズエラー","N/A":"N/A","gb":"GB","Error: Invalid file extension:":"エラー: ファイルの拡張子が無効です:","Select files":"ファイル選択","%s already present in the queue.":"%s 既にキューに存在しています","File: %s":"ファイル: %s","b":"B","Uploaded %d/%d files":"アップロード中 %d/%d ファイル","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"アップロード可能なファイル数は %d です 余分なファイルは削除されました","%d files queued":"%d ファイルが追加されました","File: %s, size: %d, max file size: %d":"ファイル: %s, サイズ: %d, 最大ファイルサイズ: %d","Drag files here.":"ここにファイルをドラッグ","Runtime ran out of available memory.":"ランタイムが使用するメモリが不足しました","File count error.":"ファイル数エラー","File extension error.":"ファイル拡張子エラー","Error: File too large:":"エラー: ファイルが大きすぎます:","Add Files":"ファイルを追加"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ka.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ka.js new file mode 100644 index 0000000000..b1a1fa9d6d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ka.js @@ -0,0 +1,2 @@ +// Georgian (ka) +plupload.addI18n({"Stop Upload":"ატვირთვის შეჩერება","Upload URL might be wrong or doesn't exist.":"ატვირთვის მისამართი არასწორია ან არ არსებობს.","tb":"ტბ","Size":"ზომა","Close":"დავხუროთ","Init error.":"ინიციალიზაციის შეცდომა.","Add files to the upload queue and click the start button.":"დაამატეთ ფაილები და დააჭირეთ ღილაკს - ატვირთვა.","Filename":"ფაილის სახელი","Image format either wrong or not supported.":"ფაილის ფორმატი არ არის მხარდაჭერილი ან არასწორია.","Status":"სტატუსი","HTTP Error.":"HTTP შეცდომა.","Start Upload":"ატვირთვა","mb":"მბ","kb":"კბ","Duplicate file error.":"ესეთი ფაილი უკვე დამატებულია.","File size error.":"ფაილის ზომა დაშვებულზე დიდია.","N/A":"N/A","gb":"გბ","Error: Invalid file extension:":"შეცდომა: ფაილს აქვს არასწორი გაფართოება.","Select files":"ფაილების მონიშვნა","%s already present in the queue.":"%s უკვე დამატებულია.","File: %s":"ფაილი: %s","b":"ბ","Uploaded %d/%d files":"ატვირთულია %d/%d ფაილი","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"ერთდროულად დაშვებულია მხოლოდ %d ფაილის დამატება.","%d files queued":"რიგშია %d ფაილი","File: %s, size: %d, max file size: %d":"ფაილი: %s, ზომა: %d, მაქსიმალური დაშვებული ზომა: %d","Drag files here.":"ჩააგდეთ ფაილები აქ.","Runtime ran out of available memory.":"ხელმისაწვდომი მეხსიერება გადაივსო.","File count error.":"აღმოჩენილია ზედმეტი ფაილები.","File extension error.":"ფაილის ფორმატი დაშვებული არ არის.","Error: File too large:":"შეცდომა: ფაილი ზედმეტად დიდია.","Add Files":"დაამატეთ ფაილები"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/kk.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/kk.js new file mode 100644 index 0000000000..344922a880 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/kk.js @@ -0,0 +1,2 @@ +// Kazakh (kk) +plupload.addI18n({"Stop Upload":"Жүктеуді тоқтату","Upload URL might be wrong or doesn't exist.":"Жүктеуді қабылдаушы URL қате не мүлдем көрсетілмеген.","tb":"тб","Size":"Өлшемі","Close":"Жабу","Init error.":"Инициализация қатесі.","Add files to the upload queue and click the start button.":"Жүктеу кезегіне файлдар қосып, Бастау кнопкасын басыңыз.","Filename":"Файл аты","Image format either wrong or not supported.":"Сурет форматы қате немесе оның қолдауы жоқ.","Status":"Күйі","HTTP Error.":"HTTP қатесі.","Start Upload":"Жүктеуді бастау","mb":"мб","kb":"кб","Duplicate file error.":"Файл қайталамасының қатесі.","File size error.":"Файл өлшемінің қатесі.","N/A":"Қ/Ж","gb":"гб","Error: Invalid file extension:":"Қате: Файл кеңейтілуі қате:","Select files":"Файлдар таңдаңыз","%s already present in the queue.":"%s файлы кезекте бұрыннан бар.","File: %s":"Файл: %s","b":"б","Uploaded %d/%d files":"Жүктелген: %d/%d файл","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Жүктеу элементі бір кезде %d файл ғана жүктей алады. Артық файлдар жүктелмейді.","%d files queued":"%d файл кезекке қойылды","File: %s, size: %d, max file size: %d":"Файл: %s, өлшемі: %d, макс. файл өлшемі: %d","Drag files here.":"Файлдарды мына жерге тастаңыз.","Runtime ran out of available memory.":"Орындау кезінде жады жетпей қалды.","File count error.":"Файл санының қатесі.","File extension error.":"Файл кеңейтілуінің қатесі.","Error: File too large:":"Қате: Файл мөлшері тым үлкен:","Add Files":"Файл қосу"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/km.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/km.js new file mode 100644 index 0000000000..c77cea1312 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/km.js @@ -0,0 +1,2 @@ +// Khmer (km) +plupload.addI18n({"Stop Upload":"បញ្ឈប់​ការ​ផ្ទុក​ឡើង","Upload URL might be wrong or doesn't exist.":"URL ផ្ទុក​ឡើង​អាច​ខុស ឬ​ក៏​គ្មាន។","tb":"tb","Size":"ទំហំ","Close":"បិទ","Init error.":"កំហុស Init។","Add files to the upload queue and click the start button.":"បន្ថែម​ឯកសារ​ទៅ​ក្នុង​ជួរ​លំដាប់​ផ្ទុក​ឡើង ហើយ​ចុច​ប៊ូតុង​ចាប់​ផ្ដើម។","Filename":"ឈ្មោះ​ឯកសារ","Image format either wrong or not supported.":"ទ្រង់​ទ្រាយ​រូបភាព​អាច​ខុស ឬ​ក៏​មិន​ស្គាល់​តែ​ម្ដង។","Status":"ស្ថានភាព","HTTP Error.":"កំហុស HTTP ។","Start Upload":"ចាប់​ផ្ដើម​ផ្ទុក​ឡើង","mb":"mb","kb":"kb","Duplicate file error.":"កំហុស​ឯកសារ​ស្ទួន​គ្នា។","File size error.":"កំហុស​ទំហំ​ឯកសារ។","N/A":"គ្មាន","gb":"gb","Error: Invalid file extension:":"កំហុស៖ កន្ទុយ​ឯកសារ​មិន​ត្រឹម​ត្រូវ៖","Select files":"ជ្រើស​ឯកសារ","%s already present in the queue.":"មាន %s នៅ​ក្នុង​ជួរ​លំដាប់​ហើយ។","File: %s":"ឯកសារ៖ %s","b":"b","Uploaded %d/%d files":"បាន​ផ្ទុក​ឡើង​ឯកសារ %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"ការ​ផ្ទុក​ឡើង​ទទួល​ឯកសារ​បាន​តែ %d ប៉ុណ្ណោះ​ក្នុង​ពេល​តែ​មួយ។ ឯកសារ​ផ្សេង​ទៀត​នឹង​ត្រូវ​ដក​ចេញ។","%d files queued":"បាន​ដាក់​ឯកសារ %d បន្ត​គ្នា","File: %s, size: %d, max file size: %d":"ឯកសារ៖ %s, size: %d, ទំហំ​ឯកសារ​អតិបរមា៖ %d","Drag files here.":"អូស​ឯកសារ​មក​ទីនេះ។","Runtime ran out of available memory.":"ពេល​ដំណើរ​ការ​អស់​អង្គ​ចងចាំ​ទំនេរ​ហើយ។","File count error.":"កំហុស​ការ​រាប់​ឯកសារ។","File extension error.":"កំហុស​កន្ទុយ​ឯកសារ។","Error: File too large:":"កំហុស៖ ឯកសារ​ធំ​ពេក៖","Add Files":"បន្ថែម​ឯកសារ"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ko.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ko.js new file mode 100644 index 0000000000..80c656409e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ko.js @@ -0,0 +1,2 @@ +// Korean (ko) +plupload.addI18n({"Stop Upload":"업로드 중지","Upload URL might be wrong or doesn't exist.":"업로드할 URL이 존재하지 않습니다.","tb":"tb","Size":"크기","Close":"닫기","Init error.":"초기화 오류.","Add files to the upload queue and click the start button.":"파일을 업로드 큐에 추가한 후 시작 버튼을 클릭하십시오.","Filename":"파일명","Image format either wrong or not supported.":"지원되지 않는 이미지 형식입니다.","Status":"상태","HTTP Error.":"HTTP 오류.","Start Upload":"업로드 시작","mb":"mb","kb":"kb","Duplicate file error.":"파일 중복 오류.","File size error.":"파일 크기 오류.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"오류: 허용되지 않은 확장자입니다.","Select files":"파일 선택","%s already present in the queue.":"%s 파일이 이미 대기열에 존재합니다.","File: %s":"파일: %s","b":"b","Uploaded %d/%d files":"%d / %d 파일 업로드 완료","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"업로드 가능한 파일의 수는 %d 입니다. 불필요한 파일은 삭제되었습니다.","%d files queued":"%d 파일이 추가됨","File: %s, size: %d, max file size: %d":"파일: %s, 크기: %d, 최대 파일 크기: %d","Drag files here.":"이곳에 파일을 드래그 하세요.","Runtime ran out of available memory.":"런타임 메모리가 부족합니다.","File count error.":"파일 갯수 오류.","File extension error.":"파일 확장자 오류.","Error: File too large:":"오류: 파일 크기가 너무 큽니다.","Add Files":"파일 추가"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ku_IQ.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ku_IQ.js new file mode 100644 index 0000000000..f3dd2506e7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ku_IQ.js @@ -0,0 +1,2 @@ +// Kurdish (Iraq) (ku_IQ) +plupload.addI18n({"Stop Upload":"وەستانی بارکردن","Upload URL might be wrong or doesn't exist.":".بەستەری بارکراو نادروستە یان بەردەست نییە","tb":"تێرابایت","Size":"قەبارە","Close":"داخستن","Init error.":".هەڵەی ئامادەکردن","Add files to the upload queue and click the start button.":".زیادکردنی پەڕگەکان بۆ ڕیزی بارکردن و کرتەکردن لە دوگمەی دەستپێکردن","Filename":"ناوی پەڕگە","Image format either wrong or not supported.":".شێوازی وێنە هەڵەیە یان پاڵپشتی ناکرێت","Status":"ڕەوش","HTTP Error.":".HTTP هەڵەی","Start Upload":"دەستپێکردنی بارکردن","mb":"مێگابایت","kb":"کیلۆبایت","Duplicate file error.":".هەڵەی پەڕگەی دوبارە","File size error.":".هەڵەی قەبارەی پەڕگە","N/A":"بەردەست نییە","gb":"گێگابایت","Error: Invalid file extension:":":هەڵە: پاشگری پەڕگەی نادروست","Select files":"دیاریکردنی پەڕگەکان","%s already present in the queue.":".ئامادەیی هەیە لە ڕیز %s","File: %s":"%s :پەڕگە","b":"بایت","Uploaded %d/%d files":"پەڕگە بارکران %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"بەشی بارکردن تەنها %d پەڕگە(کان) وەردەگرێت لەیەک کاتدا. پەڕگە زیادەکان .جیادەکرێنەوە","%d files queued":"پەڕگە ڕیزکران %d","File: %s, size: %d, max file size: %d":"پەڕگە: %s، قەبارە: %d، گەورەترین قەبارەی پەڕگە: %d","Drag files here.":".پەڕگەکان ڕاکێشە بۆ ئێرە","Runtime ran out of available memory.":"هەڵەی دەرچوون لە بیرگەی بەردەست.","File count error.":".هەڵەی ژماردنی پەڕگە","File extension error.":".هەڵەی پاشگری پەڕگە","Error: File too large:":":هەڵە: پەڕگەکە زۆر گەورەیە","Add Files":"زیادکردنی پەڕگەکان"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lt.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lt.js new file mode 100644 index 0000000000..b24e65b032 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lt.js @@ -0,0 +1,2 @@ +// Lithuanian (lt) +plupload.addI18n({"Stop Upload":"Stabdyti įkėlimą","Upload URL might be wrong or doesn't exist.":"Klaidinga arba neegzistuojanti įkėlimo nuoroda.","tb":"tb","Size":"Dydis","Close":"Uždaryti","Init error.":"Įkrovimo klaida.","Add files to the upload queue and click the start button.":"Pridėkite bylas į įkėlimo eilę ir paspauskite starto mygtuką.","Filename":"Bylos pavadinimas","Image format either wrong or not supported.":"Paveiksliuko formatas klaidingas arba nebepalaikomas.","Status":"Statusas","HTTP Error.":"HTTP klaida.","Start Upload":"Pradėti įkėlimą","mb":"mb","kb":"kb","Duplicate file error.":"Pasikartojanti byla.","File size error.":"Netinkamas bylos dydis.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Klaida: Netinkamas bylos plėtinys:","Select files":"Žymėti bylas","%s already present in the queue.":"%s jau yra eilėje.","File: %s":"Byla: %s","b":"b","Uploaded %d/%d files":"Įkelta bylų: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Vienu metu galima įkelti tik %d bylas(ų). Papildomos bylos buvo pašalintos.","%d files queued":"%d bylų eilėje","File: %s, size: %d, max file size: %d":"Byla: %s, dydis: %d, galimas dydis: %d","Drag files here.":"Padėti bylas čia.","Runtime ran out of available memory.":"Išeikvota darbinė atmintis.","File count error.":"Netinkamas bylų kiekis.","File extension error.":"Netinkamas pletinys.","Error: File too large:":"Klaida: Byla per didelė:","Add Files":"Pridėti bylas"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lv.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lv.js new file mode 100644 index 0000000000..4e71464108 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/lv.js @@ -0,0 +1,2 @@ +// Latvian (lv) +plupload.addI18n({"Stop Upload":"Apturēt augšupielādi","Upload URL might be wrong or doesn't exist.":"Augšupielādes saite neeksistē vai ir nepareiza.","tb":"terabaiti","Size":"Izmērs","Close":"Aizvērt","Init error.":"Inicializācijas kļūda.","Add files to the upload queue and click the start button.":"Pievienojiet failus rindai un klikšķiniet uz pogas \"Sākt augšupielādi\".","Filename":"Faila nosaukums","Image format either wrong or not supported.":"Attēla formāts ir nepareizs vai arī netiek atbalstīts.","Status":"Statuss","HTTP Error.":"HTTP kļūda.","Start Upload":"Sākt augšupielādi","mb":"megabaiti","kb":"kilobaiti","Duplicate file error.":"Atkārtota faila kļūda","File size error.":"Faila izmēra kļūda.","N/A":"N/A","gb":"gigabaiti","Error: Invalid file extension:":"Kļūda: Nepareizs faila paplašinājums:","Select files":"Izvēlieties failus","%s already present in the queue.":"%s jau ir atrodams rindā.","File: %s":"Fails: %s","b":"baiti","Uploaded %d/%d files":"Augšupielādēti %d/%d faili","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Iespējams ielādēt tikai %d failus vienā reizē. Atlikušie faili netika pievienoti","%d files queued":"%d faili pievienoti rindai","File: %s, size: %d, max file size: %d":"Fails: %s, izmērs: %d, max faila izmērs: %d","Drag files here.":"Ievelciet failus šeit","Runtime ran out of available memory.":"Pietrūkst izmantojamās atmiņas.","File count error.":"Failu skaita kļūda","File extension error.":"Faila paplašinājuma kļūda.","Error: File too large:":"Kļūda: Fails pārāk liels:","Add Files":"Pievienot failus"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ms.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ms.js new file mode 100644 index 0000000000..dffb0ae18b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ms.js @@ -0,0 +1,2 @@ +// Malay (ms) +plupload.addI18n({"Stop Upload":"Berhenti Muat naik","Upload URL might be wrong or doesn't exist.":"URL muat naik mungkin salah atau tidak wujud.","tb":"tb","Size":"saiz","Close":"Tutup","Init error.":"Ralat perlaksanaan.","Add files to the upload queue and click the start button.":"Tambah fail ke dalam giliran muat naik dan klik butang Muat Naik.","Filename":"Nama fail","Image format either wrong or not supported.":"Format imej sama ada salah atau tidak disokong.","Status":"Status","HTTP Error.":"Ralat HTTP.","Start Upload":"Muat Naik","mb":"mb","kb":"kb","Duplicate file error.":"Ralat menggandakan fail.","File size error.":"Ralat saiz fail.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Ralat: Sambungan fail tidak sah:","Select files":"Pilih fail","%s already present in the queue.":"%s telah ada dalam barisan.","File: %s":"Fail: %s","b":"b","Uploaded %d/%d files":"%d/%d telah dimuat naik","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Element muat naik hanya menerima %d fail(-fail) pada satu masa. Fail tambahan telah digugurkan.","%d files queued":"%d fail dalam barisan","File: %s, size: %d, max file size: %d":"Fail: %s, saiz: %d, saiz maks fail: %d","Drag files here.":"Seret fail ke sini.","Runtime ran out of available memory.":"Ruang ingatan masa larian tidak mencukupi.","File count error.":"Ralat bilangan fail.","File extension error.":"Ralat sambungan fail.","Error: File too large:":"Ralat: Fail terlalu bersar:","Add Files":"Tambah Fail"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/nl.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/nl.js new file mode 100644 index 0000000000..9ff3c1c6f5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/nl.js @@ -0,0 +1,2 @@ +// Dutch (nl) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL is verkeerd of bestaat niet.","tb":"tb","Size":"Grootte","Close":"Sluiten","Init error.":"Initialisatie error.","Add files to the upload queue and click the start button.":"Voeg bestanden toe aan de wachtrij en druk op 'Start'.","Filename":"Bestandsnaam","Image format either wrong or not supported.":"bestandsextensie is verkeerd of niet ondersteund.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","mb":"mb","kb":"kb","Duplicate file error.":"Bestand bestaat al.","File size error.":"Bestandsgrootte error.","N/A":"Niet beschikbaar","gb":"gb","Error: Invalid file extension:":"Error: Ongeldige bestandsextensie:","Select files":"Selecteer bestand(en):","%s already present in the queue.":"%s is al aan de wachtrij toegevoegd.","File: %s":"Bestand: %s","b":"b","Uploaded %d/%d files":"%d/%d bestanden ge-upload","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload accepteert alleen %d bestand(en) tegelijk. Extra bestanden zijn verwijderd.","%d files queued":"%d bestand(en) in de wachtrij","File: %s, size: %d, max file size: %d":"Bestand: %s, grootte: %d, maximale bestandsgrootte: %d","Drag files here.":"Sleep bestanden hierheen.","Runtime ran out of available memory.":"Het maximum bruikbare geheugen is overschreden.","File count error.":"Teveel bestand(en) error.","File extension error.":"Ongeldig bestandsextensie.","Error: File too large:":"Error: Bestand te groot:","Add Files":"Bestand(en) toevoegen"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pl.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pl.js new file mode 100644 index 0000000000..05a5b295fc --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pl.js @@ -0,0 +1,2 @@ +// Polish (pl) +plupload.addI18n({"Stop Upload":"Przerwij transfer.","Upload URL might be wrong or doesn't exist.":"Adres URL moze bys nieprawidlowy lub moze nieistniec","tb":"tb","Size":"Rozmiar","Close":"Zamknij","Init error.":"Błąd inicjalizacji.","Add files to the upload queue and click the start button.":"Dodaj pliki i kliknij 'Rozpocznij transfer'.","Filename":"Nazwa pliku","Image format either wrong or not supported.":"Format zdjecia jest zly lub nieobslugiwany","Status":"Status","HTTP Error.":"Błąd HTTP.","Start Upload":"Wyslij","mb":"mb","kb":"kb","Duplicate file error.":"Blad: duplikacja pliku.","File size error.":"Plik jest zbyt duży.","N/A":"Nie dostępne","gb":"gb","Error: Invalid file extension:":"Blad: Nieprawidlowe rozszerzenie pliku:","Select files":"Wybierz pliki:","%s already present in the queue.":"%s juz wystepuje w kolejce.","File: %s":"Plik: %s","b":"b","Uploaded %d/%d files":"Wysłano %d/%d plików","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d plików w kolejce.","File: %s, size: %d, max file size: %d":"Plik: %s, rozmiar: %d, maksymalny rozmiar pliku: %d","Drag files here.":"Przeciągnij tu pliki","Runtime ran out of available memory.":"Wyczerpano pamiec RAM.","File count error.":"Blad liczenia pliku.","File extension error.":"Nieobsługiwany format pliku.","Error: File too large:":"Blad: Plik za duzy:","Add Files":"Dodaj pliki"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pt_BR.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pt_BR.js new file mode 100644 index 0000000000..dcaf6c6fc6 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/pt_BR.js @@ -0,0 +1,2 @@ +// Portuguese (Brazil) (pt_BR) +plupload.addI18n({"Stop Upload":"Parar o envio","Upload URL might be wrong or doesn't exist.":"URL de envio está errada ou não existe","tb":"TB","Size":"Tamanho","Close":"Fechar","Init error.":"Erro inicializando.","Add files to the upload queue and click the start button.":"Adicione os arquivos abaixo e clique no botão \"Iniciar o envio\".","Filename":"Nome do arquivo","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"Erro HTTP.","Start Upload":"Iniciar o envio","mb":"MB","kb":"KB","Duplicate file error.":"Erro: Arquivo duplicado.","File size error.":"Tamanho de arquivo não permitido.","N/A":"N/D","gb":"GB","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Escolha os arquivos","%s already present in the queue.":"%s já presentes na fila.","File: %s":"Arquivo: %s","b":"Bytes","Uploaded %d/%d files":"Enviado(s) %d/%d arquivo(s)","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Só são aceitos %d arquivos por vez. O que passou disso foi descartado.","%d files queued":"%d arquivo(s)","File: %s, size: %d, max file size: %d":"Arquivo: %s, Tamanho: %d , Tamanho Máximo do Arquivo: %d","Drag files here.":"Arraste os arquivos pra cá","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Erro na contagem dos arquivos","File extension error.":"Tipo de arquivo não permitido.","Error: File too large:":"Error: File too large:","Add Files":"Adicionar arquivo(s)"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ro.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ro.js new file mode 100644 index 0000000000..2ea3f06cb3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ro.js @@ -0,0 +1,2 @@ +// Romanian (ro) +plupload.addI18n({"Stop Upload":"Oprește încărcarea","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Mărime","Close":"Închide","Init error.":"Eroare inițializare.","Add files to the upload queue and click the start button.":"Adaugă fișiere în lista apoi apasă butonul \"Începe încărcarea\".","Filename":"Nume fișier","Image format either wrong or not supported.":"Formatul de imagine ori este greșit ori nu este suportat.","Status":"Stare","HTTP Error.":"Eroare HTTP","Start Upload":"Începe încărcarea","mb":"mb","kb":"kb","Duplicate file error.":"Eroare duplicat fișier.","File size error.":"Eroare dimensiune fișier.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Eroare: Extensia fișierului este invalidă:","Select files":"Selectează fișierele","%s already present in the queue.":"%s există deja în lista de așteptare.","File: %s":"Fișier: %s","b":"b","Uploaded %d/%d files":"Fișiere încărcate %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d fișiere listate","File: %s, size: %d, max file size: %d":"Fișier: %s, mărime: %d, mărime maximă: %d","Drag files here.":"Trage aici fișierele.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Eroare numărare fișiere.","File extension error.":"Eroare extensie fișier.","Error: File too large:":"Eroare: Fișierul este prea mare:","Add Files":"Adaugă fișiere"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ru.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ru.js new file mode 100644 index 0000000000..ae2470bee0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/ru.js @@ -0,0 +1,2 @@ +// Russian (ru) +plupload.addI18n({"Stop Upload":"Остановить Загрузку","Upload URL might be wrong or doesn't exist.":"Адрес заргузки неправильный или он не существует.","tb":"тб","Size":"Размер","Close":"Закрыть","Init error.":"Ошибка инициализации.","Add files to the upload queue and click the start button.":"Добавьте файлы в очередь и нажмите кнопку \"Загрузить файлы\".","Filename":"Имя файла","Image format either wrong or not supported.":"Формат картинки неправильный или он не поддерживается.","Status":"Статус","HTTP Error.":"Ошибка HTTP.","Start Upload":"Начать загрузку","mb":"мб","kb":"кб","Duplicate file error.":"Такой файл уже присутствует в очереди.","File size error.":"Неправильный размер файла.","N/A":"N/A","gb":"гб","Error: Invalid file extension:":"Ошибка: У файла неправильное расширение:","Select files":"Выберите файлы","%s already present in the queue.":"%s уже присутствует в очереди.","File: %s":"Файл: %s","b":"б","Uploaded %d/%d files":"Загружено %d/%d файлов","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Загрузочный элемент за раз принимает только %d файл(ов). Лишние файлы были отброшены.","%d files queued":"В очереди %d файл(ов)","File: %s, size: %d, max file size: %d":"Файл: %s, размер: %d, макс. размер файла: %d","Drag files here.":"Перетащите файлы сюда.","Runtime ran out of available memory.":"Рабочая среда превысила лимит достуной памяти.","File count error.":"Слишком много файлов.","File extension error.":"Неправильное расширение файла.","Error: File too large:":"Ошибка: Файл слишком большой:","Add Files":"Добавьте файлы"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sk.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sk.js new file mode 100644 index 0000000000..18c9351c4f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sk.js @@ -0,0 +1,2 @@ +// Slovak (sk) +plupload.addI18n({"Stop Upload":"Zastaviť nahrávanie","Upload URL might be wrong or doesn't exist.":"URL pre nahratie nie je správna alebo neexistuje.","tb":"tb","Size":"Veľkosť","Close":"Zatvoriť","Init error.":"Chyba inicializácie.","Add files to the upload queue and click the start button.":"Pridajte súbory do zoznamu a potom spustite nahrávanie.","Filename":"Názov súboru","Image format either wrong or not supported.":"Formát obrázku je nesprávny alebo nie je podporovaný.","Status":"Stav","HTTP Error.":"HTTP Chyba.","Start Upload":"Spustiť nahrávanie","mb":"mb","kb":"kb","Duplicate file error.":"Duplicitný súbor.","File size error.":"Súbor je príliš veľký.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Error: Nesprávny typ súboru:","Select files":"Vyberte súbory","%s already present in the queue.":"%s sa už nachádza v zozname.","File: %s":"Súbor: %s","b":"b","Uploaded %d/%d files":"Nahraných %d/%d súborov","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d súborov pridaných do zoznamu","File: %s, size: %d, max file size: %d":"Súbor: %s, veľkosť: %d, max. veľkosť súboru: %d","Drag files here.":"Sem pretiahnite súbory.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Nesprávny počet súborov.","File extension error.":"Chybný typ súboru.","Error: File too large:":"Chyba: Súbor je príliš veľký:","Add Files":"Pridať súbory"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sq.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sq.js new file mode 100644 index 0000000000..921b3361fc --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sq.js @@ -0,0 +1,2 @@ +// Albanian (sq) +plupload.addI18n({"Stop Upload":"Ndalimi i ngarkimit","Upload URL might be wrong or doesn't exist.":"Ngarkimi i URL-s është i gabuar ose nuk ekziston.","tb":"TB","Size":"Madhësia","Close":"Mbyll","Init error.":"Init gabim.","Add files to the upload queue and click the start button.":"Mbas ngarkimit të dosjeve sipas rradhës duhet të klikoni butonin Start.","Filename":"Emri i dosjes","Image format either wrong or not supported.":"Formati i fotove është i keq ose nuk është i pranueshëm.","Status":"Statusi","HTTP Error.":"HTTP Gabim.","Start Upload":"Nisja e ngarkimit","mb":"MB","kb":"KB","Duplicate file error.":"Gabim i dublikimit të dosjes.","File size error.":"Gabim i madhësisë së dosjes.","N/A":"Nuk është në dispozicion","gb":"GB","Error: Invalid file extension:":"Gabim: përhapja e llojit të dosjes është e pavlefshme:","Select files":"Zhgjidhni dosjet","%s already present in the queue.":"%s tashmë ekziston në list.","File: %s":"Dosje: %s","b":"B","Uploaded %d/%d files":"Dosjet e ngarkuara: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Ngarkimi pranon njëherësh vetëm %d dosje, dosjet e tjera nuk do të jenë të ngarkuara.","%d files queued":"Dosja %d e vendosur në rradhë","File: %s, size: %d, max file size: %d":"Dosje: %s, madhësia: %d, madhësia maximale e dosjes: %d","Drag files here.":"Këtu mund të tërhiqni dosjet","Runtime ran out of available memory.":"Memoria që ishte në dispozicion ka mbaruar.","File count error.":"Gabim në lidhje me numrin e dosjeve.","File extension error.":"Gabim i zgjerimit të dosjes.","Error: File too large:":"Gabim: dosja është shumë e madhe:","Add Files":"Shtoni dosjet"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sr.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sr.js new file mode 100644 index 0000000000..bb9581c8b0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sr.js @@ -0,0 +1,2 @@ +// Serbian (sr) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Veličina","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Dodajte fajlove u listu i kliknite na dugme Start.","Filename":"Naziv fajla","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Počni upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Izaberite fajlove","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Snimljeno %d/%d fajlova","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Prevucite fajlove ovde.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Dodaj fajlove"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sv.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sv.js new file mode 100644 index 0000000000..f25ed818ff --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/sv.js @@ -0,0 +1,2 @@ +// Swedish (sv) +plupload.addI18n({"Stop Upload":"Avbryt","Upload URL might be wrong or doesn't exist.":"URL:en va fel eller existerar inte.","tb":"tb","Size":"Storlek","Close":"Stäng","Init error.":"Problem vid initialisering.","Add files to the upload queue and click the start button.":"Lägg till filer till kön och tryck på start.","Filename":"Filnamn","Image format either wrong or not supported.":"Bildformatet är fel eller så finns inte stöd för det.","Status":"Status","HTTP Error.":"HTTP problem.","Start Upload":"Starta","mb":"mb","kb":"kb","Duplicate file error.":"Problem med dubbla filer.","File size error.":"Problem med filstorlek.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Fel: Ej godkänd filändelse.","Select files":"Välj filer","%s already present in the queue.":"%s är redan tillagd.","File: %s":"Fil: %s","b":"b","Uploaded %d/%d files":"Laddade upp %d/%d filer","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Det går bara lägga till %d filer åt gången, allt utöver detta togs bort.","%d files queued":"%d filer i kö","File: %s, size: %d, max file size: %d":"Fil: %s, storlek: %d, max storlek: %d","Drag files here.":"Dra filer hit","Runtime ran out of available memory.":"Slut på minne.","File count error.":"Räknefel.","File extension error.":"Problem med filändelse.","Error: File too large:":"Fel: Filen är för stor:","Add Files":"Lägg till"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/th_TH.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/th_TH.js new file mode 100644 index 0000000000..53b995e6db --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/th_TH.js @@ -0,0 +1,2 @@ +// Thai (Thailand) (th_TH) +plupload.addI18n({"Stop Upload":"หยุดอัพโหลด","Upload URL might be wrong or doesn't exist.":"URL ของการอัพโหลดอาจจะผิดหรือไม่มีอยู่","tb":"เทราไบต์","Size":"ขนาด","Close":"ปิด","Init error.":"Init เกิดข้อผิดพลาด","Add files to the upload queue and click the start button.":"เพิ่มไฟล์ไปยังคิวอัพโหลดและคลิกที่ปุ่มเริ่ม","Filename":"ชื่อไฟล์","Image format either wrong or not supported.":"รูปแบบรูปภาพทั้งสองผิดหรือไม่รองรับ","Status":"สถานะ","HTTP Error.":"HTTP เกิดข้อผิดพลาด","Start Upload":"เริ่มอัพโหลด","mb":"เมกะไบต์","kb":"กิโลไบต์","Duplicate file error.":"ไฟล์ที่ซ้ำกันเกิดข้อผิดพลาด","File size error.":"ขนาดไฟล์เกิดข้อผิดพลาด","N/A":"N/A","gb":"กิกะไบต์","Error: Invalid file extension:":"ข้อผิดพลาด: นามสกุลไฟล์ไม่ถูกต้อง:","Select files":"เลือกไฟล์","%s already present in the queue.":"%s อยู่ในคิวแล้ว","File: %s":"ไฟล์: %s","b":"ไบต์","Uploaded %d/%d files":"อัพโหลดแล้ว %d/%d ไฟล์","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"การอัพโหลดจะยอมรับเฉพาะ %d ไฟล์(s) ในช่วงเวลาเดียวกัน เมื่อไฟล์พิเศษถูกปลดออก","%d files queued":"%d ไฟล์ที่อยู่ในคิว","File: %s, size: %d, max file size: %d":"ไฟล์: %s, ขนาด: %d, ขนาดไฟล์สูงสุด: %d","Drag files here.":"ลากไฟล์มาที่นี่","Runtime ran out of available memory.":"รันไทม์วิ่งออกมาจากหน่วยความจำ","File count error.":"การนับไฟล์เกิดข้อผิดพลาด","File extension error.":"นามสกุลไฟล์เกิดข้อผิดพลาด","Error: File too large:":"ข้อผิดพลาด: ไฟล์ใหญ่เกินไป:","Add Files":"เพิ่มไฟล์"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/tr.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/tr.js new file mode 100644 index 0000000000..47fec4ea36 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/tr.js @@ -0,0 +1,2 @@ +// Turkish (tr) +plupload.addI18n({"Stop Upload":"Yüklemeyi durdur","Upload URL might be wrong or doesn't exist.":"URL yok ya da hatalı olabilir.","tb":"tb","Size":"Boyut","Close":"Kapat","Init error.":"Başlangıç hatası.","Add files to the upload queue and click the start button.":"Dosyaları kuyruğa ekleyin ve başlatma butonuna tıklayın.","Filename":"Dosya adı","Image format either wrong or not supported.":"Resim formatı yanlış ya da desteklenmiyor.","Status":"Durum","HTTP Error.":"HTTP hatası.","Start Upload":"Yüklemeyi başlat","mb":"mb","kb":"kb","Duplicate file error.":"Yinelenen dosya hatası.","File size error.":"Dosya boyutu hatası.","N/A":"-","gb":"gb","Error: Invalid file extension:":"Hata: Geçersiz dosya uzantısı:","Select files":"Dosyaları seç","%s already present in the queue.":"%s kuyrukta zaten mevcut.","File: %s":"Dosya: %s","b":"bayt","Uploaded %d/%d files":"%d/%d dosya yüklendi","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Yükleme elemanı aynı anda %d dosya kabul eder. Ekstra dosyalar işleme konulmaz.","%d files queued":"Kuyrukta %d dosya var.","File: %s, size: %d, max file size: %d":"Dosya: %s, boyut: %d, maksimum dosya boyutu: %d","Drag files here.":"Dosyaları buraya bırakın.","Runtime ran out of available memory.":"İşlem için yeterli bellek yok.","File count error.":"Dosya sayım hatası.","File extension error.":"Dosya uzantısı hatası.","Error: File too large:":"Hata: Dosya çok büyük:","Add Files":"Dosya ekle"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/uk_UA.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/uk_UA.js new file mode 100644 index 0000000000..726bf94cd7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/uk_UA.js @@ -0,0 +1,2 @@ +// Ukrainian (Ukraine) (uk_UA) +plupload.addI18n({"Stop Upload":"Зупинити завантаження","Upload URL might be wrong or doesn't exist.":"Адреса завантаження неправильна або не існує.","tb":"тб","Size":"Розмір","Close":"Закрити","Init error.":"Помилка ініціалізації.","Add files to the upload queue and click the start button.":"Додайте файли в чергу та натисніть кнопку \"Завантажити файли\".","Filename":"Назва файлу","Image format either wrong or not supported.":"Формат картинки не правильний або не підтримується.","Status":"Статус","HTTP Error.":"Помилка HTTP.","Start Upload":"Почати завантаження","mb":"мб","kb":"кб","Duplicate file error.":"Такий файл вже присутній в черзі.","File size error.":"Неправильний розмір файлу.","N/A":"Н/Д","gb":"гб","Error: Invalid file extension:":"Помилка: У файлу неправильне розширення:","Select files":"Оберіть файли","%s already present in the queue.":"%s вже присутній у черзі.","File: %s":"Файл: %s","b":"б","Uploaded %d/%d files":"Завантажено %d/%d файлів","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Завантажувальний елемент приймає лише %d файл(ів) одночасно. Зайві файли було відкинуто.","%d files queued":"В черзі %d файл(ів)","File: %s, size: %d, max file size: %d":"Файл: %s, розмір: %d, макс. розмір файлу: %d","Drag files here.":"Перетягніть файли сюди.","Runtime ran out of available memory.":"Робоче середовище перевищило ліміт доступної пам'яті.","File count error.":"Занадто багато файлів.","File extension error.":"Неправильне розширення файлу.","Error: File too large:":"Помилка: Файл занадто великий:","Add Files":"Додати файли"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/vi.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/vi.js new file mode 100644 index 0000000000..a0cfadcb5d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/vi.js @@ -0,0 +1,2 @@ +// Vietnamese (vi) +plupload.addI18n({"Stop Upload":"Dừng","Upload URL might be wrong or doesn't exist.":"Đường dẫn URL tải lên không đúng hoặc không tồn tại.","tb":"TB","Size":"Dung lượng","Close":"Đóng","Init error.":"Lỗi khởi tạo","Add files to the upload queue and click the start button.":"Thêm tập tin để tải lên và bấm vào nút bắt đầu","Filename":"Tên tập tin","Image format either wrong or not supported.":"Địng dạng hình ảnh không đúng hoặc không được hỗ trợ.","Status":"Trạng thái","HTTP Error.":"Lỗi HTTP","Start Upload":"Bắt đầu","mb":"MB","kb":"KB","Duplicate file error.":"Tập tin đã tồn tại","File size error.":"Lỗi dung lượng tập tin","N/A":"Chưa có thông tin","gb":"GB","Error: Invalid file extension:":"Lỗi: Định dạng tập tin không xác định:","Select files":"Chọn tập tin","%s already present in the queue.":"%s đã có trong danh sách chờ tải lên","File: %s":"Tập tin: %s","b":"B","Uploaded %d/%d files":"Đã tải lên %d/%d tập tin","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Chỉ có thể tải lên (%d) tập tin cùng một lúc. Những tập tin còn lại đã bị huỷ bỏ.","%d files queued":"%d tập tin trong danh sách chờ","File: %s, size: %d, max file size: %d":"Tập tin: %s, dung lượng %d, dung lượng tối đa: %d","Drag files here.":"Ném vào đây","Runtime ran out of available memory.":"Thời gian chạy vượt quá giới hạn bộ nhớ cho phép.","File count error.":"Lỗi đếm tập tin","File extension error.":"Lỗi định dạng tập tin","Error: File too large:":"Lỗi: Dung lượng tập tin quá lớn:","Add Files":"Thêm tập tin"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_CN.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_CN.js new file mode 100644 index 0000000000..f48e0c43e5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_CN.js @@ -0,0 +1,2 @@ +// Chinese (China) (zh_CN) +plupload.addI18n({"Stop Upload":"停止上传","Upload URL might be wrong or doesn't exist.":"上传的URL可能是错误的或不存在。","tb":"tb","Size":"大小","Close":"关闭","Init error.":"初始化错误。","Add files to the upload queue and click the start button.":"将文件添加到上传队列,然后点击”开始上传“按钮。","Filename":"文件名","Image format either wrong or not supported.":"图片格式错误或者不支持。","Status":"状态","HTTP Error.":"HTTP 错误。","Start Upload":"开始上传","mb":"mb","kb":"kb","Duplicate file error.":"重复文件错误。","File size error.":"文件大小错误。","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"错误:无效的文件扩展名:","Select files":"选择文件","%s already present in the queue.":"%s 已经在当前队列里。","File: %s":"文件: %s","b":"b","Uploaded %d/%d files":"已上传 %d/%d 个文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只接受同时上传 %d 个文件,多余的文件将会被删除。","%d files queued":"%d 个文件加入到队列","File: %s, size: %d, max file size: %d":"文件: %s, 大小: %d, 最大文件大小: %d","Drag files here.":"把文件拖到这里。","Runtime ran out of available memory.":"运行时已消耗所有可用内存。","File count error.":"文件数量错误。","File extension error.":"文件扩展名错误。","Error: File too large:":"错误: 文件太大:","Add Files":"增加文件"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_TW.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_TW.js new file mode 100644 index 0000000000..2deebe2d63 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/i18n/zh_TW.js @@ -0,0 +1,2 @@ +// Chinese (Taiwan) (zh_TW) +plupload.addI18n({"Stop Upload":"停止上傳","Upload URL might be wrong or doesn't exist.":"檔案URL可能有誤或者不存在。","tb":"tb","Size":"大小","Close":"關閉","Init error.":"初始化錯誤。","Add files to the upload queue and click the start button.":"將檔案加入上傳序列,然後點選”開始上傳“按鈕。","Filename":"檔案名稱","Image format either wrong or not supported.":"圖片格式錯誤或者不支援。","Status":"狀態","HTTP Error.":"HTTP 錯誤。","Start Upload":"開始上傳","mb":"mb","kb":"kb","Duplicate file error.":"錯誤:檔案重複。","File size error.":"錯誤:檔案大小超過限制。","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"錯誤:不接受的檔案格式:","Select files":"選擇檔案","%s already present in the queue.":"%s 已經存在目前的檔案序列。","File: %s":"檔案: %s","b":"b","Uploaded %d/%d files":"已上傳 %d/%d 個文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只能上傳 %d 個檔案,超過限制數量的檔案將被忽略。","%d files queued":"%d 個檔案加入到序列","File: %s, size: %d, max file size: %d":"檔案: %s, 大小: %d, 檔案大小上限: %d","Drag files here.":"把檔案拖曳到這裡。","Runtime ran out of available memory.":"執行時耗盡了所有可用的記憶體。","File count error.":"檔案數量錯誤。","File extension error.":"檔案副檔名錯誤。","Error: File too large:":"錯誤: 檔案大小太大:","Add Files":"增加檔案"}); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/css/jquery.plupload.queue.css b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/css/jquery.plupload.queue.css new file mode 100644 index 0000000000..fa38eb023f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/css/jquery.plupload.queue.css @@ -0,0 +1,185 @@ +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_wrapper * { + box-sizing: content-box; +} + +.plupload_button { + display: -moz-inline-box; /* FF < 3*/ + display: inline-block; + font: normal 12px sans-serif; + text-decoration: none; + color: #42454a; + border: 1px solid #bababa; + padding: 2px 8px 3px 20px; + margin-right: 4px; + background: #f3f3f3 url('../img/buttons.png') no-repeat 0 center; + outline: 0; + + /* Optional rounded corners for browsers that support it */ + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.plupload_button:hover { + color: #000; + text-decoration: none; +} + +.plupload_disabled, a.plupload_disabled:hover { + color: #737373; + border-color: #c5c5c5; + background: #ededed url('../img/buttons-disabled.png') no-repeat 0 center; + cursor: default; +} + +.plupload_add { + background-position: -181px center; +} + +.plupload_wrapper { + font: normal 11px Verdana,sans-serif; + width: 100%; +} + +.plupload_container { + padding: 8px; + background: url('../img/transp50.png'); + /*-moz-border-radius: 5px;*/ +} + +.plupload_container input { + border: 1px solid #DDD; + font: normal 11px Verdana,sans-serif; + width: 98%; +} + +.plupload_header {background: #2A2C2E url('../img/backgrounds.gif') repeat-x;} +.plupload_header_content { + background: url('../img/backgrounds.gif') no-repeat 0 -317px; + min-height: 56px; + padding-left: 60px; + color: #FFF; +} +.plupload_header_title { + font: normal 18px sans-serif; + padding: 6px 0 3px; +} +.plupload_header_text { + font: normal 12px sans-serif; +} + +.plupload_filelist { + margin: 0; + padding: 0; + list-style: none; +} + +.plupload_scroll .plupload_filelist { + height: 185px; + background: #F5F5F5; + overflow-y: scroll; +} + +.plupload_filelist li { + padding: 10px 8px; + background: #F5F5F5 url('../img/backgrounds.gif') repeat-x 0 -156px; + border-bottom: 1px solid #DDD; +} + +.plupload_filelist_header, .plupload_filelist_footer { + background: #DFDFDF; + padding: 8px 8px; + color: #42454A; +} +.plupload_filelist_header { + border-top: 1px solid #EEE; + border-bottom: 1px solid #CDCDCD; +} + +.plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;} +.plupload_file_name {float: left; overflow: hidden;} +.plupload_file_status {color: #777;} +.plupload_file_status span {color: #42454A;} +.plupload_file_size, .plupload_file_status, .plupload_progress { + float: right; + width: 80px; +} +.plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;} + +.plupload_filelist .plupload_file_name { + width: 205px; + white-space: nowrap; + text-overflow: ellipsis; +} + +.plupload_file_action { + float: right; + width: 16px; + height: 16px; + margin-left: 15px; +} + +.plupload_file_action * { + display: none; + width: 16px; + height: 16px; +} + +li.plupload_uploading {background: #ECF3DC url('../img/backgrounds.gif') repeat-x 0 -238px;} +li.plupload_done {color:#AAA;} + +li.plupload_delete a { + background: url('../img/delete.gif'); +} + +li.plupload_failed a { + background: url('../img/error.gif'); + cursor: default; +} + +li.plupload_done a { + background: url('../img/done.gif'); + cursor: default; +} + +.plupload_progress, .plupload_upload_status { + display: none; +} + +.plupload_progress_container { + margin-top: 3px; + border: 1px solid #CCC; + background: #FFF; + padding: 1px; +} +.plupload_progress_bar { + width: 0; + height: 7px; + background: #CDEB8B; +} + +.plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action { + margin-right: 17px; +} + +/* Floats */ + +.plupload_clear,.plupload_clearer {clear: both;} +.plupload_clearer, .plupload_progress_bar { + display: block; + font-size: 0; + line-height: 0; +} + +li.plupload_droptext { + background: transparent; + text-align: center; + vertical-align: middle; + border: 0; + line-height: 165px; +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/backgrounds.gif b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/backgrounds.gif new file mode 100644 index 0000000000000000000000000000000000000000..39e33ebc02114ebea6bb33dee2fb76af3a6dd4dc GIT binary patch literal 2977 zcmdUu`#Tc~1II^hosi0dq?7P6w^9i&)fvJz8*&{RhTJ9Zdro+CGnWyPC?vVFx!;*f zwGhKxa!+DIj18M@Hka9Z&Y$sqpU=;q=kv?g24ZdUZyyK10});iz~_F@@$vEA-kwk> zWUv>uxr;|fM|?hCAQ0^D?{m4_!^1<~@jCbD7n4UhI5^ni{N(X?EIxH-Z^_Wu)X2ol z*z~rE*&WkcAhSE>w?TJr{b6~>-0BYtYxBEc3oEF(6+}nx3g>Wj_h4mDuy)tRmM^63 z9j{-xc7uPs!8!WHK3u(V(`0vlnSHRr6|5Otzp1NlaLv$I|LS!sFwD~0mM5fn`S^SL z224&(`}hT-eFHpw?t7yBP+q?7C~u^v4+81wfkL~vqg)Y47dMZI$th=7gf-M|Zti<} zMppFWX9%SCi|=rDf$WQq#?D zgPh%vgpRJ6*|~V^i^V0%>aR8G@(PVc1H&99{uWKoK;ZYjO-xQqOxioSZEtUXpa1b= z;U}F=FDWfYdikw;y?A6o;>FZf!&R1ropX!0hj#(0-1t9=3LlPOcu# zuI^4Q2(YcauYa)FZF6^|w}X?b4HOP@aGsu-wFX1)2Zq`?I6Jwx-?f1`IJw+&MmV}4 z?Cv?;G%>Zu$?>SjoLvDjCEv�TRS%oFI%_+CO)aErq(YYgtoB}8U3WF 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 literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/buttons-disabled.png b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/buttons-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..afa11af9b93bcbd261faa6a5b0835e82493712b2 GIT binary patch literal 1292 zcmdUu{ZrBh9LK*cyLmOMbKNd&>ujyJA?aEC~~zn}NBXR)7W|sN7p`Q5FZPn}b6cI@%6mmG6E;YBgxp`z{B(g5F$wZ=3sZ1s_ zSC&-JjgriDGG9<|+N|qMu@kQi3=5^!SOKSoDr|hcS(nIx$>w?Y_}6KwQisDq>&KG^ zi_0{bH8nN$L-@}5#{z*sBoaNE0dajON?%cxq_BD%E0@ccmzSCPYH$)y9xazhBp?Wy zUW~~c0*SrbXfep`0_;EzT}hj=j$8hk%pbhjWCDo>+~W2Ey6qa7OfJ*smgutVcDun~ zSlF7q(-W^)6e^WU)-+{gRXu4PhfzX}D_Sm>+tJZcA<4$~W(gggQWLMqNW>4`&XFa_ z$3!!>siGdV#WsysWemKMKU9@bO;z~byHZ;hcj8h1f)Le`$WYSm3XtfYt5+Vvb7jeO zgQY!|W}>X9N|sm9i>xpe2_0QhQ#Uw-4W|TER#r;we7>#?N(rLTXx4SJ)F8wtQZNc+ zSl!QEQw+)IQy!0}(P+9R8TIw`I2>+hXozZlz?dNiR|l%q>NIvj3=5*P3tQ*t1OkC* zC>b^D!|N|d=Q_pnJe5jCr_)(1R(WqW-@+bTl54fv#l^+eIYyo)oj2S@PH#7u!_Wj;T^_|aLmv2xXf1{tLw~Rol zMoUA@How0E1c$wV+ArX@;j{i*jAO|Id0fXo7lQ`5PGpH1zO4M(nl*Mp{}LWd`hK|i zC)z~qJL}3hPjh=E7oAdn6;@F-8hmB7-wWMnK5+UfQVc|-V<4srKAn&t+EJ{=mmYl2 zKcaDu*Oh7emN4xwv%H%>guu-^L(CJO)8q82H6!eRXGegq`lySYbVKCRBLA{94hZml z7C3$h9*J#@{i7xV;SvW5&ZiMh)pYp3e*Pw$un))vg(brQiLq|T00b-=`ZO%H@?V~M B8n^%e literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/buttons.png b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..153e73885ac4a1fd1a98dccd5df73b8d72a2df10 GIT binary patch literal 1439 zcmds$`CHNl0LH(md$h8mXU=DKYCYR>x|XZunH7j(vtnANdE^0}Q_%3q3ljwuNd0Px zXc>}1icY2+UgSJVML-S7gET2S?9e#8(;R=t-XGrM_s>g4UOcyB+n#Lz0POHUxOoA< zmMDEUGcnYAQk=_}J}hu>Uz|549CtG$0S%l*VM5WC9gwmupEox**VosVmzP&oR@TtHrkX-4q2s9uaXQg^SBNc4sxUG3Q2Gz~8cBP?UB&cROAb9#H0uYYyN|uyA#k zDkn-tl*8#=QP!E;(t2WArns5~b#fPK{N1zYdVd1%T6!M_Y{z4}!cdH>lD9p4X)U=W zrl1>tGItNNkCH7&BuEq83e1VT8#NM;B#fqXC!ZjHPZVGYyja%ryR7~^4C~b7dnI?8 z6<6(0DkYI*$=qqSL?O=Lg(yA_)hX_AdYPrqs8LmpSMS5w!!$Rl6Rf}?q19izq`pc& zlF}PfJy?t^@(@hd)4Q|67$-Y#GC}{yJCun2yayZqMuVix+6>$Pz;Xq?)cP6bX!#;N_ zM&L`A=G>9x^7#OMwe1(E#R%zSn0EYb9t^_rHAf6$xY*4IiB-fK&4Caqqw3c8R0C1aH>9E zo(0W2i4piUJ+E;lo#>bMJ$fxfGktK){>)xV@d%~kl`!*#;6hnh1`EDUrHPrlVu7bnk7vzs?(F%PW9p(Us@ByaDr1@N8id1 zq#EK|qf7fpp;hjA9jU`(GJHqGKZ7*?yVfBUmkUMdF;(`|w#2fh)Y<_s^1<(XG1r9( zp(&{7x-0IW1%HBtZ;hc0;q|=DlB{j?98clAE_&Up(=|^ z)y^4+k!d{)ayxq=5;3zqN@!&=e~dt&XdI2tZQl&^gc+E=1kFpxziBUw(u>+6B8ew{ zHT#4adb9s$)lNf5ZqWEWp|o~9mNBKZF@6n~4eLc`ZtQi) zEeZC+@YX2J-oQrPCqWJpanQl%fhgK|SHZ)!AkX2~Oo-gT(((Wk)zSW;rL3+K1a1L<0hS=shBh1KUx9VI6LTcP+1A$fTOVUSbj_}t^TxwA z>);uvlQWimVfuDfQ*;3A$LePE3n4Lk!TR4vFstfStKdAkc%W__W|RR{rpRfCtdE^o z^PM_}-KWf;<+}`y{((slzS?_8m0wvIoRWUWhih`I+Qw`E`olNIr-M})!19Q^wA?Y< zq@_nD!#8PWLw8%hgbQrU?2C`SIj|0x%a6XB8T34O-bxlYF*54+(^w#u7e+Q(Mw+~5 zI{4nmu`t>**kHfo1zn&9jdV!B)Ds3d11+CukDTL!Q1QOEPeFD(V%IO7$IQC+FIkzm e!^(pI%TA#Gq{YC>!%?W7RKNp%(X9a*ocSNer(gg8 literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/delete.gif b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..78ca8b3b49e8f739df6ecfa4ef1119058b40e035 GIT binary patch literal 180 zcmZ?wbhEHb6krfw*v!H39|+Ez`G02S|CvCP_CGD{3a`TQPIW08y z+@NmXYwfboIA>eftmEx7PPc8lxOLj;wk@}o)$U1Kdw+KQj?7u7+G7q_7aUKWu%~bR zon_CzK797&@#5>#ChqKCeR=lWbKTo6Y;8YOwD9`W!0mdKC$n$9xnkdKU4N?J%dby0 zyHXy!eqg;&z4BnntSh~RJEP0@B-9|3oj-CkkZZ+PIz&iq4(r6)4xUz)J}=GOefiTPV2bGL_Yxw$lNYefFmh~ndE zIY+&>-d_`Q*w(b(@Zp<>wcFFSKin|$Y?u8^o3fLc-6tyEet(^I)N{&-{-V>Nn&qme z-|XLbclqX#$!XmLDils2^$_i=Vfo6|K!7s z$3S&5b~>3_CysS9Ff(!pa1CI4JIO94&@9fw!C(yl Dux)$+ literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/error.gif b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/error.gif new file mode 100644 index 0000000000000000000000000000000000000000..4682b63007c89fae09f6640e1a968a073d98b90d GIT binary patch literal 994 zcmZ?wbhEHb6krfw_};*9b)oIQ-*5l@e)sRs`)iBszTS%X_xshqKVQDwin+ST?*G5P zzrQ^G_xt_f9Jc2NYJa}F{`Gdu&zDm^T?_qix&OnZo-emz|NVaR_t)1i*Zuzedh_v0 z>zAA1pKtV@Ea!c=%JBE6!+*Zrczrtj)3uOqx1+w?ivDyh;``H`|9*XZd!q2y`>j8o zPq{fm`Na;auQ!6uw~GD$_w&u+sDHnnzd8{2bbrVDb8TPluY7%O^{INT7l+$F-w1!O zT=&{!g-_QbzC1qg{l($GKi~d(fA!P#uus>+|9rjj_t&$3f4+Tvyzkqcn7=>n{r&m; z>&=i$lU?pF(SEVZ_4lV+Z%tCF$iDo6LW`p7(5<$N&HT8Aidtg@EEu7Dfh!1_m9F6F_-_fnz@dBd3hV zh6RoeTpun37Hm*p=S}!xB2%GsN>(9zl@H4iweC3*!Wlj#haUN`*h|{jWN<7##?Qpk zmawqs0!x>8vXF{_aD)HsCf8Xtia|ir6_cteb~+gFu`;I!>|qpOVG?4uVAFdM{QR&W zONNt2z@nss^K_X~eLR`cSvVIfMeSfTbmmr&58_**5um`{FC={>;XzVD=Tv()J_7-T ogaZvn8JQwxBtJeTEbH?rX5;20cPa5$D~HSgwKHzbjEoG{0NEsHRR910 literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/throbber.gif b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/throbber.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ae8b16a5a474c3da1e426afc20d2167ebd360f1 GIT binary patch literal 1922 zcma)-eM}Q~9LBG`Uf-_0UZFJTFt*nsTO5ueC8MQCX?YP5d8q^!#7gUiuF(Vv0y0uv zMJsO=7zu_gofyX-W+{m?E;Ac+grVzRB*kTp0b7W13o~jO6PL#Adz^qwjJtm>_sjk9 z`#jI{eZINdbKXqbPa-7ZMiBKT^}xA-;P=6WKNl)0E2eKxhaZKneR-`QzrcOMJvKfT zx)lmP4A1{QA9)h7lvsMZdqb029JH3~(nv`^VO`dQxDnc;-1oz!sEu0QJXhB~$nrssc=;5d6bWb>~J{i+O9hUE>s zy$3K&J8PlS3s zuf&l@@FJcg=@u`pfhDq)R}nk`!N({wk0c0{S65>YWU5;9TUls-qL>gRi_rR);{wgY zMVdw2=B8#K29K9L3s zc2K-aUfk?E&kByZwEo`KQU%&(ulDp;Rd2jF$4C4_mBa4FtT?M{W386p329VQR0mG+mdz;^%6}=b+X&!0PAJghY6b|U<(&T>?OpL^EQ|Dg8v(US+(!5}gNN>68C zjIJsuuSa13hEay{0=HqHA>PcGLdSs$kl{5DmyWOoKy3@Be5XpZZB{~bv-Rt+_KBtg z?I&+!J&28PB^xhXaT!{!c-ZpmN=~tqb8%>d`}1|A?BGOz>Q{U7drQo%qk+Jq)wF|Bjbw4$i)(?^O-2qNn1c<7SK zeh64nT!z?PU-wbRweq{O<*Cxk-%v+|o7P1Kr$(&P;`Dngu`P{NC&`fTITT02B_YRx zMm@NDi25Ks=~!vhsbn#_65^=UAs+Z>fLS&$h+rtQa@x?&qIF}sS{QcM$9 zyj8I_JtbX`?QWmL>a)qPxTV4W0{AhtaEw8J%zHgmpSG<=!@1xzkcC#tDkpClZTQ9T{9{ XMrH}sh*f7CD@Dcca7lI@6tMnZ`e4## literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/transp50.png b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/img/transp50.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0efe104bdcc277ddcc3f6efdb54e1d533a5179 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm4M^HB7Cr(}Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+AuIMDtfv&hE&{ob7`X>g8|2p4HHh@ z{1e$QDM;$zbFWMMeYKnhV#f|eBu!Qva;S;tqB;S44$rjF6*2UngC6Cic +

+

Your browser doesn't have Flash, Silverlight or HTML5 support.

+
+ + + +@example + // Retrieving a reference to plupload.Uploader object + var uploader = $('#uploader').pluploadQueue(); + + uploader.bind('FilesAdded', function() { + + // Autostart + setTimeout(uploader.start, 1); // "detach" from the main thread + }); + +@class pluploadQueue +@constructor +@param {Object} settings For detailed information about each option check documentation. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Array} [settings.filters=[]] Set of file type filters, each one defined by hash of title and extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number|String} [settings.max_file_size] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {Boolean} [settings.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + + @param {Boolean} [settings.dragdrop=true] Enable ability to add file to the queue by drag'n'dropping them from the desktop. + @param {Boolean} [settings.rename=false] Enable ability to rename files in the queue. + @param {Boolean} [settings.multiple_queues=true] Re-activate the widget after each upload procedure. +*/ +;(function($, o) { + var uploaders = {}; + + function _(str) { + return plupload.translate(str) || str; + } + + function renderUI(id, target) { + // Remove all existing non plupload items + target.contents().each(function(i, node) { + node = $(node); + + if (!node.is('.plupload')) { + node.remove(); + } + }); + + target.prepend( + '
' + ); + } + + $.fn.pluploadQueue = function(settings) { + if (settings) { + this.each(function() { + var uploader, target, id, contents_bak; + + target = $(this); + id = target.attr('id'); + + if (!id) { + id = plupload.guid(); + target.attr('id', id); + } + + contents_bak = target.html(); + renderUI(id, target); + + settings = $.extend({ + dragdrop : true, + browse_button : id + '_browse', + container : id + }, settings); + + // Enable drag/drop (see PostInit handler as well) + if (settings.dragdrop) { + settings.drop_element = id + '_filelist'; + } + + uploader = new plupload.Uploader(settings); + + uploaders[id] = uploader; + + function handleStatus(file) { + var actionClass; + + if (file.status == plupload.DONE) { + actionClass = 'plupload_done'; + } + + if (file.status == plupload.FAILED) { + actionClass = 'plupload_failed'; + } + + if (file.status == plupload.QUEUED) { + actionClass = 'plupload_delete'; + } + + if (file.status == plupload.UPLOADING) { + actionClass = 'plupload_uploading'; + } + + var icon = $('#' + file.id).attr('class', actionClass).find('a').css('display', 'block'); + if (file.hint) { + icon.attr('title', file.hint); + } + } + + function updateTotalProgress() { + $('span.plupload_total_status', target).html(uploader.total.percent + '%'); + $('div.plupload_progress_bar', target).css('width', uploader.total.percent + '%'); + $('span.plupload_upload_status', target).html( + o.sprintf(_('Uploaded %d/%d files'), uploader.total.uploaded, uploader.files.length) + ); + } + + function updateList() { + var fileList = $('ul.plupload_filelist', target).html(''), inputCount = 0, inputHTML; + + $.each(uploader.files, function(i, file) { + inputHTML = ''; + + if (file.status == plupload.DONE) { + if (file.target_name) { + inputHTML += ''; + } + + inputHTML += ''; + inputHTML += ''; + + inputCount++; + + $('#' + id + '_count').val(inputCount); + } + + fileList.append( + '
  • ' + + '
    ' + file.name + '
    ' + + '
    ' + + '
    ' + file.percent + '%
    ' + + '
    ' + plupload.formatSize(file.size) + '
    ' + + '
     
    ' + + inputHTML + + '
  • ' + ); + + handleStatus(file); + + $('#' + file.id + '.plupload_delete a').click(function(e) { + $('#' + file.id).remove(); + uploader.removeFile(file); + + e.preventDefault(); + }); + }); + + $('span.plupload_total_file_size', target).html(plupload.formatSize(uploader.total.size)); + + if (uploader.total.queued === 0) { + $('span.plupload_add_text', target).html(_('Add Files')); + } else { + $('span.plupload_add_text', target).html(o.sprintf(_('%d files queued'), uploader.total.queued)); + } + + $('a.plupload_start', target).toggleClass('plupload_disabled', uploader.files.length == (uploader.total.uploaded + uploader.total.failed)); + + // Scroll to end of file list + fileList[0].scrollTop = fileList[0].scrollHeight; + + updateTotalProgress(); + + // Re-add drag message if there is no files + if (!uploader.files.length && uploader.features.dragdrop && uploader.settings.dragdrop) { + $('#' + id + '_filelist').append('
  • ' + _("Drag files here.") + '
  • '); + } + } + + function destroy() { + delete uploaders[id]; + uploader.destroy(); + target.html(contents_bak); + uploader = target = contents_bak = null; + } + + uploader.bind("UploadFile", function(up, file) { + $('#' + file.id).addClass('plupload_current_file'); + }); + + uploader.bind('Init', function(up, res) { + // Enable rename support + if (!settings.unique_names && settings.rename) { + target.on('click', '#' + id + '_filelist div.plupload_file_name span', function(e) { + var targetSpan = $(e.target), file, parts, name, ext = ""; + + // Get file name and split out name and extension + file = up.getFile(targetSpan.parents('li')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + targetSpan.hide().after(''); + targetSpan.next().val(name).focus().blur(function() { + targetSpan.show().next().remove(); + }).keydown(function(e) { + var targetInput = $(this); + + if (e.keyCode == 13) { + e.preventDefault(); + + // Rename file and glue extension back on + file.name = targetInput.val() + ext; + targetSpan.html(file.name); + targetInput.blur(); + } + }); + }); + } + + $('#' + id + '_container').attr('title', 'Using runtime: ' + res.runtime); + + $('a.plupload_start', target).click(function(e) { + if (!$(this).hasClass('plupload_disabled')) { + uploader.start(); + } + + e.preventDefault(); + }); + + $('a.plupload_stop', target).click(function(e) { + e.preventDefault(); + uploader.stop(); + }); + + $('a.plupload_start', target).addClass('plupload_disabled'); + }); + + uploader.bind("Error", function(up, err) { + var file = err.file, message; + + if (file) { + message = err.message; + + if (err.details) { + message += " (" + err.details + ")"; + } + + if (err.code == plupload.FILE_SIZE_ERROR) { + alert(_("Error: File too large:") + " " + file.name); + } + + if (err.code == plupload.FILE_EXTENSION_ERROR) { + alert(_("Error: Invalid file extension:") + " " + file.name); + } + + file.hint = message; + $('#' + file.id).attr('class', 'plupload_failed').find('a').css('display', 'block').attr('title', message); + } + + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + destroy(); + }, 1); + } + }); + + uploader.bind("PostInit", function(up) { + // features are populated only after input components are fully instantiated + if (up.settings.dragdrop && up.features.dragdrop) { + $('#' + id + '_filelist').append('
  • ' + _("Drag files here.") + '
  • '); + } + }); + + uploader.init(); + + uploader.bind('StateChanged', function() { + if (uploader.state === plupload.STARTED) { + $('li.plupload_delete a,div.plupload_buttons', target).hide(); + uploader.disableBrowse(true); + + $('span.plupload_upload_status,div.plupload_progress,a.plupload_stop', target).css('display', 'block'); + $('span.plupload_upload_status', target).html('Uploaded ' + uploader.total.uploaded + '/' + uploader.files.length + ' files'); + + if (settings.multiple_queues) { + $('span.plupload_total_status,span.plupload_total_file_size', target).show(); + } + } else { + updateList(); + $('a.plupload_stop,div.plupload_progress', target).hide(); + $('a.plupload_delete', target).css('display', 'block'); + + if (settings.multiple_queues && uploader.total.uploaded + uploader.total.failed == uploader.files.length) { + $(".plupload_buttons,.plupload_upload_status", target).css("display", "inline"); + uploader.disableBrowse(false); + + $(".plupload_start", target).addClass("plupload_disabled"); + $('span.plupload_total_status,span.plupload_total_file_size', target).hide(); + } + } + }); + + uploader.bind('FilesAdded', updateList); + + uploader.bind('FilesRemoved', function() { + // since the whole file list is redrawn for every change in the queue + // we need to scroll back to the file removal point to avoid annoying + // scrolling to the bottom bug (see #926) + var scrollTop = $('#' + id + '_filelist').scrollTop(); + updateList(); + $('#' + id + '_filelist').scrollTop(scrollTop); + }); + + uploader.bind('FileUploaded', function(up, file) { + handleStatus(file); + }); + + uploader.bind("UploadProgress", function(up, file) { + // Set file specific progress + $('#' + file.id + ' div.plupload_file_status', target).html(file.percent + '%'); + + handleStatus(file); + updateTotalProgress(); + }); + + // Call setup function + if (settings.setup) { + settings.setup(uploader); + } + }); + + return this; + } else { + // Get uploader instance for specified element + return uploaders[$(this[0]).attr('id')]; + } + }; +})(jQuery, mOxie); diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/jquery.plupload.queue.min.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/jquery.plupload.queue.min.js new file mode 100644 index 0000000000..d7f7b9636c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.plupload.queue/jquery.plupload.queue.min.js @@ -0,0 +1 @@ +;(function(e,t){function r(e){return plupload.translate(e)||e}function i(t,n){n.contents().each(function(t,n){n=e(n),n.is(".plupload")||n.remove()}),n.prepend('
    '+'
    '+'
    '+'
    '+'
    '+r("Select files")+"
    "+'
    '+r("Add files to the upload queue and click the start button.")+"
    "+"
    "+"
    "+'
    '+'
    '+'
    '+r("Filename")+"
    "+'
     
    '+'
    '+r("Status")+"
    "+'
    '+r("Size")+"
    "+'
     
    '+"
    "+'
      '+'"+"
      "+"
      "+"
      "+''+"
      ")}var n={};e.fn.pluploadQueue=function(s){return s?(this.each(function(){function c(t){var n;t.status==plupload.DONE&&(n="plupload_done"),t.status==plupload.FAILED&&(n="plupload_failed"),t.status==plupload.QUEUED&&(n="plupload_delete"),t.status==plupload.UPLOADING&&(n="plupload_uploading");var r=e("#"+t.id).attr("class",n).find("a").css("display","block");t.hint&&r.attr("title",t.hint)}function h(){e("span.plupload_total_status",a).html(u.total.percent+"%"),e("div.plupload_progress_bar",a).css("width",u.total.percent+"%"),e("span.plupload_upload_status",a).html(t.sprintf(r("Uploaded %d/%d files"),u.total.uploaded,u.files.length))}function p(){var n=e("ul.plupload_filelist",a).html(""),i=0,s;e.each(u.files,function(t,r){s="",r.status==plupload.DONE&&(r.target_name&&(s+=''),s+='',s+='',i++,e("#"+f+"_count").val(i)),n.append('
    • '+'
      '+r.name+"
      "+'
      '+'
      '+r.percent+"%
      "+'
      '+plupload.formatSize(r.size)+"
      "+'
       
      '+s+"
    • "),c(r),e("#"+r.id+".plupload_delete a").click(function(t){e("#"+r.id).remove(),u.removeFile(r),t.preventDefault()})}),e("span.plupload_total_file_size",a).html(plupload.formatSize(u.total.size)),u.total.queued===0?e("span.plupload_add_text",a).html(r("Add Files")):e("span.plupload_add_text",a).html(t.sprintf(r("%d files queued"),u.total.queued)),e("a.plupload_start",a).toggleClass("plupload_disabled",u.files.length==u.total.uploaded+u.total.failed),n[0].scrollTop=n[0].scrollHeight,h(),!u.files.length&&u.features.dragdrop&&u.settings.dragdrop&&e("#"+f+"_filelist").append('
    • '+r("Drag files here.")+"
    • ")}function d(){delete n[f],u.destroy(),a.html(l),u=a=l=null}var u,a,f,l;a=e(this),f=a.attr("id"),f||(f=plupload.guid(),a.attr("id",f)),l=a.html(),i(f,a),s=e.extend({dragdrop:!0,browse_button:f+"_browse",container:f},s),s.dragdrop&&(s.drop_element=f+"_filelist"),u=new plupload.Uploader(s),n[f]=u,u.bind("UploadFile",function(t,n){e("#"+n.id).addClass("plupload_current_file")}),u.bind("Init",function(t,n){!s.unique_names&&s.rename&&a.on("click","#"+f+"_filelist div.plupload_file_name span",function(n){var r=e(n.target),i,s,o,u="";i=t.getFile(r.parents("li")[0].id),o=i.name,s=/^(.+)(\.[^.]+)$/.exec(o),s&&(o=s[1],u=s[2]),r.hide().after(''),r.next().val(o).focus().blur(function(){r.show().next().remove()}).keydown(function(t){var n=e(this);t.keyCode==13&&(t.preventDefault(),i.name=n.val()+u,r.html(i.name),n.blur())})}),e("#"+f+"_container").attr("title","Using runtime: "+n.runtime),e("a.plupload_start",a).click(function(t){e(this).hasClass("plupload_disabled")||u.start(),t.preventDefault()}),e("a.plupload_stop",a).click(function(e){e.preventDefault(),u.stop()}),e("a.plupload_start",a).addClass("plupload_disabled")}),u.bind("Error",function(t,n){var i=n.file,s;i&&(s=n.message,n.details&&(s+=" ("+n.details+")"),n.code==plupload.FILE_SIZE_ERROR&&alert(r("Error: File too large:")+" "+i.name),n.code==plupload.FILE_EXTENSION_ERROR&&alert(r("Error: Invalid file extension:")+" "+i.name),i.hint=s,e("#"+i.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",s)),n.code===plupload.INIT_ERROR&&setTimeout(function(){d()},1)}),u.bind("PostInit",function(t){t.settings.dragdrop&&t.features.dragdrop&&e("#"+f+"_filelist").append('
    • '+r("Drag files here.")+"
    • ")}),u.init(),u.bind("StateChanged",function(){u.state===plupload.STARTED?(e("li.plupload_delete a,div.plupload_buttons",a).hide(),u.disableBrowse(!0),e("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",a).css("display","block"),e("span.plupload_upload_status",a).html("Uploaded "+u.total.uploaded+"/"+u.files.length+" files"),s.multiple_queues&&e("span.plupload_total_status,span.plupload_total_file_size",a).show()):(p(),e("a.plupload_stop,div.plupload_progress",a).hide(),e("a.plupload_delete",a).css("display","block"),s.multiple_queues&&u.total.uploaded+u.total.failed==u.files.length&&(e(".plupload_buttons,.plupload_upload_status",a).css("display","inline"),u.disableBrowse(!1),e(".plupload_start",a).addClass("plupload_disabled"),e("span.plupload_total_status,span.plupload_total_file_size",a).hide()))}),u.bind("FilesAdded",p),u.bind("FilesRemoved",function(){var t=e("#"+f+"_filelist").scrollTop();p(),e("#"+f+"_filelist").scrollTop(t)}),u.bind("FileUploaded",function(e,t){c(t)}),u.bind("UploadProgress",function(t,n){e("#"+n.id+" div.plupload_file_status",a).html(n.percent+"%"),c(n),h()}),s.setup&&s.setup(u)}),this):n[e(this[0]).attr("id")]}})(jQuery,mOxie); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/css/jquery.ui.plupload.css b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/css/jquery.ui.plupload.css new file mode 100644 index 0000000000..7b2a10c8c2 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/css/jquery.ui.plupload.css @@ -0,0 +1,375 @@ +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_wrapper * { + box-sizing: content-box; +} + +.plupload_button { + cursor: pointer; + outline: none; +} + +.plupload_wrapper { + font: normal 11px Verdana,sans-serif; + width: 100%; + min-width: 520px; + line-height: 12px; +} + +.plupload_container { + height: 300px; + min-height: 300px; + position: relative; +} + +.plupload_filelist_footer {border-width: 1px 0 0 0;} +.plupload_file {border-width: 0 0 1px 0;} +.plupload_container .plupload_header {border-width: 0 0 1px 0; position: relative;} + +.plupload_delete .ui-icon, +.plupload_done .ui-icon, +.plupload_failed .ui-icon { + cursor:pointer; +} + +.plupload_header_content { + height: 56px; + padding: 0 160px 0 60px; + position: relative; +} + +.plupload_logo { + width: 40px; + height: 40px; + background: url('../img/plupload.png') no-repeat 0 0; + position: absolute; + top: 8px; + left: 8px; +} + +.plupload_header_content_bw .plupload_logo { + background-position: -40px 0; +} + +.plupload_header_title { + font: normal 18px sans-serif; + line-height: 19px; + padding: 6px 0 3px; +} + +.plupload_header_text { + font: normal 12px sans-serif; +} + +.plupload_view_switch { + position: absolute; + right: 16px; + bottom: 8px; + margin: 0; + display: none; +} + +.plupload_view_switch .ui-button { + margin-right: -0.31em; +} + +.plupload_content { + position: absolute; + top: 86px; + bottom: 44px; + left: 0; + right: 0; + overflow-y: auto; + width: 100%; +} + +.plupload_filelist { + border-collapse: collapse; + border-left: none; + border-right: none; + margin: 0; + padding: 0; + width: 100%; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; +} + +.plupload_filelist_content { + padding: 0; + margin: 0; +} + +.plupload_cell {padding: 8px 6px;} + +.plupload_file { + list-style: none; + display: block; + position: relative; + overflow: hidden; + line-height: 12px; +} + +.plupload_file_thumb { + position: relative; + background-image: none; + background-color: #eee; +} + +.plupload_thumb_loading { + background: #eee url(../img/loading.gif) center no-repeat; +} + +.plupload_thumb_loading .plupload_file_dummy, +.plupload_thumb_embedded .plupload_file_dummy { + display: none; +} + +.plupload_file_name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.plupload_filelist_header { + border-top: none; +} + +.plupload_filelist_footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +.plupload_buttons { + position: relative; +} + +/* list view */ +.plupload_view_list .plupload_file { + border-left: none; + border-right: none; + border-top: none; + height: 29px; + width: 100% !important; + /* fix IE6 vertical white-space bug */ + _float: left; + _clear: left; +} + +.plupload_view_list div.plupload_file_size, +.plupload_view_list div.plupload_file_status, +.plupload_view_list div.plupload_file_action { + padding: 8px 6px; + position: absolute; + top: 0; + right: 0; +} + +.plupload_view_list div.plupload_file_name { + margin-right: 156px; + padding: 8px 6px; + _width: 75%; +} + +.plupload_view_list div.plupload_file_size { + right: 28px; +} + +.plupload_view_list div.plupload_file_status { + right: 82px; +} + +.plupload_view_list .plupload_file_rename { + margin-left: -2px; +} + +.plupload_view_list .plupload_file_size, +.plupload_view_list .plupload_file_status, +.plupload_filelist_footer .plupload_file_size, +.plupload_filelist_footer .plupload_file_status { + text-align: right; + width: 52px; +} + +.plupload_view_list .plupload_file_thumb { + position: absolute; + top: -999px; +} + +.plupload_view_list .plupload_file_progress { + display: none; +} + + +/* thumbs view */ +.plupload_view_thumbs .plupload_content { + top: 57px; +} + +.plupload_view_thumbs .plupload_filelist_header { + display: none; +} + +.plupload_view_thumbs .plupload_file { + padding: 6px; + margin: 10px; + border: 1px solid #fff; + float: left; +} + +.plupload_view_thumbs .plupload_file_thumb, +.plupload_view_thumbs .plupload_file_dummy { + text-align: center; + overflow: hidden; +} + +.plupload_view_thumbs .plupload_file_dummy { + font-size: 21px; + font-weight: bold; + text-transform: lowercase; + overflow: hidden; + border: none; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.plupload_view_thumbs div.plupload_file_action { + position: absolute; + top: 0; + right: 0; +} + +.plupload_view_thumbs div.plupload_file_name { + padding: 0; + font-weight: bold; +} + +.plupload_view_thumbs .plupload_file_rename { + padding: 1px 0; + width: 100% !important; +} + +.plupload_view_thumbs div.plupload_file_size { + font-size: 0.8em; + font-weight: normal; +} + +.plupload_view_thumbs div.plupload_file_status { + position: relative; + height: 3px; + overflow: hidden; + text-indent: -999px; + margin-bottom: 3px; +} + +.plupload_view_thumbs div.plupload_file_progress { + border: none; + height: 100%; +} + +.plupload .ui-sortable-helper, +.plupload .ui-sortable .plupload_file { + cursor:move; +} + +.plupload_file_action {width: 16px;} +.plupload_file_name { + overflow: hidden; + padding-left: 10px; +} + +.plupload_file_rename { + border: none; + font: normal 11px Verdana, sans-serif; + padding: 1px 2px; + line-height: 11px; + height: 11px; +} + +.plupload_progress {width: 60px;} +.plupload_progress_container {padding: 1px;} + + +/* Floats */ + +.plupload_right {float: right;} +.plupload_left {float: left;} +.plupload_clear,.plupload_clearer {clear: both;} +.plupload_clearer, .plupload_progress_bar { + display: block; + font-size: 0; + line-height: 0; +} +.plupload_clearer {height: 0;} + +/* Misc */ +.plupload_hidden {display: none !important;} + +.plupload_droptext { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; + text-align: center; + vertical-align: middle; + border: 0; + line-height: 160px; + display: none; +} + +.plupload_dropbox .plupload_droptext { + display: block; +} + +.plupload_buttons, .plupload_upload_status {float: left;} + +.plupload_message { + position: absolute; + top: -1px; + left: -1px; + height: 100%; + width: 100%; +} + +.plupload_message p { + padding:0.7em; + margin:0; +} + +.plupload_message strong { + font-weight: bold; +} + +.plupload_message i { + font-style: italic; +} + +.plupload_message p span.ui-icon { + float: left; + margin-right: 0.3em; +} + +.plupload_header_content .ui-state-error, +.plupload_header_content .ui-state-highlight { + border:none; +} + +.plupload_message_close { + position:absolute; + top:5px; + right:5px; + cursor:pointer; +} + +.plupload .ui-sortable-placeholder { + height:35px; +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/img/loading.gif b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0109d1706f7e1f26bbe6563a45e4146e5f02c45 GIT binary patch literal 4023 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 Hz|{W&U89!W literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/img/plupload.png b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/img/plupload.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae0f90b5abcb54b3fe2c1f8c69aaeaff41d886e GIT binary patch literal 6597 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 +
      +

      Your browser doesn't have Flash, Silverlight or HTML5 support.

      +
      + + + +@example + // Invoking methods: + $('#uploader').plupload(options); + + // Display welcome message in the notification area + $('#uploader').plupload('notify', 'info', "This might be obvious, but you need to click 'Add Files' to add some files."); + +@example + // Subscribing to the events... + // ... on initialization: + $('#uploader').plupload({ + ... + viewchanged: function(event, args) { + // stuff ... + } + }); + // ... or after initialization + $('#uploader').on("viewchanged", function(event, args) { + // stuff ... + }); + +@class UI.Plupload +@constructor +@param {Object} settings For detailed information about each option check documentation. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Object} [settings.filters={}] Set of file type filters. + @param {Array} [settings.filters.mime_types=[]] List of file types to accept, each one defined by title and list of extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String|Number} [settings.filters.max_file_size=0] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Boolean} [settings.filters.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {Number} [settings.filters.max_file_count=0] Limit the number of files that can reside in the queue at the same time (default is 0 - no limit). + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number|String} [settings.max_file_size] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {Boolean} [settings.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + + @param {Boolean} [settings.autostart=false] Whether to auto start uploading right after file selection. + @param {Boolean} [settings.dragdrop=true] Enable ability to add file to the queue by drag'n'dropping them from the desktop. + @param {Boolean} [settings.rename=false] Enable ability to rename files in the queue. + @param {Boolean} [settings.sortable=false] Enable ability to sort files in the queue, changing their uploading priority. + @param {Object} [settings.buttons] Control the visibility of functional buttons. + @param {Boolean} [settings.buttons.browse=true] Display browse button. + @param {Boolean} [settings.buttons.start=true] Display start button. + @param {Boolean} [settings.buttons.stop=true] Display stop button. + @param {Object} [settings.views] Control various views of the file queue. + @param {Boolean} [settings.views.list=true] Enable list view. + @param {Boolean} [settings.views.thumbs=false] Enable thumbs view. + @param {String} [settings.views.default='list'] Default view. + @param {Boolean} [settings.views.remember=true] Whether to remember the current view (requires jQuery Cookie plugin). + @param {Boolean} [settings.multiple_queues=true] Re-activate the widget after each upload procedure. +*/ +;(function(window, document, plupload, o, $) { + +/** +Dispatched when the widget is initialized and ready. + +@event ready +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when file dialog is closed. + +@event selected +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of selected files represented by plupload.File objects +*/ + +/** +Dispatched when file dialog is closed. + +@event removed +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of removed files represented by plupload.File objects +*/ + +/** +Dispatched when upload is started. + +@event started +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when upload is stopped. + +@event stopped +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched during the upload process. + +@event progress +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that is being uploaded (includes loaded and percent properties among others). + @param {Number} size Total file size in bytes. + @param {Number} loaded Number of bytes uploaded of the files total size. + @param {Number} percent Number of percentage uploaded of the file. +*/ + +/** +Dispatched when file is uploaded. + +@event uploaded +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +/** +Dispatched when upload of the whole queue is complete. + +@event complete +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of uploaded files represented by plupload.File objects +*/ + +/** +Dispatched when the view is changed, e.g. from `list` to `thumbs` or vice versa. + +@event viewchanged +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} type Current view type. +*/ + +/** +Dispatched when error of some kind is detected. + +@event error +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} error Error message. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +var uploaders = {}; + +function _(str) { + return plupload.translate(str) || str; +} + +function renderUI(obj) { + obj.id = obj.attr('id'); + + obj.html( + '
      ' + + '
      ' + + '
      ' + + '
      ' + + '' + + '
      ' + _("Select files") + '
      ' + + '
      ' + _("Add files to the upload queue and click the start button.") + '
      ' + + '
      ' + + '' + + '' + + '
      ' + + '
      ' + + '
      ' + + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
      ' + _('Filename') + '' + _('Status') + '' + _('Size') + ' 
      ' + + + '
      ' + + '
      ' + _("Drag files here.") + '
      ' + + '
      ' + + '
       
      ' + + '
      ' + + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + + '
      ' + + '' + + '
      ' + ); +} + + +$.widget("ui.plupload", { + + widgetEventPrefix: '', + + contents_bak: '', + + options: { + browse_button_hover: 'ui-state-hover', + browse_button_active: 'ui-state-active', + + filters: {}, + + // widget specific + buttons: { + browse: true, + start: true, + stop: true + }, + + views: { + list: true, + thumbs: false, + active: 'list', + remember: true // requires: https://github.com/carhartl/jquery-cookie, otherwise disabled even if set to true + }, + + thumb_width: 100, + thumb_height: 60, + + multiple_queues: true, // re-use widget by default + dragdrop : true, + autostart: false, + sortable: false, + rename: false + }, + + FILE_COUNT_ERROR: -9001, + + _create: function() { + var id = this.element.attr('id'); + if (!id) { + id = plupload.guid(); + this.element.attr('id', id); + } + this.id = id; + + // backup the elements initial state + this.contents_bak = this.element.html(); + renderUI(this.element); + + // container, just in case + this.container = $('.plupload_container', this.element).attr('id', id + '_container'); + + this.content = $('.plupload_content', this.element); + + if ($.fn.resizable) { + this.container.resizable({ + handles: 's', + minHeight: 300 + }); + } + + // list of files, may become sortable + this.filelist = $('.plupload_filelist_content', this.container) + .attr({ + id: id + '_filelist', + unselectable: 'on' + }); + + + // buttons + this.browse_button = $('.plupload_add', this.container).attr('id', id + '_browse'); + this.start_button = $('.plupload_start', this.container).attr('id', id + '_start'); + this.stop_button = $('.plupload_stop', this.container).attr('id', id + '_stop'); + this.thumbs_switcher = $('#' + id + '_view_thumbs'); + this.list_switcher = $('#' + id + '_view_list'); + + if ($.ui.button) { + this.browse_button.button({ + icons: { primary: 'ui-icon-circle-plus' }, + disabled: true + }); + + this.start_button.button({ + icons: { primary: 'ui-icon-circle-arrow-e' }, + disabled: true + }); + + this.stop_button.button({ + icons: { primary: 'ui-icon-circle-close' } + }); + + this.list_switcher.button({ + text: false, + icons: { secondary: "ui-icon-grip-dotted-horizontal" } + }); + + this.thumbs_switcher.button({ + text: false, + icons: { secondary: "ui-icon-image" } + }); + } + + // progressbar + this.progressbar = $('.plupload_progress_container', this.container); + + if ($.ui.progressbar) { + this.progressbar.progressbar(); + } + + // counter + this.counter = $('.plupload_count', this.element) + .attr({ + id: id + '_count', + name: id + '_count' + }); + + // initialize uploader instance + this._initUploader(); + }, + + _initUploader: function() { + var self = this + , id = this.id + , uploader + , options = { + container: id + '_buttons', + browse_button: id + '_browse' + } + ; + + $('.plupload_buttons', this.element).attr('id', id + '_buttons'); + + if (self.options.dragdrop) { + this.filelist.parent().attr('id', this.id + '_dropbox'); + options.drop_element = this.id + '_dropbox'; + } + + this.filelist.on('click', function(e) { + if ($(e.target).hasClass('plupload_action_icon')) { + self.removeFile($(e.target).closest('.plupload_file').attr('id')); + e.preventDefault(); + } + }); + + uploader = this.uploader = uploaders[id] = new plupload.Uploader($.extend(this.options, options)); + + // retrieve full normalized set of options + this.options = uploader.getOption(); + + if (self.options.views.thumbs) { + uploader.settings.required_features.display_media = true; + } + + // for backward compatibility + if (self.options.max_file_count) { + plupload.extend(uploader.getOption('filters'), { + max_file_count: self.options.max_file_count + }); + } + + plupload.addFileFilter('max_file_count', function(maxCount, file, cb) { + if (maxCount <= this.files.length - (this.total.uploaded + this.total.failed)) { + self.browse_button.button('disable'); + this.disableBrowse(); + + this.trigger('Error', { + code : self.FILE_COUNT_ERROR, + message : _("File count error."), + file : file + }); + cb(false); + } else { + cb(true); + } + }); + + + uploader.bind('Error', function(up, err) { + var message, details = ""; + + message = '' + err.message + ''; + + switch (err.code) { + case plupload.FILE_EXTENSION_ERROR: + details = o.sprintf(_("File: %s"), err.file.name); + break; + + case plupload.FILE_SIZE_ERROR: + details = o.sprintf(_("File: %s, size: %d, max file size: %d"), err.file.name, plupload.formatSize(err.file.size), plupload.formatSize(plupload.parseSize(up.getOption('filters').max_file_size))); + break; + + case plupload.FILE_DUPLICATE_ERROR: + details = o.sprintf(_("%s already present in the queue."), err.file.name); + break; + + case self.FILE_COUNT_ERROR: + details = o.sprintf(_("Upload element accepts only %d file(s) at a time. Extra files were stripped."), up.getOption('filters').max_file_count || 0); + break; + + case plupload.IMAGE_FORMAT_ERROR : + details = _("Image format either wrong or not supported."); + break; + + case plupload.IMAGE_MEMORY_ERROR : + details = _("Runtime ran out of available memory."); + break; + + /* // This needs a review + case plupload.IMAGE_DIMENSIONS_ERROR : + details = o.sprintf(_('Resoultion out of boundaries! %s runtime supports images only up to %wx%hpx.'), up.runtime, up.features.maxWidth, up.features.maxHeight); + break; */ + + case plupload.HTTP_ERROR: + details = _("Upload URL might be wrong or doesn't exist."); + break; + } + + message += "
      " + details + ""; + + self._trigger('error', null, { up: up, error: err } ); + + // do not show UI if no runtime can be initialized + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + self.destroy(); + }, 1); + } else { + self.notify('error', message); + } + }); + + + uploader.bind('PostInit', function(up) { + // all buttons are optional, so they can be disabled and hidden + if (!self.options.buttons.browse) { + self.browse_button.button('disable').hide(); + up.disableBrowse(true); + } else { + self.browse_button.button('enable'); + } + + if (!self.options.buttons.start) { + self.start_button.button('disable').hide(); + } + + if (!self.options.buttons.stop) { + self.stop_button.button('disable').hide(); + } + + if (!self.options.unique_names && self.options.rename) { + self._enableRenaming(); + } + + if (self.options.dragdrop && up.features.dragdrop) { + self.filelist.parent().addClass('plupload_dropbox'); + } + + self._enableViewSwitcher(); + + self.start_button.click(function(e) { + if (!$(this).button('option', 'disabled')) { + self.start(); + } + e.preventDefault(); + }); + + self.stop_button.click(function(e) { + self.stop(); + e.preventDefault(); + }); + + self._trigger('ready', null, { up: up }); + }); + + // uploader internal events must run first + uploader.init(); + + uploader.bind('FileFiltered', function(up, file) { + self._addFiles(file); + }); + + uploader.bind('FilesAdded', function(up, files) { + self._trigger('selected', null, { up: up, files: files } ); + + // re-enable sortable + if (self.options.sortable && $.ui.sortable) { + self._enableSortingList(); + } + + self._trigger('updatelist', null, { filelist: self.filelist }); + + if (self.options.autostart) { + // set a little delay to make sure that QueueChanged triggered by the core has time to complete + setTimeout(function() { + self.start(); + }, 10); + } + }); + + uploader.bind('FilesRemoved', function(up, files) { + // destroy sortable if enabled + if ($.ui.sortable && self.options.sortable) { + $('tbody', self.filelist).sortable('destroy'); + } + + $.each(files, function(i, file) { + $('#' + file.id).toggle("highlight", function() { + $(this).remove(); + }); + }); + + if (up.files.length) { + // re-initialize sortable + if (self.options.sortable && $.ui.sortable) { + self._enableSortingList(); + } + } + + self._trigger('updatelist', null, { filelist: self.filelist }); + self._trigger('removed', null, { up: up, files: files } ); + }); + + uploader.bind('QueueChanged', function() { + self._handleState(); + }); + + uploader.bind('StateChanged', function(up) { + self._handleState(); + if (plupload.STARTED === up.state) { + self._trigger('started', null, { up: this.uploader }); + } else if (plupload.STOPPED === up.state) { + self._trigger('stopped', null, { up: this.uploader }); + } + }); + + uploader.bind('UploadFile', function(up, file) { + self._handleFileStatus(file); + }); + + uploader.bind('FileUploaded', function(up, file, result) { + self._handleFileStatus(file); + self._trigger('uploaded', null, { up: up, file: file, result: result } ); + }); + + uploader.bind('UploadProgress', function(up, file) { + self._handleFileStatus(file); + self._updateTotalProgress(); + self._trigger('progress', null, { up: up, file: file } ); + }); + + uploader.bind('UploadComplete', function(up, files) { + self._addFormFields(); + self._trigger('complete', null, { up: up, files: files } ); + }); + }, + + + _setOption: function(key, value) { + var self = this; + + if (key == 'buttons' && typeof(value) == 'object') { + value = $.extend(self.options.buttons, value); + + if (!value.browse) { + self.browse_button.button('disable').hide(); + self.uploader.disableBrowse(true); + } else { + self.browse_button.button('enable').show(); + self.uploader.disableBrowse(false); + } + + if (!value.start) { + self.start_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + + if (!value.stop) { + self.stop_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + } + + self.uploader.setOption(key, value); + }, + + + /** + Start upload. Triggers `start` event. + + @method start + */ + start: function() { + this.uploader.start(); + }, + + + /** + Stop upload. Triggers `stop` event. + + @method stop + */ + stop: function() { + this.uploader.stop(); + }, + + + /** + Enable browse button. + + @method enable + */ + enable: function() { + this.browse_button.button('enable'); + this.uploader.disableBrowse(false); + }, + + + /** + Disable browse button. + + @method disable + */ + disable: function() { + this.browse_button.button('disable'); + this.uploader.disableBrowse(true); + }, + + + /** + Retrieve file by its unique id. + + @method getFile + @param {String} id Unique id of the file + @return {plupload.File} + */ + getFile: function(id) { + var file; + + if (typeof id === 'number') { + file = this.uploader.files[id]; + } else { + file = this.uploader.getFile(id); + } + return file; + }, + + /** + Return array of files currently in the queue. + + @method getFiles + @return {Array} Array of files in the queue represented by plupload.File objects + */ + getFiles: function() { + return this.uploader.files; + }, + + + /** + Remove the file from the queue. + + @method removeFile + @param {plupload.File|String} file File to remove, might be specified directly or by its unique id + */ + removeFile: function(file) { + if (plupload.typeOf(file) === 'string') { + file = this.getFile(file); + } + this.uploader.removeFile(file); + }, + + + /** + Clear the file queue. + + @method clearQueue + */ + clearQueue: function() { + this.uploader.splice(); + }, + + + /** + Retrieve internal plupload.Uploader object (usually not required). + + @method getUploader + @return {plupload.Uploader} + */ + getUploader: function() { + return this.uploader; + }, + + + /** + Trigger refresh procedure, specifically browse_button re-measure and re-position operations. + Might get handy, when UI Widget is placed within the popup, that is constantly hidden and shown + again - without calling this method after each show operation, dialog trigger might get displaced + and disfunctional. + + @method refresh + */ + refresh: function() { + this.uploader.refresh(); + }, + + + /** + Display a message in notification area. + + @method notify + @param {Enum} type Type of the message, either `error` or `info` + @param {String} message The text message to display. + */ + notify: function(type, message) { + var popup = $( + '
      ' + + '' + + '

      ' + message + '

      ' + + '
      ' + ); + + popup + .addClass('ui-state-' + (type === 'error' ? 'error' : 'highlight')) + .find('p .ui-icon') + .addClass('ui-icon-' + (type === 'error' ? 'alert' : 'info')) + .end() + .find('.plupload_message_close') + .click(function() { + popup.remove(); + }) + .end(); + + $('.plupload_header', this.container).append(popup); + }, + + + /** + Destroy the widget, the uploader, free associated resources and bring back original html. + + @method destroy + */ + destroy: function() { + // destroy uploader instance + this.uploader.destroy(); + + // unbind all button events + $('.plupload_button', this.element).unbind(); + + // destroy buttons + if ($.ui.button) { + $('.plupload_add, .plupload_start, .plupload_stop', this.container) + .button('destroy'); + } + + // destroy progressbar + if ($.ui.progressbar) { + this.progressbar.progressbar('destroy'); + } + + // destroy sortable behavior + if ($.ui.sortable && this.options.sortable) { + $('tbody', this.filelist).sortable('destroy'); + } + + // restore the elements initial state + this.element + .empty() + .html(this.contents_bak); + this.contents_bak = ''; + + $.Widget.prototype.destroy.apply(this); + }, + + + _handleState: function() { + var up = this.uploader + , filesPending = up.files.length - (up.total.uploaded + up.total.failed) + , maxCount = up.getOption('filters').max_file_count || 0 + ; + + if (plupload.STARTED === up.state) { + $([]) + .add(this.stop_button) + .add('.plupload_started') + .removeClass('plupload_hidden'); + + this.start_button.button('disable'); + + if (!this.options.multiple_queues) { + this.browse_button.button('disable'); + up.disableBrowse(); + } + + $('.plupload_upload_status', this.element).html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + $('.plupload_header_content', this.element).addClass('plupload_header_content_bw'); + } + else if (plupload.STOPPED === up.state) { + $([]) + .add(this.stop_button) + .add('.plupload_started') + .addClass('plupload_hidden'); + + if (filesPending) { + this.start_button.button('enable'); + } else { + this.start_button.button('disable'); + } + + if (this.options.multiple_queues) { + $('.plupload_header_content', this.element).removeClass('plupload_header_content_bw'); + } + + // if max_file_count defined, only that many files can be queued at once + if (this.options.multiple_queues && maxCount && maxCount > filesPending) { + this.browse_button.button('enable'); + up.disableBrowse(false); + } + + this._updateTotalProgress(); + } + + if (up.total.queued === 0) { + $('.ui-button-text', this.browse_button).html(_('Add Files')); + } else { + $('.ui-button-text', this.browse_button).html(o.sprintf(_('%d files queued'), up.total.queued)); + } + + up.refresh(); + }, + + + _handleFileStatus: function(file) { + var $file = $('#' + file.id), actionClass, iconClass; + + // since this method might be called asynchronously, file row might not yet be rendered + if (!$file.length) { + return; + } + + switch (file.status) { + case plupload.DONE: + actionClass = 'plupload_done'; + iconClass = 'plupload_action_icon ui-icon ui-icon-circle-check'; + break; + + case plupload.FAILED: + actionClass = 'ui-state-error plupload_failed'; + iconClass = 'plupload_action_icon ui-icon ui-icon-alert'; + break; + + case plupload.QUEUED: + actionClass = 'plupload_delete'; + iconClass = 'plupload_action_icon ui-icon ui-icon-circle-minus'; + break; + + case plupload.UPLOADING: + actionClass = 'ui-state-highlight plupload_uploading'; + iconClass = 'plupload_action_icon ui-icon ui-icon-circle-arrow-w'; + + // scroll uploading file into the view if its bottom boundary is out of it + var scroller = $('.plupload_scroll', this.container) + , scrollTop = scroller.scrollTop() + , scrollerHeight = scroller.height() + , rowOffset = $file.position().top + $file.height() + ; + + if (scrollerHeight < rowOffset) { + scroller.scrollTop(scrollTop + rowOffset - scrollerHeight); + } + + // Set file specific progress + $file + .find('.plupload_file_percent') + .html(file.percent + '%') + .end() + .find('.plupload_file_progress') + .css('width', file.percent + '%') + .end() + .find('.plupload_file_size') + .html(plupload.formatSize(file.size)); + break; + } + actionClass += ' ui-state-default plupload_file'; + + $file + .attr('class', actionClass) + .find('.plupload_action_icon') + .attr('class', iconClass); + }, + + + _updateTotalProgress: function() { + var up = this.uploader; + + // Scroll to end of file list + this.filelist[0].scrollTop = this.filelist[0].scrollHeight; + + this.progressbar.progressbar('value', up.total.percent); + + this.element + .find('.plupload_total_status') + .html(up.total.percent + '%') + .end() + .find('.plupload_total_file_size') + .html(plupload.formatSize(up.total.size)) + .end() + .find('.plupload_upload_status') + .html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + }, + + + _displayThumbs: function() { + var self = this + , tw, th // thumb width/height + , cols + , num = 0 // number of simultaneously visible thumbs + , thumbs = [] // array of thumbs to preload at any given moment + , loading = false + ; + + if (!this.options.views.thumbs) { + return; + } + + + function onLast(el, eventName, cb) { + var timer; + + el.on(eventName, function() { + clearTimeout(timer); + timer = setTimeout(function() { + clearTimeout(timer); + cb(); + }, 300); + }); + } + + + // calculate number of simultaneously visible thumbs + function measure() { + if (!tw || !th) { + var wrapper = $('.plupload_file:eq(0)', self.filelist); + tw = wrapper.outerWidth(true); + th = wrapper.outerHeight(true); + } + + var aw = self.content.width(), ah = self.content.height(); + cols = Math.floor(aw / tw); + num = cols * (Math.ceil(ah / th) + 1); + } + + + function pickThumbsToLoad() { + // calculate index of virst visible thumb + var startIdx = Math.floor(self.content.scrollTop() / th) * cols; + // get potentially visible thumbs that are not yet visible + thumbs = $('.plupload_file .plupload_file_thumb', self.filelist) + .slice(startIdx, startIdx + num) + .filter('.plupload_thumb_toload') + .get(); + } + + + function init() { + function mpl() { // measure, pick, load + if (self.view_mode !== 'thumbs') { + return; + } + measure(); + pickThumbsToLoad(); + lazyLoad(); + } + + if ($.fn.resizable) { + onLast(self.container, 'resize', mpl); + } + + onLast(self.window, 'resize', mpl); + onLast(self.content, 'scroll', mpl); + + self.element.on('viewchanged selected', mpl); + + mpl(); + } + + + function preloadThumb(file, cb) { + var img = new o.Image(); + + img.onload = function() { + var thumb = $('#' + file.id + ' .plupload_file_thumb', self.filelist); + this.embed(thumb[0], { + width: self.options.thumb_width, + height: self.options.thumb_height, + crop: true, + preserveHeaders: false, + swf_url: o.resolveUrl(self.options.flash_swf_url), + xap_url: o.resolveUrl(self.options.silverlight_xap_url) + }); + }; + + img.bind("embedded error", function(e) { + $('#' + file.id, self.filelist) + .find('.plupload_file_thumb') + .removeClass('plupload_thumb_loading') + .addClass('plupload_thumb_' + e.type) + ; + this.destroy(); + setTimeout(cb, 1); // detach, otherwise ui might hang (in SilverLight for example) + }); + + $('#' + file.id, self.filelist) + .find('.plupload_file_thumb') + .removeClass('plupload_thumb_toload') + .addClass('plupload_thumb_loading') + ; + img.load(file.getSource()); + } + + + function lazyLoad() { + if (self.view_mode !== 'thumbs' || loading) { + return; + } + + pickThumbsToLoad(); + if (!thumbs.length) { + return; + } + + loading = true; + + preloadThumb(self.getFile($(thumbs.shift()).closest('.plupload_file').attr('id')), function() { + loading = false; + lazyLoad(); + }); + } + + // this has to run only once to measure structures and bind listeners + this.element.on('selected', function onselected() { + self.element.off('selected', onselected); + init(); + }); + }, + + + _addFiles: function(files) { + var self = this, file_html, html = ''; + + file_html = '
    • ' + + '
      ' + + '
      {ext}
      ' + + '
      ' + + '
      ' + + '
      ' + + '{percent} ' + + '
      ' + + '
      ' + + '{name} ' + + '
      ' + + '
      ' + + '
      ' + + '
      ' + + '
      {size}
      ' + + '
      ' + + '
    • '; + + if (plupload.typeOf(files) !== 'array') { + files = [files]; + } + + $.each(files, function(i, file) { + var ext = o.Mime.getFileExtension(file.name) || 'none'; + + html += file_html.replace(/\{(\w+)\}/g, function($0, $1) { + switch ($1) { + case 'thumb_width': + case 'thumb_height': + return self.options[$1]; + + case 'size': + return plupload.formatSize(file.size); + + case 'ext': + return ext; + + default: + return file[$1] || ''; + } + }); + }); + + self.filelist.append(html); + }, + + + _addFormFields: function() { + var self = this; + + // re-add from fresh + $('.plupload_file_fields', this.filelist).html(''); + + plupload.each(this.uploader.files, function(file, count) { + var fields = '' + , id = self.id + '_' + count + ; + + if (file.target_name) { + fields += ''; + } + fields += ''; + fields += ''; + + $('#' + file.id).find('.plupload_file_fields').html(fields); + }); + + this.counter.val(this.uploader.files.length); + }, + + + _viewChanged: function(view) { + // update or write a new cookie + if (this.options.views.remember && $.cookie) { + $.cookie('plupload_ui_view', view, { expires: 7, path: '/' }); + } + + // ugly fix for IE6 - make content area stretchable + if (o.Env.browser === 'IE' && o.Env.version < 7) { + this.content.attr('style', 'height:expression(document.getElementById("' + this.id + '_container' + '").clientHeight - ' + (view === 'list' ? 132 : 102) + ')'); + } + + this.container.removeClass('plupload_view_list plupload_view_thumbs').addClass('plupload_view_' + view); + this.view_mode = view; + this._trigger('viewchanged', null, { view: view }); + }, + + + _enableViewSwitcher: function() { + var self = this + , view + , switcher = $('.plupload_view_switch', this.container) + , buttons + , button + ; + + plupload.each(['list', 'thumbs'], function(view) { + if (!self.options.views[view]) { + switcher.find('[for="' + self.id + '_view_' + view + '"], #'+ self.id +'_view_' + view).remove(); + } + }); + + // check if any visible left + buttons = switcher.find('.plupload_button'); + + if (buttons.length === 1) { + switcher.hide(); + view = buttons.eq(0).data('view'); + this._viewChanged(view); + } else if ($.ui.button && buttons.length > 1) { + if (this.options.views.remember && $.cookie) { + view = $.cookie('plupload_ui_view'); + } + + // if wierd case, bail out to default + if (!~plupload.inArray(view, ['list', 'thumbs'])) { + view = this.options.views.active; + } + + switcher + .show() + .buttonset() + .find('.ui-button') + .click(function(e) { + view = $(this).data('view'); + self._viewChanged(view); + e.preventDefault(); // avoid auto scrolling to widget in IE and FF (see #850) + }); + + // if view not active - happens when switcher wasn't clicked manually + button = switcher.find('[for="' + self.id + '_view_'+view+'"]'); + if (button.length) { + button.trigger('click'); + } + } else { + switcher.show(); + this._viewChanged(this.options.views.active); + } + + // initialize thumb viewer if requested + if (this.options.views.thumbs) { + this._displayThumbs(); + } + }, + + + _enableRenaming: function() { + var self = this; + + this.filelist.dblclick(function(e) { + var nameSpan = $(e.target), nameInput, file, parts, name, ext = ""; + + if (!nameSpan.hasClass('plupload_file_name_wrapper')) { + return; + } + + // Get file name and split out name and extension + file = self.uploader.getFile(nameSpan.closest('.plupload_file')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + nameInput = $('').width(nameSpan.width()).insertAfter(nameSpan.hide()); + nameInput.val(name).blur(function() { + nameSpan.show().parent().scrollLeft(0).end().next().remove(); + }).keydown(function(e) { + var nameInput = $(this); + + if ($.inArray(e.keyCode, [13, 27]) !== -1) { + e.preventDefault(); + + // Rename file and glue extension back on + if (e.keyCode === 13) { + file.name = nameInput.val() + ext; + nameSpan.html(file.name); + } + nameInput.blur(); + } + })[0].focus(); + }); + }, + + + _enableSortingList: function() { + var self = this; + + if ($('.plupload_file', this.filelist).length < 2) { + return; + } + + // destroy sortable if enabled + $('tbody', this.filelist).sortable('destroy'); + + // enable + this.filelist.sortable({ + items: '.plupload_delete', + + cancel: 'object, .plupload_clearer', + + stop: function() { + var files = []; + + $.each($(this).sortable('toArray'), function(i, id) { + files[files.length] = self.uploader.getFile(id); + }); + + files.unshift(files.length); + files.unshift(0); + + // re-populate files array + Array.prototype.splice.apply(self.uploader.files, files); + } + }); + } +}); + +} (window, document, plupload, mOxie, jQuery)); diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/jquery.ui.plupload.min.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/jquery.ui.plupload.min.js new file mode 100644 index 0000000000..3352119060 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/jquery.ui.plupload/jquery.ui.plupload.min.js @@ -0,0 +1 @@ +;(function(e,t,n,r,i){function o(e){return n.translate(e)||e}function u(e){e.id=e.attr("id"),e.html('
      '+o("Select files")+"
      "+'
      '+o("Add files to the upload queue and click the start button.")+"
      "+'
      '+'"+'"+"
      "+"
      "+"
      "+''+""+'"+'"+'"+''+""+"
      '+o("Filename")+"'+o("Status")+"'+o("Size")+" 
      "+'
      '+'
      '+o("Drag files here.")+"
      "+'
      '+'
       
      '+"
      "+''+""+'"+''+''+''+""+""+"
      "+''+"
      ")}var s={};i.widget("ui.plupload",{widgetEventPrefix:"",contents_bak:"",options:{browse_button_hover:"ui-state-hover",browse_button_active:"ui-state-active",filters:{},buttons:{browse:!0,start:!0,stop:!0},views:{list:!0,thumbs:!1,active:"list",remember:!0},thumb_width:100,thumb_height:60,multiple_queues:!0,dragdrop:!0,autostart:!1,sortable:!1,rename:!1},FILE_COUNT_ERROR:-9001,_create:function(){var e=this.element.attr("id");e||(e=n.guid(),this.element.attr("id",e)),this.id=e,this.contents_bak=this.element.html(),u(this.element),this.container=i(".plupload_container",this.element).attr("id",e+"_container"),this.content=i(".plupload_content",this.element),i.fn.resizable&&this.container.resizable({handles:"s",minHeight:300}),this.filelist=i(".plupload_filelist_content",this.container).attr({id:e+"_filelist",unselectable:"on"}),this.browse_button=i(".plupload_add",this.container).attr("id",e+"_browse"),this.start_button=i(".plupload_start",this.container).attr("id",e+"_start"),this.stop_button=i(".plupload_stop",this.container).attr("id",e+"_stop"),this.thumbs_switcher=i("#"+e+"_view_thumbs"),this.list_switcher=i("#"+e+"_view_list"),i.ui.button&&(this.browse_button.button({icons:{primary:"ui-icon-circle-plus"},disabled:!0}),this.start_button.button({icons:{primary:"ui-icon-circle-arrow-e"},disabled:!0}),this.stop_button.button({icons:{primary:"ui-icon-circle-close"}}),this.list_switcher.button({text:!1,icons:{secondary:"ui-icon-grip-dotted-horizontal"}}),this.thumbs_switcher.button({text:!1,icons:{secondary:"ui-icon-image"}})),this.progressbar=i(".plupload_progress_container",this.container),i.ui.progressbar&&this.progressbar.progressbar(),this.counter=i(".plupload_count",this.element).attr({id:e+"_count",name:e+"_count"}),this._initUploader()},_initUploader:function(){var e=this,t=this.id,u,a={container:t+"_buttons",browse_button:t+"_browse"};i(".plupload_buttons",this.element).attr("id",t+"_buttons"),e.options.dragdrop&&(this.filelist.parent().attr("id",this.id+"_dropbox"),a.drop_element=this.id+"_dropbox"),this.filelist.on("click",function(t){i(t.target).hasClass("plupload_action_icon")&&(e.removeFile(i(t.target).closest(".plupload_file").attr("id")),t.preventDefault())}),u=this.uploader=s[t]=new n.Uploader(i.extend(this.options,a)),this.options=u.getOption(),e.options.views.thumbs&&(u.settings.required_features.display_media=!0),e.options.max_file_count&&n.extend(u.getOption("filters"),{max_file_count:e.options.max_file_count}),n.addFileFilter("max_file_count",function(t,n,r){t<=this.files.length-(this.total.uploaded+this.total.failed)?(e.browse_button.button("disable"),this.disableBrowse(),this.trigger("Error",{code:e.FILE_COUNT_ERROR,message:o("File count error."),file:n}),r(!1)):r(!0)}),u.bind("Error",function(t,i){var s,u="";s=""+i.message+"";switch(i.code){case n.FILE_EXTENSION_ERROR:u=r.sprintf(o("File: %s"),i.file.name);break;case n.FILE_SIZE_ERROR:u=r.sprintf(o("File: %s, size: %d, max file size: %d"),i.file.name,n.formatSize(i.file.size),n.formatSize(n.parseSize(t.getOption("filters").max_file_size)));break;case n.FILE_DUPLICATE_ERROR:u=r.sprintf(o("%s already present in the queue."),i.file.name);break;case e.FILE_COUNT_ERROR:u=r.sprintf(o("Upload element accepts only %d file(s) at a time. Extra files were stripped."),t.getOption("filters").max_file_count||0);break;case n.IMAGE_FORMAT_ERROR:u=o("Image format either wrong or not supported.");break;case n.IMAGE_MEMORY_ERROR:u=o("Runtime ran out of available memory.");break;case n.HTTP_ERROR:u=o("Upload URL might be wrong or doesn't exist.")}s+="
      "+u+"",e._trigger("error",null,{up:t,error:i}),i.code===n.INIT_ERROR?setTimeout(function(){e.destroy()},1):e.notify("error",s)}),u.bind("PostInit",function(t){e.options.buttons.browse?e.browse_button.button("enable"):(e.browse_button.button("disable").hide(),t.disableBrowse(!0)),e.options.buttons.start||e.start_button.button("disable").hide(),e.options.buttons.stop||e.stop_button.button("disable").hide(),!e.options.unique_names&&e.options.rename&&e._enableRenaming(),e.options.dragdrop&&t.features.dragdrop&&e.filelist.parent().addClass("plupload_dropbox"),e._enableViewSwitcher(),e.start_button.click(function(t){i(this).button("option","disabled")||e.start(),t.preventDefault()}),e.stop_button.click(function(t){e.stop(),t.preventDefault()}),e._trigger("ready",null,{up:t})}),u.init(),u.bind("FileFiltered",function(t,n){e._addFiles(n)}),u.bind("FilesAdded",function(t,n){e._trigger("selected",null,{up:t,files:n}),e.options.sortable&&i.ui.sortable&&e._enableSortingList(),e._trigger("updatelist",null,{filelist:e.filelist}),e.options.autostart&&setTimeout(function(){e.start()},10)}),u.bind("FilesRemoved",function(t,n){i.ui.sortable&&e.options.sortable&&i("tbody",e.filelist).sortable("destroy"),i.each(n,function(e,t){i("#"+t.id).toggle("highlight",function(){i(this).remove()})}),t.files.length&&e.options.sortable&&i.ui.sortable&&e._enableSortingList(),e._trigger("updatelist",null,{filelist:e.filelist}),e._trigger("removed",null,{up:t,files:n})}),u.bind("QueueChanged",function(){e._handleState()}),u.bind("StateChanged",function(t){e._handleState(),n.STARTED===t.state?e._trigger("started",null,{up:this.uploader}):n.STOPPED===t.state&&e._trigger("stopped",null,{up:this.uploader})}),u.bind("UploadFile",function(t,n){e._handleFileStatus(n)}),u.bind("FileUploaded",function(t,n,r){e._handleFileStatus(n),e._trigger("uploaded",null,{up:t,file:n,result:r})}),u.bind("UploadProgress",function(t,n){e._handleFileStatus(n),e._updateTotalProgress(),e._trigger("progress",null,{up:t,file:n})}),u.bind("UploadComplete",function(t,n){e._addFormFields(),e._trigger("complete",null,{up:t,files:n})})},_setOption:function(e,t){var n=this;e=="buttons"&&typeof t=="object"&&(t=i.extend(n.options.buttons,t),t.browse?(n.browse_button.button("enable").show(),n.uploader.disableBrowse(!1)):(n.browse_button.button("disable").hide(),n.uploader.disableBrowse(!0)),t.start?n.start_button.button("enable").show():n.start_button.button("disable").hide(),t.stop?n.start_button.button("enable").show():n.stop_button.button("disable").hide()),n.uploader.setOption(e,t)},start:function(){this.uploader.start()},stop:function(){this.uploader.stop()},enable:function(){this.browse_button.button("enable"),this.uploader.disableBrowse(!1)},disable:function(){this.browse_button.button("disable"),this.uploader.disableBrowse(!0)},getFile:function(e){var t;return typeof e=="number"?t=this.uploader.files[e]:t=this.uploader.getFile(e),t},getFiles:function(){return this.uploader.files},removeFile:function(e){n.typeOf(e)==="string"&&(e=this.getFile(e)),this.uploader.removeFile(e)},clearQueue:function(){this.uploader.splice()},getUploader:function(){return this.uploader},refresh:function(){this.uploader.refresh()},notify:function(e,t){var n=i('
      '+'

      '+t+"

      "+"
      ");n.addClass("ui-state-"+(e==="error"?"error":"highlight")).find("p .ui-icon").addClass("ui-icon-"+(e==="error"?"alert":"info")).end().find(".plupload_message_close").click(function(){n.remove()}).end(),i(".plupload_header",this.container).append(n)},destroy:function(){this.uploader.destroy(),i(".plupload_button",this.element).unbind(),i.ui.button&&i(".plupload_add, .plupload_start, .plupload_stop",this.container).button("destroy"),i.ui.progressbar&&this.progressbar.progressbar("destroy"),i.ui.sortable&&this.options.sortable&&i("tbody",this.filelist).sortable("destroy"),this.element.empty().html(this.contents_bak),this.contents_bak="",i.Widget.prototype.destroy.apply(this)},_handleState:function(){var e=this.uploader,t=e.files.length-(e.total.uploaded+e.total.failed),s=e.getOption("filters").max_file_count||0;n.STARTED===e.state?(i([]).add(this.stop_button).add(".plupload_started").removeClass("plupload_hidden"),this.start_button.button("disable"),this.options.multiple_queues||(this.browse_button.button("disable"),e.disableBrowse()),i(".plupload_upload_status",this.element).html(r.sprintf(o("Uploaded %d/%d files"),e.total.uploaded,e.files.length)),i(".plupload_header_content",this.element).addClass("plupload_header_content_bw")):n.STOPPED===e.state&&(i([]).add(this.stop_button).add(".plupload_started").addClass("plupload_hidden"),t?this.start_button.button("enable"):this.start_button.button("disable"),this.options.multiple_queues&&i(".plupload_header_content",this.element).removeClass("plupload_header_content_bw"),this.options.multiple_queues&&s&&s>t&&(this.browse_button.button("enable"),e.disableBrowse(!1)),this._updateTotalProgress()),e.total.queued===0?i(".ui-button-text",this.browse_button).html(o("Add Files")):i(".ui-button-text",this.browse_button).html(r.sprintf(o("%d files queued"),e.total.queued)),e.refresh()},_handleFileStatus:function(e){var t=i("#"+e.id),r,s;if(!t.length)return;switch(e.status){case n.DONE:r="plupload_done",s="plupload_action_icon ui-icon ui-icon-circle-check";break;case n.FAILED:r="ui-state-error plupload_failed",s="plupload_action_icon ui-icon ui-icon-alert";break;case n.QUEUED:r="plupload_delete",s="plupload_action_icon ui-icon ui-icon-circle-minus";break;case n.UPLOADING:r="ui-state-highlight plupload_uploading",s="plupload_action_icon ui-icon ui-icon-circle-arrow-w";var o=i(".plupload_scroll",this.container),u=o.scrollTop(),a=o.height(),f=t.position().top+t.height();a
      {ext}
      {percent}
      {name}
      {size}
      ',n.typeOf(e)!=="array"&&(e=[e]),i.each(e,function(e,i){var u=r.Mime.getFileExtension(i.name)||"none";o+=s.replace(/\{(\w+)\}/g,function(e,r){switch(r){case"thumb_width":case"thumb_height":return t.options[r];case"size":return n.formatSize(i.size);case"ext":return u;default:return i[r]||""}})}),t.filelist.append(o)},_addFormFields:function(){var e=this;i(".plupload_file_fields",this.filelist).html(""),n.each(this.uploader.files,function(t,r){var s="",o=e.id+"_"+r;t.target_name&&(s+=''),s+='',s+='',i("#"+t.id).find(".plupload_file_fields").html(s)}),this.counter.val(this.uploader.files.length)},_viewChanged:function(e){this.options.views.remember&&i.cookie&&i.cookie("plupload_ui_view",e,{expires:7,path:"/"}),r.Env.browser==="IE"&&r.Env.version<7&&this.content.attr("style",'height:expression(document.getElementById("'+this.id+"_container"+'").clientHeight - '+(e==="list"?132:102)+")"),this.container.removeClass("plupload_view_list plupload_view_thumbs").addClass("plupload_view_"+e),this.view_mode=e,this._trigger("viewchanged",null,{view:e})},_enableViewSwitcher:function(){var e=this,t,r=i(".plupload_view_switch",this.container),s,o;n.each(["list","thumbs"],function(t){e.options.views[t]||r.find('[for="'+e.id+"_view_"+t+'"], #'+e.id+"_view_"+t).remove()}),s=r.find(".plupload_button"),s.length===1?(r.hide(),t=s.eq(0).data("view"),this._viewChanged(t)):i.ui.button&&s.length>1?(this.options.views.remember&&i.cookie&&(t=i.cookie("plupload_ui_view")),~n.inArray(t,["list","thumbs"])||(t=this.options.views.active),r.show().buttonset().find(".ui-button").click(function(n){t=i(this).data("view"),e._viewChanged(t),n.preventDefault()}),o=r.find('[for="'+e.id+"_view_"+t+'"]'),o.length&&o.trigger("click")):(r.show(),this._viewChanged(this.options.views.active)),this.options.views.thumbs&&this._displayThumbs()},_enableRenaming:function(){var e=this;this.filelist.dblclick(function(t){var n=i(t.target),r,s,o,u,a="";if(!n.hasClass("plupload_file_name_wrapper"))return;s=e.uploader.getFile(n.closest(".plupload_file")[0].id),u=s.name,o=/^(.+)(\.[^.]+)$/.exec(u),o&&(u=o[1],a=o[2]),r=i('').width(n.width()).insertAfter(n.hide()),r.val(u).blur(function(){n.show().parent().scrollLeft(0).end().next().remove()}).keydown(function(e){var t=i(this);i.inArray(e.keyCode,[13,27])!==-1&&(e.preventDefault(),e.keyCode===13&&(s.name=t.val()+a,n.html(s.name)),t.blur())})[0].focus()})},_enableSortingList:function(){var e=this;if(i(".plupload_file",this.filelist).length<2)return;i("tbody",this.filelist).sortable("destroy"),this.filelist.sortable({items:".plupload_delete",cancel:"object, .plupload_clearer",stop:function(){var t=[];i.each(i(this).sortable("toArray"),function(n,r){t[t.length]=e.uploader.getFile(r)}),t.unshift(t.length),t.unshift(0),Array.prototype.splice.apply(e.uploader.files,t)}})}})})(window,document,plupload,mOxie,jQuery); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/legacy.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/legacy.js new file mode 100644 index 0000000000..ea1e9ce2e1 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/legacy.js @@ -0,0 +1,119 @@ +jQuery(document).ready(function ($) { + window.uploader = new plupload.Uploader({ + runtimes: 'html5,flash,silverlight,html4', + chunk_size : '1mb', + unique_names : true, + multi_selection: false, + browse_button: 'btn-add-file', + drop_element: 'uploader-dropzone', + flash_swf_url: '../includes/js/Moxie.swf', + silverlight_xap_url: '../includes/js/Moxie.xap', + + init: { + PostInit: function () { + // Called after initialization is finished and internal event handlers bound + log('[PostInit]'); + + document.getElementById('btn-upload').onclick = function () { + uploader.start(); + $(this).attr('disabled', 'disabled'); + return false; + }; + }, + + FilesAdded: function (up, files) { + $("#uploader-file").val(files[0].name); + $('#btn-upload').removeAttr('disabled'); + }, + + Browse: function () { + uploader.splice(); + }, + + BeforeUpload: function (up, file) { + var progress = $('#upload-progress'); + progress.show(); + progress.addClass('active').addClass('progress-striped').removeClass('progress-success'); + }, + + UploadProgress: function (up, file) { + var percent = uploader.total.percent; + $('#upload-progress>.bar').css('width', percent + "%"); + }, + + FileUploaded: function (uploader, file, info) { + var response = $.parseJSON(info.response); + if (response.data !== '') { + $('#jform_params_filename').val(response.data.filename); + $('#jform_params_size').val(response.data.size); + } + else { + var uprogress = $('#upload-progress'); + uprogress.addClass('progress-success').removeClass('active').removeClass('progress-striped'); + uprogress.text(response.error); + } + + // Called when file has finished uploading + log('[FileUploaded] File:', file, "Info:", info); + }, + + UploadComplete: function (up, files) { + $('#btn-upload').removeAttr('disabled'); + var uprogress = $('#upload-progress'); + uprogress.addClass('progress-success').removeClass('active').removeClass('progress-striped'); + + log('[UploadComplete]'); + }, + + Error: function (up, err) { + // Called when error occurs + log('[Error] ', err); + } + } + }); + + function log() { + var str = ""; + + plupload.each(arguments, function (arg) { + var row = ""; + + if (typeof(arg) != "string") { + plupload.each(arg, function (value, key) { + // Convert items in File objects to human readable form + if (arg instanceof plupload.File) { + // Convert status to human readable + switch (value) { + case plupload.QUEUED: + value = 'QUEUED'; + break; + + case plupload.UPLOADING: + value = 'UPLOADING'; + break; + + case plupload.FAILED: + value = 'FAILED'; + break; + + case plupload.DONE: + value = 'DONE'; + break; + } + } + + if (typeof(value) != "function") { + row += (row ? ', ' : '') + key + '=' + value; + } + }); + + str += row + " "; + } else { + str += arg + " "; + } + }); + + var log = document.getElementById('console'); + log.innerHTML += str + "\n"; + } +}); diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.js new file mode 100644 index 0000000000..97dcd6e574 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.js @@ -0,0 +1,11156 @@ +;var MXI_DEBUG = true; +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.3.4 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2015-07-18 + */ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: src/javascript/core/utils/Basic.js + +/** + * Basic.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Basic', [], function() { + /** + Gets the true type of the built-in object (better version of typeof). + @author Angus Croll (http://javascriptweblog.wordpress.com/) + + @method typeOf + @for Utils + @static + @param {Object} o Object to check. + @return {String} Object [[Class]] + */ + var typeOf = function(o) { + var undef; + + if (o === undef) { + return 'undefined'; + } else if (o === null) { + return 'null'; + } else if (o.nodeType) { + return 'node'; + } + + // the snippet below is awesome, however it fails to detect null, undefined and arguments types in IE lte 8 + return ({}).toString.call(o).match(/\s([a-z|A-Z]+)/)[1].toLowerCase(); + }; + + /** + Extends the specified object with another object. + + @method extend + @static + @param {Object} target Object to extend. + @param {Object} [obj]* Multiple objects to extend with. + @return {Object} Same as target, the extended object. + */ + var extend = function(target) { + var undef; + + each(arguments, function(arg, i) { + if (i > 0) { + each(arg, function(value, key) { + if (value !== undef) { + if (typeOf(target[key]) === typeOf(value) && !!~inArray(typeOf(value), ['array', 'object'])) { + extend(target[key], value); + } else { + target[key] = value; + } + } + }); + } + }); + return target; + }; + + /** + Executes the callback function for each item in array/object. If you return false in the + callback it will break the loop. + + @method each + @static + @param {Object} obj Object to iterate. + @param {function} callback Callback function to execute for each item. + */ + var each = function(obj, callback) { + var length, key, i, undef; + + if (obj) { + if (typeOf(obj.length) === 'number') { // it might be Array, FileList or even arguments object + // Loop array items + for (i = 0, length = obj.length; i < length; i++) { + if (callback(obj[i], i) === false) { + return; + } + } + } else if (typeOf(obj) === 'object') { + // Loop object items + for (key in obj) { + if (obj.hasOwnProperty(key)) { + if (callback(obj[key], key) === false) { + return; + } + } + } + } + } + }; + + /** + Checks if object is empty. + + @method isEmptyObj + @static + @param {Object} o Object to check. + @return {Boolean} + */ + var isEmptyObj = function(obj) { + var prop; + + if (!obj || typeOf(obj) !== 'object') { + return true; + } + + for (prop in obj) { + return false; + } + + return true; + }; + + /** + Recieve an array of functions (usually async) to call in sequence, each function + receives a callback as first argument that it should call, when it completes. Finally, + after everything is complete, main callback is called. Passing truthy value to the + callback as a first argument will interrupt the sequence and invoke main callback + immediately. + + @method inSeries + @static + @param {Array} queue Array of functions to call in sequence + @param {Function} cb Main callback that is called in the end, or in case of error + */ + var inSeries = function(queue, cb) { + var i = 0, length = queue.length; + + if (typeOf(cb) !== 'function') { + cb = function() {}; + } + + if (!queue || !queue.length) { + cb(); + } + + function callNext(i) { + if (typeOf(queue[i]) === 'function') { + queue[i](function(error) { + /*jshint expr:true */ + ++i < length && !error ? callNext(i) : cb(error); + }); + } + } + callNext(i); + }; + + + /** + Recieve an array of functions (usually async) to call in parallel, each function + receives a callback as first argument that it should call, when it completes. After + everything is complete, main callback is called. Passing truthy value to the + callback as a first argument will interrupt the process and invoke main callback + immediately. + + @method inParallel + @static + @param {Array} queue Array of functions to call in sequence + @param {Function} cb Main callback that is called in the end, or in case of error + */ + var inParallel = function(queue, cb) { + var count = 0, num = queue.length, cbArgs = new Array(num); + + each(queue, function(fn, i) { + fn(function(error) { + if (error) { + return cb(error); + } + + var args = [].slice.call(arguments); + args.shift(); // strip error - undefined or not + + cbArgs[i] = args; + count++; + + if (count === num) { + cbArgs.unshift(null); + cb.apply(this, cbArgs); + } + }); + }); + }; + + + /** + Find an element in array and return it's index if present, otherwise return -1. + + @method inArray + @static + @param {Mixed} needle Element to find + @param {Array} array + @return {Int} Index of the element, or -1 if not found + */ + var inArray = function(needle, array) { + if (array) { + if (Array.prototype.indexOf) { + return Array.prototype.indexOf.call(array, needle); + } + + for (var i = 0, length = array.length; i < length; i++) { + if (array[i] === needle) { + return i; + } + } + } + return -1; + }; + + + /** + Returns elements of first array if they are not present in second. And false - otherwise. + + @private + @method arrayDiff + @param {Array} needles + @param {Array} array + @return {Array|Boolean} + */ + var arrayDiff = function(needles, array) { + var diff = []; + + if (typeOf(needles) !== 'array') { + needles = [needles]; + } + + if (typeOf(array) !== 'array') { + array = [array]; + } + + for (var i in needles) { + if (inArray(needles[i], array) === -1) { + diff.push(needles[i]); + } + } + return diff.length ? diff : false; + }; + + + /** + Find intersection of two arrays. + + @private + @method arrayIntersect + @param {Array} array1 + @param {Array} array2 + @return {Array} Intersection of two arrays or null if there is none + */ + var arrayIntersect = function(array1, array2) { + var result = []; + each(array1, function(item) { + if (inArray(item, array2) !== -1) { + result.push(item); + } + }); + return result.length ? result : null; + }; + + + /** + Forces anything into an array. + + @method toArray + @static + @param {Object} obj Object with length field. + @return {Array} Array object containing all items. + */ + var toArray = function(obj) { + var i, arr = []; + + for (i = 0; i < obj.length; i++) { + arr[i] = obj[i]; + } + + return arr; + }; + + + /** + Generates an unique ID. The only way a user would be able to get the same ID is if the two persons + at the same exact millisecond manage to get the same 5 random numbers between 0-65535; it also uses + a counter so each ID is guaranteed to be unique for the given page. It is more probable for the earth + to be hit with an asteroid. + + @method guid + @static + @param {String} prefix to prepend (by default 'o' will be prepended). + @method guid + @return {String} Virtually unique id. + */ + var guid = (function() { + var counter = 0; + + return function(prefix) { + var guid = new Date().getTime().toString(32), i; + + for (i = 0; i < 5; i++) { + guid += Math.floor(Math.random() * 65535).toString(32); + } + + return (prefix || 'o_') + guid + (counter++).toString(32); + }; + }()); + + + /** + Trims white spaces around the string + + @method trim + @static + @param {String} str + @return {String} + */ + var trim = function(str) { + if (!str) { + return str; + } + return String.prototype.trim ? String.prototype.trim.call(str) : str.toString().replace(/^\s*/, '').replace(/\s*$/, ''); + }; + + + /** + Parses the specified size string into a byte value. For example 10kb becomes 10240. + + @method parseSizeStr + @static + @param {String/Number} size String to parse or number to just pass through. + @return {Number} Size in bytes. + */ + var parseSizeStr = function(size) { + if (typeof(size) !== 'string') { + return size; + } + + var muls = { + t: 1099511627776, + g: 1073741824, + m: 1048576, + k: 1024 + }, + mul; + + + size = /^([0-9\.]+)([tmgk]?)$/.exec(size.toLowerCase().replace(/[^0-9\.tmkg]/g, '')); + mul = size[2]; + size = +size[1]; + + if (muls.hasOwnProperty(mul)) { + size *= muls[mul]; + } + return Math.floor(size); + }; + + + /** + * Pseudo sprintf implementation - simple way to replace tokens with specified values. + * + * @param {String} str String with tokens + * @return {String} String with replaced tokens + */ + var sprintf = function(str) { + var args = [].slice.call(arguments, 1); + + return str.replace(/%[a-z]/g, function() { + var value = args.shift(); + return typeOf(value) !== 'undefined' ? value : ''; + }); + }; + + + return { + guid: guid, + typeOf: typeOf, + extend: extend, + each: each, + isEmptyObj: isEmptyObj, + inSeries: inSeries, + inParallel: inParallel, + inArray: inArray, + arrayDiff: arrayDiff, + arrayIntersect: arrayIntersect, + toArray: toArray, + trim: trim, + sprintf: sprintf, + parseSizeStr: parseSizeStr + }; +}); + +// Included from: src/javascript/core/utils/Env.js + +/** + * Env.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/utils/Env", [ + "moxie/core/utils/Basic" +], function(Basic) { + + /** + * UAParser.js v0.7.7 + * Lightweight JavaScript-based User-Agent string parser + * https://github.com/faisalman/ua-parser-js + * + * Copyright © 2012-2015 Faisal Salman + * Dual licensed under GPLv2 & MIT + */ + var UAParser = (function (undefined) { + + ////////////// + // Constants + ///////////// + + + var EMPTY = '', + UNKNOWN = '?', + FUNC_TYPE = 'function', + UNDEF_TYPE = 'undefined', + OBJ_TYPE = 'object', + MAJOR = 'major', + MODEL = 'model', + NAME = 'name', + TYPE = 'type', + VENDOR = 'vendor', + VERSION = 'version', + ARCHITECTURE= 'architecture', + CONSOLE = 'console', + MOBILE = 'mobile', + TABLET = 'tablet'; + + + /////////// + // Helper + ////////// + + + var util = { + has : function (str1, str2) { + return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1; + }, + lowerize : function (str) { + return str.toLowerCase(); + } + }; + + + /////////////// + // Map helper + ////////////// + + + var mapper = { + + rgx : function () { + + // loop through all regexes maps + for (var result, i = 0, j, k, p, q, matches, match, args = arguments; i < args.length; i += 2) { + + var regex = args[i], // even sequence (0,2,4,..) + props = args[i + 1]; // odd sequence (1,3,5,..) + + // construct object barebones + if (typeof(result) === UNDEF_TYPE) { + result = {}; + for (p in props) { + q = props[p]; + if (typeof(q) === OBJ_TYPE) { + result[q[0]] = undefined; + } else { + result[q] = undefined; + } + } + } + + // try matching uastring with regexes + for (j = k = 0; j < regex.length; j++) { + matches = regex[j].exec(this.getUA()); + if (!!matches) { + for (p = 0; p < props.length; p++) { + match = matches[++k]; + q = props[p]; + // check if given property is actually array + if (typeof(q) === OBJ_TYPE && q.length > 0) { + if (q.length == 2) { + if (typeof(q[1]) == FUNC_TYPE) { + // assign modified match + result[q[0]] = q[1].call(this, match); + } else { + // assign given value, ignore regex match + result[q[0]] = q[1]; + } + } else if (q.length == 3) { + // check whether function or regex + if (typeof(q[1]) === FUNC_TYPE && !(q[1].exec && q[1].test)) { + // call function (usually string mapper) + result[q[0]] = match ? q[1].call(this, match, q[2]) : undefined; + } else { + // sanitize match using given regex + result[q[0]] = match ? match.replace(q[1], q[2]) : undefined; + } + } else if (q.length == 4) { + result[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined; + } + } else { + result[q] = match ? match : undefined; + } + } + break; + } + } + + if(!!matches) break; // break the loop immediately if match found + } + return result; + }, + + str : function (str, map) { + + for (var i in map) { + // check if array + if (typeof(map[i]) === OBJ_TYPE && map[i].length > 0) { + for (var j = 0; j < map[i].length; j++) { + if (util.has(map[i][j], str)) { + return (i === UNKNOWN) ? undefined : i; + } + } + } else if (util.has(map[i], str)) { + return (i === UNKNOWN) ? undefined : i; + } + } + return str; + } + }; + + + /////////////// + // String map + ////////////// + + + var maps = { + + browser : { + oldsafari : { + major : { + '1' : ['/8', '/1', '/3'], + '2' : '/4', + '?' : '/' + }, + version : { + '1.0' : '/8', + '1.2' : '/1', + '1.3' : '/3', + '2.0' : '/412', + '2.0.2' : '/416', + '2.0.3' : '/417', + '2.0.4' : '/419', + '?' : '/' + } + } + }, + + device : { + sprint : { + model : { + 'Evo Shift 4G' : '7373KT' + }, + vendor : { + 'HTC' : 'APA', + 'Sprint' : 'Sprint' + } + } + }, + + os : { + windows : { + version : { + 'ME' : '4.90', + 'NT 3.11' : 'NT3.51', + 'NT 4.0' : 'NT4.0', + '2000' : 'NT 5.0', + 'XP' : ['NT 5.1', 'NT 5.2'], + 'Vista' : 'NT 6.0', + '7' : 'NT 6.1', + '8' : 'NT 6.2', + '8.1' : 'NT 6.3', + 'RT' : 'ARM' + } + } + } + }; + + + ////////////// + // Regex map + ///////////// + + + var regexes = { + + browser : [[ + + // Presto based + /(opera\smini)\/([\w\.-]+)/i, // Opera Mini + /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, // Opera Mobi/Tablet + /(opera).+version\/([\w\.]+)/i, // Opera > 9.80 + /(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80 + + ], [NAME, VERSION], [ + + /\s(opr)\/([\w\.]+)/i // Opera Webkit + ], [[NAME, 'Opera'], VERSION], [ + + // Mixed + /(kindle)\/([\w\.]+)/i, // Kindle + /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i, + // Lunascape/Maxthon/Netfront/Jasmine/Blazer + + // Trident based + /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i, + // Avant/IEMobile/SlimBrowser/Baidu + /(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer + + // Webkit/KHTML based + /(rekonq)\/([\w\.]+)*/i, // Rekonq + /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i + // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron + ], [NAME, VERSION], [ + + /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11 + ], [[NAME, 'IE'], VERSION], [ + + /(edge)\/((\d+)?[\w\.]+)/i // Microsoft Edge + ], [NAME, VERSION], [ + + /(yabrowser)\/([\w\.]+)/i // Yandex + ], [[NAME, 'Yandex'], VERSION], [ + + /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon + ], [[NAME, /_/g, ' '], VERSION], [ + + /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i, + // Chrome/OmniWeb/Arora/Tizen/Nokia + /(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i + // UCBrowser/QQBrowser + ], [NAME, VERSION], [ + + /(dolfin)\/([\w\.]+)/i // Dolphin + ], [[NAME, 'Dolphin'], VERSION], [ + + /((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS + ], [[NAME, 'Chrome'], VERSION], [ + + /XiaoMi\/MiuiBrowser\/([\w\.]+)/i // MIUI Browser + ], [VERSION, [NAME, 'MIUI Browser']], [ + + /android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i // Android Browser + ], [VERSION, [NAME, 'Android Browser']], [ + + /FBAV\/([\w\.]+);/i // Facebook App for iOS + ], [VERSION, [NAME, 'Facebook']], [ + + /version\/([\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari + ], [VERSION, [NAME, 'Mobile Safari']], [ + + /version\/([\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile + ], [VERSION, NAME], [ + + /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0 + ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [ + + /(konqueror)\/([\w\.]+)/i, // Konqueror + /(webkit|khtml)\/([\w\.]+)/i + ], [NAME, VERSION], [ + + // Gecko based + /(navigator|netscape)\/([\w\.-]+)/i // Netscape + ], [[NAME, 'Netscape'], VERSION], [ + /(swiftfox)/i, // Swiftfox + /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i, + // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror + /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i, + // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix + /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla + + // Other + /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i, + // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf + /(links)\s\(([\w\.]+)/i, // Links + /(gobrowser)\/?([\w\.]+)*/i, // GoBrowser + /(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser + /(mosaic)[\/\s]([\w\.]+)/i // Mosaic + ], [NAME, VERSION] + ], + + engine : [[ + + /windows.+\sedge\/([\w\.]+)/i // EdgeHTML + ], [VERSION, [NAME, 'EdgeHTML']], [ + + /(presto)\/([\w\.]+)/i, // Presto + /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m + /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links + /(icab)[\/\s]([23]\.[\d\.]+)/i // iCab + ], [NAME, VERSION], [ + + /rv\:([\w\.]+).*(gecko)/i // Gecko + ], [VERSION, NAME] + ], + + os : [[ + + // Windows based + /microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes) + ], [NAME, VERSION], [ + /(windows)\snt\s6\.2;\s(arm)/i, // Windows RT + /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i + ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [ + /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i + ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [ + + // Mobile/Embedded OS + /\((bb)(10);/i // BlackBerry 10 + ], [[NAME, 'BlackBerry'], VERSION], [ + /(blackberry)\w*\/?([\w\.]+)*/i, // Blackberry + /(tizen)[\/\s]([\w\.]+)/i, // Tizen + /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i, + // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki + /linux;.+(sailfish);/i // Sailfish OS + ], [NAME, VERSION], [ + /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i // Symbian + ], [[NAME, 'Symbian'], VERSION], [ + /\((series40);/i // Series 40 + ], [NAME], [ + /mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS + ], [[NAME, 'Firefox OS'], VERSION], [ + + // Console + /(nintendo|playstation)\s([wids3portablevu]+)/i, // Nintendo/Playstation + + // GNU/Linux based + /(mint)[\/\s\(]?(\w+)*/i, // Mint + /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux + /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i, + // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware + // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus + /(hurd|linux)\s?([\w\.]+)*/i, // Hurd/Linux + /(gnu)\s?([\w\.]+)*/i // GNU + ], [NAME, VERSION], [ + + /(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS + ], [[NAME, 'Chromium OS'], VERSION],[ + + // Solaris + /(sunos)\s?([\w\.]+\d)*/i // Solaris + ], [[NAME, 'Solaris'], VERSION], [ + + // BSD based + /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly + ], [NAME, VERSION],[ + + /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i // iOS + ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [ + + /(mac\sos\sx)\s?([\w\s\.]+\w)*/i, + /(macintosh|mac(?=_powerpc)\s)/i // Mac OS + ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [ + + // Other + /((?:open)?solaris)[\/\s-]?([\w\.]+)*/i, // Solaris + /(haiku)\s(\w+)/i, // Haiku + /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX + /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i, + // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS + /(unix)\s?([\w\.]+)*/i // UNIX + ], [NAME, VERSION] + ] + }; + + + ///////////////// + // Constructor + //////////////// + + + var UAParser = function (uastring) { + + var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY); + + this.getBrowser = function () { + return mapper.rgx.apply(this, regexes.browser); + }; + this.getEngine = function () { + return mapper.rgx.apply(this, regexes.engine); + }; + this.getOS = function () { + return mapper.rgx.apply(this, regexes.os); + }; + this.getResult = function() { + return { + ua : this.getUA(), + browser : this.getBrowser(), + engine : this.getEngine(), + os : this.getOS() + }; + }; + this.getUA = function () { + return ua; + }; + this.setUA = function (uastring) { + ua = uastring; + return this; + }; + this.setUA(ua); + }; + + return UAParser; + })(); + + + function version_compare(v1, v2, operator) { + // From: http://phpjs.org/functions + // + original by: Philippe Jausions (http://pear.php.net/user/jausions) + // + original by: Aidan Lister (http://aidanlister.com/) + // + reimplemented by: Kankrelune (http://www.webfaktory.info/) + // + improved by: Brett Zamir (http://brett-zamir.me) + // + improved by: Scott Baker + // + improved by: Theriault + // * example 1: version_compare('8.2.5rc', '8.2.5a'); + // * returns 1: 1 + // * example 2: version_compare('8.2.50', '8.2.52', '<'); + // * returns 2: true + // * example 3: version_compare('5.3.0-dev', '5.3.0'); + // * returns 3: -1 + // * example 4: version_compare('4.1.0.52','4.01.0.51'); + // * returns 4: 1 + + // Important: compare must be initialized at 0. + var i = 0, + x = 0, + compare = 0, + // vm maps textual PHP versions to negatives so they're less than 0. + // PHP currently defines these as CASE-SENSITIVE. It is important to + // leave these as negatives so that they can come before numerical versions + // and as if no letters were there to begin with. + // (1alpha is < 1 and < 1.1 but > 1dev1) + // If a non-numerical value can't be mapped to this table, it receives + // -7 as its value. + vm = { + 'dev': -6, + 'alpha': -5, + 'a': -5, + 'beta': -4, + 'b': -4, + 'RC': -3, + 'rc': -3, + '#': -2, + 'p': 1, + 'pl': 1 + }, + // This function will be called to prepare each version argument. + // It replaces every _, -, and + with a dot. + // It surrounds any nonsequence of numbers/dots with dots. + // It replaces sequences of dots with a single dot. + // version_compare('4..0', '4.0') == 0 + // Important: A string of 0 length needs to be converted into a value + // even less than an unexisting value in vm (-7), hence [-8]. + // It's also important to not strip spaces because of this. + // version_compare('', ' ') == 1 + prepVersion = function (v) { + v = ('' + v).replace(/[_\-+]/g, '.'); + v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.'); + return (!v.length ? [-8] : v.split('.')); + }, + // This converts a version component to a number. + // Empty component becomes 0. + // Non-numerical component becomes a negative number. + // Numerical component becomes itself as an integer. + numVersion = function (v) { + return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10)); + }; + + v1 = prepVersion(v1); + v2 = prepVersion(v2); + x = Math.max(v1.length, v2.length); + for (i = 0; i < x; i++) { + if (v1[i] == v2[i]) { + continue; + } + v1[i] = numVersion(v1[i]); + v2[i] = numVersion(v2[i]); + if (v1[i] < v2[i]) { + compare = -1; + break; + } else if (v1[i] > v2[i]) { + compare = 1; + break; + } + } + if (!operator) { + return compare; + } + + // Important: operator is CASE-SENSITIVE. + // "No operator" seems to be treated as "<." + // Any other values seem to make the function return null. + switch (operator) { + case '>': + case 'gt': + return (compare > 0); + case '>=': + case 'ge': + return (compare >= 0); + case '<=': + case 'le': + return (compare <= 0); + case '==': + case '=': + case 'eq': + return (compare === 0); + case '<>': + case '!=': + case 'ne': + return (compare !== 0); + case '': + case '<': + case 'lt': + return (compare < 0); + default: + return null; + } + } + + + var can = (function() { + var caps = { + define_property: (function() { + /* // currently too much extra code required, not exactly worth it + try { // as of IE8, getters/setters are supported only on DOM elements + var obj = {}; + if (Object.defineProperty) { + Object.defineProperty(obj, 'prop', { + enumerable: true, + configurable: true + }); + return true; + } + } catch(ex) {} + + if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { + return true; + }*/ + return false; + }()), + + create_canvas: (function() { + // On the S60 and BB Storm, getContext exists, but always returns undefined + // so we actually have to call getContext() to verify + // github.com/Modernizr/Modernizr/issues/issue/97/ + var el = document.createElement('canvas'); + return !!(el.getContext && el.getContext('2d')); + }()), + + return_response_type: function(responseType) { + try { + if (Basic.inArray(responseType, ['', 'text', 'document']) !== -1) { + return true; + } else if (window.XMLHttpRequest) { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/'); // otherwise Gecko throws an exception + if ('responseType' in xhr) { + xhr.responseType = responseType; + // as of 23.0.1271.64, Chrome switched from throwing exception to merely logging it to the console (why? o why?) + if (xhr.responseType !== responseType) { + return false; + } + return true; + } + } + } catch (ex) {} + return false; + }, + + // ideas for this heavily come from Modernizr (http://modernizr.com/) + use_data_uri: (function() { + var du = new Image(); + + du.onload = function() { + caps.use_data_uri = (du.width === 1 && du.height === 1); + }; + + setTimeout(function() { + du.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="; + }, 1); + return false; + }()), + + use_data_uri_over32kb: function() { // IE8 + return caps.use_data_uri && (Env.browser !== 'IE' || Env.version >= 9); + }, + + use_data_uri_of: function(bytes) { + return (caps.use_data_uri && bytes < 33000 || caps.use_data_uri_over32kb()); + }, + + use_fileinput: function() { + if (navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/)) { + return false; + } + + var el = document.createElement('input'); + el.setAttribute('type', 'file'); + return !el.disabled; + } + }; + + return function(cap) { + var args = [].slice.call(arguments); + args.shift(); // shift of cap + return Basic.typeOf(caps[cap]) === 'function' ? caps[cap].apply(this, args) : !!caps[cap]; + }; + }()); + + + var uaResult = new UAParser().getResult(); + + + var Env = { + can: can, + + uaParser: UAParser, + + browser: uaResult.browser.name, + version: uaResult.browser.version, + os: uaResult.os.name, // everybody intuitively types it in a lowercase for some reason + osVersion: uaResult.os.version, + + verComp: version_compare, + + swf_url: "../flash/Moxie.swf", + xap_url: "../silverlight/Moxie.xap", + global_event_dispatcher: "moxie.core.EventTarget.instance.dispatchEvent" + }; + + // for backward compatibility + // @deprecated Use `Env.os` instead + Env.OS = Env.os; + + if (MXI_DEBUG) { + Env.debug = { + runtime: true, + events: false + }; + + Env.log = function() { + + function logObj(data) { + // TODO: this should recursively print out the object in a pretty way + console.appendChild(document.createTextNode(data + "\n")); + } + + var data = arguments[0]; + + if (Basic.typeOf(data) === 'string') { + data = Basic.sprintf.apply(this, arguments); + } + + if (window && window.console && window.console.log) { + window.console.log(data); + } else if (document) { + var console = document.getElementById('moxie-console'); + if (!console) { + console = document.createElement('pre'); + console.id = 'moxie-console'; + //console.style.display = 'none'; + document.body.appendChild(console); + } + + if (Basic.inArray(Basic.typeOf(data), ['object', 'array']) !== -1) { + logObj(data); + } else { + console.appendChild(document.createTextNode(data + "\n")); + } + } + }; + } + + return Env; +}); + +// Included from: src/javascript/core/I18n.js + +/** + * I18n.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/I18n", [ + "moxie/core/utils/Basic" +], function(Basic) { + var i18n = {}; + + return { + /** + * Extends the language pack object with new items. + * + * @param {Object} pack Language pack items to add. + * @return {Object} Extended language pack object. + */ + addI18n: function(pack) { + return Basic.extend(i18n, pack); + }, + + /** + * Translates the specified string by checking for the english string in the language pack lookup. + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + translate: function(str) { + return i18n[str] || str; + }, + + /** + * Shortcut for translate function + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + _: function(str) { + return this.translate(str); + }, + + /** + * Pseudo sprintf implementation - simple way to replace tokens with specified values. + * + * @param {String} str String with tokens + * @return {String} String with replaced tokens + */ + sprintf: function(str) { + var args = [].slice.call(arguments, 1); + + return str.replace(/%[a-z]/g, function() { + var value = args.shift(); + return Basic.typeOf(value) !== 'undefined' ? value : ''; + }); + } + }; +}); + +// Included from: src/javascript/core/utils/Mime.js + +/** + * Mime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/utils/Mime", [ + "moxie/core/utils/Basic", + "moxie/core/I18n" +], function(Basic, I18n) { + + var mimeData = "" + + "application/msword,doc dot," + + "application/pdf,pdf," + + "application/pgp-signature,pgp," + + "application/postscript,ps ai eps," + + "application/rtf,rtf," + + "application/vnd.ms-excel,xls xlb," + + "application/vnd.ms-powerpoint,ppt pps pot," + + "application/zip,zip," + + "application/x-shockwave-flash,swf swfl," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," + + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," + + "application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," + + "application/vnd.openxmlformats-officedocument.presentationml.template,potx," + + "application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," + + "application/x-javascript,js," + + "application/json,json," + + "audio/mpeg,mp3 mpga mpega mp2," + + "audio/x-wav,wav," + + "audio/x-m4a,m4a," + + "audio/ogg,oga ogg," + + "audio/aiff,aiff aif," + + "audio/flac,flac," + + "audio/aac,aac," + + "audio/ac3,ac3," + + "audio/x-ms-wma,wma," + + "image/bmp,bmp," + + "image/gif,gif," + + "image/jpeg,jpg jpeg jpe," + + "image/photoshop,psd," + + "image/png,png," + + "image/svg+xml,svg svgz," + + "image/tiff,tiff tif," + + "text/plain,asc txt text diff log," + + "text/html,htm html xhtml," + + "text/css,css," + + "text/csv,csv," + + "text/rtf,rtf," + + "video/mpeg,mpeg mpg mpe m2v," + + "video/quicktime,qt mov," + + "video/mp4,mp4," + + "video/x-m4v,m4v," + + "video/x-flv,flv," + + "video/x-ms-wmv,wmv," + + "video/avi,avi," + + "video/webm,webm," + + "video/3gpp,3gpp 3gp," + + "video/3gpp2,3g2," + + "video/vnd.rn-realvideo,rv," + + "video/ogg,ogv," + + "video/x-matroska,mkv," + + "application/vnd.oasis.opendocument.formula-template,otf," + + "application/octet-stream,exe"; + + + var Mime = { + + mimes: {}, + + extensions: {}, + + // Parses the default mime types string into a mimes and extensions lookup maps + addMimeType: function (mimeData) { + var items = mimeData.split(/,/), i, ii, ext; + + for (i = 0; i < items.length; i += 2) { + ext = items[i + 1].split(/ /); + + // extension to mime lookup + for (ii = 0; ii < ext.length; ii++) { + this.mimes[ext[ii]] = items[i]; + } + // mime to extension lookup + this.extensions[items[i]] = ext; + } + }, + + + extList2mimes: function (filters, addMissingExtensions) { + var self = this, ext, i, ii, type, mimes = []; + + // convert extensions to mime types list + for (i = 0; i < filters.length; i++) { + ext = filters[i].extensions.split(/\s*,\s*/); + + for (ii = 0; ii < ext.length; ii++) { + + // if there's an asterisk in the list, then accept attribute is not required + if (ext[ii] === '*') { + return []; + } + + type = self.mimes[ext[ii]]; + if (type && Basic.inArray(type, mimes) === -1) { + mimes.push(type); + } + + // future browsers should filter by extension, finally + if (addMissingExtensions && /^\w+$/.test(ext[ii])) { + mimes.push('.' + ext[ii]); + } else if (!type) { + // if we have no type in our map, then accept all + return []; + } + } + } + return mimes; + }, + + + mimes2exts: function(mimes) { + var self = this, exts = []; + + Basic.each(mimes, function(mime) { + if (mime === '*') { + exts = []; + return false; + } + + // check if this thing looks like mime type + var m = mime.match(/^(\w+)\/(\*|\w+)$/); + if (m) { + if (m[2] === '*') { + // wildcard mime type detected + Basic.each(self.extensions, function(arr, mime) { + if ((new RegExp('^' + m[1] + '/')).test(mime)) { + [].push.apply(exts, self.extensions[mime]); + } + }); + } else if (self.extensions[mime]) { + [].push.apply(exts, self.extensions[mime]); + } + } + }); + return exts; + }, + + + mimes2extList: function(mimes) { + var accept = [], exts = []; + + if (Basic.typeOf(mimes) === 'string') { + mimes = Basic.trim(mimes).split(/\s*,\s*/); + } + + exts = this.mimes2exts(mimes); + + accept.push({ + title: I18n.translate('Files'), + extensions: exts.length ? exts.join(',') : '*' + }); + + // save original mimes string + accept.mimes = mimes; + + return accept; + }, + + + getFileExtension: function(fileName) { + var matches = fileName && fileName.match(/\.([^.]+)$/); + if (matches) { + return matches[1].toLowerCase(); + } + return ''; + }, + + getFileMime: function(fileName) { + return this.mimes[this.getFileExtension(fileName)] || ''; + } + }; + + Mime.addMimeType(mimeData); + + return Mime; +}); + +// Included from: src/javascript/core/utils/Dom.js + +/** + * Dom.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Dom', ['moxie/core/utils/Env'], function(Env) { + + /** + Get DOM Element by it's id. + + @method get + @for Utils + @param {String} id Identifier of the DOM Element + @return {DOMElement} + */ + var get = function(id) { + if (typeof id !== 'string') { + return id; + } + return document.getElementById(id); + }; + + /** + Checks if specified DOM element has specified class. + + @method hasClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var hasClass = function(obj, name) { + if (!obj.className) { + return false; + } + + var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)"); + return regExp.test(obj.className); + }; + + /** + Adds specified className to specified DOM element. + + @method addClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var addClass = function(obj, name) { + if (!hasClass(obj, name)) { + obj.className = !obj.className ? name : obj.className.replace(/\s+$/, '') + ' ' + name; + } + }; + + /** + Removes specified className from specified DOM element. + + @method removeClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var removeClass = function(obj, name) { + if (obj.className) { + var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)"); + obj.className = obj.className.replace(regExp, function($0, $1, $2) { + return $1 === ' ' && $2 === ' ' ? ' ' : ''; + }); + } + }; + + /** + Returns a given computed style of a DOM element. + + @method getStyle + @static + @param {Object} obj DOM element like object. + @param {String} name Style you want to get from the DOM element + */ + var getStyle = function(obj, name) { + if (obj.currentStyle) { + return obj.currentStyle[name]; + } else if (window.getComputedStyle) { + return window.getComputedStyle(obj, null)[name]; + } + }; + + + /** + Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields. + + @method getPos + @static + @param {Element} node HTML element or element id to get x, y position from. + @param {Element} root Optional root element to stop calculations at. + @return {object} Absolute position of the specified element object with x, y fields. + */ + var getPos = function(node, root) { + var x = 0, y = 0, parent, doc = document, nodeRect, rootRect; + + node = node; + root = root || doc.body; + + // Returns the x, y cordinate for an element on IE 6 and IE 7 + function getIEPos(node) { + var bodyElm, rect, x = 0, y = 0; + + if (node) { + rect = node.getBoundingClientRect(); + bodyElm = doc.compatMode === "CSS1Compat" ? doc.documentElement : doc.body; + x = rect.left + bodyElm.scrollLeft; + y = rect.top + bodyElm.scrollTop; + } + + return { + x : x, + y : y + }; + } + + // Use getBoundingClientRect on IE 6 and IE 7 but not on IE 8 in standards mode + if (node && node.getBoundingClientRect && Env.browser === 'IE' && (!doc.documentMode || doc.documentMode < 8)) { + nodeRect = getIEPos(node); + rootRect = getIEPos(root); + + return { + x : nodeRect.x - rootRect.x, + y : nodeRect.y - rootRect.y + }; + } + + parent = node; + while (parent && parent != root && parent.nodeType) { + x += parent.offsetLeft || 0; + y += parent.offsetTop || 0; + parent = parent.offsetParent; + } + + parent = node.parentNode; + while (parent && parent != root && parent.nodeType) { + x -= parent.scrollLeft || 0; + y -= parent.scrollTop || 0; + parent = parent.parentNode; + } + + return { + x : x, + y : y + }; + }; + + /** + Returns the size of the specified node in pixels. + + @method getSize + @static + @param {Node} node Node to get the size of. + @return {Object} Object with a w and h property. + */ + var getSize = function(node) { + return { + w : node.offsetWidth || node.clientWidth, + h : node.offsetHeight || node.clientHeight + }; + }; + + return { + get: get, + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + getStyle: getStyle, + getPos: getPos, + getSize: getSize + }; +}); + +// Included from: src/javascript/core/Exceptions.js + +/** + * Exceptions.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/Exceptions', [ + 'moxie/core/utils/Basic' +], function(Basic) { + function _findKey(obj, value) { + var key; + for (key in obj) { + if (obj[key] === value) { + return key; + } + } + return null; + } + + return { + RuntimeError: (function() { + var namecodes = { + NOT_INIT_ERR: 1, + NOT_SUPPORTED_ERR: 9, + JS_ERR: 4 + }; + + function RuntimeError(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": RuntimeError " + this.code; + } + + Basic.extend(RuntimeError, namecodes); + RuntimeError.prototype = Error.prototype; + return RuntimeError; + }()), + + OperationNotAllowedException: (function() { + + function OperationNotAllowedException(code) { + this.code = code; + this.name = 'OperationNotAllowedException'; + } + + Basic.extend(OperationNotAllowedException, { + NOT_ALLOWED_ERR: 1 + }); + + OperationNotAllowedException.prototype = Error.prototype; + + return OperationNotAllowedException; + }()), + + ImageError: (function() { + var namecodes = { + WRONG_FORMAT: 1, + MAX_RESOLUTION_ERR: 2, + INVALID_META_ERR: 3 + }; + + function ImageError(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": ImageError " + this.code; + } + + Basic.extend(ImageError, namecodes); + ImageError.prototype = Error.prototype; + + return ImageError; + }()), + + FileException: (function() { + var namecodes = { + NOT_FOUND_ERR: 1, + SECURITY_ERR: 2, + ABORT_ERR: 3, + NOT_READABLE_ERR: 4, + ENCODING_ERR: 5, + NO_MODIFICATION_ALLOWED_ERR: 6, + INVALID_STATE_ERR: 7, + SYNTAX_ERR: 8 + }; + + function FileException(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": FileException " + this.code; + } + + Basic.extend(FileException, namecodes); + FileException.prototype = Error.prototype; + return FileException; + }()), + + DOMException: (function() { + var namecodes = { + INDEX_SIZE_ERR: 1, + DOMSTRING_SIZE_ERR: 2, + HIERARCHY_REQUEST_ERR: 3, + WRONG_DOCUMENT_ERR: 4, + INVALID_CHARACTER_ERR: 5, + NO_DATA_ALLOWED_ERR: 6, + NO_MODIFICATION_ALLOWED_ERR: 7, + NOT_FOUND_ERR: 8, + NOT_SUPPORTED_ERR: 9, + INUSE_ATTRIBUTE_ERR: 10, + INVALID_STATE_ERR: 11, + SYNTAX_ERR: 12, + INVALID_MODIFICATION_ERR: 13, + NAMESPACE_ERR: 14, + INVALID_ACCESS_ERR: 15, + VALIDATION_ERR: 16, + TYPE_MISMATCH_ERR: 17, + SECURITY_ERR: 18, + NETWORK_ERR: 19, + ABORT_ERR: 20, + URL_MISMATCH_ERR: 21, + QUOTA_EXCEEDED_ERR: 22, + TIMEOUT_ERR: 23, + INVALID_NODE_TYPE_ERR: 24, + DATA_CLONE_ERR: 25 + }; + + function DOMException(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": DOMException " + this.code; + } + + Basic.extend(DOMException, namecodes); + DOMException.prototype = Error.prototype; + return DOMException; + }()), + + EventException: (function() { + function EventException(code) { + this.code = code; + this.name = 'EventException'; + } + + Basic.extend(EventException, { + UNSPECIFIED_EVENT_TYPE_ERR: 0 + }); + + EventException.prototype = Error.prototype; + + return EventException; + }()) + }; +}); + +// Included from: src/javascript/core/EventTarget.js + +/** + * EventTarget.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/EventTarget', [ + 'moxie/core/utils/Env', + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic' +], function(Env, x, Basic) { + /** + Parent object for all event dispatching components and objects + + @class EventTarget + @constructor EventTarget + */ + function EventTarget() { + // hash of event listeners by object uid + var eventpool = {}; + + Basic.extend(this, { + + /** + Unique id of the event dispatcher, usually overriden by children + + @property uid + @type String + */ + uid: null, + + /** + Can be called from within a child in order to acquire uniqie id in automated manner + + @method init + */ + init: function() { + if (!this.uid) { + this.uid = Basic.guid('uid_'); + } + }, + + /** + Register a handler to a specific event dispatched by the object + + @method addEventListener + @param {String} type Type or basically a name of the event to subscribe to + @param {Function} fn Callback function that will be called when event happens + @param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first + @param {Object} [scope=this] A scope to invoke event handler in + */ + addEventListener: function(type, fn, priority, scope) { + var self = this, list; + + // without uid no event handlers can be added, so make sure we got one + if (!this.hasOwnProperty('uid')) { + this.uid = Basic.guid('uid_'); + } + + type = Basic.trim(type); + + if (/\s/.test(type)) { + // multiple event types were passed for one handler + Basic.each(type.split(/\s+/), function(type) { + self.addEventListener(type, fn, priority, scope); + }); + return; + } + + type = type.toLowerCase(); + priority = parseInt(priority, 10) || 0; + + list = eventpool[this.uid] && eventpool[this.uid][type] || []; + list.push({fn : fn, priority : priority, scope : scope || this}); + + if (!eventpool[this.uid]) { + eventpool[this.uid] = {}; + } + eventpool[this.uid][type] = list; + }, + + /** + Check if any handlers were registered to the specified event + + @method hasEventListener + @param {String} type Type or basically a name of the event to check + @return {Mixed} Returns a handler if it was found and false, if - not + */ + hasEventListener: function(type) { + var list = type ? eventpool[this.uid] && eventpool[this.uid][type] : eventpool[this.uid]; + return list ? list : false; + }, + + /** + Unregister the handler from the event, or if former was not specified - unregister all handlers + + @method removeEventListener + @param {String} type Type or basically a name of the event + @param {Function} [fn] Handler to unregister + */ + removeEventListener: function(type, fn) { + type = type.toLowerCase(); + + var list = eventpool[this.uid] && eventpool[this.uid][type], i; + + if (list) { + if (fn) { + for (i = list.length - 1; i >= 0; i--) { + if (list[i].fn === fn) { + list.splice(i, 1); + break; + } + } + } else { + list = []; + } + + // delete event list if it has become empty + if (!list.length) { + delete eventpool[this.uid][type]; + + // and object specific entry in a hash if it has no more listeners attached + if (Basic.isEmptyObj(eventpool[this.uid])) { + delete eventpool[this.uid]; + } + } + } + }, + + /** + Remove all event handlers from the object + + @method removeAllEventListeners + */ + removeAllEventListeners: function() { + if (eventpool[this.uid]) { + delete eventpool[this.uid]; + } + }, + + /** + Dispatch the event + + @method dispatchEvent + @param {String/Object} Type of event or event object to dispatch + @param {Mixed} [...] Variable number of arguments to be passed to a handlers + @return {Boolean} true by default and false if any handler returned false + */ + dispatchEvent: function(type) { + var uid, list, args, tmpEvt, evt = {}, result = true, undef; + + if (Basic.typeOf(type) !== 'string') { + // we can't use original object directly (because of Silverlight) + tmpEvt = type; + + if (Basic.typeOf(tmpEvt.type) === 'string') { + type = tmpEvt.type; + + if (tmpEvt.total !== undef && tmpEvt.loaded !== undef) { // progress event + evt.total = tmpEvt.total; + evt.loaded = tmpEvt.loaded; + } + evt.async = tmpEvt.async || false; + } else { + throw new x.EventException(x.EventException.UNSPECIFIED_EVENT_TYPE_ERR); + } + } + + // check if event is meant to be dispatched on an object having specific uid + if (type.indexOf('::') !== -1) { + (function(arr) { + uid = arr[0]; + type = arr[1]; + }(type.split('::'))); + } else { + uid = this.uid; + } + + type = type.toLowerCase(); + + list = eventpool[uid] && eventpool[uid][type]; + + if (list) { + // sort event list by prority + list.sort(function(a, b) { return b.priority - a.priority; }); + + args = [].slice.call(arguments); + + // first argument will be pseudo-event object + args.shift(); + evt.type = type; + args.unshift(evt); + + if (MXI_DEBUG && Env.debug.events) { + Env.log("Event '%s' fired on %u", evt.type, uid); + } + + // Dispatch event to all listeners + var queue = []; + Basic.each(list, function(handler) { + // explicitly set the target, otherwise events fired from shims do not get it + args[0].target = handler.scope; + // if event is marked as async, detach the handler + if (evt.async) { + queue.push(function(cb) { + setTimeout(function() { + cb(handler.fn.apply(handler.scope, args) === false); + }, 1); + }); + } else { + queue.push(function(cb) { + cb(handler.fn.apply(handler.scope, args) === false); // if handler returns false stop propagation + }); + } + }); + if (queue.length) { + Basic.inSeries(queue, function(err) { + result = !err; + }); + } + } + return result; + }, + + /** + Alias for addEventListener + + @method bind + @protected + */ + bind: function() { + this.addEventListener.apply(this, arguments); + }, + + /** + Alias for removeEventListener + + @method unbind + @protected + */ + unbind: function() { + this.removeEventListener.apply(this, arguments); + }, + + /** + Alias for removeAllEventListeners + + @method unbindAll + @protected + */ + unbindAll: function() { + this.removeAllEventListeners.apply(this, arguments); + }, + + /** + Alias for dispatchEvent + + @method trigger + @protected + */ + trigger: function() { + return this.dispatchEvent.apply(this, arguments); + }, + + + /** + Handle properties of on[event] type. + + @method handleEventProps + @private + */ + handleEventProps: function(dispatches) { + var self = this; + + this.bind(dispatches.join(' '), function(e) { + var prop = 'on' + e.type.toLowerCase(); + if (Basic.typeOf(this[prop]) === 'function') { + this[prop].apply(this, arguments); + } + }); + + // object must have defined event properties, even if it doesn't make use of them + Basic.each(dispatches, function(prop) { + prop = 'on' + prop.toLowerCase(prop); + if (Basic.typeOf(self[prop]) === 'undefined') { + self[prop] = null; + } + }); + } + + }); + } + + EventTarget.instance = new EventTarget(); + + return EventTarget; +}); + +// Included from: src/javascript/runtime/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/Runtime', [ + "moxie/core/utils/Env", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/EventTarget" +], function(Env, Basic, Dom, EventTarget) { + var runtimeConstructors = {}, runtimes = {}; + + /** + Common set of methods and properties for every runtime instance + + @class Runtime + + @param {Object} options + @param {String} type Sanitized name of the runtime + @param {Object} [caps] Set of capabilities that differentiate specified runtime + @param {Object} [modeCaps] Set of capabilities that do require specific operational mode + @param {String} [preferredMode='browser'] Preferred operational mode to choose if no required capabilities were requested + */ + function Runtime(options, type, caps, modeCaps, preferredMode) { + /** + Dispatched when runtime is initialized and ready. + Results in RuntimeInit on a connected component. + + @event Init + */ + + /** + Dispatched when runtime fails to initialize. + Results in RuntimeError on a connected component. + + @event Error + */ + + var self = this + , _shim + , _uid = Basic.guid(type + '_') + , defaultMode = preferredMode || 'browser' + ; + + options = options || {}; + + // register runtime in private hash + runtimes[_uid] = this; + + /** + Default set of capabilities, which can be redifined later by specific runtime + + @private + @property caps + @type Object + */ + caps = Basic.extend({ + // Runtime can: + // provide access to raw binary data of the file + access_binary: false, + // provide access to raw binary data of the image (image extension is optional) + access_image_binary: false, + // display binary data as thumbs for example + display_media: false, + // make cross-domain requests + do_cors: false, + // accept files dragged and dropped from the desktop + drag_and_drop: false, + // filter files in selection dialog by their extensions + filter_by_extension: true, + // resize image (and manipulate it raw data of any file in general) + resize_image: false, + // periodically report how many bytes of total in the file were uploaded (loaded) + report_upload_progress: false, + // provide access to the headers of http response + return_response_headers: false, + // support response of specific type, which should be passed as an argument + // e.g. runtime.can('return_response_type', 'blob') + return_response_type: false, + // return http status code of the response + return_status_code: true, + // send custom http header with the request + send_custom_headers: false, + // pick up the files from a dialog + select_file: false, + // select whole folder in file browse dialog + select_folder: false, + // select multiple files at once in file browse dialog + select_multiple: true, + // send raw binary data, that is generated after image resizing or manipulation of other kind + send_binary_string: false, + // send cookies with http request and therefore retain session + send_browser_cookies: true, + // send data formatted as multipart/form-data + send_multipart: true, + // slice the file or blob to smaller parts + slice_blob: false, + // upload file without preloading it to memory, stream it out directly from disk + stream_upload: false, + // programmatically trigger file browse dialog + summon_file_dialog: false, + // upload file of specific size, size should be passed as argument + // e.g. runtime.can('upload_filesize', '500mb') + upload_filesize: true, + // initiate http request with specific http method, method should be passed as argument + // e.g. runtime.can('use_http_method', 'put') + use_http_method: true + }, caps); + + + // default to the mode that is compatible with preferred caps + if (options.preferred_caps) { + defaultMode = Runtime.getMode(modeCaps, options.preferred_caps, defaultMode); + } + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tdefault mode: %s", defaultMode); + } + + // small extension factory here (is meant to be extended with actual extensions constructors) + _shim = (function() { + var objpool = {}; + return { + exec: function(uid, comp, fn, args) { + if (_shim[comp]) { + if (!objpool[uid]) { + objpool[uid] = { + context: this, + instance: new _shim[comp]() + }; + } + if (objpool[uid].instance[fn]) { + return objpool[uid].instance[fn].apply(this, args); + } + } + }, + + removeInstance: function(uid) { + delete objpool[uid]; + }, + + removeAllInstances: function() { + var self = this; + Basic.each(objpool, function(obj, uid) { + if (Basic.typeOf(obj.instance.destroy) === 'function') { + obj.instance.destroy.call(obj.context); + } + self.removeInstance(uid); + }); + } + }; + }()); + + + // public methods + Basic.extend(this, { + /** + Specifies whether runtime instance was initialized or not + + @property initialized + @type {Boolean} + @default false + */ + initialized: false, // shims require this flag to stop initialization retries + + /** + Unique ID of the runtime + + @property uid + @type {String} + */ + uid: _uid, + + /** + Runtime type (e.g. flash, html5, etc) + + @property type + @type {String} + */ + type: type, + + /** + Runtime (not native one) may operate in browser or client mode. + + @property mode + @private + @type {String|Boolean} current mode or false, if none possible + */ + mode: Runtime.getMode(modeCaps, (options.required_caps), defaultMode), + + /** + id of the DOM container for the runtime (if available) + + @property shimid + @type {String} + */ + shimid: _uid + '_container', + + /** + Number of connected clients. If equal to zero, runtime can be destroyed + + @property clients + @type {Number} + */ + clients: 0, + + /** + Runtime initialization options + + @property options + @type {Object} + */ + options: options, + + /** + Checks if the runtime has specific capability + + @method can + @param {String} cap Name of capability to check + @param {Mixed} [value] If passed, capability should somehow correlate to the value + @param {Object} [refCaps] Set of capabilities to check the specified cap against (defaults to internal set) + @return {Boolean} true if runtime has such capability and false, if - not + */ + can: function(cap, value) { + var refCaps = arguments[2] || caps; + + // if cap var is a comma-separated list of caps, convert it to object (key/value) + if (Basic.typeOf(cap) === 'string' && Basic.typeOf(value) === 'undefined') { + cap = Runtime.parseCaps(cap); + } + + if (Basic.typeOf(cap) === 'object') { + for (var key in cap) { + if (!this.can(key, cap[key], refCaps)) { + return false; + } + } + return true; + } + + // check the individual cap + if (Basic.typeOf(refCaps[cap]) === 'function') { + return refCaps[cap].call(this, value); + } else { + return (value === refCaps[cap]); + } + }, + + /** + Returns container for the runtime as DOM element + + @method getShimContainer + @return {DOMElement} + */ + getShimContainer: function() { + var container, shimContainer = Dom.get(this.shimid); + + // if no container for shim, create one + if (!shimContainer) { + container = this.options.container ? Dom.get(this.options.container) : document.body; + + // create shim container and insert it at an absolute position into the outer container + shimContainer = document.createElement('div'); + shimContainer.id = this.shimid; + shimContainer.className = 'moxie-shim moxie-shim-' + this.type; + + Basic.extend(shimContainer.style, { + position: 'absolute', + top: '0px', + left: '0px', + width: '1px', + height: '1px', + overflow: 'hidden' + }); + + container.appendChild(shimContainer); + container = null; + } + + return shimContainer; + }, + + /** + Returns runtime as DOM element (if appropriate) + + @method getShim + @return {DOMElement} + */ + getShim: function() { + return _shim; + }, + + /** + Invokes a method within the runtime itself (might differ across the runtimes) + + @method shimExec + @param {Mixed} [] + @protected + @return {Mixed} Depends on the action and component + */ + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return self.getShim().exec.call(this, this.uid, component, action, args); + }, + + /** + Operaional interface that is used by components to invoke specific actions on the runtime + (is invoked in the scope of component) + + @method exec + @param {Mixed} []* + @protected + @return {Mixed} Depends on the action and component + */ + exec: function(component, action) { // this is called in the context of component, not runtime + var args = [].slice.call(arguments, 2); + + if (self[component] && self[component][action]) { + return self[component][action].apply(this, args); + } + return self.shimExec.apply(this, arguments); + }, + + /** + Destroys the runtime (removes all events and deletes DOM structures) + + @method destroy + */ + destroy: function() { + if (!self) { + return; // obviously already destroyed + } + + var shimContainer = Dom.get(this.shimid); + if (shimContainer) { + shimContainer.parentNode.removeChild(shimContainer); + } + + if (_shim) { + _shim.removeAllInstances(); + } + + this.unbindAll(); + delete runtimes[this.uid]; + this.uid = null; // mark this runtime as destroyed + _uid = self = _shim = shimContainer = null; + } + }); + + // once we got the mode, test against all caps + if (this.mode && options.required_caps && !this.can(options.required_caps)) { + this.mode = false; + } + } + + + /** + Default order to try different runtime types + + @property order + @type String + @static + */ + Runtime.order = 'html5,flash,silverlight,html4'; + + + /** + Retrieves runtime from private hash by it's uid + + @method getRuntime + @private + @static + @param {String} uid Unique identifier of the runtime + @return {Runtime|Boolean} Returns runtime, if it exists and false, if - not + */ + Runtime.getRuntime = function(uid) { + return runtimes[uid] ? runtimes[uid] : false; + }; + + + /** + Register constructor for the Runtime of new (or perhaps modified) type + + @method addConstructor + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @param {Function} construct Constructor for the Runtime type + */ + Runtime.addConstructor = function(type, constructor) { + constructor.prototype = EventTarget.instance; + runtimeConstructors[type] = constructor; + }; + + + /** + Get the constructor for the specified type. + + method getConstructor + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @return {Function} Constructor for the Runtime type + */ + Runtime.getConstructor = function(type) { + return runtimeConstructors[type] || null; + }; + + + /** + Get info about the runtime (uid, type, capabilities) + + @method getInfo + @static + @param {String} uid Unique identifier of the runtime + @return {Mixed} Info object or null if runtime doesn't exist + */ + Runtime.getInfo = function(uid) { + var runtime = Runtime.getRuntime(uid); + + if (runtime) { + return { + uid: runtime.uid, + type: runtime.type, + mode: runtime.mode, + can: function() { + return runtime.can.apply(runtime, arguments); + } + }; + } + return null; + }; + + + /** + Convert caps represented by a comma-separated string to the object representation. + + @method parseCaps + @static + @param {String} capStr Comma-separated list of capabilities + @return {Object} + */ + Runtime.parseCaps = function(capStr) { + var capObj = {}; + + if (Basic.typeOf(capStr) !== 'string') { + return capStr || {}; + } + + Basic.each(capStr.split(','), function(key) { + capObj[key] = true; // we assume it to be - true + }); + + return capObj; + }; + + /** + Test the specified runtime for specific capabilities. + + @method can + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @param {String|Object} caps Set of capabilities to check + @return {Boolean} Result of the test + */ + Runtime.can = function(type, caps) { + var runtime + , constructor = Runtime.getConstructor(type) + , mode + ; + if (constructor) { + runtime = new constructor({ + required_caps: caps + }); + mode = runtime.mode; + runtime.destroy(); + return !!mode; + } + return false; + }; + + + /** + Figure out a runtime that supports specified capabilities. + + @method thatCan + @static + @param {String|Object} caps Set of capabilities to check + @param {String} [runtimeOrder] Comma-separated list of runtimes to check against + @return {String} Usable runtime identifier or null + */ + Runtime.thatCan = function(caps, runtimeOrder) { + var types = (runtimeOrder || Runtime.order).split(/\s*,\s*/); + for (var i in types) { + if (Runtime.can(types[i], caps)) { + return types[i]; + } + } + return null; + }; + + + /** + Figure out an operational mode for the specified set of capabilities. + + @method getMode + @static + @param {Object} modeCaps Set of capabilities that depend on particular runtime mode + @param {Object} [requiredCaps] Supplied set of capabilities to find operational mode for + @param {String|Boolean} [defaultMode='browser'] Default mode to use + @return {String|Boolean} Compatible operational mode + */ + Runtime.getMode = function(modeCaps, requiredCaps, defaultMode) { + var mode = null; + + if (Basic.typeOf(defaultMode) === 'undefined') { // only if not specified + defaultMode = 'browser'; + } + + if (requiredCaps && !Basic.isEmptyObj(modeCaps)) { + // loop over required caps and check if they do require the same mode + Basic.each(requiredCaps, function(value, cap) { + if (modeCaps.hasOwnProperty(cap)) { + var capMode = modeCaps[cap](value); + + // make sure we always have an array + if (typeof(capMode) === 'string') { + capMode = [capMode]; + } + + if (!mode) { + mode = capMode; + } else if (!(mode = Basic.arrayIntersect(mode, capMode))) { + // if cap requires conflicting mode - runtime cannot fulfill required caps + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\t\t%c: %v (conflicting mode requested: %s)", cap, value, capMode); + } + + return (mode = false); + } + } + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\t\t%c: %v (compatible modes: %s)", cap, value, mode); + } + }); + + if (mode) { + return Basic.inArray(defaultMode, mode) !== -1 ? defaultMode : mode[0]; + } else if (mode === false) { + return false; + } + } + return defaultMode; + }; + + + /** + Capability check that always returns true + + @private + @static + @return {True} + */ + Runtime.capTrue = function() { + return true; + }; + + /** + Capability check that always returns false + + @private + @static + @return {False} + */ + Runtime.capFalse = function() { + return false; + }; + + /** + Evaluate the expression to boolean value and create a function that always returns it. + + @private + @static + @param {Mixed} expr Expression to evaluate + @return {Function} Function returning the result of evaluation + */ + Runtime.capTest = function(expr) { + return function() { + return !!expr; + }; + }; + + return Runtime; +}); + +// Included from: src/javascript/runtime/RuntimeClient.js + +/** + * RuntimeClient.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/RuntimeClient', [ + 'moxie/core/utils/Env', + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic', + 'moxie/runtime/Runtime' +], function(Env, x, Basic, Runtime) { + /** + Set of methods and properties, required by a component to acquire ability to connect to a runtime + + @class RuntimeClient + */ + return function RuntimeClient() { + var runtime; + + Basic.extend(this, { + /** + Connects to the runtime specified by the options. Will either connect to existing runtime or create a new one. + Increments number of clients connected to the specified runtime. + + @private + @method connectRuntime + @param {Mixed} options Can be a runtme uid or a set of key-value pairs defining requirements and pre-requisites + */ + connectRuntime: function(options) { + var comp = this, ruid; + + function initialize(items) { + var type, constructor; + + // if we ran out of runtimes + if (!items.length) { + comp.trigger('RuntimeError', new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + runtime = null; + return; + } + + type = items.shift().toLowerCase(); + constructor = Runtime.getConstructor(type); + if (!constructor) { + initialize(items); + return; + } + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("Trying runtime: %s", type); + Env.log(options); + } + + // try initializing the runtime + runtime = new constructor(options); + + runtime.bind('Init', function() { + // mark runtime as initialized + runtime.initialized = true; + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("Runtime '%s' initialized", runtime.type); + } + + // jailbreak ... + setTimeout(function() { + runtime.clients++; + // this will be triggered on component + comp.trigger('RuntimeInit', runtime); + }, 1); + }); + + runtime.bind('Error', function() { + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("Runtime '%s' failed to initialize", runtime.type); + } + + runtime.destroy(); // runtime cannot destroy itself from inside at a right moment, thus we do it here + initialize(items); + }); + + /*runtime.bind('Exception', function() { });*/ + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tselected mode: %s", runtime.mode); + } + + // check if runtime managed to pick-up operational mode + if (!runtime.mode) { + runtime.trigger('Error'); + return; + } + + runtime.init(); + } + + // check if a particular runtime was requested + if (Basic.typeOf(options) === 'string') { + ruid = options; + } else if (Basic.typeOf(options.ruid) === 'string') { + ruid = options.ruid; + } + + if (ruid) { + runtime = Runtime.getRuntime(ruid); + if (runtime) { + runtime.clients++; + return runtime; + } else { + // there should be a runtime and there's none - weird case + throw new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR); + } + } + + // initialize a fresh one, that fits runtime list and required features best + initialize((options.runtime_order || Runtime.order).split(/\s*,\s*/)); + }, + + + /** + Disconnects from the runtime. Decrements number of clients connected to the specified runtime. + + @private + @method disconnectRuntime + */ + disconnectRuntime: function() { + if (runtime && --runtime.clients <= 0) { + runtime.destroy(); + } + + // once the component is disconnected, it shouldn't have access to the runtime + runtime = null; + }, + + + /** + Returns the runtime to which the client is currently connected. + + @method getRuntime + @return {Runtime} Runtime or null if client is not connected + */ + getRuntime: function() { + if (runtime && runtime.uid) { + return runtime; + } + return runtime = null; // make sure we do not leave zombies rambling around + }, + + + /** + Handy shortcut to safely invoke runtime extension methods. + + @private + @method exec + @return {Mixed} Whatever runtime extension method returns + */ + exec: function() { + if (runtime) { + return runtime.exec.apply(this, arguments); + } + return null; + } + + }); + }; + + +}); + +// Included from: src/javascript/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileInput', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Env', + 'moxie/core/utils/Mime', + 'moxie/core/utils/Dom', + 'moxie/core/Exceptions', + 'moxie/core/EventTarget', + 'moxie/core/I18n', + 'moxie/runtime/Runtime', + 'moxie/runtime/RuntimeClient' +], function(Basic, Env, Mime, Dom, x, EventTarget, I18n, Runtime, RuntimeClient) { + /** + Provides a convenient way to create cross-browser file-picker. Generates file selection dialog on click, + converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory + with _FileReader_ or uploaded to a server through _XMLHttpRequest_. + + @class FileInput + @constructor + @extends EventTarget + @uses RuntimeClient + @param {Object|String|DOMElement} options If options is string or node, argument is considered as _browse\_button_. + @param {String|DOMElement} options.browse_button DOM Element to turn into file picker. + @param {Array} [options.accept] Array of mime types to accept. By default accepts all. + @param {String} [options.file='file'] Name of the file field (not the filename). + @param {Boolean} [options.multiple=false] Enable selection of multiple files. + @param {Boolean} [options.directory=false] Turn file input into the folder input (cannot be both at the same time). + @param {String|DOMElement} [options.container] DOM Element to use as a container for file-picker. Defaults to parentNode + for _browse\_button_. + @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support. + + @example +
      + Browse... +
      + + + */ + var dispatches = [ + /** + Dispatched when runtime is connected and file-picker is ready to be used. + + @event ready + @param {Object} event + */ + 'ready', + + /** + Dispatched right after [ready](#event_ready) event, and whenever [refresh()](#method_refresh) is invoked. + Check [corresponding documentation entry](#method_refresh) for more info. + + @event refresh + @param {Object} event + */ + + /** + Dispatched when selection of files in the dialog is complete. + + @event change + @param {Object} event + */ + 'change', + + 'cancel', // TODO: might be useful + + /** + Dispatched when mouse cursor enters file-picker area. Can be used to style element + accordingly. + + @event mouseenter + @param {Object} event + */ + 'mouseenter', + + /** + Dispatched when mouse cursor leaves file-picker area. Can be used to style element + accordingly. + + @event mouseleave + @param {Object} event + */ + 'mouseleave', + + /** + Dispatched when functional mouse button is pressed on top of file-picker area. + + @event mousedown + @param {Object} event + */ + 'mousedown', + + /** + Dispatched when functional mouse button is released on top of file-picker area. + + @event mouseup + @param {Object} event + */ + 'mouseup' + ]; + + function FileInput(options) { + if (MXI_DEBUG) { + Env.log("Instantiating FileInput..."); + } + + var self = this, + container, browseButton, defaults; + + // if flat argument passed it should be browse_button id + if (Basic.inArray(Basic.typeOf(options), ['string', 'node']) !== -1) { + options = { browse_button : options }; + } + + // this will help us to find proper default container + browseButton = Dom.get(options.browse_button); + if (!browseButton) { + // browse button is required + throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); + } + + // figure out the options + defaults = { + accept: [{ + title: I18n.translate('All Files'), + extensions: '*' + }], + name: 'file', + multiple: false, + required_caps: false, + container: browseButton.parentNode || document.body + }; + + options = Basic.extend({}, defaults, options); + + // convert to object representation + if (typeof(options.required_caps) === 'string') { + options.required_caps = Runtime.parseCaps(options.required_caps); + } + + // normalize accept option (could be list of mime types or array of title/extensions pairs) + if (typeof(options.accept) === 'string') { + options.accept = Mime.mimes2extList(options.accept); + } + + container = Dom.get(options.container); + // make sure we have container + if (!container) { + container = document.body; + } + + // make container relative, if it's not + if (Dom.getStyle(container, 'position') === 'static') { + container.style.position = 'relative'; + } + + container = browseButton = null; // IE + + RuntimeClient.call(self); + + Basic.extend(self, { + /** + Unique id of the component + + @property uid + @protected + @readOnly + @type {String} + @default UID + */ + uid: Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if any. + + @property ruid + @protected + @type {String} + */ + ruid: null, + + /** + Unique id of the runtime container. Useful to get hold of it for various manipulations. + + @property shimid + @protected + @type {String} + */ + shimid: null, + + /** + Array of selected mOxie.File objects + + @property files + @type {Array} + @default null + */ + files: null, + + /** + Initializes the file-picker, connects it to runtime and dispatches event ready when done. + + @method init + */ + init: function() { + self.bind('RuntimeInit', function(e, runtime) { + self.ruid = runtime.uid; + self.shimid = runtime.shimid; + + self.bind("Ready", function() { + self.trigger("Refresh"); + }, 999); + + // re-position and resize shim container + self.bind('Refresh', function() { + var pos, size, browseButton, shimContainer; + + browseButton = Dom.get(options.browse_button); + shimContainer = Dom.get(runtime.shimid); // do not use runtime.getShimContainer(), since it will create container if it doesn't exist + + if (browseButton) { + pos = Dom.getPos(browseButton, Dom.get(options.container)); + size = Dom.getSize(browseButton); + + if (shimContainer) { + Basic.extend(shimContainer.style, { + top : pos.y + 'px', + left : pos.x + 'px', + width : size.w + 'px', + height : size.h + 'px' + }); + } + } + shimContainer = browseButton = null; + }); + + runtime.exec.call(self, 'FileInput', 'init', options); + }); + + // runtime needs: options.required_features, options.runtime_order and options.container + self.connectRuntime(Basic.extend({}, options, { + required_caps: { + select_file: true + } + })); + }, + + /** + Disables file-picker element, so that it doesn't react to mouse clicks. + + @method disable + @param {Boolean} [state=true] Disable component if - true, enable if - false + */ + disable: function(state) { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'disable', Basic.typeOf(state) === 'undefined' ? true : state); + } + }, + + + /** + Reposition and resize dialog trigger to match the position and size of browse_button element. + + @method refresh + */ + refresh: function() { + self.trigger("Refresh"); + }, + + + /** + Destroy component. + + @method destroy + */ + destroy: function() { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'destroy'); + this.disconnectRuntime(); + } + + if (Basic.typeOf(this.files) === 'array') { + // no sense in leaving associated files behind + Basic.each(this.files, function(file) { + file.destroy(); + }); + } + this.files = null; + + this.unbindAll(); + } + }); + + this.handleEventProps(dispatches); + } + + FileInput.prototype = EventTarget.instance; + + return FileInput; +}); + +// Included from: src/javascript/core/utils/Encode.js + +/** + * Encode.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Encode', [], function() { + + /** + Encode string with UTF-8 + + @method utf8_encode + @for Utils + @static + @param {String} str String to encode + @return {String} UTF-8 encoded string + */ + var utf8_encode = function(str) { + return unescape(encodeURIComponent(str)); + }; + + /** + Decode UTF-8 encoded string + + @method utf8_decode + @static + @param {String} str String to decode + @return {String} Decoded string + */ + var utf8_decode = function(str_data) { + return decodeURIComponent(escape(str_data)); + }; + + /** + Decode Base64 encoded string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_decode.js + + @method atob + @static + @param {String} data String to decode + @return {String} Decoded string + */ + var atob = function(data, utf8) { + if (typeof(window.atob) === 'function') { + return utf8 ? utf8_decode(window.atob(data)) : window.atob(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Thunder.m + // + input by: Aman Gupta + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Onno Marsman + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Brett Zamir (http://brett-zamir.me) + // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); + // * returns 1: 'Kevin van Zonneveld' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window.atob == 'function') { + // return atob(data); + //} + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + dec = "", + tmp_arr = []; + + if (!data) { + return data; + } + + data += ''; + + do { // unpack four hexets into three octets using index points in b64 + h1 = b64.indexOf(data.charAt(i++)); + h2 = b64.indexOf(data.charAt(i++)); + h3 = b64.indexOf(data.charAt(i++)); + h4 = b64.indexOf(data.charAt(i++)); + + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; + + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; + + if (h3 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1); + } else if (h4 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1, o2); + } else { + tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + } + } while (i < data.length); + + dec = tmp_arr.join(''); + + return utf8 ? utf8_decode(dec) : dec; + }; + + /** + Base64 encode string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_encode.js + + @method btoa + @static + @param {String} data String to encode + @return {String} Base64 encoded string + */ + var btoa = function(data, utf8) { + if (utf8) { + data = utf8_encode(data); + } + + if (typeof(window.btoa) === 'function') { + return window.btoa(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Bayron Guevara + // + improved by: Thunder.m + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + improved by: Rafał Kukawski (http://kukawski.pl) + // * example 1: base64_encode('Kevin van Zonneveld'); + // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' + // mozilla has this native + // - but breaks in 2.0.0.12! + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + enc = "", + tmp_arr = []; + + if (!data) { + return data; + } + + do { // pack three octets into four hexets + o1 = data.charCodeAt(i++); + o2 = data.charCodeAt(i++); + o3 = data.charCodeAt(i++); + + bits = o1 << 16 | o2 << 8 | o3; + + h1 = bits >> 18 & 0x3f; + h2 = bits >> 12 & 0x3f; + h3 = bits >> 6 & 0x3f; + h4 = bits & 0x3f; + + // use hexets to index into b64, and append result to encoded string + tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < data.length); + + enc = tmp_arr.join(''); + + var r = data.length % 3; + + return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); + }; + + + return { + utf8_encode: utf8_encode, + utf8_decode: utf8_decode, + atob: atob, + btoa: btoa + }; +}); + +// Included from: src/javascript/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/Blob', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Encode', + 'moxie/runtime/RuntimeClient' +], function(Basic, Encode, RuntimeClient) { + + var blobpool = {}; + + /** + @class Blob + @constructor + @param {String} ruid Unique id of the runtime, to which this blob belongs to + @param {Object} blob Object "Native" blob object, as it is represented in the runtime + */ + function Blob(ruid, blob) { + + function _sliceDetached(start, end, type) { + var blob, data = blobpool[this.uid]; + + if (Basic.typeOf(data) !== 'string' || !data.length) { + return null; // or throw exception + } + + blob = new Blob(null, { + type: type, + size: end - start + }); + blob.detach(data.substr(start, blob.size)); + + return blob; + } + + RuntimeClient.call(this); + + if (ruid) { + this.connectRuntime(ruid); + } + + if (!blob) { + blob = {}; + } else if (Basic.typeOf(blob) === 'string') { // dataUrl or binary string + blob = { data: blob }; + } + + Basic.extend(this, { + + /** + Unique id of the component + + @property uid + @type {String} + */ + uid: blob.uid || Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if falsy, then runtime will have to be initialized + before this Blob can be used, modified or sent + + @property ruid + @type {String} + */ + ruid: ruid, + + /** + Size of blob + + @property size + @type {Number} + @default 0 + */ + size: blob.size || 0, + + /** + Mime type of blob + + @property type + @type {String} + @default '' + */ + type: blob.type || '', + + /** + @method slice + @param {Number} [start=0] + */ + slice: function(start, end, type) { + if (this.isDetached()) { + return _sliceDetached.apply(this, arguments); + } + return this.getRuntime().exec.call(this, 'Blob', 'slice', this.getSource(), start, end, type); + }, + + /** + Returns "native" blob object (as it is represented in connected runtime) or null if not found + + @method getSource + @return {Blob} Returns "native" blob object or null if not found + */ + getSource: function() { + if (!blobpool[this.uid]) { + return null; + } + return blobpool[this.uid]; + }, + + /** + Detaches blob from any runtime that it depends on and initialize with standalone value + + @method detach + @protected + @param {DOMString} [data=''] Standalone value + */ + detach: function(data) { + if (this.ruid) { + this.getRuntime().exec.call(this, 'Blob', 'destroy'); + this.disconnectRuntime(); + this.ruid = null; + } + + data = data || ''; + + // if dataUrl, convert to binary string + if (data.substr(0, 5) == 'data:') { + var base64Offset = data.indexOf(';base64,'); + this.type = data.substring(5, base64Offset); + data = Encode.atob(data.substring(base64Offset + 8)); + } + + this.size = data.length; + + blobpool[this.uid] = data; + }, + + /** + Checks if blob is standalone (detached of any runtime) + + @method isDetached + @protected + @return {Boolean} + */ + isDetached: function() { + return !this.ruid && Basic.typeOf(blobpool[this.uid]) === 'string'; + }, + + /** + Destroy Blob and free any resources it was using + + @method destroy + */ + destroy: function() { + this.detach(); + delete blobpool[this.uid]; + } + }); + + + if (blob.data) { + this.detach(blob.data); // auto-detach if payload has been passed + } else { + blobpool[this.uid] = blob; + } + } + + return Blob; +}); + +// Included from: src/javascript/file/File.js + +/** + * File.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/File', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Mime', + 'moxie/file/Blob' +], function(Basic, Mime, Blob) { + /** + @class File + @extends Blob + @constructor + @param {String} ruid Unique id of the runtime, to which this blob belongs to + @param {Object} file Object "Native" file object, as it is represented in the runtime + */ + function File(ruid, file) { + if (!file) { // avoid extra errors in case we overlooked something + file = {}; + } + + Blob.apply(this, arguments); + + if (!this.type) { + this.type = Mime.getFileMime(file.name); + } + + // sanitize file name or generate new one + var name; + if (file.name) { + name = file.name.replace(/\\/g, '/'); + name = name.substr(name.lastIndexOf('/') + 1); + } else if (this.type) { + var prefix = this.type.split('/')[0]; + name = Basic.guid((prefix !== '' ? prefix : 'file') + '_'); + + if (Mime.extensions[this.type]) { + name += '.' + Mime.extensions[this.type][0]; // append proper extension if possible + } + } + + + Basic.extend(this, { + /** + File name + + @property name + @type {String} + @default UID + */ + name: name || Basic.guid('file_'), + + /** + Relative path to the file inside a directory + + @property relativePath + @type {String} + @default '' + */ + relativePath: '', + + /** + Date of last modification + + @property lastModifiedDate + @type {String} + @default now + */ + lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString() // Thu Aug 23 2012 19:40:00 GMT+0400 (GET) + }); + } + + File.prototype = Blob.prototype; + + return File; +}); + +// Included from: src/javascript/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileDrop', [ + 'moxie/core/I18n', + 'moxie/core/utils/Dom', + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic', + 'moxie/core/utils/Env', + 'moxie/file/File', + 'moxie/runtime/RuntimeClient', + 'moxie/core/EventTarget', + 'moxie/core/utils/Mime' +], function(I18n, Dom, x, Basic, Env, File, RuntimeClient, EventTarget, Mime) { + /** + Turn arbitrary DOM element to a drop zone accepting files. Converts selected files to _File_ objects, to be used + in conjunction with _Image_, preloaded in memory with _FileReader_ or uploaded to a server through + _XMLHttpRequest_. + + @example +
      + Drop files here +
      +
      +
      + + + + @class FileDrop + @constructor + @extends EventTarget + @uses RuntimeClient + @param {Object|String} options If options has typeof string, argument is considered as options.drop_zone + @param {String|DOMElement} options.drop_zone DOM Element to turn into a drop zone + @param {Array} [options.accept] Array of mime types to accept. By default accepts all + @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support + */ + var dispatches = [ + /** + Dispatched when runtime is connected and drop zone is ready to accept files. + + @event ready + @param {Object} event + */ + 'ready', + + /** + Dispatched when dragging cursor enters the drop zone. + + @event dragenter + @param {Object} event + */ + 'dragenter', + + /** + Dispatched when dragging cursor leaves the drop zone. + + @event dragleave + @param {Object} event + */ + 'dragleave', + + /** + Dispatched when file is dropped onto the drop zone. + + @event drop + @param {Object} event + */ + 'drop', + + /** + Dispatched if error occurs. + + @event error + @param {Object} event + */ + 'error' + ]; + + function FileDrop(options) { + if (MXI_DEBUG) { + Env.log("Instantiating FileDrop..."); + } + + var self = this, defaults; + + // if flat argument passed it should be drop_zone id + if (typeof(options) === 'string') { + options = { drop_zone : options }; + } + + // figure out the options + defaults = { + accept: [{ + title: I18n.translate('All Files'), + extensions: '*' + }], + required_caps: { + drag_and_drop: true + } + }; + + options = typeof(options) === 'object' ? Basic.extend({}, defaults, options) : defaults; + + // this will help us to find proper default container + options.container = Dom.get(options.drop_zone) || document.body; + + // make container relative, if it is not + if (Dom.getStyle(options.container, 'position') === 'static') { + options.container.style.position = 'relative'; + } + + // normalize accept option (could be list of mime types or array of title/extensions pairs) + if (typeof(options.accept) === 'string') { + options.accept = Mime.mimes2extList(options.accept); + } + + RuntimeClient.call(self); + + Basic.extend(self, { + uid: Basic.guid('uid_'), + + ruid: null, + + files: null, + + init: function() { + self.bind('RuntimeInit', function(e, runtime) { + self.ruid = runtime.uid; + runtime.exec.call(self, 'FileDrop', 'init', options); + self.dispatchEvent('ready'); + }); + + // runtime needs: options.required_features, options.runtime_order and options.container + self.connectRuntime(options); // throws RuntimeError + }, + + destroy: function() { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileDrop', 'destroy'); + this.disconnectRuntime(); + } + this.files = null; + + this.unbindAll(); + } + }); + + this.handleEventProps(dispatches); + } + + FileDrop.prototype = EventTarget.instance; + + return FileDrop; +}); + +// Included from: src/javascript/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileReader', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Encode', + 'moxie/core/Exceptions', + 'moxie/core/EventTarget', + 'moxie/file/Blob', + 'moxie/runtime/RuntimeClient' +], function(Basic, Encode, x, EventTarget, Blob, RuntimeClient) { + /** + Utility for preloading o.Blob/o.File objects in memory. By design closely follows [W3C FileReader](http://www.w3.org/TR/FileAPI/#dfn-filereader) + interface. Where possible uses native FileReader, where - not falls back to shims. + + @class FileReader + @constructor FileReader + @extends EventTarget + @uses RuntimeClient + */ + var dispatches = [ + + /** + Dispatched when the read starts. + + @event loadstart + @param {Object} event + */ + 'loadstart', + + /** + Dispatched while reading (and decoding) blob, and reporting partial Blob data (progess.loaded/progress.total). + + @event progress + @param {Object} event + */ + 'progress', + + /** + Dispatched when the read has successfully completed. + + @event load + @param {Object} event + */ + 'load', + + /** + Dispatched when the read has been aborted. For instance, by invoking the abort() method. + + @event abort + @param {Object} event + */ + 'abort', + + /** + Dispatched when the read has failed. + + @event error + @param {Object} event + */ + 'error', + + /** + Dispatched when the request has completed (either in success or failure). + + @event loadend + @param {Object} event + */ + 'loadend' + ]; + + function FileReader() { + + RuntimeClient.call(this); + + Basic.extend(this, { + /** + UID of the component instance. + + @property uid + @type {String} + */ + uid: Basic.guid('uid_'), + + /** + Contains current state of FileReader object. Can take values of FileReader.EMPTY, FileReader.LOADING + and FileReader.DONE. + + @property readyState + @type {Number} + @default FileReader.EMPTY + */ + readyState: FileReader.EMPTY, + + /** + Result of the successful read operation. + + @property result + @type {String} + */ + result: null, + + /** + Stores the error of failed asynchronous read operation. + + @property error + @type {DOMError} + */ + error: null, + + /** + Initiates reading of File/Blob object contents to binary string. + + @method readAsBinaryString + @param {Blob|File} blob Object to preload + */ + readAsBinaryString: function(blob) { + _read.call(this, 'readAsBinaryString', blob); + }, + + /** + Initiates reading of File/Blob object contents to dataURL string. + + @method readAsDataURL + @param {Blob|File} blob Object to preload + */ + readAsDataURL: function(blob) { + _read.call(this, 'readAsDataURL', blob); + }, + + /** + Initiates reading of File/Blob object contents to string. + + @method readAsText + @param {Blob|File} blob Object to preload + */ + readAsText: function(blob) { + _read.call(this, 'readAsText', blob); + }, + + /** + Aborts preloading process. + + @method abort + */ + abort: function() { + this.result = null; + + if (Basic.inArray(this.readyState, [FileReader.EMPTY, FileReader.DONE]) !== -1) { + return; + } else if (this.readyState === FileReader.LOADING) { + this.readyState = FileReader.DONE; + } + + this.exec('FileReader', 'abort'); + + this.trigger('abort'); + this.trigger('loadend'); + }, + + /** + Destroy component and release resources. + + @method destroy + */ + destroy: function() { + this.abort(); + this.exec('FileReader', 'destroy'); + this.disconnectRuntime(); + this.unbindAll(); + } + }); + + // uid must already be assigned + this.handleEventProps(dispatches); + + this.bind('Error', function(e, err) { + this.readyState = FileReader.DONE; + this.error = err; + }, 999); + + this.bind('Load', function(e) { + this.readyState = FileReader.DONE; + }, 999); + + + function _read(op, blob) { + var self = this; + + this.trigger('loadstart'); + + if (this.readyState === FileReader.LOADING) { + this.trigger('error', new x.DOMException(x.DOMException.INVALID_STATE_ERR)); + this.trigger('loadend'); + return; + } + + // if source is not o.Blob/o.File + if (!(blob instanceof Blob)) { + this.trigger('error', new x.DOMException(x.DOMException.NOT_FOUND_ERR)); + this.trigger('loadend'); + return; + } + + this.result = null; + this.readyState = FileReader.LOADING; + + if (blob.isDetached()) { + var src = blob.getSource(); + switch (op) { + case 'readAsText': + case 'readAsBinaryString': + this.result = src; + break; + case 'readAsDataURL': + this.result = 'data:' + blob.type + ';base64,' + Encode.btoa(src); + break; + } + this.readyState = FileReader.DONE; + this.trigger('load'); + this.trigger('loadend'); + } else { + this.connectRuntime(blob.ruid); + this.exec('FileReader', 'read', op, blob); + } + } + } + + /** + Initial FileReader state + + @property EMPTY + @type {Number} + @final + @static + @default 0 + */ + FileReader.EMPTY = 0; + + /** + FileReader switches to this state when it is preloading the source + + @property LOADING + @type {Number} + @final + @static + @default 1 + */ + FileReader.LOADING = 1; + + /** + Preloading is complete, this is a final state + + @property DONE + @type {Number} + @final + @static + @default 2 + */ + FileReader.DONE = 2; + + FileReader.prototype = EventTarget.instance; + + return FileReader; +}); + +// Included from: src/javascript/core/utils/Url.js + +/** + * Url.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Url', [], function() { + /** + Parse url into separate components and fill in absent parts with parts from current url, + based on https://raw.github.com/kvz/phpjs/master/functions/url/parse_url.js + + @method parseUrl + @for Utils + @static + @param {String} url Url to parse (defaults to empty string if undefined) + @return {Object} Hash containing extracted uri components + */ + var parseUrl = function(url, currentUrl) { + var key = ['source', 'scheme', 'authority', 'userInfo', 'user', 'pass', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment'] + , i = key.length + , ports = { + http: 80, + https: 443 + } + , uri = {} + , regex = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/ + , m = regex.exec(url || '') + ; + + while (i--) { + if (m[i]) { + uri[key[i]] = m[i]; + } + } + + // when url is relative, we set the origin and the path ourselves + if (!uri.scheme) { + // come up with defaults + if (!currentUrl || typeof(currentUrl) === 'string') { + currentUrl = parseUrl(currentUrl || document.location.href); + } + + uri.scheme = currentUrl.scheme; + uri.host = currentUrl.host; + uri.port = currentUrl.port; + + var path = ''; + // for urls without trailing slash we need to figure out the path + if (/^[^\/]/.test(uri.path)) { + path = currentUrl.path; + // if path ends with a filename, strip it + if (/\/[^\/]*\.[^\/]*$/.test(path)) { + path = path.replace(/\/[^\/]+$/, '/'); + } else { + // avoid double slash at the end (see #127) + path = path.replace(/\/?$/, '/'); + } + } + uri.path = path + (uri.path || ''); // site may reside at domain.com or domain.com/subdir + } + + if (!uri.port) { + uri.port = ports[uri.scheme] || 80; + } + + uri.port = parseInt(uri.port, 10); + + if (!uri.path) { + uri.path = "/"; + } + + delete uri.source; + + return uri; + }; + + /** + Resolve url - among other things will turn relative url to absolute + + @method resolveUrl + @static + @param {String|Object} url Either absolute or relative, or a result of parseUrl call + @return {String} Resolved, absolute url + */ + var resolveUrl = function(url) { + var ports = { // we ignore default ports + http: 80, + https: 443 + } + , urlp = typeof(url) === 'object' ? url : parseUrl(url); + return urlp.scheme + '://' + urlp.host + (urlp.port !== ports[urlp.scheme] ? ':' + urlp.port : '') + urlp.path + (urlp.query ? urlp.query : ''); + }; + + /** + Check if specified url has the same origin as the current document + + @method hasSameOrigin + @param {String|Object} url + @return {Boolean} + */ + var hasSameOrigin = function(url) { + function origin(url) { + return [url.scheme, url.host, url.port].join('/'); + } + + if (typeof url === 'string') { + url = parseUrl(url); + } + + return origin(parseUrl()) === origin(url); + }; + + return { + parseUrl: parseUrl, + resolveUrl: resolveUrl, + hasSameOrigin: hasSameOrigin + }; +}); + +// Included from: src/javascript/runtime/RuntimeTarget.js + +/** + * RuntimeTarget.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/RuntimeTarget', [ + 'moxie/core/utils/Basic', + 'moxie/runtime/RuntimeClient', + "moxie/core/EventTarget" +], function(Basic, RuntimeClient, EventTarget) { + /** + Instance of this class can be used as a target for the events dispatched by shims, + when allowing them onto components is for either reason inappropriate + + @class RuntimeTarget + @constructor + @protected + @extends EventTarget + */ + function RuntimeTarget() { + this.uid = Basic.guid('uid_'); + + RuntimeClient.call(this); + + this.destroy = function() { + this.disconnectRuntime(); + this.unbindAll(); + }; + } + + RuntimeTarget.prototype = EventTarget.instance; + + return RuntimeTarget; +}); + +// Included from: src/javascript/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileReaderSync', [ + 'moxie/core/utils/Basic', + 'moxie/runtime/RuntimeClient', + 'moxie/core/utils/Encode' +], function(Basic, RuntimeClient, Encode) { + /** + Synchronous FileReader implementation. Something like this is available in WebWorkers environment, here + it can be used to read only preloaded blobs/files and only below certain size (not yet sure what that'd be, + but probably < 1mb). Not meant to be used directly by user. + + @class FileReaderSync + @private + @constructor + */ + return function() { + RuntimeClient.call(this); + + Basic.extend(this, { + uid: Basic.guid('uid_'), + + readAsBinaryString: function(blob) { + return _read.call(this, 'readAsBinaryString', blob); + }, + + readAsDataURL: function(blob) { + return _read.call(this, 'readAsDataURL', blob); + }, + + /*readAsArrayBuffer: function(blob) { + return _read.call(this, 'readAsArrayBuffer', blob); + },*/ + + readAsText: function(blob) { + return _read.call(this, 'readAsText', blob); + } + }); + + function _read(op, blob) { + if (blob.isDetached()) { + var src = blob.getSource(); + switch (op) { + case 'readAsBinaryString': + return src; + case 'readAsDataURL': + return 'data:' + blob.type + ';base64,' + Encode.btoa(src); + case 'readAsText': + var txt = ''; + for (var i = 0, length = src.length; i < length; i++) { + txt += String.fromCharCode(src[i]); + } + return txt; + } + } else { + var result = this.connectRuntime(blob.ruid).exec.call(this, 'FileReaderSync', 'read', op, blob); + this.disconnectRuntime(); + return result; + } + } + }; +}); + +// Included from: src/javascript/xhr/FormData.js + +/** + * FormData.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/xhr/FormData", [ + "moxie/core/Exceptions", + "moxie/core/utils/Basic", + "moxie/file/Blob" +], function(x, Basic, Blob) { + /** + FormData + + @class FormData + @constructor + */ + function FormData() { + var _blob, _fields = []; + + Basic.extend(this, { + /** + Append another key-value pair to the FormData object + + @method append + @param {String} name Name for the new field + @param {String|Blob|Array|Object} value Value for the field + */ + append: function(name, value) { + var self = this, valueType = Basic.typeOf(value); + + // according to specs value might be either Blob or String + if (value instanceof Blob) { + _blob = { + name: name, + value: value // unfortunately we can only send single Blob in one FormData + }; + } else if ('array' === valueType) { + name += '[]'; + + Basic.each(value, function(value) { + self.append(name, value); + }); + } else if ('object' === valueType) { + Basic.each(value, function(value, key) { + self.append(name + '[' + key + ']', value); + }); + } else if ('null' === valueType || 'undefined' === valueType || 'number' === valueType && isNaN(value)) { + self.append(name, "false"); + } else { + _fields.push({ + name: name, + value: value.toString() + }); + } + }, + + /** + Checks if FormData contains Blob. + + @method hasBlob + @return {Boolean} + */ + hasBlob: function() { + return !!this.getBlob(); + }, + + /** + Retrieves blob. + + @method getBlob + @return {Object} Either Blob if found or null + */ + getBlob: function() { + return _blob && _blob.value || null; + }, + + /** + Retrieves blob field name. + + @method getBlobName + @return {String} Either Blob field name or null + */ + getBlobName: function() { + return _blob && _blob.name || null; + }, + + /** + Loop over the fields in FormData and invoke the callback for each of them. + + @method each + @param {Function} cb Callback to call for each field + */ + each: function(cb) { + Basic.each(_fields, function(field) { + cb(field.value, field.name); + }); + + if (_blob) { + cb(_blob.value, _blob.name); + } + }, + + destroy: function() { + _blob = null; + _fields = []; + } + }); + } + + return FormData; +}); + +// Included from: src/javascript/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/xhr/XMLHttpRequest", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/core/EventTarget", + "moxie/core/utils/Encode", + "moxie/core/utils/Url", + "moxie/runtime/Runtime", + "moxie/runtime/RuntimeTarget", + "moxie/file/Blob", + "moxie/file/FileReaderSync", + "moxie/xhr/FormData", + "moxie/core/utils/Env", + "moxie/core/utils/Mime" +], function(Basic, x, EventTarget, Encode, Url, Runtime, RuntimeTarget, Blob, FileReaderSync, FormData, Env, Mime) { + + var httpCode = { + 100: 'Continue', + 101: 'Switching Protocols', + 102: 'Processing', + + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + 207: 'Multi-Status', + 226: 'IM Used', + + 300: 'Multiple Choices', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 306: 'Reserved', + 307: 'Temporary Redirect', + + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + 422: 'Unprocessable Entity', + 423: 'Locked', + 424: 'Failed Dependency', + 426: 'Upgrade Required', + + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', + 506: 'Variant Also Negotiates', + 507: 'Insufficient Storage', + 510: 'Not Extended' + }; + + function XMLHttpRequestUpload() { + this.uid = Basic.guid('uid_'); + } + + XMLHttpRequestUpload.prototype = EventTarget.instance; + + /** + Implementation of XMLHttpRequest + + @class XMLHttpRequest + @constructor + @uses RuntimeClient + @extends EventTarget + */ + var dispatches = [ + 'loadstart', + + 'progress', + + 'abort', + + 'error', + + 'load', + + 'timeout', + + 'loadend' + + // readystatechange (for historical reasons) + ]; + + var NATIVE = 1, RUNTIME = 2; + + function XMLHttpRequest() { + var self = this, + // this (together with _p() @see below) is here to gracefully upgrade to setter/getter syntax where possible + props = { + /** + The amount of milliseconds a request can take before being terminated. Initially zero. Zero means there is no timeout. + + @property timeout + @type Number + @default 0 + */ + timeout: 0, + + /** + Current state, can take following values: + UNSENT (numeric value 0) + The object has been constructed. + + OPENED (numeric value 1) + The open() method has been successfully invoked. During this state request headers can be set using setRequestHeader() and the request can be made using the send() method. + + HEADERS_RECEIVED (numeric value 2) + All redirects (if any) have been followed and all HTTP headers of the final response have been received. Several response members of the object are now available. + + LOADING (numeric value 3) + The response entity body is being received. + + DONE (numeric value 4) + + @property readyState + @type Number + @default 0 (UNSENT) + */ + readyState: XMLHttpRequest.UNSENT, + + /** + True when user credentials are to be included in a cross-origin request. False when they are to be excluded + in a cross-origin request and when cookies are to be ignored in its response. Initially false. + + @property withCredentials + @type Boolean + @default false + */ + withCredentials: false, + + /** + Returns the HTTP status code. + + @property status + @type Number + @default 0 + */ + status: 0, + + /** + Returns the HTTP status text. + + @property statusText + @type String + */ + statusText: "", + + /** + Returns the response type. Can be set to change the response type. Values are: + the empty string (default), "arraybuffer", "blob", "document", "json", and "text". + + @property responseType + @type String + */ + responseType: "", + + /** + Returns the document response entity body. + + Throws an "InvalidStateError" exception if responseType is not the empty string or "document". + + @property responseXML + @type Document + */ + responseXML: null, + + /** + Returns the text response entity body. + + Throws an "InvalidStateError" exception if responseType is not the empty string or "text". + + @property responseText + @type String + */ + responseText: null, + + /** + Returns the response entity body (http://www.w3.org/TR/XMLHttpRequest/#response-entity-body). + Can become: ArrayBuffer, Blob, Document, JSON, Text + + @property response + @type Mixed + */ + response: null + }, + + _async = true, + _url, + _method, + _headers = {}, + _user, + _password, + _encoding = null, + _mimeType = null, + + // flags + _sync_flag = false, + _send_flag = false, + _upload_events_flag = false, + _upload_complete_flag = false, + _error_flag = false, + _same_origin_flag = false, + + // times + _start_time, + _timeoutset_time, + + _finalMime = null, + _finalCharset = null, + + _options = {}, + _xhr, + _responseHeaders = '', + _responseHeadersBag + ; + + + Basic.extend(this, props, { + /** + Unique id of the component + + @property uid + @type String + */ + uid: Basic.guid('uid_'), + + /** + Target for Upload events + + @property upload + @type XMLHttpRequestUpload + */ + upload: new XMLHttpRequestUpload(), + + + /** + Sets the request method, request URL, synchronous flag, request username, and request password. + + Throws a "SyntaxError" exception if one of the following is true: + + method is not a valid HTTP method. + url cannot be resolved. + url contains the "user:password" format in the userinfo production. + Throws a "SecurityError" exception if method is a case-insensitive match for CONNECT, TRACE or TRACK. + + Throws an "InvalidAccessError" exception if one of the following is true: + + Either user or password is passed as argument and the origin of url does not match the XMLHttpRequest origin. + There is an associated XMLHttpRequest document and either the timeout attribute is not zero, + the withCredentials attribute is true, or the responseType attribute is not the empty string. + + + @method open + @param {String} method HTTP method to use on request + @param {String} url URL to request + @param {Boolean} [async=true] If false request will be done in synchronous manner. Asynchronous by default. + @param {String} [user] Username to use in HTTP authentication process on server-side + @param {String} [password] Password to use in HTTP authentication process on server-side + */ + open: function(method, url, async, user, password) { + var urlp; + + // first two arguments are required + if (!method || !url) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 2 - check if any code point in method is higher than U+00FF or after deflating method it does not match the method + if (/[\u0100-\uffff]/.test(method) || Encode.utf8_encode(method) !== method) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 3 + if (!!~Basic.inArray(method.toUpperCase(), ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'TRACE', 'TRACK'])) { + _method = method.toUpperCase(); + } + + + // 4 - allowing these methods poses a security risk + if (!!~Basic.inArray(_method, ['CONNECT', 'TRACE', 'TRACK'])) { + throw new x.DOMException(x.DOMException.SECURITY_ERR); + } + + // 5 + url = Encode.utf8_encode(url); + + // 6 - Resolve url relative to the XMLHttpRequest base URL. If the algorithm returns an error, throw a "SyntaxError". + urlp = Url.parseUrl(url); + + _same_origin_flag = Url.hasSameOrigin(urlp); + + // 7 - manually build up absolute url + _url = Url.resolveUrl(url); + + // 9-10, 12-13 + if ((user || password) && !_same_origin_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + _user = user || urlp.user; + _password = password || urlp.pass; + + // 11 + _async = async || true; + + if (_async === false && (_p('timeout') || _p('withCredentials') || _p('responseType') !== "")) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 14 - terminate abort() + + // 15 - terminate send() + + // 18 + _sync_flag = !_async; + _send_flag = false; + _headers = {}; + _reset.call(this); + + // 19 + _p('readyState', XMLHttpRequest.OPENED); + + // 20 + this.dispatchEvent('readystatechange'); + }, + + /** + Appends an header to the list of author request headers, or if header is already + in the list of author request headers, combines its value with value. + + Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set. + Throws a "SyntaxError" exception if header is not a valid HTTP header field name or if value + is not a valid HTTP header field value. + + @method setRequestHeader + @param {String} header + @param {String|Number} value + */ + setRequestHeader: function(header, value) { + var uaHeaders = [ // these headers are controlled by the user agent + "accept-charset", + "accept-encoding", + "access-control-request-headers", + "access-control-request-method", + "connection", + "content-length", + "cookie", + "cookie2", + "content-transfer-encoding", + "date", + "expect", + "host", + "keep-alive", + "origin", + "referer", + "te", + "trailer", + "transfer-encoding", + "upgrade", + "user-agent", + "via" + ]; + + // 1-2 + if (_p('readyState') !== XMLHttpRequest.OPENED || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3 + if (/[\u0100-\uffff]/.test(header) || Encode.utf8_encode(header) !== header) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 4 + /* this step is seemingly bypassed in browsers, probably to allow various unicode characters in header values + if (/[\u0100-\uffff]/.test(value) || Encode.utf8_encode(value) !== value) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + }*/ + + header = Basic.trim(header).toLowerCase(); + + // setting of proxy-* and sec-* headers is prohibited by spec + if (!!~Basic.inArray(header, uaHeaders) || /^(proxy\-|sec\-)/.test(header)) { + return false; + } + + // camelize + // browsers lowercase header names (at least for custom ones) + // header = header.replace(/\b\w/g, function($1) { return $1.toUpperCase(); }); + + if (!_headers[header]) { + _headers[header] = value; + } else { + // http://tools.ietf.org/html/rfc2616#section-4.2 (last paragraph) + _headers[header] += ', ' + value; + } + return true; + }, + + /** + Returns all headers from the response, with the exception of those whose field name is Set-Cookie or Set-Cookie2. + + @method getAllResponseHeaders + @return {String} reponse headers or empty string + */ + getAllResponseHeaders: function() { + return _responseHeaders || ''; + }, + + /** + Returns the header field value from the response of which the field name matches header, + unless the field name is Set-Cookie or Set-Cookie2. + + @method getResponseHeader + @param {String} header + @return {String} value(s) for the specified header or null + */ + getResponseHeader: function(header) { + header = header.toLowerCase(); + + if (_error_flag || !!~Basic.inArray(header, ['set-cookie', 'set-cookie2'])) { + return null; + } + + if (_responseHeaders && _responseHeaders !== '') { + // if we didn't parse response headers until now, do it and keep for later + if (!_responseHeadersBag) { + _responseHeadersBag = {}; + Basic.each(_responseHeaders.split(/\r\n/), function(line) { + var pair = line.split(/:\s+/); + if (pair.length === 2) { // last line might be empty, omit + pair[0] = Basic.trim(pair[0]); // just in case + _responseHeadersBag[pair[0].toLowerCase()] = { // simply to retain header name in original form + header: pair[0], + value: Basic.trim(pair[1]) + }; + } + }); + } + if (_responseHeadersBag.hasOwnProperty(header)) { + return _responseHeadersBag[header].header + ': ' + _responseHeadersBag[header].value; + } + } + return null; + }, + + /** + Sets the Content-Type header for the response to mime. + Throws an "InvalidStateError" exception if the state is LOADING or DONE. + Throws a "SyntaxError" exception if mime is not a valid media type. + + @method overrideMimeType + @param String mime Mime type to set + */ + overrideMimeType: function(mime) { + var matches, charset; + + // 1 + if (!!~Basic.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2 + mime = Basic.trim(mime.toLowerCase()); + + if (/;/.test(mime) && (matches = mime.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))) { + mime = matches[1]; + if (matches[2]) { + charset = matches[2]; + } + } + + if (!Mime.mimes[mime]) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 3-4 + _finalMime = mime; + _finalCharset = charset; + }, + + /** + Initiates the request. The optional argument provides the request entity body. + The argument is ignored if request method is GET or HEAD. + + Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set. + + @method send + @param {Blob|Document|String|FormData} [data] Request entity body + @param {Object} [options] Set of requirements and pre-requisities for runtime initialization + */ + send: function(data, options) { + if (Basic.typeOf(options) === 'string') { + _options = { ruid: options }; + } else if (!options) { + _options = {}; + } else { + _options = options; + } + + // 1-2 + if (this.readyState !== XMLHttpRequest.OPENED || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3 + // sending Blob + if (data instanceof Blob) { + _options.ruid = data.ruid; + _mimeType = data.type || 'application/octet-stream'; + } + + // FormData + else if (data instanceof FormData) { + if (data.hasBlob()) { + var blob = data.getBlob(); + _options.ruid = blob.ruid; + _mimeType = blob.type || 'application/octet-stream'; + } + } + + // DOMString + else if (typeof data === 'string') { + _encoding = 'UTF-8'; + _mimeType = 'text/plain;charset=UTF-8'; + + // data should be converted to Unicode and encoded as UTF-8 + data = Encode.utf8_encode(data); + } + + // if withCredentials not set, but requested, set it automatically + if (!this.withCredentials) { + this.withCredentials = (_options.required_caps && _options.required_caps.send_browser_cookies) && !_same_origin_flag; + } + + // 4 - storage mutex + // 5 + _upload_events_flag = (!_sync_flag && this.upload.hasEventListener()); // DSAP + // 6 + _error_flag = false; + // 7 + _upload_complete_flag = !data; + // 8 - Asynchronous steps + if (!_sync_flag) { + // 8.1 + _send_flag = true; + // 8.2 + // this.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr + // 8.3 + //if (!_upload_complete_flag) { + // this.upload.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr + //} + } + // 8.5 - Return the send() method call, but continue running the steps in this algorithm. + _doXHR.call(this, data); + }, + + /** + Cancels any network activity. + + @method abort + */ + abort: function() { + _error_flag = true; + _sync_flag = false; + + if (!~Basic.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED, XMLHttpRequest.DONE])) { + _p('readyState', XMLHttpRequest.DONE); + _send_flag = false; + + if (_xhr) { + _xhr.getRuntime().exec.call(_xhr, 'XMLHttpRequest', 'abort', _upload_complete_flag); + } else { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + _upload_complete_flag = true; + } else { + _p('readyState', XMLHttpRequest.UNSENT); + } + }, + + destroy: function() { + if (_xhr) { + if (Basic.typeOf(_xhr.destroy) === 'function') { + _xhr.destroy(); + } + _xhr = null; + } + + this.unbindAll(); + + if (this.upload) { + this.upload.unbindAll(); + this.upload = null; + } + } + }); + + this.handleEventProps(dispatches.concat(['readystatechange'])); // for historical reasons + this.upload.handleEventProps(dispatches); + + /* this is nice, but maybe too lengthy + + // if supported by JS version, set getters/setters for specific properties + o.defineProperty(this, 'readyState', { + configurable: false, + + get: function() { + return _p('readyState'); + } + }); + + o.defineProperty(this, 'timeout', { + configurable: false, + + get: function() { + return _p('timeout'); + }, + + set: function(value) { + + if (_sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // timeout still should be measured relative to the start time of request + _timeoutset_time = (new Date).getTime(); + + _p('timeout', value); + } + }); + + // the withCredentials attribute has no effect when fetching same-origin resources + o.defineProperty(this, 'withCredentials', { + configurable: false, + + get: function() { + return _p('withCredentials'); + }, + + set: function(value) { + // 1-2 + if (!~o.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED]) || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3-4 + if (_anonymous_flag || _sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 5 + _p('withCredentials', value); + } + }); + + o.defineProperty(this, 'status', { + configurable: false, + + get: function() { + return _p('status'); + } + }); + + o.defineProperty(this, 'statusText', { + configurable: false, + + get: function() { + return _p('statusText'); + } + }); + + o.defineProperty(this, 'responseType', { + configurable: false, + + get: function() { + return _p('responseType'); + }, + + set: function(value) { + // 1 + if (!!~o.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2 + if (_sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 3 + _p('responseType', value.toLowerCase()); + } + }); + + o.defineProperty(this, 'responseText', { + configurable: false, + + get: function() { + // 1 + if (!~o.inArray(_p('responseType'), ['', 'text'])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2-3 + if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + return _p('responseText'); + } + }); + + o.defineProperty(this, 'responseXML', { + configurable: false, + + get: function() { + // 1 + if (!~o.inArray(_p('responseType'), ['', 'document'])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2-3 + if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + return _p('responseXML'); + } + }); + + o.defineProperty(this, 'response', { + configurable: false, + + get: function() { + if (!!~o.inArray(_p('responseType'), ['', 'text'])) { + if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) { + return ''; + } + } + + if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) { + return null; + } + + return _p('response'); + } + }); + + */ + + function _p(prop, value) { + if (!props.hasOwnProperty(prop)) { + return; + } + if (arguments.length === 1) { // get + return Env.can('define_property') ? props[prop] : self[prop]; + } else { // set + if (Env.can('define_property')) { + props[prop] = value; + } else { + self[prop] = value; + } + } + } + + /* + function _toASCII(str, AllowUnassigned, UseSTD3ASCIIRules) { + // TODO: http://tools.ietf.org/html/rfc3490#section-4.1 + return str.toLowerCase(); + } + */ + + + function _doXHR(data) { + var self = this; + + _start_time = new Date().getTime(); + + _xhr = new RuntimeTarget(); + + function loadEnd() { + if (_xhr) { // it could have been destroyed by now + _xhr.destroy(); + _xhr = null; + } + self.dispatchEvent('loadend'); + self = null; + } + + function exec(runtime) { + _xhr.bind('LoadStart', function(e) { + _p('readyState', XMLHttpRequest.LOADING); + self.dispatchEvent('readystatechange'); + + self.dispatchEvent(e); + + if (_upload_events_flag) { + self.upload.dispatchEvent(e); + } + }); + + _xhr.bind('Progress', function(e) { + if (_p('readyState') !== XMLHttpRequest.LOADING) { + _p('readyState', XMLHttpRequest.LOADING); // LoadStart unreliable (in Flash for example) + self.dispatchEvent('readystatechange'); + } + self.dispatchEvent(e); + }); + + _xhr.bind('UploadProgress', function(e) { + if (_upload_events_flag) { + self.upload.dispatchEvent({ + type: 'progress', + lengthComputable: false, + total: e.total, + loaded: e.loaded + }); + } + }); + + _xhr.bind('Load', function(e) { + _p('readyState', XMLHttpRequest.DONE); + _p('status', Number(runtime.exec.call(_xhr, 'XMLHttpRequest', 'getStatus') || 0)); + _p('statusText', httpCode[_p('status')] || ""); + + _p('response', runtime.exec.call(_xhr, 'XMLHttpRequest', 'getResponse', _p('responseType'))); + + if (!!~Basic.inArray(_p('responseType'), ['text', ''])) { + _p('responseText', _p('response')); + } else if (_p('responseType') === 'document') { + _p('responseXML', _p('response')); + } + + _responseHeaders = runtime.exec.call(_xhr, 'XMLHttpRequest', 'getAllResponseHeaders'); + + self.dispatchEvent('readystatechange'); + + if (_p('status') > 0) { // status 0 usually means that server is unreachable + if (_upload_events_flag) { + self.upload.dispatchEvent(e); + } + self.dispatchEvent(e); + } else { + _error_flag = true; + self.dispatchEvent('error'); + } + loadEnd(); + }); + + _xhr.bind('Abort', function(e) { + self.dispatchEvent(e); + loadEnd(); + }); + + _xhr.bind('Error', function(e) { + _error_flag = true; + _p('readyState', XMLHttpRequest.DONE); + self.dispatchEvent('readystatechange'); + _upload_complete_flag = true; + self.dispatchEvent(e); + loadEnd(); + }); + + runtime.exec.call(_xhr, 'XMLHttpRequest', 'send', { + url: _url, + method: _method, + async: _async, + user: _user, + password: _password, + headers: _headers, + mimeType: _mimeType, + encoding: _encoding, + responseType: self.responseType, + withCredentials: self.withCredentials, + options: _options + }, data); + } + + // clarify our requirements + if (typeof(_options.required_caps) === 'string') { + _options.required_caps = Runtime.parseCaps(_options.required_caps); + } + + _options.required_caps = Basic.extend({}, _options.required_caps, { + return_response_type: self.responseType + }); + + if (data instanceof FormData) { + _options.required_caps.send_multipart = true; + } + + if (!Basic.isEmptyObj(_headers)) { + _options.required_caps.send_custom_headers = true; + } + + if (!_same_origin_flag) { + _options.required_caps.do_cors = true; + } + + + if (_options.ruid) { // we do not need to wait if we can connect directly + exec(_xhr.connectRuntime(_options)); + } else { + _xhr.bind('RuntimeInit', function(e, runtime) { + exec(runtime); + }); + _xhr.bind('RuntimeError', function(e, err) { + self.dispatchEvent('RuntimeError', err); + }); + _xhr.connectRuntime(_options); + } + } + + + function _reset() { + _p('responseText', ""); + _p('responseXML', null); + _p('response', null); + _p('status', 0); + _p('statusText', ""); + _start_time = _timeoutset_time = null; + } + } + + XMLHttpRequest.UNSENT = 0; + XMLHttpRequest.OPENED = 1; + XMLHttpRequest.HEADERS_RECEIVED = 2; + XMLHttpRequest.LOADING = 3; + XMLHttpRequest.DONE = 4; + + XMLHttpRequest.prototype = EventTarget.instance; + + return XMLHttpRequest; +}); + +// Included from: src/javascript/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/runtime/Transporter", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Encode", + "moxie/runtime/RuntimeClient", + "moxie/core/EventTarget" +], function(Basic, Encode, RuntimeClient, EventTarget) { + function Transporter() { + var mod, _runtime, _data, _size, _pos, _chunk_size; + + RuntimeClient.call(this); + + Basic.extend(this, { + uid: Basic.guid('uid_'), + + state: Transporter.IDLE, + + result: null, + + transport: function(data, type, options) { + var self = this; + + options = Basic.extend({ + chunk_size: 204798 + }, options); + + // should divide by three, base64 requires this + if ((mod = options.chunk_size % 3)) { + options.chunk_size += 3 - mod; + } + + _chunk_size = options.chunk_size; + + _reset.call(this); + _data = data; + _size = data.length; + + if (Basic.typeOf(options) === 'string' || options.ruid) { + _run.call(self, type, this.connectRuntime(options)); + } else { + // we require this to run only once + var cb = function(e, runtime) { + self.unbind("RuntimeInit", cb); + _run.call(self, type, runtime); + }; + this.bind("RuntimeInit", cb); + this.connectRuntime(options); + } + }, + + abort: function() { + var self = this; + + self.state = Transporter.IDLE; + if (_runtime) { + _runtime.exec.call(self, 'Transporter', 'clear'); + self.trigger("TransportingAborted"); + } + + _reset.call(self); + }, + + + destroy: function() { + this.unbindAll(); + _runtime = null; + this.disconnectRuntime(); + _reset.call(this); + } + }); + + function _reset() { + _size = _pos = 0; + _data = this.result = null; + } + + function _run(type, runtime) { + var self = this; + + _runtime = runtime; + + //self.unbind("RuntimeInit"); + + self.bind("TransportingProgress", function(e) { + _pos = e.loaded; + + if (_pos < _size && Basic.inArray(self.state, [Transporter.IDLE, Transporter.DONE]) === -1) { + _transport.call(self); + } + }, 999); + + self.bind("TransportingComplete", function() { + _pos = _size; + self.state = Transporter.DONE; + _data = null; // clean a bit + self.result = _runtime.exec.call(self, 'Transporter', 'getAsBlob', type || ''); + }, 999); + + self.state = Transporter.BUSY; + self.trigger("TransportingStarted"); + _transport.call(self); + } + + function _transport() { + var self = this, + chunk, + bytesLeft = _size - _pos; + + if (_chunk_size > bytesLeft) { + _chunk_size = bytesLeft; + } + + chunk = Encode.btoa(_data.substr(_pos, _chunk_size)); + _runtime.exec.call(self, 'Transporter', 'receive', chunk, _size); + } + } + + Transporter.IDLE = 0; + Transporter.BUSY = 1; + Transporter.DONE = 2; + + Transporter.prototype = EventTarget.instance; + + return Transporter; +}); + +// Included from: src/javascript/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/image/Image", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/file/FileReaderSync", + "moxie/xhr/XMLHttpRequest", + "moxie/runtime/Runtime", + "moxie/runtime/RuntimeClient", + "moxie/runtime/Transporter", + "moxie/core/utils/Env", + "moxie/core/EventTarget", + "moxie/file/Blob", + "moxie/file/File", + "moxie/core/utils/Encode" +], function(Basic, Dom, x, FileReaderSync, XMLHttpRequest, Runtime, RuntimeClient, Transporter, Env, EventTarget, Blob, File, Encode) { + /** + Image preloading and manipulation utility. Additionally it provides access to image meta info (Exif, GPS) and raw binary data. + + @class Image + @constructor + @extends EventTarget + */ + var dispatches = [ + 'progress', + + /** + Dispatched when loading is complete. + + @event load + @param {Object} event + */ + 'load', + + 'error', + + /** + Dispatched when resize operation is complete. + + @event resize + @param {Object} event + */ + 'resize', + + /** + Dispatched when visual representation of the image is successfully embedded + into the corresponsing container. + + @event embedded + @param {Object} event + */ + 'embedded' + ]; + + function Image() { + + RuntimeClient.call(this); + + Basic.extend(this, { + /** + Unique id of the component + + @property uid + @type {String} + */ + uid: Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if any. + + @property ruid + @type {String} + */ + ruid: null, + + /** + Name of the file, that was used to create an image, if available. If not equals to empty string. + + @property name + @type {String} + @default "" + */ + name: "", + + /** + Size of the image in bytes. Actual value is set only after image is preloaded. + + @property size + @type {Number} + @default 0 + */ + size: 0, + + /** + Width of the image. Actual value is set only after image is preloaded. + + @property width + @type {Number} + @default 0 + */ + width: 0, + + /** + Height of the image. Actual value is set only after image is preloaded. + + @property height + @type {Number} + @default 0 + */ + height: 0, + + /** + Mime type of the image. Currently only image/jpeg and image/png are supported. Actual value is set only after image is preloaded. + + @property type + @type {String} + @default "" + */ + type: "", + + /** + Holds meta info (Exif, GPS). Is populated only for image/jpeg. Actual value is set only after image is preloaded. + + @property meta + @type {Object} + @default {} + */ + meta: {}, + + /** + Alias for load method, that takes another mOxie.Image object as a source (see load). + + @method clone + @param {Image} src Source for the image + @param {Boolean} [exact=false] Whether to activate in-depth clone mode + */ + clone: function() { + this.load.apply(this, arguments); + }, + + /** + Loads image from various sources. Currently the source for new image can be: mOxie.Image, mOxie.Blob/mOxie.File, + native Blob/File, dataUrl or URL. Depending on the type of the source, arguments - differ. When source is URL, + Image will be downloaded from remote destination and loaded in memory. + + @example + var img = new mOxie.Image(); + img.onload = function() { + var blob = img.getAsBlob(); + + var formData = new mOxie.FormData(); + formData.append('file', blob); + + var xhr = new mOxie.XMLHttpRequest(); + xhr.onload = function() { + // upload complete + }; + xhr.open('post', 'upload.php'); + xhr.send(formData); + }; + img.load("http://www.moxiecode.com/images/mox-logo.jpg"); // notice file extension (.jpg) + + + @method load + @param {Image|Blob|File|String} src Source for the image + @param {Boolean|Object} [mixed] + */ + load: function() { + _load.apply(this, arguments); + }, + + /** + Downsizes the image to fit the specified width/height. If crop is supplied, image will be cropped to exact dimensions. + + @method downsize + @param {Object} opts + @param {Number} opts.width Resulting width + @param {Number} [opts.height=width] Resulting height (optional, if not supplied will default to width) + @param {Boolean} [opts.crop=false] Whether to crop the image to exact dimensions + @param {Boolean} [opts.preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + @param {String} [opts.resample=false] Resampling algorithm to use for resizing + */ + downsize: function(opts) { + var defaults = { + width: this.width, + height: this.height, + type: this.type || 'image/jpeg', + quality: 90, + crop: false, + preserveHeaders: true, + resample: false + }; + + if (typeof(opts) === 'object') { + opts = Basic.extend(defaults, opts); + } else { + // for backward compatibility + opts = Basic.extend(defaults, { + width: arguments[0], + height: arguments[1], + crop: arguments[2], + preserveHeaders: arguments[3] + }); + } + + try { + if (!this.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // no way to reliably intercept the crash due to high resolution, so we simply avoid it + if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) { + throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); + } + + this.exec('Image', 'downsize', opts.width, opts.height, opts.crop, opts.preserveHeaders); + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex.code); + } + }, + + /** + Alias for downsize(width, height, true). (see downsize) + + @method crop + @param {Number} width Resulting width + @param {Number} [height=width] Resulting height (optional, if not supplied will default to width) + @param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + */ + crop: function(width, height, preserveHeaders) { + this.downsize(width, height, true, preserveHeaders); + }, + + getAsCanvas: function() { + if (!Env.can('create_canvas')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + var runtime = this.connectRuntime(this.ruid); + return runtime.exec.call(this, 'Image', 'getAsCanvas'); + }, + + /** + Retrieves image in it's current state as mOxie.Blob object. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsBlob + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {Blob} Image as Blob + */ + getAsBlob: function(type, quality) { + if (!this.size) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + return this.exec('Image', 'getAsBlob', type || 'image/jpeg', quality || 90); + }, + + /** + Retrieves image in it's current state as dataURL string. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsDataURL + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {String} Image as dataURL string + */ + getAsDataURL: function(type, quality) { + if (!this.size) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + return this.exec('Image', 'getAsDataURL', type || 'image/jpeg', quality || 90); + }, + + /** + Retrieves image in it's current state as binary string. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsBinaryString + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {String} Image as binary string + */ + getAsBinaryString: function(type, quality) { + var dataUrl = this.getAsDataURL(type, quality); + return Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)); + }, + + /** + Embeds a visual representation of the image into the specified node. Depending on the runtime, + it might be a canvas, an img node or a thrid party shim object (Flash or SilverLight - very rare, + can be used in legacy browsers that do not have canvas or proper dataURI support). + + @method embed + @param {DOMElement} el DOM element to insert the image object into + @param {Object} [opts] + @param {Number} [opts.width] The width of an embed (defaults to the image width) + @param {Number} [opts.height] The height of an embed (defaults to the image height) + @param {String} [type="image/jpeg"] Mime type + @param {Number} [quality=90] Quality of an embed, if mime type is image/jpeg + @param {Boolean} [crop=false] Whether to crop an embed to the specified dimensions + */ + embed: function(el, opts) { + var self = this + , runtime // this has to be outside of all the closures to contain proper runtime + ; + + opts = Basic.extend({ + width: this.width, + height: this.height, + type: this.type || 'image/jpeg', + quality: 90 + }, opts || {}); + + + function render(type, quality) { + var img = this; + + // if possible, embed a canvas element directly + if (Env.can('create_canvas')) { + var canvas = img.getAsCanvas(); + if (canvas) { + el.appendChild(canvas); + canvas = null; + img.destroy(); + self.trigger('embedded'); + return; + } + } + + var dataUrl = img.getAsDataURL(type, quality); + if (!dataUrl) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + + if (Env.can('use_data_uri_of', dataUrl.length)) { + el.innerHTML = ''; + img.destroy(); + self.trigger('embedded'); + } else { + var tr = new Transporter(); + + tr.bind("TransportingComplete", function() { + runtime = self.connectRuntime(this.result.ruid); + + self.bind("Embedded", function() { + // position and size properly + Basic.extend(runtime.getShimContainer().style, { + //position: 'relative', + top: '0px', + left: '0px', + width: img.width + 'px', + height: img.height + 'px' + }); + + // some shims (Flash/SilverLight) reinitialize, if parent element is hidden, reordered or it's + // position type changes (in Gecko), but since we basically need this only in IEs 6/7 and + // sometimes 8 and they do not have this problem, we can comment this for now + /*tr.bind("RuntimeInit", function(e, runtime) { + tr.destroy(); + runtime.destroy(); + onResize.call(self); // re-feed our image data + });*/ + + runtime = null; // release + }, 999); + + runtime.exec.call(self, "ImageView", "display", this.result.uid, width, height); + img.destroy(); + }); + + tr.transport(Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)), type, { + required_caps: { + display_media: true + }, + runtime_order: 'flash,silverlight', + container: el + }); + } + } + + try { + if (!(el = Dom.get(el))) { + throw new x.DOMException(x.DOMException.INVALID_NODE_TYPE_ERR); + } + + if (!this.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // high-resolution images cannot be consistently handled across the runtimes + if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) { + //throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); + } + + var imgCopy = new Image(); + + imgCopy.bind("Resize", function() { + render.call(this, opts.type, opts.quality); + }); + + imgCopy.bind("Load", function() { + imgCopy.downsize(opts); + }); + + // if embedded thumb data is available and dimensions are big enough, use it + if (this.meta.thumb && this.meta.thumb.width >= opts.width && this.meta.thumb.height >= opts.height) { + imgCopy.load(this.meta.thumb.data); + } else { + imgCopy.clone(this, false); + } + + return imgCopy; + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex.code); + } + }, + + /** + Properly destroys the image and frees resources in use. If any. Recommended way to dispose mOxie.Image object. + + @method destroy + */ + destroy: function() { + if (this.ruid) { + this.getRuntime().exec.call(this, 'Image', 'destroy'); + this.disconnectRuntime(); + } + this.unbindAll(); + } + }); + + + // this is here, because in order to bind properly, we need uid, which is created above + this.handleEventProps(dispatches); + + this.bind('Load Resize', function() { + _updateInfo.call(this); + }, 999); + + + function _updateInfo(info) { + if (!info) { + info = this.exec('Image', 'getInfo'); + } + + this.size = info.size; + this.width = info.width; + this.height = info.height; + this.type = info.type; + this.meta = info.meta; + + // update file name, only if empty + if (this.name === '') { + this.name = info.name; + } + } + + + function _load(src) { + var srcType = Basic.typeOf(src); + + try { + // if source is Image + if (src instanceof Image) { + if (!src.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + _loadFromImage.apply(this, arguments); + } + // if source is o.Blob/o.File + else if (src instanceof Blob) { + if (!~Basic.inArray(src.type, ['image/jpeg', 'image/png'])) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + _loadFromBlob.apply(this, arguments); + } + // if native blob/file + else if (Basic.inArray(srcType, ['blob', 'file']) !== -1) { + _load.call(this, new File(null, src), arguments[1]); + } + // if String + else if (srcType === 'string') { + // if dataUrl String + if (src.substr(0, 5) === 'data:') { + _load.call(this, new Blob(null, { data: src }), arguments[1]); + } + // else assume Url, either relative or absolute + else { + _loadFromUrl.apply(this, arguments); + } + } + // if source seems to be an img node + else if (srcType === 'node' && src.nodeName.toLowerCase() === 'img') { + _load.call(this, src.src, arguments[1]); + } + else { + throw new x.DOMException(x.DOMException.TYPE_MISMATCH_ERR); + } + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex.code); + } + } + + + function _loadFromImage(img, exact) { + var runtime = this.connectRuntime(img.ruid); + this.ruid = runtime.uid; + runtime.exec.call(this, 'Image', 'loadFromImage', img, (Basic.typeOf(exact) === 'undefined' ? true : exact)); + } + + + function _loadFromBlob(blob, options) { + var self = this; + + self.name = blob.name || ''; + + function exec(runtime) { + self.ruid = runtime.uid; + runtime.exec.call(self, 'Image', 'loadFromBlob', blob); + } + + if (blob.isDetached()) { + this.bind('RuntimeInit', function(e, runtime) { + exec(runtime); + }); + + // convert to object representation + if (options && typeof(options.required_caps) === 'string') { + options.required_caps = Runtime.parseCaps(options.required_caps); + } + + this.connectRuntime(Basic.extend({ + required_caps: { + access_image_binary: true, + resize_image: true + } + }, options)); + } else { + exec(this.connectRuntime(blob.ruid)); + } + } + + + function _loadFromUrl(url, options) { + var self = this, xhr; + + xhr = new XMLHttpRequest(); + + xhr.open('get', url); + xhr.responseType = 'blob'; + + xhr.onprogress = function(e) { + self.trigger(e); + }; + + xhr.onload = function() { + _loadFromBlob.call(self, xhr.response, true); + }; + + xhr.onerror = function(e) { + self.trigger(e); + }; + + xhr.onloadend = function() { + xhr.destroy(); + }; + + xhr.bind('RuntimeError', function(e, err) { + self.trigger('RuntimeError', err); + }); + + xhr.send(null, options); + } + } + + // virtual world will crash on you if image has a resolution higher than this: + Image.MAX_RESIZE_WIDTH = 8192; + Image.MAX_RESIZE_HEIGHT = 8192; + + Image.prototype = EventTarget.instance; + + return Image; +}); + +// Included from: src/javascript/runtime/html5/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global File:true */ + +/** +Defines constructor for HTML5 runtime. + +@class moxie/runtime/html5/Runtime +@private +*/ +define("moxie/runtime/html5/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/Runtime", + "moxie/core/utils/Env" +], function(Basic, x, Runtime, Env) { + + var type = "html5", extensions = {}; + + function Html5Runtime(options) { + var I = this + , Test = Runtime.capTest + , True = Runtime.capTrue + ; + + var caps = Basic.extend({ + access_binary: Test(window.FileReader || window.File && window.File.getAsDataURL), + access_image_binary: function() { + return I.can('access_binary') && !!extensions.Image; + }, + display_media: Test(Env.can('create_canvas') || Env.can('use_data_uri_over32kb')), + do_cors: Test(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()), + drag_and_drop: Test(function() { + // this comes directly from Modernizr: http://www.modernizr.com/ + var div = document.createElement('div'); + // IE has support for drag and drop since version 5, but doesn't support dropping files from desktop + return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && + (Env.browser !== 'IE' || Env.verComp(Env.version, 9, '>')); + }()), + filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest + return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + (Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>=')); + }()), + return_response_headers: True, + return_response_type: function(responseType) { + if (responseType === 'json' && !!window.JSON) { // we can fake this one even if it's not supported + return true; + } + return Env.can('return_response_type', responseType); + }, + return_status_code: True, + report_upload_progress: Test(window.XMLHttpRequest && new XMLHttpRequest().upload), + resize_image: function() { + return I.can('access_binary') && Env.can('create_canvas'); + }, + select_file: function() { + return Env.can('use_fileinput') && window.File; + }, + select_folder: function() { + return I.can('select_file') && Env.browser === 'Chrome' && Env.verComp(Env.version, 21, '>='); + }, + select_multiple: function() { + // it is buggy on Safari Windows and iOS + return I.can('select_file') && + !(Env.browser === 'Safari' && Env.os === 'Windows') && + !(Env.os === 'iOS' && Env.verComp(Env.osVersion, "7.0.0", '>') && Env.verComp(Env.osVersion, "8.0.0", '<')); + }, + send_binary_string: Test(window.XMLHttpRequest && (new XMLHttpRequest().sendAsBinary || (window.Uint8Array && window.ArrayBuffer))), + send_custom_headers: Test(window.XMLHttpRequest), + send_multipart: function() { + return !!(window.XMLHttpRequest && new XMLHttpRequest().upload && window.FormData) || I.can('send_binary_string'); + }, + slice_blob: Test(window.File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice)), + stream_upload: function(){ + return I.can('slice_blob') && I.can('send_multipart'); + }, + summon_file_dialog: function() { // yeah... some dirty sniffing here... + return I.can('select_file') && ( + (Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) || + (Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']) + ); + }, + upload_filesize: True + }, + arguments[2] + ); + + Runtime.call(this, options, (arguments[1] || type), caps); + + + Basic.extend(this, { + + init : function() { + this.trigger("Init"); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + destroy = I = null; + }; + }(this.destroy)) + }); + + Basic.extend(this.getShim(), extensions); + } + + Runtime.addConstructor(type, Html5Runtime); + + return extensions; +}); + +// Included from: src/javascript/core/utils/Events.js + +/** + * Events.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Events', [ + 'moxie/core/utils/Basic' +], function(Basic) { + var eventhash = {}, uid = 'moxie_' + Basic.guid(); + + // IE W3C like event funcs + function preventDefault() { + this.returnValue = false; + } + + function stopPropagation() { + this.cancelBubble = true; + } + + /** + Adds an event handler to the specified object and store reference to the handler + in objects internal Plupload registry (@see removeEvent). + + @method addEvent + @for Utils + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Name to add event listener to. + @param {Function} callback Function to call when event occurs. + @param {String} [key] that might be used to add specifity to the event record. + */ + var addEvent = function(obj, name, callback, key) { + var func, events; + + name = name.toLowerCase(); + + // Add event listener + if (obj.addEventListener) { + func = callback; + + obj.addEventListener(name, func, false); + } else if (obj.attachEvent) { + func = function() { + var evt = window.event; + + if (!evt.target) { + evt.target = evt.srcElement; + } + + evt.preventDefault = preventDefault; + evt.stopPropagation = stopPropagation; + + callback(evt); + }; + + obj.attachEvent('on' + name, func); + } + + // Log event handler to objects internal mOxie registry + if (!obj[uid]) { + obj[uid] = Basic.guid(); + } + + if (!eventhash.hasOwnProperty(obj[uid])) { + eventhash[obj[uid]] = {}; + } + + events = eventhash[obj[uid]]; + + if (!events.hasOwnProperty(name)) { + events[name] = []; + } + + events[name].push({ + func: func, + orig: callback, // store original callback for IE + key: key + }); + }; + + + /** + Remove event handler from the specified object. If third argument (callback) + is not specified remove all events with the specified name. + + @method removeEvent + @static + @param {Object} obj DOM element to remove event listener(s) from. + @param {String} name Name of event listener to remove. + @param {Function|String} [callback] might be a callback or unique key to match. + */ + var removeEvent = function(obj, name, callback) { + var type, undef; + + name = name.toLowerCase(); + + if (obj[uid] && eventhash[obj[uid]] && eventhash[obj[uid]][name]) { + type = eventhash[obj[uid]][name]; + } else { + return; + } + + for (var i = type.length - 1; i >= 0; i--) { + // undefined or not, key should match + if (type[i].orig === callback || type[i].key === callback) { + if (obj.removeEventListener) { + obj.removeEventListener(name, type[i].func, false); + } else if (obj.detachEvent) { + obj.detachEvent('on'+name, type[i].func); + } + + type[i].orig = null; + type[i].func = null; + type.splice(i, 1); + + // If callback was passed we are done here, otherwise proceed + if (callback !== undef) { + break; + } + } + } + + // If event array got empty, remove it + if (!type.length) { + delete eventhash[obj[uid]][name]; + } + + // If mOxie registry has become empty, remove it + if (Basic.isEmptyObj(eventhash[obj[uid]])) { + delete eventhash[obj[uid]]; + + // IE doesn't let you remove DOM object property with - delete + try { + delete obj[uid]; + } catch(e) { + obj[uid] = undef; + } + } + }; + + + /** + Remove all kind of events from the specified object + + @method removeAllEvents + @static + @param {Object} obj DOM element to remove event listeners from. + @param {String} [key] unique key to match, when removing events. + */ + var removeAllEvents = function(obj, key) { + if (!obj || !obj[uid]) { + return; + } + + Basic.each(eventhash[obj[uid]], function(events, name) { + removeEvent(obj, name, key); + }); + }; + + return { + addEvent: addEvent, + removeEvent: removeEvent, + removeAllEvents: removeAllEvents + }; +}); + +// Included from: src/javascript/runtime/html5/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileInput +@private +*/ +define("moxie/runtime/html5/file/FileInput", [ + "moxie/runtime/html5/Runtime", + "moxie/file/File", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, File, Basic, Dom, Events, Mime, Env) { + + function FileInput() { + var _options; + + Basic.extend(this, { + init: function(options) { + var comp = this, I = comp.getRuntime(), input, shimContainer, mimes, browseButton, zIndex, top; + + _options = options; + + // figure out accept string + mimes = _options.accept.mimes || Mime.extList2mimes(_options.accept, I.can('filter_by_extension')); + + shimContainer = I.getShimContainer(); + + shimContainer.innerHTML = ''; + + input = Dom.get(I.uid); + + // prepare file input to be placed underneath the browse_button element + Basic.extend(input.style, { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + + browseButton = Dom.get(_options.browse_button); + + // Route click event to the input[type=file] element for browsers that support such behavior + if (I.can('summon_file_dialog')) { + if (Dom.getStyle(browseButton, 'position') === 'static') { + browseButton.style.position = 'relative'; + } + + zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1; + + browseButton.style.zIndex = zIndex; + shimContainer.style.zIndex = zIndex - 1; + + Events.addEvent(browseButton, 'click', function(e) { + var input = Dom.get(I.uid); + if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] + input.click(); + } + e.preventDefault(); + }, comp.uid); + } + + /* Since we have to place input[type=file] on top of the browse_button for some browsers, + browse_button loses interactivity, so we restore it here */ + top = I.can('summon_file_dialog') ? browseButton : shimContainer; + + Events.addEvent(top, 'mouseover', function() { + comp.trigger('mouseenter'); + }, comp.uid); + + Events.addEvent(top, 'mouseout', function() { + comp.trigger('mouseleave'); + }, comp.uid); + + Events.addEvent(top, 'mousedown', function() { + comp.trigger('mousedown'); + }, comp.uid); + + Events.addEvent(Dom.get(_options.container), 'mouseup', function() { + comp.trigger('mouseup'); + }, comp.uid); + + + input.onchange = function onChange(e) { // there should be only one handler for this + comp.files = []; + + Basic.each(this.files, function(file) { + var relativePath = ''; + + if (_options.directory) { + // folders are represented by dots, filter them out (Chrome 11+) + if (file.name == ".") { + // if it looks like a folder... + return true; + } + } + + if (file.webkitRelativePath) { + relativePath = '/' + file.webkitRelativePath.replace(/^\//, ''); + } + + file = new File(I.uid, file); + file.relativePath = relativePath; + + comp.files.push(file); + }); + + // clearing the value enables the user to select the same file again if they want to + if (Env.browser !== 'IE' && Env.browser !== 'IEMobile') { + this.value = ''; + } else { + // in IE input[type="file"] is read-only so the only way to reset it is to re-insert it + var clone = this.cloneNode(true); + this.parentNode.replaceChild(clone, this); + clone.onchange = onChange; + } + + if (comp.files.length) { + comp.trigger('change'); + } + }; + + // ready event is perfectly asynchronous + comp.trigger({ + type: 'ready', + async: true + }); + + shimContainer = null; + }, + + + disable: function(state) { + var I = this.getRuntime(), input; + + if ((input = Dom.get(I.uid))) { + input.disabled = !!state; + } + }, + + destroy: function() { + var I = this.getRuntime() + , shim = I.getShim() + , shimContainer = I.getShimContainer() + ; + + Events.removeAllEvents(shimContainer, this.uid); + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid); + + if (shimContainer) { + shimContainer.innerHTML = ''; + } + + shim.removeInstance(this.uid); + + _options = shimContainer = shim = null; + } + }); + } + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/html5/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/Blob +@private +*/ +define("moxie/runtime/html5/file/Blob", [ + "moxie/runtime/html5/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + function HTML5Blob() { + function w3cBlobSlice(blob, start, end) { + var blobSlice; + + if (window.File.prototype.slice) { + try { + blob.slice(); // depricated version will throw WRONG_ARGUMENTS_ERR exception + return blob.slice(start, end); + } catch (e) { + // depricated slice method + return blob.slice(start, end - start); + } + // slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672 + } else if ((blobSlice = window.File.prototype.webkitSlice || window.File.prototype.mozSlice)) { + return blobSlice.call(blob, start, end); + } else { + return null; // or throw some exception + } + } + + this.slice = function() { + return new Blob(this.getRuntime().uid, w3cBlobSlice.apply(this, arguments)); + }; + } + + return (extensions.Blob = HTML5Blob); +}); + +// Included from: src/javascript/runtime/html5/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileDrop +@private +*/ +define("moxie/runtime/html5/file/FileDrop", [ + "moxie/runtime/html5/Runtime", + 'moxie/file/File', + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime" +], function(extensions, File, Basic, Dom, Events, Mime) { + + function FileDrop() { + var _files = [], _allowedExts = [], _options, _ruid; + + Basic.extend(this, { + init: function(options) { + var comp = this, dropZone; + + _options = options; + _ruid = comp.ruid; // every dropped-in file should have a reference to the runtime + _allowedExts = _extractExts(_options.accept); + dropZone = _options.container; + + Events.addEvent(dropZone, 'dragover', function(e) { + if (!_hasFiles(e)) { + return; + } + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + }, comp.uid); + + Events.addEvent(dropZone, 'drop', function(e) { + if (!_hasFiles(e)) { + return; + } + e.preventDefault(); + + _files = []; + + // Chrome 21+ accepts folders via Drag'n'Drop + if (e.dataTransfer.items && e.dataTransfer.items[0].webkitGetAsEntry) { + _readItems(e.dataTransfer.items, function() { + comp.files = _files; + comp.trigger("drop"); + }); + } else { + Basic.each(e.dataTransfer.files, function(file) { + _addFile(file); + }); + comp.files = _files; + comp.trigger("drop"); + } + }, comp.uid); + + Events.addEvent(dropZone, 'dragenter', function(e) { + comp.trigger("dragenter"); + }, comp.uid); + + Events.addEvent(dropZone, 'dragleave', function(e) { + comp.trigger("dragleave"); + }, comp.uid); + }, + + destroy: function() { + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + _ruid = _files = _allowedExts = _options = null; + } + }); + + + function _hasFiles(e) { + if (!e.dataTransfer || !e.dataTransfer.types) { // e.dataTransfer.files is not available in Gecko during dragover + return false; + } + + var types = Basic.toArray(e.dataTransfer.types || []); + + return Basic.inArray("Files", types) !== -1 || + Basic.inArray("public.file-url", types) !== -1 || // Safari < 5 + Basic.inArray("application/x-moz-file", types) !== -1 // Gecko < 1.9.2 (< Firefox 3.6) + ; + } + + + function _addFile(file, relativePath) { + if (_isAcceptable(file)) { + var fileObj = new File(_ruid, file); + fileObj.relativePath = relativePath || ''; + _files.push(fileObj); + } + } + + + function _extractExts(accept) { + var exts = []; + for (var i = 0; i < accept.length; i++) { + [].push.apply(exts, accept[i].extensions.split(/\s*,\s*/)); + } + return Basic.inArray('*', exts) === -1 ? exts : []; + } + + + function _isAcceptable(file) { + if (!_allowedExts.length) { + return true; + } + var ext = Mime.getFileExtension(file.name); + return !ext || Basic.inArray(ext, _allowedExts) !== -1; + } + + + function _readItems(items, cb) { + var entries = []; + Basic.each(items, function(item) { + var entry = item.webkitGetAsEntry(); + // Address #998 (https://code.google.com/p/chromium/issues/detail?id=332579) + if (entry) { + // file() fails on OSX when the filename contains a special character (e.g. umlaut): see #61 + if (entry.isFile) { + _addFile(item.getAsFile(), entry.fullPath); + } else { + entries.push(entry); + } + } + }); + + if (entries.length) { + _readEntries(entries, cb); + } else { + cb(); + } + } + + + function _readEntries(entries, cb) { + var queue = []; + Basic.each(entries, function(entry) { + queue.push(function(cbcb) { + _readEntry(entry, cbcb); + }); + }); + Basic.inSeries(queue, function() { + cb(); + }); + } + + + function _readEntry(entry, cb) { + if (entry.isFile) { + entry.file(function(file) { + _addFile(file, entry.fullPath); + cb(); + }, function() { + // fire an error event maybe + cb(); + }); + } else if (entry.isDirectory) { + _readDirEntry(entry, cb); + } else { + cb(); // not file, not directory? what then?.. + } + } + + + function _readDirEntry(dirEntry, cb) { + var entries = [], dirReader = dirEntry.createReader(); + + // keep quering recursively till no more entries + function getEntries(cbcb) { + dirReader.readEntries(function(moreEntries) { + if (moreEntries.length) { + [].push.apply(entries, moreEntries); + getEntries(cbcb); + } else { + cbcb(); + } + }, cbcb); + } + + // ...and you thought FileReader was crazy... + getEntries(function() { + _readEntries(entries, cb); + }); + } + } + + return (extensions.FileDrop = FileDrop); +}); + +// Included from: src/javascript/runtime/html5/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileReader +@private +*/ +define("moxie/runtime/html5/file/FileReader", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Encode", + "moxie/core/utils/Basic" +], function(extensions, Encode, Basic) { + + function FileReader() { + var _fr, _convertToBinary = false; + + Basic.extend(this, { + + read: function(op, blob) { + var comp = this; + + comp.result = ''; + + _fr = new window.FileReader(); + + _fr.addEventListener('progress', function(e) { + comp.trigger(e); + }); + + _fr.addEventListener('load', function(e) { + comp.result = _convertToBinary ? _toBinary(_fr.result) : _fr.result; + comp.trigger(e); + }); + + _fr.addEventListener('error', function(e) { + comp.trigger(e, _fr.error); + }); + + _fr.addEventListener('loadend', function(e) { + _fr = null; + comp.trigger(e); + }); + + if (Basic.typeOf(_fr[op]) === 'function') { + _convertToBinary = false; + _fr[op](blob.getSource()); + } else if (op === 'readAsBinaryString') { // readAsBinaryString is depricated in general and never existed in IE10+ + _convertToBinary = true; + _fr.readAsDataURL(blob.getSource()); + } + }, + + abort: function() { + if (_fr) { + _fr.abort(); + } + }, + + destroy: function() { + _fr = null; + } + }); + + function _toBinary(str) { + return Encode.atob(str.substring(str.indexOf('base64,') + 7)); + } + } + + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/html5/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +@class moxie/runtime/html5/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/html5/xhr/XMLHttpRequest", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Mime", + "moxie/core/utils/Url", + "moxie/file/File", + "moxie/file/Blob", + "moxie/xhr/FormData", + "moxie/core/Exceptions", + "moxie/core/utils/Env" +], function(extensions, Basic, Mime, Url, File, Blob, FormData, x, Env) { + + function XMLHttpRequest() { + var self = this + , _xhr + , _filename + ; + + Basic.extend(this, { + send: function(meta, data) { + var target = this + , isGecko2_5_6 = (Env.browser === 'Mozilla' && Env.verComp(Env.version, 4, '>=') && Env.verComp(Env.version, 7, '<')) + , isAndroidBrowser = Env.browser === 'Android Browser' + , mustSendAsBinary = false + ; + + // extract file name + _filename = meta.url.replace(/^.+?\/([\w\-\.]+)$/, '$1').toLowerCase(); + + _xhr = _getNativeXHR(); + _xhr.open(meta.method, meta.url, meta.async, meta.user, meta.password); + + + // prepare data to be sent + if (data instanceof Blob) { + if (data.isDetached()) { + mustSendAsBinary = true; + } + data = data.getSource(); + } else if (data instanceof FormData) { + + if (data.hasBlob()) { + if (data.getBlob().isDetached()) { + data = _prepareMultipart.call(target, data); // _xhr must be instantiated and be in OPENED state + mustSendAsBinary = true; + } else if ((isGecko2_5_6 || isAndroidBrowser) && Basic.typeOf(data.getBlob().getSource()) === 'blob' && window.FileReader) { + // Gecko 2/5/6 can't send blob in FormData: https://bugzilla.mozilla.org/show_bug.cgi?id=649150 + // Android browsers (default one and Dolphin) seem to have the same issue, see: #613 + _preloadAndSend.call(target, meta, data); + return; // _preloadAndSend will reinvoke send() with transmutated FormData =%D + } + } + + // transfer fields to real FormData + if (data instanceof FormData) { // if still a FormData, e.g. not mangled by _prepareMultipart() + var fd = new window.FormData(); + data.each(function(value, name) { + if (value instanceof Blob) { + fd.append(name, value.getSource()); + } else { + fd.append(name, value); + } + }); + data = fd; + } + } + + + // if XHR L2 + if (_xhr.upload) { + if (meta.withCredentials) { + _xhr.withCredentials = true; + } + + _xhr.addEventListener('load', function(e) { + target.trigger(e); + }); + + _xhr.addEventListener('error', function(e) { + target.trigger(e); + }); + + // additionally listen to progress events + _xhr.addEventListener('progress', function(e) { + target.trigger(e); + }); + + _xhr.upload.addEventListener('progress', function(e) { + target.trigger({ + type: 'UploadProgress', + loaded: e.loaded, + total: e.total + }); + }); + // ... otherwise simulate XHR L2 + } else { + _xhr.onreadystatechange = function onReadyStateChange() { + + // fake Level 2 events + switch (_xhr.readyState) { + + case 1: // XMLHttpRequest.OPENED + // readystatechanged is fired twice for OPENED state (in IE and Mozilla) - neu + break; + + // looks like HEADERS_RECEIVED (state 2) is not reported in Opera (or it's old versions) - neu + case 2: // XMLHttpRequest.HEADERS_RECEIVED + break; + + case 3: // XMLHttpRequest.LOADING + // try to fire progress event for not XHR L2 + var total, loaded; + + try { + if (Url.hasSameOrigin(meta.url)) { // Content-Length not accessible for cross-domain on some browsers + total = _xhr.getResponseHeader('Content-Length') || 0; // old Safari throws an exception here + } + + if (_xhr.responseText) { // responseText was introduced in IE7 + loaded = _xhr.responseText.length; + } + } catch(ex) { + total = loaded = 0; + } + + target.trigger({ + type: 'progress', + lengthComputable: !!total, + total: parseInt(total, 10), + loaded: loaded + }); + break; + + case 4: // XMLHttpRequest.DONE + // release readystatechange handler (mostly for IE) + _xhr.onreadystatechange = function() {}; + + // usually status 0 is returned when server is unreachable, but FF also fails to status 0 for 408 timeout + if (_xhr.status === 0) { + target.trigger('error'); + } else { + target.trigger('load'); + } + break; + } + }; + } + + + // set request headers + if (!Basic.isEmptyObj(meta.headers)) { + Basic.each(meta.headers, function(value, header) { + _xhr.setRequestHeader(header, value); + }); + } + + // request response type + if ("" !== meta.responseType && 'responseType' in _xhr) { + if ('json' === meta.responseType && !Env.can('return_response_type', 'json')) { // we can fake this one + _xhr.responseType = 'text'; + } else { + _xhr.responseType = meta.responseType; + } + } + + // send ... + if (!mustSendAsBinary) { + _xhr.send(data); + } else { + if (_xhr.sendAsBinary) { // Gecko + _xhr.sendAsBinary(data); + } else { // other browsers having support for typed arrays + (function() { + // mimic Gecko's sendAsBinary + var ui8a = new Uint8Array(data.length); + for (var i = 0; i < data.length; i++) { + ui8a[i] = (data.charCodeAt(i) & 0xff); + } + _xhr.send(ui8a.buffer); + }()); + } + } + + target.trigger('loadstart'); + }, + + getStatus: function() { + // according to W3C spec it should return 0 for readyState < 3, but instead it throws an exception + try { + if (_xhr) { + return _xhr.status; + } + } catch(ex) {} + return 0; + }, + + getResponse: function(responseType) { + var I = this.getRuntime(); + + try { + switch (responseType) { + case 'blob': + var file = new File(I.uid, _xhr.response); + + // try to extract file name from content-disposition if possible (might be - not, if CORS for example) + var disposition = _xhr.getResponseHeader('Content-Disposition'); + if (disposition) { + // extract filename from response header if available + var match = disposition.match(/filename=([\'\"'])([^\1]+)\1/); + if (match) { + _filename = match[2]; + } + } + file.name = _filename; + + // pre-webkit Opera doesn't set type property on the blob response + if (!file.type) { + file.type = Mime.getFileMime(_filename); + } + return file; + + case 'json': + if (!Env.can('return_response_type', 'json')) { + return _xhr.status === 200 && !!window.JSON ? JSON.parse(_xhr.responseText) : null; + } + return _xhr.response; + + case 'document': + return _getDocument(_xhr); + + default: + return _xhr.responseText !== '' ? _xhr.responseText : null; // against the specs, but for consistency across the runtimes + } + } catch(ex) { + return null; + } + }, + + getAllResponseHeaders: function() { + try { + return _xhr.getAllResponseHeaders(); + } catch(ex) {} + return ''; + }, + + abort: function() { + if (_xhr) { + _xhr.abort(); + } + }, + + destroy: function() { + self = _filename = null; + } + }); + + + // here we go... ugly fix for ugly bug + function _preloadAndSend(meta, data) { + var target = this, blob, fr; + + // get original blob + blob = data.getBlob().getSource(); + + // preload blob in memory to be sent as binary string + fr = new window.FileReader(); + fr.onload = function() { + // overwrite original blob + data.append(data.getBlobName(), new Blob(null, { + type: blob.type, + data: fr.result + })); + // invoke send operation again + self.send.call(target, meta, data); + }; + fr.readAsBinaryString(blob); + } + + + function _getNativeXHR() { + if (window.XMLHttpRequest && !(Env.browser === 'IE' && Env.verComp(Env.version, 8, '<'))) { // IE7 has native XHR but it's buggy + return new window.XMLHttpRequest(); + } else { + return (function() { + var progIDs = ['Msxml2.XMLHTTP.6.0', 'Microsoft.XMLHTTP']; // if 6.0 available, use it, otherwise failback to default 3.0 + for (var i = 0; i < progIDs.length; i++) { + try { + return new ActiveXObject(progIDs[i]); + } catch (ex) {} + } + })(); + } + } + + // @credits Sergey Ilinsky (http://www.ilinsky.com/) + function _getDocument(xhr) { + var rXML = xhr.responseXML; + var rText = xhr.responseText; + + // Try parsing responseText (@see: http://www.ilinsky.com/articles/XMLHttpRequest/#bugs-ie-responseXML-content-type) + if (Env.browser === 'IE' && rText && rXML && !rXML.documentElement && /[^\/]+\/[^\+]+\+xml/.test(xhr.getResponseHeader("Content-Type"))) { + rXML = new window.ActiveXObject("Microsoft.XMLDOM"); + rXML.async = false; + rXML.validateOnParse = false; + rXML.loadXML(rText); + } + + // Check if there is no error in document + if (rXML) { + if ((Env.browser === 'IE' && rXML.parseError !== 0) || !rXML.documentElement || rXML.documentElement.tagName === "parsererror") { + return null; + } + } + return rXML; + } + + + function _prepareMultipart(fd) { + var boundary = '----moxieboundary' + new Date().getTime() + , dashdash = '--' + , crlf = '\r\n' + , multipart = '' + , I = this.getRuntime() + ; + + if (!I.can('send_binary_string')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + _xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); + + // append multipart parameters + fd.each(function(value, name) { + // Firefox 3.6 failed to convert multibyte characters to UTF-8 in sendAsBinary(), + // so we try it here ourselves with: unescape(encodeURIComponent(value)) + if (value instanceof Blob) { + // Build RFC2388 blob + multipart += dashdash + boundary + crlf + + 'Content-Disposition: form-data; name="' + name + '"; filename="' + unescape(encodeURIComponent(value.name || 'blob')) + '"' + crlf + + 'Content-Type: ' + (value.type || 'application/octet-stream') + crlf + crlf + + value.getSource() + crlf; + } else { + multipart += dashdash + boundary + crlf + + 'Content-Disposition: form-data; name="' + name + '"' + crlf + crlf + + unescape(encodeURIComponent(value)) + crlf; + } + }); + + multipart += dashdash + boundary + dashdash + crlf; + + return multipart; + } + } + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/html5/utils/BinaryReader.js + +/** + * BinaryReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/utils/BinaryReader +@private +*/ +define("moxie/runtime/html5/utils/BinaryReader", [ + "moxie/core/utils/Basic" +], function(Basic) { + + + function BinaryReader(data) { + if (data instanceof ArrayBuffer) { + ArrayBufferReader.apply(this, arguments); + } else { + UTF16StringReader.apply(this, arguments); + } + } +   + + Basic.extend(BinaryReader.prototype, { + + littleEndian: false, + + + read: function(idx, size) { + var sum, mv, i; + + if (idx + size > this.length()) { + throw new Error("You are trying to read outside the source boundaries."); + } + + mv = this.littleEndian + ? 0 + : -8 * (size - 1) + ; + + for (i = 0, sum = 0; i < size; i++) { + sum |= (this.readByteAt(idx + i) << Math.abs(mv + i*8)); + } + return sum; + }, + + + write: function(idx, num, size) { + var mv, i, str = ''; + + if (idx > this.length()) { + throw new Error("You are trying to write outside the source boundaries."); + } + + mv = this.littleEndian + ? 0 + : -8 * (size - 1) + ; + + for (i = 0; i < size; i++) { + this.writeByteAt(idx + i, (num >> Math.abs(mv + i*8)) & 255); + } + }, + + + BYTE: function(idx) { + return this.read(idx, 1); + }, + + + SHORT: function(idx) { + return this.read(idx, 2); + }, + + + LONG: function(idx) { + return this.read(idx, 4); + }, + + + SLONG: function(idx) { // 2's complement notation + var num = this.read(idx, 4); + return (num > 2147483647 ? num - 4294967296 : num); + }, + + + CHAR: function(idx) { + return String.fromCharCode(this.read(idx, 1)); + }, + + + STRING: function(idx, count) { + return this.asArray('CHAR', idx, count).join(''); + }, + + + asArray: function(type, idx, count) { + var values = []; + + for (var i = 0; i < count; i++) { + values[i] = this[type](idx + i); + } + return values; + } + }); + + + function ArrayBufferReader(data) { + var _dv = new DataView(data); + + Basic.extend(this, { + + readByteAt: function(idx) { + return _dv.getUint8(idx); + }, + + + writeByteAt: function(idx, value) { + _dv.setUint8(idx, value); + }, + + + SEGMENT: function(idx, size, value) { + switch (arguments.length) { + case 2: + return data.slice(idx, idx + size); + + case 1: + return data.slice(idx); + + case 3: + if (value === null) { + value = new ArrayBuffer(); + } + + if (value instanceof ArrayBuffer) { + var arr = new Uint8Array(this.length() - size + value.byteLength); + if (idx > 0) { + arr.set(new Uint8Array(data.slice(0, idx)), 0); + } + arr.set(new Uint8Array(value), idx); + arr.set(new Uint8Array(data.slice(idx + size)), idx + value.byteLength); + + this.clear(); + data = arr.buffer; + _dv = new DataView(data); + break; + } + + default: return data; + } + }, + + + length: function() { + return data ? data.byteLength : 0; + }, + + + clear: function() { + _dv = data = null; + } + }); + } + + + function UTF16StringReader(data) { + Basic.extend(this, { + + readByteAt: function(idx) { + return data.charCodeAt(idx); + }, + + + writeByteAt: function(idx, value) { + putstr(String.fromCharCode(value), idx, 1); + }, + + + SEGMENT: function(idx, length, segment) { + switch (arguments.length) { + case 1: + return data.substr(idx); + case 2: + return data.substr(idx, length); + case 3: + putstr(segment !== null ? segment : '', idx, length); + break; + default: return data; + } + }, + + + length: function() { + return data ? data.length : 0; + }, + + clear: function() { + data = null; + } + }); + + + function putstr(segment, idx, length) { + length = arguments.length === 3 ? length : data.length - idx - 1; + data = data.substr(0, idx) + segment + data.substr(length + idx); + } + } + + + return BinaryReader; +}); + +// Included from: src/javascript/runtime/html5/image/JPEGHeaders.js + +/** + * JPEGHeaders.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/JPEGHeaders +@private +*/ +define("moxie/runtime/html5/image/JPEGHeaders", [ + "moxie/runtime/html5/utils/BinaryReader", + "moxie/core/Exceptions" +], function(BinaryReader, x) { + + return function JPEGHeaders(data) { + var headers = [], _br, idx, marker, length = 0; + + _br = new BinaryReader(data); + + // Check if data is jpeg + if (_br.SHORT(0) !== 0xFFD8) { + _br.clear(); + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + + idx = 2; + + while (idx <= _br.length()) { + marker = _br.SHORT(idx); + + // omit RST (restart) markers + if (marker >= 0xFFD0 && marker <= 0xFFD7) { + idx += 2; + continue; + } + + // no headers allowed after SOS marker + if (marker === 0xFFDA || marker === 0xFFD9) { + break; + } + + length = _br.SHORT(idx + 2) + 2; + + // APPn marker detected + if (marker >= 0xFFE1 && marker <= 0xFFEF) { + headers.push({ + hex: marker, + name: 'APP' + (marker & 0x000F), + start: idx, + length: length, + segment: _br.SEGMENT(idx, length) + }); + } + + idx += length; + } + + _br.clear(); + + return { + headers: headers, + + restore: function(data) { + var max, i, br; + + br = new BinaryReader(data); + + idx = br.SHORT(2) == 0xFFE0 ? 4 + br.SHORT(4) : 2; + + for (i = 0, max = headers.length; i < max; i++) { + br.SEGMENT(idx, 0, headers[i].segment); + idx += headers[i].length; + } + + data = br.SEGMENT(); + br.clear(); + return data; + }, + + strip: function(data) { + var br, headers, jpegHeaders, i; + + jpegHeaders = new JPEGHeaders(data); + headers = jpegHeaders.headers; + jpegHeaders.purge(); + + br = new BinaryReader(data); + + i = headers.length; + while (i--) { + br.SEGMENT(headers[i].start, headers[i].length, ''); + } + + data = br.SEGMENT(); + br.clear(); + return data; + }, + + get: function(name) { + var array = []; + + for (var i = 0, max = headers.length; i < max; i++) { + if (headers[i].name === name.toUpperCase()) { + array.push(headers[i].segment); + } + } + return array; + }, + + set: function(name, segment) { + var array = [], i, ii, max; + + if (typeof(segment) === 'string') { + array.push(segment); + } else { + array = segment; + } + + for (i = ii = 0, max = headers.length; i < max; i++) { + if (headers[i].name === name.toUpperCase()) { + headers[i].segment = array[ii]; + headers[i].length = array[ii].length; + ii++; + } + if (ii >= array.length) { + break; + } + } + }, + + purge: function() { + this.headers = headers = []; + } + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/ExifParser.js + +/** + * ExifParser.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/ExifParser +@private +*/ +define("moxie/runtime/html5/image/ExifParser", [ + "moxie/core/utils/Basic", + "moxie/runtime/html5/utils/BinaryReader", + "moxie/core/Exceptions" +], function(Basic, BinaryReader, x) { + + function ExifParser(data) { + var __super__, tags, tagDescs, offsets, idx, Tiff; + + BinaryReader.call(this, data); + + tags = { + tiff: { + /* + The image orientation viewed in terms of rows and columns. + + 1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side. + 2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side. + 3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side. + 4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side. + 5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top. + 6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top. + 7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom. + 8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom. + */ + 0x0112: 'Orientation', + 0x010E: 'ImageDescription', + 0x010F: 'Make', + 0x0110: 'Model', + 0x0131: 'Software', + 0x8769: 'ExifIFDPointer', + 0x8825: 'GPSInfoIFDPointer' + }, + exif: { + 0x9000: 'ExifVersion', + 0xA001: 'ColorSpace', + 0xA002: 'PixelXDimension', + 0xA003: 'PixelYDimension', + 0x9003: 'DateTimeOriginal', + 0x829A: 'ExposureTime', + 0x829D: 'FNumber', + 0x8827: 'ISOSpeedRatings', + 0x9201: 'ShutterSpeedValue', + 0x9202: 'ApertureValue' , + 0x9207: 'MeteringMode', + 0x9208: 'LightSource', + 0x9209: 'Flash', + 0x920A: 'FocalLength', + 0xA402: 'ExposureMode', + 0xA403: 'WhiteBalance', + 0xA406: 'SceneCaptureType', + 0xA404: 'DigitalZoomRatio', + 0xA408: 'Contrast', + 0xA409: 'Saturation', + 0xA40A: 'Sharpness' + }, + gps: { + 0x0000: 'GPSVersionID', + 0x0001: 'GPSLatitudeRef', + 0x0002: 'GPSLatitude', + 0x0003: 'GPSLongitudeRef', + 0x0004: 'GPSLongitude' + }, + + thumb: { + 0x0201: 'JPEGInterchangeFormat', + 0x0202: 'JPEGInterchangeFormatLength' + } + }; + + tagDescs = { + 'ColorSpace': { + 1: 'sRGB', + 0: 'Uncalibrated' + }, + + 'MeteringMode': { + 0: 'Unknown', + 1: 'Average', + 2: 'CenterWeightedAverage', + 3: 'Spot', + 4: 'MultiSpot', + 5: 'Pattern', + 6: 'Partial', + 255: 'Other' + }, + + 'LightSource': { + 1: 'Daylight', + 2: 'Fliorescent', + 3: 'Tungsten', + 4: 'Flash', + 9: 'Fine weather', + 10: 'Cloudy weather', + 11: 'Shade', + 12: 'Daylight fluorescent (D 5700 - 7100K)', + 13: 'Day white fluorescent (N 4600 -5400K)', + 14: 'Cool white fluorescent (W 3900 - 4500K)', + 15: 'White fluorescent (WW 3200 - 3700K)', + 17: 'Standard light A', + 18: 'Standard light B', + 19: 'Standard light C', + 20: 'D55', + 21: 'D65', + 22: 'D75', + 23: 'D50', + 24: 'ISO studio tungsten', + 255: 'Other' + }, + + 'Flash': { + 0x0000: 'Flash did not fire', + 0x0001: 'Flash fired', + 0x0005: 'Strobe return light not detected', + 0x0007: 'Strobe return light detected', + 0x0009: 'Flash fired, compulsory flash mode', + 0x000D: 'Flash fired, compulsory flash mode, return light not detected', + 0x000F: 'Flash fired, compulsory flash mode, return light detected', + 0x0010: 'Flash did not fire, compulsory flash mode', + 0x0018: 'Flash did not fire, auto mode', + 0x0019: 'Flash fired, auto mode', + 0x001D: 'Flash fired, auto mode, return light not detected', + 0x001F: 'Flash fired, auto mode, return light detected', + 0x0020: 'No flash function', + 0x0041: 'Flash fired, red-eye reduction mode', + 0x0045: 'Flash fired, red-eye reduction mode, return light not detected', + 0x0047: 'Flash fired, red-eye reduction mode, return light detected', + 0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode', + 0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected', + 0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected', + 0x0059: 'Flash fired, auto mode, red-eye reduction mode', + 0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode', + 0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode' + }, + + 'ExposureMode': { + 0: 'Auto exposure', + 1: 'Manual exposure', + 2: 'Auto bracket' + }, + + 'WhiteBalance': { + 0: 'Auto white balance', + 1: 'Manual white balance' + }, + + 'SceneCaptureType': { + 0: 'Standard', + 1: 'Landscape', + 2: 'Portrait', + 3: 'Night scene' + }, + + 'Contrast': { + 0: 'Normal', + 1: 'Soft', + 2: 'Hard' + }, + + 'Saturation': { + 0: 'Normal', + 1: 'Low saturation', + 2: 'High saturation' + }, + + 'Sharpness': { + 0: 'Normal', + 1: 'Soft', + 2: 'Hard' + }, + + // GPS related + 'GPSLatitudeRef': { + N: 'North latitude', + S: 'South latitude' + }, + + 'GPSLongitudeRef': { + E: 'East longitude', + W: 'West longitude' + } + }; + + offsets = { + tiffHeader: 10 + }; + + idx = offsets.tiffHeader; + + __super__ = { + clear: this.clear + }; + + // Public functions + Basic.extend(this, { + + read: function() { + try { + return ExifParser.prototype.read.apply(this, arguments); + } catch (ex) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + }, + + + write: function() { + try { + return ExifParser.prototype.write.apply(this, arguments); + } catch (ex) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + }, + + + UNDEFINED: function() { + return this.BYTE.apply(this, arguments); + }, + + + RATIONAL: function(idx) { + return this.LONG(idx) / this.LONG(idx + 4) + }, + + + SRATIONAL: function(idx) { + return this.SLONG(idx) / this.SLONG(idx + 4) + }, + + ASCII: function(idx) { + return this.CHAR(idx); + }, + + TIFF: function() { + return Tiff || null; + }, + + + EXIF: function() { + var Exif = null; + + if (offsets.exifIFD) { + try { + Exif = extractTags.call(this, offsets.exifIFD, tags.exif); + } catch(ex) { + return null; + } + + // Fix formatting of some tags + if (Exif.ExifVersion && Basic.typeOf(Exif.ExifVersion) === 'array') { + for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) { + exifVersion += String.fromCharCode(Exif.ExifVersion[i]); + } + Exif.ExifVersion = exifVersion; + } + } + + return Exif; + }, + + + GPS: function() { + var GPS = null; + + if (offsets.gpsIFD) { + try { + GPS = extractTags.call(this, offsets.gpsIFD, tags.gps); + } catch (ex) { + return null; + } + + // iOS devices (and probably some others) do not put in GPSVersionID tag (why?..) + if (GPS.GPSVersionID && Basic.typeOf(GPS.GPSVersionID) === 'array') { + GPS.GPSVersionID = GPS.GPSVersionID.join('.'); + } + } + + return GPS; + }, + + + thumb: function() { + if (offsets.IFD1) { + try { + var IFD1Tags = extractTags.call(this, offsets.IFD1, tags.thumb); + + if ('JPEGInterchangeFormat' in IFD1Tags) { + return this.SEGMENT(offsets.tiffHeader + IFD1Tags.JPEGInterchangeFormat, IFD1Tags.JPEGInterchangeFormatLength); + } + } catch (ex) {} + } + return null; + }, + + + setExif: function(tag, value) { + // Right now only setting of width/height is possible + if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') { return false; } + + return setTag.call(this, 'exif', tag, value); + }, + + + clear: function() { + __super__.clear(); + data = tags = tagDescs = Tiff = offsets = __super__ = null; + } + }); + + + // Check if that's APP1 and that it has EXIF + if (this.SHORT(0) !== 0xFFE1 || this.STRING(4, 5).toUpperCase() !== "EXIF\0") { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + + // Set read order of multi-byte data + this.littleEndian = (this.SHORT(idx) == 0x4949); + + // Check if always present bytes are indeed present + if (this.SHORT(idx+=2) !== 0x002A) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + + offsets.IFD0 = offsets.tiffHeader + this.LONG(idx += 2); + Tiff = extractTags.call(this, offsets.IFD0, tags.tiff); + + if ('ExifIFDPointer' in Tiff) { + offsets.exifIFD = offsets.tiffHeader + Tiff.ExifIFDPointer; + delete Tiff.ExifIFDPointer; + } + + if ('GPSInfoIFDPointer' in Tiff) { + offsets.gpsIFD = offsets.tiffHeader + Tiff.GPSInfoIFDPointer; + delete Tiff.GPSInfoIFDPointer; + } + + if (Basic.isEmptyObj(Tiff)) { + Tiff = null; + } + + // check if we have a thumb as well + var IFD1Offset = this.LONG(offsets.IFD0 + this.SHORT(offsets.IFD0) * 12 + 2); + if (IFD1Offset) { + offsets.IFD1 = offsets.tiffHeader + IFD1Offset; + } + + + function extractTags(IFD_offset, tags2extract) { + var data = this; + var length, i, tag, type, count, size, offset, value, values = [], hash = {}; + + var types = { + 1 : 'BYTE', + 7 : 'UNDEFINED', + 2 : 'ASCII', + 3 : 'SHORT', + 4 : 'LONG', + 5 : 'RATIONAL', + 9 : 'SLONG', + 10: 'SRATIONAL' + }; + + var sizes = { + 'BYTE' : 1, + 'UNDEFINED' : 1, + 'ASCII' : 1, + 'SHORT' : 2, + 'LONG' : 4, + 'RATIONAL' : 8, + 'SLONG' : 4, + 'SRATIONAL' : 8 + }; + + length = data.SHORT(IFD_offset); + + // The size of APP1 including all these elements shall not exceed the 64 Kbytes specified in the JPEG standard. + + for (i = 0; i < length; i++) { + values = []; + + // Set binary reader pointer to beginning of the next tag + offset = IFD_offset + 2 + i*12; + + tag = tags2extract[data.SHORT(offset)]; + + if (tag === undefined) { + continue; // Not the tag we requested + } + + type = types[data.SHORT(offset+=2)]; + count = data.LONG(offset+=2); + size = sizes[type]; + + if (!size) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + + offset += 4; + + // tag can only fit 4 bytes of data, if data is larger we should look outside + if (size * count > 4) { + // instead of data tag contains an offset of the data + offset = data.LONG(offset) + offsets.tiffHeader; + } + + // in case we left the boundaries of data throw an early exception + if (offset + size * count >= this.length()) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + + // special care for the string + if (type === 'ASCII') { + hash[tag] = Basic.trim(data.STRING(offset, count).replace(/\0$/, '')); // strip trailing NULL + + } else { + values = data.asArray(type, offset, count); + value = (count == 1 ? values[0] : values); + + if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') { + hash[tag] = tagDescs[tag][value]; + } else { + hash[tag] = value; + } + } + } + + return hash; + } + + // At the moment only setting of simple (LONG) values, that do not require offset recalculation, is supported + function setTag(ifd, tag, value) { + var offset, length, tagOffset, valueOffset = 0; + + // If tag name passed translate into hex key + if (typeof(tag) === 'string') { + var tmpTags = tags[ifd.toLowerCase()]; + for (var hex in tmpTags) { + if (tmpTags[hex] === tag) { + tag = hex; + break; + } + } + } + offset = offsets[ifd.toLowerCase() + 'IFD']; + length = this.SHORT(offset); + + for (var i = 0; i < length; i++) { + tagOffset = offset + 12 * i + 2; + + if (this.SHORT(tagOffset) == tag) { + valueOffset = tagOffset + 8; + break; + } + } + + if (!valueOffset) { + return false; + } + + try { + this.write(valueOffset, value, 4); + } catch(ex) { + return false; + } + + return true; + } + } + + ExifParser.prototype = BinaryReader.prototype; + + return ExifParser; +}); + +// Included from: src/javascript/runtime/html5/image/JPEG.js + +/** + * JPEG.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/JPEG +@private +*/ +define("moxie/runtime/html5/image/JPEG", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/html5/image/JPEGHeaders", + "moxie/runtime/html5/utils/BinaryReader", + "moxie/runtime/html5/image/ExifParser" +], function(Basic, x, JPEGHeaders, BinaryReader, ExifParser) { + + function JPEG(data) { + var _br, _hm, _ep, _info; + + _br = new BinaryReader(data); + + // check if it is jpeg + if (_br.SHORT(0) !== 0xFFD8) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + + // backup headers + _hm = new JPEGHeaders(data); + + // extract exif info + try { + _ep = new ExifParser(_hm.get('app1')[0]); + } catch(ex) {} + + // get dimensions + _info = _getDimensions.call(this); + + Basic.extend(this, { + type: 'image/jpeg', + + size: _br.length(), + + width: _info && _info.width || 0, + + height: _info && _info.height || 0, + + setExif: function(tag, value) { + if (!_ep) { + return false; // or throw an exception + } + + if (Basic.typeOf(tag) === 'object') { + Basic.each(tag, function(value, tag) { + _ep.setExif(tag, value); + }); + } else { + _ep.setExif(tag, value); + } + + // update internal headers + _hm.set('app1', _ep.SEGMENT()); + }, + + writeHeaders: function() { + if (!arguments.length) { + // if no arguments passed, update headers internally + return _hm.restore(data); + } + return _hm.restore(arguments[0]); + }, + + stripHeaders: function(data) { + return _hm.strip(data); + }, + + purge: function() { + _purge.call(this); + } + }); + + if (_ep) { + this.meta = { + tiff: _ep.TIFF(), + exif: _ep.EXIF(), + gps: _ep.GPS(), + thumb: _getThumb() + }; + } + + + function _getDimensions(br) { + var idx = 0 + , marker + , length + ; + + if (!br) { + br = _br; + } + + // examine all through the end, since some images might have very large APP segments + while (idx <= br.length()) { + marker = br.SHORT(idx += 2); + + if (marker >= 0xFFC0 && marker <= 0xFFC3) { // SOFn + idx += 5; // marker (2 bytes) + length (2 bytes) + Sample precision (1 byte) + return { + height: br.SHORT(idx), + width: br.SHORT(idx += 2) + }; + } + length = br.SHORT(idx += 2); + idx += length - 2; + } + return null; + } + + + function _getThumb() { + var data = _ep.thumb() + , br + , info + ; + + if (data) { + br = new BinaryReader(data); + info = _getDimensions(br); + br.clear(); + + if (info) { + info.data = data; + return info; + } + } + return null; + } + + + function _purge() { + if (!_ep || !_hm || !_br) { + return; // ignore any repeating purge requests + } + _ep.clear(); + _hm.purge(); + _br.clear(); + _info = _hm = _ep = _br = null; + } + } + + return JPEG; +}); + +// Included from: src/javascript/runtime/html5/image/PNG.js + +/** + * PNG.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/PNG +@private +*/ +define("moxie/runtime/html5/image/PNG", [ + "moxie/core/Exceptions", + "moxie/core/utils/Basic", + "moxie/runtime/html5/utils/BinaryReader" +], function(x, Basic, BinaryReader) { + + function PNG(data) { + var _br, _hm, _ep, _info; + + _br = new BinaryReader(data); + + // check if it's png + (function() { + var idx = 0, i = 0 + , signature = [0x8950, 0x4E47, 0x0D0A, 0x1A0A] + ; + + for (i = 0; i < signature.length; i++, idx += 2) { + if (signature[i] != _br.SHORT(idx)) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + } + }()); + + function _getDimensions() { + var chunk, idx; + + chunk = _getChunkAt.call(this, 8); + + if (chunk.type == 'IHDR') { + idx = chunk.start; + return { + width: _br.LONG(idx), + height: _br.LONG(idx += 4) + }; + } + return null; + } + + function _purge() { + if (!_br) { + return; // ignore any repeating purge requests + } + _br.clear(); + data = _info = _hm = _ep = _br = null; + } + + _info = _getDimensions.call(this); + + Basic.extend(this, { + type: 'image/png', + + size: _br.length(), + + width: _info.width, + + height: _info.height, + + purge: function() { + _purge.call(this); + } + }); + + // for PNG we can safely trigger purge automatically, as we do not keep any data for later + _purge.call(this); + + function _getChunkAt(idx) { + var length, type, start, CRC; + + length = _br.LONG(idx); + type = _br.STRING(idx += 4, 4); + start = idx += 4; + CRC = _br.LONG(idx + length); + + return { + length: length, + type: type, + start: start, + CRC: CRC + }; + } + } + + return PNG; +}); + +// Included from: src/javascript/runtime/html5/image/ImageInfo.js + +/** + * ImageInfo.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/ImageInfo +@private +*/ +define("moxie/runtime/html5/image/ImageInfo", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/html5/image/JPEG", + "moxie/runtime/html5/image/PNG" +], function(Basic, x, JPEG, PNG) { + /** + Optional image investigation tool for HTML5 runtime. Provides the following features: + - ability to distinguish image type (JPEG or PNG) by signature + - ability to extract image width/height directly from it's internals, without preloading in memory (fast) + - ability to extract APP headers from JPEGs (Exif, GPS, etc) + - ability to replace width/height tags in extracted JPEG headers + - ability to restore APP headers, that were for example stripped during image manipulation + + @class ImageInfo + @constructor + @param {String} data Image source as binary string + */ + return function(data) { + var _cs = [JPEG, PNG], _img; + + // figure out the format, throw: ImageError.WRONG_FORMAT if not supported + _img = (function() { + for (var i = 0; i < _cs.length; i++) { + try { + return new _cs[i](data); + } catch (ex) { + // console.info(ex); + } + } + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + }()); + + Basic.extend(this, { + /** + Image Mime Type extracted from it's depths + + @property type + @type {String} + @default '' + */ + type: '', + + /** + Image size in bytes + + @property size + @type {Number} + @default 0 + */ + size: 0, + + /** + Image width extracted from image source + + @property width + @type {Number} + @default 0 + */ + width: 0, + + /** + Image height extracted from image source + + @property height + @type {Number} + @default 0 + */ + height: 0, + + /** + Sets Exif tag. Currently applicable only for width and height tags. Obviously works only with JPEGs. + + @method setExif + @param {String} tag Tag to set + @param {Mixed} value Value to assign to the tag + */ + setExif: function() {}, + + /** + Restores headers to the source. + + @method writeHeaders + @param {String} data Image source as binary string + @return {String} Updated binary string + */ + writeHeaders: function(data) { + return data; + }, + + /** + Strip all headers from the source. + + @method stripHeaders + @param {String} data Image source as binary string + @return {String} Updated binary string + */ + stripHeaders: function(data) { + return data; + }, + + /** + Dispose resources. + + @method purge + */ + purge: function() { + data = null; + } + }); + + Basic.extend(this, _img); + + this.purge = function() { + _img.purge(); + _img = null; + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/MegaPixel.js + +/** +(The MIT License) + +Copyright (c) 2012 Shinichi Tomita ; + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/** + * Mega pixel image rendering library for iOS6 Safari + * + * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel), + * which causes unexpected subsampling when drawing it in canvas. + * By using this library, you can safely render the image with proper stretching. + * + * Copyright (c) 2012 Shinichi Tomita + * Released under the MIT license + */ + +/** +@class moxie/runtime/html5/image/MegaPixel +@private +*/ +define("moxie/runtime/html5/image/MegaPixel", [], function() { + + /** + * Rendering image element (with resizing) into the canvas element + */ + function renderImageToCanvas(img, canvas, options) { + var iw = img.naturalWidth, ih = img.naturalHeight; + var width = options.width, height = options.height; + var x = options.x || 0, y = options.y || 0; + var ctx = canvas.getContext('2d'); + if (detectSubsampling(img)) { + iw /= 2; + ih /= 2; + } + var d = 1024; // size of tiling canvas + var tmpCanvas = document.createElement('canvas'); + tmpCanvas.width = tmpCanvas.height = d; + var tmpCtx = tmpCanvas.getContext('2d'); + var vertSquashRatio = detectVerticalSquash(img, iw, ih); + var sy = 0; + while (sy < ih) { + var sh = sy + d > ih ? ih - sy : d; + var sx = 0; + while (sx < iw) { + var sw = sx + d > iw ? iw - sx : d; + tmpCtx.clearRect(0, 0, d, d); + tmpCtx.drawImage(img, -sx, -sy); + var dx = (sx * width / iw + x) << 0; + var dw = Math.ceil(sw * width / iw); + var dy = (sy * height / ih / vertSquashRatio + y) << 0; + var dh = Math.ceil(sh * height / ih / vertSquashRatio); + ctx.drawImage(tmpCanvas, 0, 0, sw, sh, dx, dy, dw, dh); + sx += d; + } + sy += d; + } + tmpCanvas = tmpCtx = null; + } + + /** + * Detect subsampling in loaded image. + * In iOS, larger images than 2M pixels may be subsampled in rendering. + */ + function detectSubsampling(img) { + var iw = img.naturalWidth, ih = img.naturalHeight; + if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, -iw + 1, 0); + // subsampled image becomes half smaller in rendering size. + // check alpha channel value to confirm image is covering edge pixel or not. + // if alpha value is 0 image is not covering, hence subsampled. + return ctx.getImageData(0, 0, 1, 1).data[3] === 0; + } else { + return false; + } + } + + + /** + * Detecting vertical squash in loaded image. + * Fixes a bug which squash image vertically while drawing into canvas for some images. + */ + function detectVerticalSquash(img, iw, ih) { + var canvas = document.createElement('canvas'); + canvas.width = 1; + canvas.height = ih; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + var data = ctx.getImageData(0, 0, 1, ih).data; + // search image edge pixel position in case it is squashed vertically. + var sy = 0; + var ey = ih; + var py = ih; + while (py > sy) { + var alpha = data[(py - 1) * 4 + 3]; + if (alpha === 0) { + ey = py; + } else { + sy = py; + } + py = (ey + sy) >> 1; + } + canvas = null; + var ratio = (py / ih); + return (ratio === 0) ? 1 : ratio; + } + + return { + isSubsampled: detectSubsampling, + renderTo: renderImageToCanvas + }; +}); + +// Included from: src/javascript/runtime/html5/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/Image +@private +*/ +define("moxie/runtime/html5/image/Image", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/core/utils/Encode", + "moxie/file/Blob", + "moxie/file/File", + "moxie/runtime/html5/image/ImageInfo", + "moxie/runtime/html5/image/MegaPixel", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, Basic, x, Encode, Blob, File, ImageInfo, MegaPixel, Mime, Env) { + + function HTML5Image() { + var me = this + , _img, _imgInfo, _canvas, _binStr, _blob + , _modified = false // is set true whenever image is modified + , _preserveHeaders = true + ; + + Basic.extend(this, { + loadFromBlob: function(blob) { + var comp = this, I = comp.getRuntime() + , asBinary = arguments.length > 1 ? arguments[1] : true + ; + + if (!I.can('access_binary')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + _blob = blob; + + if (blob.isDetached()) { + _binStr = blob.getSource(); + _preload.call(this, _binStr); + + } else { + _readAsDataUrl.call(this, blob.getSource(), function(dataUrl) { + if (asBinary) { + _binStr = _toBinary(dataUrl); + } + _preload.call(comp, dataUrl); + }); + } + }, + + loadFromImage: function(img, exact) { + this.meta = img.meta; + + _blob = new File(null, { + name: img.name, + size: img.size, + type: img.type + }); + + _preload.call(this, exact ? (_binStr = img.getAsBinaryString()) : img.getAsDataURL()); + }, + + getInfo: function() { + var I = this.getRuntime(), info; + + if (!_imgInfo && _binStr && I.can('access_image_binary')) { + _imgInfo = new ImageInfo(_binStr); + } + + info = { + width: _getImg().width || 0, + height: _getImg().height || 0, + type: _blob.type || Mime.getFileMime(_blob.name), + size: _binStr && _binStr.length || _blob.size || 0, + name: _blob.name || '', + meta: _imgInfo && _imgInfo.meta || this.meta || {} + }; + + // store thumbnail data as blob + if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) { + info.meta.thumb.data = new Blob(null, { + type: 'image/jpeg', + data: info.meta.thumb.data + }); + } + + return info; + }, + + downsize: function() { + _downsize.apply(this, arguments); + }, + + getAsCanvas: function() { + if (_canvas) { + _canvas.id = this.uid + '_canvas'; + } + return _canvas; + }, + + getAsBlob: function(type, quality) { + if (type !== this.type) { + // if different mime type requested prepare image for conversion + _downsize.call(this, this.width, this.height, false); + } + return new File(null, { + name: _blob.name || '', + type: type, + data: me.getAsBinaryString.call(this, type, quality) + }); + }, + + getAsDataURL: function(type) { + var quality = arguments[1] || 90; + + // if image has not been modified, return the source right away + if (!_modified) { + return _img.src; + } + + if ('image/jpeg' !== type) { + return _canvas.toDataURL('image/png'); + } else { + try { + // older Geckos used to result in an exception on quality argument + return _canvas.toDataURL('image/jpeg', quality/100); + } catch (ex) { + return _canvas.toDataURL('image/jpeg'); + } + } + }, + + getAsBinaryString: function(type, quality) { + // if image has not been modified, return the source right away + if (!_modified) { + // if image was not loaded from binary string + if (!_binStr) { + _binStr = _toBinary(me.getAsDataURL(type, quality)); + } + return _binStr; + } + + if ('image/jpeg' !== type) { + _binStr = _toBinary(me.getAsDataURL(type, quality)); + } else { + var dataUrl; + + // if jpeg + if (!quality) { + quality = 90; + } + + try { + // older Geckos used to result in an exception on quality argument + dataUrl = _canvas.toDataURL('image/jpeg', quality/100); + } catch (ex) { + dataUrl = _canvas.toDataURL('image/jpeg'); + } + + _binStr = _toBinary(dataUrl); + + if (_imgInfo) { + _binStr = _imgInfo.stripHeaders(_binStr); + + if (_preserveHeaders) { + // update dimensions info in exif + if (_imgInfo.meta && _imgInfo.meta.exif) { + _imgInfo.setExif({ + PixelXDimension: this.width, + PixelYDimension: this.height + }); + } + + // re-inject the headers + _binStr = _imgInfo.writeHeaders(_binStr); + } + + // will be re-created from fresh on next getInfo call + _imgInfo.purge(); + _imgInfo = null; + } + } + + _modified = false; + + return _binStr; + }, + + destroy: function() { + me = null; + _purge.call(this); + this.getRuntime().getShim().removeInstance(this.uid); + } + }); + + + function _getImg() { + if (!_canvas && !_img) { + throw new x.ImageError(x.DOMException.INVALID_STATE_ERR); + } + return _canvas || _img; + } + + + function _toBinary(str) { + return Encode.atob(str.substring(str.indexOf('base64,') + 7)); + } + + + function _toDataUrl(str, type) { + return 'data:' + (type || '') + ';base64,' + Encode.btoa(str); + } + + + function _preload(str) { + var comp = this; + + _img = new Image(); + _img.onerror = function() { + _purge.call(this); + comp.trigger('error', x.ImageError.WRONG_FORMAT); + }; + _img.onload = function() { + comp.trigger('load'); + }; + + _img.src = str.substr(0, 5) == 'data:' ? str : _toDataUrl(str, _blob.type); + } + + + function _readAsDataUrl(file, callback) { + var comp = this, fr; + + // use FileReader if it's available + if (window.FileReader) { + fr = new FileReader(); + fr.onload = function() { + callback(this.result); + }; + fr.onerror = function() { + comp.trigger('error', x.ImageError.WRONG_FORMAT); + }; + fr.readAsDataURL(file); + } else { + return callback(file.getAsDataURL()); + } + } + + function _downsize(width, height, crop, preserveHeaders) { + var self = this + , scale + , mathFn + , x = 0 + , y = 0 + , img + , destWidth + , destHeight + , orientation + ; + + _preserveHeaders = preserveHeaders; // we will need to check this on export (see getAsBinaryString()) + + // take into account orientation tag + orientation = (this.meta && this.meta.tiff && this.meta.tiff.Orientation) || 1; + + if (Basic.inArray(orientation, [5,6,7,8]) !== -1) { // values that require 90 degree rotation + // swap dimensions + var tmp = width; + width = height; + height = tmp; + } + + img = _getImg(); + + // unify dimensions + if (!crop) { + scale = Math.min(width/img.width, height/img.height); + } else { + // one of the dimensions may exceed the actual image dimensions - we need to take the smallest value + width = Math.min(width, img.width); + height = Math.min(height, img.height); + + scale = Math.max(width/img.width, height/img.height); + } + + // we only downsize here + if (scale > 1 && !crop && preserveHeaders) { + this.trigger('Resize'); + return; + } + + // prepare canvas if necessary + if (!_canvas) { + _canvas = document.createElement("canvas"); + } + + // calculate dimensions of proportionally resized image + destWidth = Math.round(img.width * scale); + destHeight = Math.round(img.height * scale); + + // scale image and canvas + if (crop) { + _canvas.width = width; + _canvas.height = height; + + // if dimensions of the resulting image still larger than canvas, center it + if (destWidth > width) { + x = Math.round((destWidth - width) / 2); + } + + if (destHeight > height) { + y = Math.round((destHeight - height) / 2); + } + } else { + _canvas.width = destWidth; + _canvas.height = destHeight; + } + + // rotate if required, according to orientation tag + if (!_preserveHeaders) { + _rotateToOrientaion(_canvas.width, _canvas.height, orientation); + } + + _drawToCanvas.call(this, img, _canvas, -x, -y, destWidth, destHeight); + + this.width = _canvas.width; + this.height = _canvas.height; + + _modified = true; + self.trigger('Resize'); + } + + + function _drawToCanvas(img, canvas, x, y, w, h) { + if (Env.OS === 'iOS') { + // avoid squish bug in iOS6 + MegaPixel.renderTo(img, canvas, { width: w, height: h, x: x, y: y }); + } else { + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, x, y, w, h); + } + } + + + /** + * Transform canvas coordination according to specified frame size and orientation + * Orientation value is from EXIF tag + * @author Shinichi Tomita + */ + function _rotateToOrientaion(width, height, orientation) { + switch (orientation) { + case 5: + case 6: + case 7: + case 8: + _canvas.width = height; + _canvas.height = width; + break; + default: + _canvas.width = width; + _canvas.height = height; + } + + /** + 1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side. + 2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side. + 3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side. + 4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side. + 5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top. + 6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top. + 7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom. + 8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom. + */ + + var ctx = _canvas.getContext('2d'); + switch (orientation) { + case 2: + // horizontal flip + ctx.translate(width, 0); + ctx.scale(-1, 1); + break; + case 3: + // 180 rotate left + ctx.translate(width, height); + ctx.rotate(Math.PI); + break; + case 4: + // vertical flip + ctx.translate(0, height); + ctx.scale(1, -1); + break; + case 5: + // vertical flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.scale(1, -1); + break; + case 6: + // 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(0, -height); + break; + case 7: + // horizontal flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(width, -height); + ctx.scale(-1, 1); + break; + case 8: + // 90 rotate left + ctx.rotate(-0.5 * Math.PI); + ctx.translate(-width, 0); + break; + } + } + + + function _purge() { + if (_imgInfo) { + _imgInfo.purge(); + _imgInfo = null; + } + _binStr = _img = _canvas = _blob = null; + _modified = false; + } + } + + return (extensions.Image = HTML5Image); +}); + +// Included from: src/javascript/runtime/flash/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +Defines constructor for Flash runtime. + +@class moxie/runtime/flash/Runtime +@private +*/ +define("moxie/runtime/flash/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Env", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/runtime/Runtime" +], function(Basic, Env, Dom, x, Runtime) { + + var type = 'flash', extensions = {}; + + /** + Get the version of the Flash Player + + @method getShimVersion + @private + @return {Number} Flash Player version + */ + function getShimVersion() { + var version; + + try { + version = navigator.plugins['Shockwave Flash']; + version = version.description; + } catch (e1) { + try { + version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); + } catch (e2) { + version = '0.0'; + } + } + version = version.match(/\d+/g); + return parseFloat(version[0] + '.' + version[1]); + } + + + /** + Cross-browser SWF removal + - Especially needed to safely and completely remove a SWF in Internet Explorer + + Originated from SWFObject v2.2 + */ + function removeSWF(id) { + var obj = Dom.get(id); + if (obj && obj.nodeName == "OBJECT") { + if (Env.browser === 'IE') { + obj.style.display = "none"; + (function onInit(){ + // http://msdn.microsoft.com/en-us/library/ie/ms534360(v=vs.85).aspx + if (obj.readyState == 4) { + removeObjectInIE(id); + } + else { + setTimeout(onInit, 10); + } + })(); + } + else { + obj.parentNode.removeChild(obj); + } + } + } + + + function removeObjectInIE(id) { + var obj = Dom.get(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } + + /** + Constructor for the Flash Runtime + + @class FlashRuntime + @extends Runtime + */ + function FlashRuntime(options) { + var I = this, initTimer; + + options = Basic.extend({ swf_url: Env.swf_url }, options); + + Runtime.call(this, options, type, { + access_binary: function(value) { + return value && I.mode === 'browser'; + }, + access_image_binary: function(value) { + return value && I.mode === 'browser'; + }, + display_media: Runtime.capTrue, + do_cors: Runtime.capTrue, + drag_and_drop: false, + report_upload_progress: function() { + return I.mode === 'client'; + }, + resize_image: Runtime.capTrue, + return_response_headers: false, + return_response_type: function(responseType) { + if (responseType === 'json' && !!window.JSON) { + return true; + } + return !Basic.arrayDiff(responseType, ['', 'text', 'document']) || I.mode === 'browser'; + }, + return_status_code: function(code) { + return I.mode === 'browser' || !Basic.arrayDiff(code, [200, 404]); + }, + select_file: Runtime.capTrue, + select_multiple: Runtime.capTrue, + send_binary_string: function(value) { + return value && I.mode === 'browser'; + }, + send_browser_cookies: function(value) { + return value && I.mode === 'browser'; + }, + send_custom_headers: function(value) { + return value && I.mode === 'browser'; + }, + send_multipart: Runtime.capTrue, + slice_blob: function(value) { + return value && I.mode === 'browser'; + }, + stream_upload: function(value) { + return value && I.mode === 'browser'; + }, + summon_file_dialog: false, + upload_filesize: function(size) { + return Basic.parseSizeStr(size) <= 2097152 || I.mode === 'client'; + }, + use_http_method: function(methods) { + return !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }, { + // capabilities that require specific mode + access_binary: function(value) { + return value ? 'browser' : 'client'; + }, + access_image_binary: function(value) { + return value ? 'browser' : 'client'; + }, + report_upload_progress: function(value) { + return value ? 'browser' : 'client'; + }, + return_response_type: function(responseType) { + return Basic.arrayDiff(responseType, ['', 'text', 'json', 'document']) ? 'browser' : ['client', 'browser']; + }, + return_status_code: function(code) { + return Basic.arrayDiff(code, [200, 404]) ? 'browser' : ['client', 'browser']; + }, + send_binary_string: function(value) { + return value ? 'browser' : 'client'; + }, + send_browser_cookies: function(value) { + return value ? 'browser' : 'client'; + }, + send_custom_headers: function(value) { + return value ? 'browser' : 'client'; + }, + stream_upload: function(value) { + return value ? 'client' : 'browser'; + }, + upload_filesize: function(size) { + return Basic.parseSizeStr(size) >= 2097152 ? 'client' : 'browser'; + } + }, 'client'); + + + // minimal requirement for Flash Player version + if (getShimVersion() < 10) { + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tFlash didn't meet minimal version requirement (10)."); + } + + this.mode = false; // with falsy mode, runtime won't operable, no matter what the mode was before + } + + + Basic.extend(this, { + + getShim: function() { + return Dom.get(this.uid); + }, + + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return I.getShim().exec(this.uid, component, action, args); + }, + + init: function() { + var html, el, container; + + container = this.getShimContainer(); + + // if not the minimal height, shims are not initialized in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) + Basic.extend(container.style, { + position: 'absolute', + top: '-8px', + left: '-8px', + width: '9px', + height: '9px', + overflow: 'hidden' + }); + + // insert flash object + html = '' + + '' + + '' + + '' + + ''; + + if (Env.browser === 'IE') { + el = document.createElement('div'); + container.appendChild(el); + el.outerHTML = html; + el = container = null; // just in case + } else { + container.innerHTML = html; + } + + // Init is dispatched by the shim + initTimer = setTimeout(function() { + if (I && !I.initialized) { // runtime might be already destroyed by this moment + I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tFlash failed to initialize within a specified period of time (typically 5s)."); + } + } + }, 5000); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + removeSWF(I.uid); // SWF removal requires special care in IE + + destroy.call(I); + clearTimeout(initTimer); // initialization check might be still onwait + options = initTimer = destroy = I = null; + }; + }(this.destroy)) + + }, extensions); + } + + Runtime.addConstructor(type, FlashRuntime); + + return extensions; +}); + +// Included from: src/javascript/runtime/flash/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileInput +@private +*/ +define("moxie/runtime/flash/file/FileInput", [ + "moxie/runtime/flash/Runtime", + "moxie/file/File", + "moxie/core/utils/Basic" +], function(extensions, File, Basic) { + + var FileInput = { + init: function(options) { + var comp = this, I = this.getRuntime(); + + this.bind("Change", function() { + var files = I.shimExec.call(comp, 'FileInput', 'getFiles'); + comp.files = []; + Basic.each(files, function(file) { + comp.files.push(new File(I.uid, file)); + }); + }, 999); + + this.getRuntime().shimExec.call(this, 'FileInput', 'init', { + name: options.name, + accept: options.accept, + multiple: options.multiple + }); + + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/flash/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/Blob +@private +*/ +define("moxie/runtime/flash/file/Blob", [ + "moxie/runtime/flash/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + var FlashBlob = { + slice: function(blob, start, end, type) { + var self = this.getRuntime(); + + if (start < 0) { + start = Math.max(blob.size + start, 0); + } else if (start > 0) { + start = Math.min(start, blob.size); + } + + if (end < 0) { + end = Math.max(blob.size + end, 0); + } else if (end > 0) { + end = Math.min(end, blob.size); + } + + blob = self.shimExec.call(this, 'Blob', 'slice', start, end, type || ''); + + if (blob) { + blob = new Blob(self.uid, blob); + } + return blob; + } + }; + + return (extensions.Blob = FlashBlob); +}); + +// Included from: src/javascript/runtime/flash/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileReader +@private +*/ +define("moxie/runtime/flash/file/FileReader", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Encode" +], function(extensions, Encode) { + + function _formatData(data, op) { + switch (op) { + case 'readAsText': + return Encode.atob(data, 'utf8'); + case 'readAsBinaryString': + return Encode.atob(data); + case 'readAsDataURL': + return data; + } + return null; + } + + var FileReader = { + read: function(op, blob) { + var comp = this; + + comp.result = ''; + + // special prefix for DataURL read mode + if (op === 'readAsDataURL') { + comp.result = 'data:' + (blob.type || '') + ';base64,'; + } + + comp.bind('Progress', function(e, data) { + if (data) { + comp.result += _formatData(data, op); + } + }, 999); + + return comp.getRuntime().shimExec.call(this, 'FileReader', 'readAsBase64', blob.uid); + } + }; + + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/flash/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileReaderSync +@private +*/ +define("moxie/runtime/flash/file/FileReaderSync", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Encode" +], function(extensions, Encode) { + + function _formatData(data, op) { + switch (op) { + case 'readAsText': + return Encode.atob(data, 'utf8'); + case 'readAsBinaryString': + return Encode.atob(data); + case 'readAsDataURL': + return data; + } + return null; + } + + var FileReaderSync = { + read: function(op, blob) { + var result, self = this.getRuntime(); + + result = self.shimExec.call(this, 'FileReaderSync', 'readAsBase64', blob.uid); + if (!result) { + return null; // or throw ex + } + + // special prefix for DataURL read mode + if (op === 'readAsDataURL') { + result = 'data:' + (blob.type || '') + ';base64,' + result; + } + + return _formatData(result, op, blob.type); + } + }; + + return (extensions.FileReaderSync = FileReaderSync); +}); + +// Included from: src/javascript/runtime/flash/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/flash/xhr/XMLHttpRequest", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Basic", + "moxie/file/Blob", + "moxie/file/File", + "moxie/file/FileReaderSync", + "moxie/xhr/FormData", + "moxie/runtime/Transporter" +], function(extensions, Basic, Blob, File, FileReaderSync, FormData, Transporter) { + + var XMLHttpRequest = { + + send: function(meta, data) { + var target = this, self = target.getRuntime(); + + function send() { + meta.transport = self.mode; + self.shimExec.call(target, 'XMLHttpRequest', 'send', meta, data); + } + + + function appendBlob(name, blob) { + self.shimExec.call(target, 'XMLHttpRequest', 'appendBlob', name, blob.uid); + data = null; + send(); + } + + + function attachBlob(blob, cb) { + var tr = new Transporter(); + + tr.bind("TransportingComplete", function() { + cb(this.result); + }); + + tr.transport(blob.getSource(), blob.type, { + ruid: self.uid + }); + } + + // copy over the headers if any + if (!Basic.isEmptyObj(meta.headers)) { + Basic.each(meta.headers, function(value, header) { + self.shimExec.call(target, 'XMLHttpRequest', 'setRequestHeader', header, value.toString()); // Silverlight doesn't accept integers into the arguments of type object + }); + } + + // transfer over multipart params and blob itself + if (data instanceof FormData) { + var blobField; + data.each(function(value, name) { + if (value instanceof Blob) { + blobField = name; + } else { + self.shimExec.call(target, 'XMLHttpRequest', 'append', name, value); + } + }); + + if (!data.hasBlob()) { + data = null; + send(); + } else { + var blob = data.getBlob(); + if (blob.isDetached()) { + attachBlob(blob, function(attachedBlob) { + blob.destroy(); + appendBlob(blobField, attachedBlob); + }); + } else { + appendBlob(blobField, blob); + } + } + } else if (data instanceof Blob) { + if (data.isDetached()) { + attachBlob(data, function(attachedBlob) { + data.destroy(); + data = attachedBlob.uid; + send(); + }); + } else { + data = data.uid; + send(); + } + } else { + send(); + } + }, + + getResponse: function(responseType) { + var frs, blob, self = this.getRuntime(); + + blob = self.shimExec.call(this, 'XMLHttpRequest', 'getResponseAsBlob'); + + if (blob) { + blob = new File(self.uid, blob); + + if ('blob' === responseType) { + return blob; + } + + try { + frs = new FileReaderSync(); + + if (!!~Basic.inArray(responseType, ["", "text"])) { + return frs.readAsText(blob); + } else if ('json' === responseType && !!window.JSON) { + return JSON.parse(frs.readAsText(blob)); + } + } finally { + blob.destroy(); + } + } + return null; + }, + + abort: function(upload_complete_flag) { + var self = this.getRuntime(); + + self.shimExec.call(this, 'XMLHttpRequest', 'abort'); + + this.dispatchEvent('readystatechange'); + // this.dispatchEvent('progress'); + this.dispatchEvent('abort'); + + //if (!upload_complete_flag) { + // this.dispatchEvent('uploadprogress'); + //} + } + }; + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/flash/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/runtime/Transporter +@private +*/ +define("moxie/runtime/flash/runtime/Transporter", [ + "moxie/runtime/flash/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + var Transporter = { + getAsBlob: function(type) { + var self = this.getRuntime() + , blob = self.shimExec.call(this, 'Transporter', 'getAsBlob', type) + ; + if (blob) { + return new Blob(self.uid, blob); + } + return null; + } + }; + + return (extensions.Transporter = Transporter); +}); + +// Included from: src/javascript/runtime/flash/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/image/Image +@private +*/ +define("moxie/runtime/flash/image/Image", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/Transporter", + "moxie/file/Blob", + "moxie/file/FileReaderSync" +], function(extensions, Basic, Transporter, Blob, FileReaderSync) { + + var Image = { + loadFromBlob: function(blob) { + var comp = this, self = comp.getRuntime(); + + function exec(srcBlob) { + self.shimExec.call(comp, 'Image', 'loadFromBlob', srcBlob.uid); + comp = self = null; + } + + if (blob.isDetached()) { // binary string + var tr = new Transporter(); + tr.bind("TransportingComplete", function() { + exec(tr.result.getSource()); + }); + tr.transport(blob.getSource(), blob.type, { ruid: self.uid }); + } else { + exec(blob.getSource()); + } + }, + + loadFromImage: function(img) { + var self = this.getRuntime(); + return self.shimExec.call(this, 'Image', 'loadFromImage', img.uid); + }, + + getInfo: function() { + var self = this.getRuntime() + , info = self.shimExec.call(this, 'Image', 'getInfo') + ; + + if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) { + info.meta.thumb.data = new Blob(self.uid, info.meta.thumb.data); + } + return info; + }, + + getAsBlob: function(type, quality) { + var self = this.getRuntime() + , blob = self.shimExec.call(this, 'Image', 'getAsBlob', type, quality) + ; + if (blob) { + return new Blob(self.uid, blob); + } + return null; + }, + + getAsDataURL: function() { + var self = this.getRuntime() + , blob = self.Image.getAsBlob.apply(this, arguments) + , frs + ; + if (!blob) { + return null; + } + frs = new FileReaderSync(); + return frs.readAsDataURL(blob); + } + }; + + return (extensions.Image = Image); +}); + +// Included from: src/javascript/runtime/silverlight/Runtime.js + +/** + * RunTime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +Defines constructor for Silverlight runtime. + +@class moxie/runtime/silverlight/Runtime +@private +*/ +define("moxie/runtime/silverlight/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Env", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/runtime/Runtime" +], function(Basic, Env, Dom, x, Runtime) { + + var type = "silverlight", extensions = {}; + + function isInstalled(version) { + var isVersionSupported = false, control = null, actualVer, + actualVerArray, reqVerArray, requiredVersionPart, actualVersionPart, index = 0; + + try { + try { + control = new ActiveXObject('AgControl.AgControl'); + + if (control.IsVersionSupported(version)) { + isVersionSupported = true; + } + + control = null; + } catch (e) { + var plugin = navigator.plugins["Silverlight Plug-In"]; + + if (plugin) { + actualVer = plugin.description; + + if (actualVer === "1.0.30226.2") { + actualVer = "2.0.30226.2"; + } + + actualVerArray = actualVer.split("."); + + while (actualVerArray.length > 3) { + actualVerArray.pop(); + } + + while ( actualVerArray.length < 4) { + actualVerArray.push(0); + } + + reqVerArray = version.split("."); + + while (reqVerArray.length > 4) { + reqVerArray.pop(); + } + + do { + requiredVersionPart = parseInt(reqVerArray[index], 10); + actualVersionPart = parseInt(actualVerArray[index], 10); + index++; + } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); + + if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart)) { + isVersionSupported = true; + } + } + } + } catch (e2) { + isVersionSupported = false; + } + + return isVersionSupported; + } + + /** + Constructor for the Silverlight Runtime + + @class SilverlightRuntime + @extends Runtime + */ + function SilverlightRuntime(options) { + var I = this, initTimer; + + options = Basic.extend({ xap_url: Env.xap_url }, options); + + Runtime.call(this, options, type, { + access_binary: Runtime.capTrue, + access_image_binary: Runtime.capTrue, + display_media: Runtime.capTrue, + do_cors: Runtime.capTrue, + drag_and_drop: false, + report_upload_progress: Runtime.capTrue, + resize_image: Runtime.capTrue, + return_response_headers: function(value) { + return value && I.mode === 'client'; + }, + return_response_type: function(responseType) { + if (responseType !== 'json') { + return true; + } else { + return !!window.JSON; + } + }, + return_status_code: function(code) { + return I.mode === 'client' || !Basic.arrayDiff(code, [200, 404]); + }, + select_file: Runtime.capTrue, + select_multiple: Runtime.capTrue, + send_binary_string: Runtime.capTrue, + send_browser_cookies: function(value) { + return value && I.mode === 'browser'; + }, + send_custom_headers: function(value) { + return value && I.mode === 'client'; + }, + send_multipart: Runtime.capTrue, + slice_blob: Runtime.capTrue, + stream_upload: true, + summon_file_dialog: false, + upload_filesize: Runtime.capTrue, + use_http_method: function(methods) { + return I.mode === 'client' || !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }, { + // capabilities that require specific mode + return_response_headers: function(value) { + return value ? 'client' : 'browser'; + }, + return_status_code: function(code) { + return Basic.arrayDiff(code, [200, 404]) ? 'client' : ['client', 'browser']; + }, + send_browser_cookies: function(value) { + return value ? 'browser' : 'client'; + }, + send_custom_headers: function(value) { + return value ? 'client' : 'browser'; + }, + use_http_method: function(methods) { + return Basic.arrayDiff(methods, ['GET', 'POST']) ? 'client' : ['client', 'browser']; + } + }); + + + // minimal requirement + if (!isInstalled('2.0.31005.0') || Env.browser === 'Opera') { + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tSilverlight is not installed or minimal version (2.0.31005.0) requirement not met (not likely)."); + } + + this.mode = false; + } + + + Basic.extend(this, { + getShim: function() { + return Dom.get(this.uid).content.Moxie; + }, + + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return I.getShim().exec(this.uid, component, action, args); + }, + + init : function() { + var container; + + container = this.getShimContainer(); + + container.innerHTML = '' + + '' + + '' + + '' + + '' + + '' + + ''; + + // Init is dispatched by the shim + initTimer = setTimeout(function() { + if (I && !I.initialized) { // runtime might be already destroyed by this moment + I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\Silverlight failed to initialize within a specified period of time (5-10s)."); + } + } + }, Env.OS !== 'Windows'? 10000 : 5000); // give it more time to initialize in non Windows OS (like Mac) + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + clearTimeout(initTimer); // initialization check might be still onwait + options = initTimer = destroy = I = null; + }; + }(this.destroy)) + + }, extensions); + } + + Runtime.addConstructor(type, SilverlightRuntime); + + return extensions; +}); + +// Included from: src/javascript/runtime/silverlight/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileInput +@private +*/ +define("moxie/runtime/silverlight/file/FileInput", [ + "moxie/runtime/silverlight/Runtime", + "moxie/file/File", + "moxie/core/utils/Basic" +], function(extensions, File, Basic) { + + var FileInput = { + init: function(options) { + var comp = this, I = this.getRuntime(); + + function toFilters(accept) { + var filter = ''; + for (var i = 0; i < accept.length; i++) { + filter += (filter !== '' ? '|' : '') + accept[i].title + " | *." + accept[i].extensions.replace(/,/g, ';*.'); + } + return filter; + } + + this.bind("Change", function() { + var files = I.shimExec.call(comp, 'FileInput', 'getFiles'); + comp.files = []; + Basic.each(files, function(file) { + comp.files.push(new File(I.uid, file)); + }); + }, 999); + + this.getRuntime().shimExec.call(this, 'FileInput', 'init', toFilters(options.accept), options.name, options.multiple); + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/silverlight/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/Blob +@private +*/ +define("moxie/runtime/silverlight/file/Blob", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/Blob" +], function(extensions, Basic, Blob) { + return (extensions.Blob = Basic.extend({}, Blob)); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileDrop +@private +*/ +define("moxie/runtime/silverlight/file/FileDrop", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Dom", + "moxie/core/utils/Events" +], function(extensions, Dom, Events) { + + // not exactly useful, since works only in safari (...crickets...) + var FileDrop = { + init: function() { + var comp = this, self = comp.getRuntime(), dropZone; + + dropZone = self.getShimContainer(); + + Events.addEvent(dropZone, 'dragover', function(e) { + e.preventDefault(); + e.stopPropagation(); + e.dataTransfer.dropEffect = 'copy'; + }, comp.uid); + + Events.addEvent(dropZone, 'dragenter', function(e) { + e.preventDefault(); + var flag = Dom.get(self.uid).dragEnter(e); + // If handled, then stop propagation of event in DOM + if (flag) { + e.stopPropagation(); + } + }, comp.uid); + + Events.addEvent(dropZone, 'drop', function(e) { + e.preventDefault(); + var flag = Dom.get(self.uid).dragDrop(e); + // If handled, then stop propagation of event in DOM + if (flag) { + e.stopPropagation(); + } + }, comp.uid); + + return self.shimExec.call(this, 'FileDrop', 'init'); + } + }; + + return (extensions.FileDrop = FileDrop); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileReader +@private +*/ +define("moxie/runtime/silverlight/file/FileReader", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/FileReader" +], function(extensions, Basic, FileReader) { + return (extensions.FileReader = Basic.extend({}, FileReader)); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileReaderSync +@private +*/ +define("moxie/runtime/silverlight/file/FileReaderSync", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/FileReaderSync" +], function(extensions, Basic, FileReaderSync) { + return (extensions.FileReaderSync = Basic.extend({}, FileReaderSync)); +}); + +// Included from: src/javascript/runtime/silverlight/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/silverlight/xhr/XMLHttpRequest", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/xhr/XMLHttpRequest" +], function(extensions, Basic, XMLHttpRequest) { + return (extensions.XMLHttpRequest = Basic.extend({}, XMLHttpRequest)); +}); + +// Included from: src/javascript/runtime/silverlight/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/runtime/Transporter +@private +*/ +define("moxie/runtime/silverlight/runtime/Transporter", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/runtime/Transporter" +], function(extensions, Basic, Transporter) { + return (extensions.Transporter = Basic.extend({}, Transporter)); +}); + +// Included from: src/javascript/runtime/silverlight/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/image/Image +@private +*/ +define("moxie/runtime/silverlight/image/Image", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/file/Blob", + "moxie/runtime/flash/image/Image" +], function(extensions, Basic, Blob, Image) { + return (extensions.Image = Basic.extend({}, Image, { + + getInfo: function() { + var self = this.getRuntime() + , grps = ['tiff', 'exif', 'gps', 'thumb'] + , info = { meta: {} } + , rawInfo = self.shimExec.call(this, 'Image', 'getInfo') + ; + + if (rawInfo.meta) { + Basic.each(grps, function(grp) { + var meta = rawInfo.meta[grp] + , tag + , i + , length + , value + ; + if (meta && meta.keys) { + info.meta[grp] = {}; + for (i = 0, length = meta.keys.length; i < length; i++) { + tag = meta.keys[i]; + value = meta[tag]; + if (value) { + // convert numbers + if (/^(\d|[1-9]\d+)$/.test(value)) { // integer (make sure doesn't start with zero) + value = parseInt(value, 10); + } else if (/^\d*\.\d+$/.test(value)) { // double + value = parseFloat(value); + } + info.meta[grp][tag] = value; + } + } + } + }); + + // save thumb data as blob + if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) { + info.meta.thumb.data = new Blob(self.uid, info.meta.thumb.data); + } + } + + info.width = parseInt(rawInfo.width, 10); + info.height = parseInt(rawInfo.height, 10); + info.size = parseInt(rawInfo.size, 10); + info.type = rawInfo.type; + info.name = rawInfo.name; + + return info; + } + })); +}); + +// Included from: src/javascript/runtime/html4/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global File:true */ + +/** +Defines constructor for HTML4 runtime. + +@class moxie/runtime/html4/Runtime +@private +*/ +define("moxie/runtime/html4/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/Runtime", + "moxie/core/utils/Env" +], function(Basic, x, Runtime, Env) { + + var type = 'html4', extensions = {}; + + function Html4Runtime(options) { + var I = this + , Test = Runtime.capTest + , True = Runtime.capTrue + ; + + Runtime.call(this, options, type, { + access_binary: Test(window.FileReader || window.File && File.getAsDataURL), + access_image_binary: false, + display_media: Test(extensions.Image && (Env.can('create_canvas') || Env.can('use_data_uri_over32kb'))), + do_cors: false, + drag_and_drop: false, + filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest + return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + (Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>=')); + }()), + resize_image: function() { + return extensions.Image && I.can('access_binary') && Env.can('create_canvas'); + }, + report_upload_progress: false, + return_response_headers: false, + return_response_type: function(responseType) { + if (responseType === 'json' && !!window.JSON) { + return true; + } + return !!~Basic.inArray(responseType, ['text', 'document', '']); + }, + return_status_code: function(code) { + return !Basic.arrayDiff(code, [200, 404]); + }, + select_file: function() { + return Env.can('use_fileinput'); + }, + select_multiple: false, + send_binary_string: false, + send_custom_headers: false, + send_multipart: true, + slice_blob: false, + stream_upload: function() { + return I.can('select_file'); + }, + summon_file_dialog: function() { // yeah... some dirty sniffing here... + return I.can('select_file') && ( + (Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) || + (Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']) + ); + }, + upload_filesize: True, + use_http_method: function(methods) { + return !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }); + + + Basic.extend(this, { + init : function() { + this.trigger("Init"); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + destroy = I = null; + }; + }(this.destroy)) + }); + + Basic.extend(this.getShim(), extensions); + } + + Runtime.addConstructor(type, Html4Runtime); + + return extensions; +}); + +// Included from: src/javascript/runtime/html4/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/file/FileInput +@private +*/ +define("moxie/runtime/html4/file/FileInput", [ + "moxie/runtime/html4/Runtime", + "moxie/file/File", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, File, Basic, Dom, Events, Mime, Env) { + + function FileInput() { + var _uid, _mimes = [], _options; + + function addInput() { + var comp = this, I = comp.getRuntime(), shimContainer, browseButton, currForm, form, input, uid; + + uid = Basic.guid('uid_'); + + shimContainer = I.getShimContainer(); // we get new ref everytime to avoid memory leaks in IE + + if (_uid) { // move previous form out of the view + currForm = Dom.get(_uid + '_form'); + if (currForm) { + Basic.extend(currForm.style, { top: '100%' }); + } + } + + // build form in DOM, since innerHTML version not able to submit file for some reason + form = document.createElement('form'); + form.setAttribute('id', uid + '_form'); + form.setAttribute('method', 'post'); + form.setAttribute('enctype', 'multipart/form-data'); + form.setAttribute('encoding', 'multipart/form-data'); + + Basic.extend(form.style, { + overflow: 'hidden', + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + input = document.createElement('input'); + input.setAttribute('id', uid); + input.setAttribute('type', 'file'); + input.setAttribute('name', _options.name || 'Filedata'); + input.setAttribute('accept', _mimes.join(',')); + + Basic.extend(input.style, { + fontSize: '999px', + opacity: 0 + }); + + form.appendChild(input); + shimContainer.appendChild(form); + + // prepare file input to be placed underneath the browse_button element + Basic.extend(input.style, { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + if (Env.browser === 'IE' && Env.verComp(Env.version, 10, '<')) { + Basic.extend(input.style, { + filter : "progid:DXImageTransform.Microsoft.Alpha(opacity=0)" + }); + } + + input.onchange = function() { // there should be only one handler for this + var file; + + if (!this.value) { + return; + } + + if (this.files) { // check if browser is fresh enough + file = this.files[0]; + + // ignore empty files (IE10 for example hangs if you try to send them via XHR) + if (file.size === 0) { + form.parentNode.removeChild(form); + return; + } + } else { + file = { + name: this.value + }; + } + + file = new File(I.uid, file); + + // clear event handler + this.onchange = function() {}; + addInput.call(comp); + + comp.files = [file]; + + // substitute all ids with file uids (consider file.uid read-only - we cannot do it the other way around) + input.setAttribute('id', file.uid); + form.setAttribute('id', file.uid + '_form'); + + comp.trigger('change'); + + input = form = null; + }; + + + // route click event to the input + if (I.can('summon_file_dialog')) { + browseButton = Dom.get(_options.browse_button); + Events.removeEvent(browseButton, 'click', comp.uid); + Events.addEvent(browseButton, 'click', function(e) { + if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] + input.click(); + } + e.preventDefault(); + }, comp.uid); + } + + _uid = uid; + + shimContainer = currForm = browseButton = null; + } + + Basic.extend(this, { + init: function(options) { + var comp = this, I = comp.getRuntime(), shimContainer; + + // figure out accept string + _options = options; + _mimes = options.accept.mimes || Mime.extList2mimes(options.accept, I.can('filter_by_extension')); + + shimContainer = I.getShimContainer(); + + (function() { + var browseButton, zIndex, top; + + browseButton = Dom.get(options.browse_button); + + // Route click event to the input[type=file] element for browsers that support such behavior + if (I.can('summon_file_dialog')) { + if (Dom.getStyle(browseButton, 'position') === 'static') { + browseButton.style.position = 'relative'; + } + + zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1; + + browseButton.style.zIndex = zIndex; + shimContainer.style.zIndex = zIndex - 1; + } + + /* Since we have to place input[type=file] on top of the browse_button for some browsers, + browse_button loses interactivity, so we restore it here */ + top = I.can('summon_file_dialog') ? browseButton : shimContainer; + + Events.addEvent(top, 'mouseover', function() { + comp.trigger('mouseenter'); + }, comp.uid); + + Events.addEvent(top, 'mouseout', function() { + comp.trigger('mouseleave'); + }, comp.uid); + + Events.addEvent(top, 'mousedown', function() { + comp.trigger('mousedown'); + }, comp.uid); + + Events.addEvent(Dom.get(options.container), 'mouseup', function() { + comp.trigger('mouseup'); + }, comp.uid); + + browseButton = null; + }()); + + addInput.call(this); + + shimContainer = null; + + // trigger ready event asynchronously + comp.trigger({ + type: 'ready', + async: true + }); + }, + + + disable: function(state) { + var input; + + if ((input = Dom.get(_uid))) { + input.disabled = !!state; + } + }, + + destroy: function() { + var I = this.getRuntime() + , shim = I.getShim() + , shimContainer = I.getShimContainer() + ; + + Events.removeAllEvents(shimContainer, this.uid); + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid); + + if (shimContainer) { + shimContainer.innerHTML = ''; + } + + shim.removeInstance(this.uid); + + _uid = _mimes = _options = shimContainer = shim = null; + } + }); + } + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/html4/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/file/FileReader +@private +*/ +define("moxie/runtime/html4/file/FileReader", [ + "moxie/runtime/html4/Runtime", + "moxie/runtime/html5/file/FileReader" +], function(extensions, FileReader) { + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/html4/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/html4/xhr/XMLHttpRequest", [ + "moxie/runtime/html4/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Url", + "moxie/core/Exceptions", + "moxie/core/utils/Events", + "moxie/file/Blob", + "moxie/xhr/FormData" +], function(extensions, Basic, Dom, Url, x, Events, Blob, FormData) { + + function XMLHttpRequest() { + var _status, _response, _iframe; + + function cleanup(cb) { + var target = this, uid, form, inputs, i, hasFile = false; + + if (!_iframe) { + return; + } + + uid = _iframe.id.replace(/_iframe$/, ''); + + form = Dom.get(uid + '_form'); + if (form) { + inputs = form.getElementsByTagName('input'); + i = inputs.length; + + while (i--) { + switch (inputs[i].getAttribute('type')) { + case 'hidden': + inputs[i].parentNode.removeChild(inputs[i]); + break; + case 'file': + hasFile = true; // flag the case for later + break; + } + } + inputs = []; + + if (!hasFile) { // we need to keep the form for sake of possible retries + form.parentNode.removeChild(form); + } + form = null; + } + + // without timeout, request is marked as canceled (in console) + setTimeout(function() { + Events.removeEvent(_iframe, 'load', target.uid); + if (_iframe.parentNode) { // #382 + _iframe.parentNode.removeChild(_iframe); + } + + // check if shim container has any other children, if - not, remove it as well + var shimContainer = target.getRuntime().getShimContainer(); + if (!shimContainer.children.length) { + shimContainer.parentNode.removeChild(shimContainer); + } + + shimContainer = _iframe = null; + cb(); + }, 1); + } + + Basic.extend(this, { + send: function(meta, data) { + var target = this, I = target.getRuntime(), uid, form, input, blob; + + _status = _response = null; + + function createIframe() { + var container = I.getShimContainer() || document.body + , temp = document.createElement('div') + ; + + // IE 6 won't be able to set the name using setAttribute or iframe.name + temp.innerHTML = ''; + _iframe = temp.firstChild; + container.appendChild(_iframe); + + /* _iframe.onreadystatechange = function() { + console.info(_iframe.readyState); + };*/ + + Events.addEvent(_iframe, 'load', function() { // _iframe.onload doesn't work in IE lte 8 + var el; + + try { + el = _iframe.contentWindow.document || _iframe.contentDocument || window.frames[_iframe.id].document; + + // try to detect some standard error pages + if (/^4(0[0-9]|1[0-7]|2[2346])\s/.test(el.title)) { // test if title starts with 4xx HTTP error + _status = el.title.replace(/^(\d+).*$/, '$1'); + } else { + _status = 200; + // get result + _response = Basic.trim(el.body.innerHTML); + + // we need to fire these at least once + target.trigger({ + type: 'progress', + loaded: _response.length, + total: _response.length + }); + + if (blob) { // if we were uploading a file + target.trigger({ + type: 'uploadprogress', + loaded: blob.size || 1025, + total: blob.size || 1025 + }); + } + } + } catch (ex) { + if (Url.hasSameOrigin(meta.url)) { + // if response is sent with error code, iframe in IE gets redirected to res://iframe.dll/http_x.htm + // which obviously results to cross domain error (wtf?) + _status = 404; + } else { + cleanup.call(target, function() { + target.trigger('error'); + }); + return; + } + } + + cleanup.call(target, function() { + target.trigger('load'); + }); + }, target.uid); + } // end createIframe + + // prepare data to be sent and convert if required + if (data instanceof FormData && data.hasBlob()) { + blob = data.getBlob(); + uid = blob.uid; + input = Dom.get(uid); + form = Dom.get(uid + '_form'); + if (!form) { + throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); + } + } else { + uid = Basic.guid('uid_'); + + form = document.createElement('form'); + form.setAttribute('id', uid + '_form'); + form.setAttribute('method', meta.method); + form.setAttribute('enctype', 'multipart/form-data'); + form.setAttribute('encoding', 'multipart/form-data'); + + I.getShimContainer().appendChild(form); + } + + // set upload target + form.setAttribute('target', uid + '_iframe'); + + if (data instanceof FormData) { + data.each(function(value, name) { + if (value instanceof Blob) { + if (input) { + input.setAttribute('name', name); + } + } else { + var hidden = document.createElement('input'); + + Basic.extend(hidden, { + type : 'hidden', + name : name, + value : value + }); + + // make sure that input[type="file"], if it's there, comes last + if (input) { + form.insertBefore(hidden, input); + } else { + form.appendChild(hidden); + } + } + }); + } + + // set destination url + form.setAttribute("action", meta.url); + + createIframe(); + form.submit(); + target.trigger('loadstart'); + }, + + getStatus: function() { + return _status; + }, + + getResponse: function(responseType) { + if ('json' === responseType) { + // strip off
      ..
      tags that might be enclosing the response + if (Basic.typeOf(_response) === 'string' && !!window.JSON) { + try { + return JSON.parse(_response.replace(/^\s*]*>/, '').replace(/<\/pre>\s*$/, '')); + } catch (ex) { + return null; + } + } + } else if ('document' === responseType) { + + } + return _response; + }, + + abort: function() { + var target = this; + + if (_iframe && _iframe.contentWindow) { + if (_iframe.contentWindow.stop) { // FireFox/Safari/Chrome + _iframe.contentWindow.stop(); + } else if (_iframe.contentWindow.document.execCommand) { // IE + _iframe.contentWindow.document.execCommand('Stop'); + } else { + _iframe.src = "about:blank"; + } + } + + cleanup.call(this, function() { + // target.dispatchEvent('readystatechange'); + target.dispatchEvent('abort'); + }); + } + }); + } + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/html4/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/image/Image +@private +*/ +define("moxie/runtime/html4/image/Image", [ + "moxie/runtime/html4/Runtime", + "moxie/runtime/html5/image/Image" +], function(extensions, Image) { + return (extensions.Image = Image); +}); + +expose(["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/FileInput","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"]); +})(this); +/** + * o.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global moxie:true */ + +/** +Globally exposed namespace with the most frequently used public classes and handy methods. + +@class o +@static +@private +*/ +(function(exports) { + "use strict"; + + var o = {}, inArray = exports.moxie.core.utils.Basic.inArray; + + // directly add some public classes + // (we do it dynamically here, since for custom builds we cannot know beforehand what modules were included) + (function addAlias(ns) { + var name, itemType; + for (name in ns) { + itemType = typeof(ns[name]); + if (itemType === 'object' && !~inArray(name, ['Exceptions', 'Env', 'Mime'])) { + addAlias(ns[name]); + } else if (itemType === 'function') { + o[name] = ns[name]; + } + } + })(exports.moxie); + + // add some manually + o.Env = exports.moxie.core.utils.Env; + o.Mime = exports.moxie.core.utils.Mime; + o.Exceptions = exports.moxie.core.Exceptions; + + // expose globally + exports.mOxie = o; + if (!exports.o) { + exports.o = o; + } + return o; +})(this); diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.min.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.min.js new file mode 100644 index 0000000000..dfd12b0ca5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/moxie.min.js @@ -0,0 +1,16 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.3.4 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2015-07-18 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(t,n){var i,r,o,a;if(t)if("number"===e(t.length)){for(o=0,i=t.length;i>o;o++)if(n(t[o],o)===!1)return}else if("object"===e(t))for(r in t)if(t.hasOwnProperty(r)&&n(t[r],r)===!1)return},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},h=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),Math.floor(e)},f=function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e(t)?t:""})};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,sprintf:f,parseSizeStr:h}}),i(c,[u],function(e){function t(e,t,n){var i=0,r=0,o=0,a={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},s=function(e){return e=(""+e).replace(/[_\-+]/g,"."),e=e.replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,"."),e.length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?a[e]||-7:parseInt(e,10):0};for(e=s(e),t=s(t),r=Math.max(e.length,t.length),i=0;r>i;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",h="architecture",f="console",p="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,h=arguments;n0?2==c.length?typeof c[1]==i?t[c[0]]=c[1].call(this,d):t[c[0]]=c[1]:3==c.length?typeof c[1]!==i||c[1].exec&&c[1].test?t[c[0]]=d?d.replace(c[1],c[2]):e:t[c[0]]=d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){if(navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/))return!1;var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r=(new n).getResult(),o={can:i,uaParser:n,browser:r.browser.name,version:r.browser.version,os:r.os.name,osVersion:r.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return o.OS=o.os,o}),i(l,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(d,[u,l],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete e[this.uid][t],n.isEmptyObj(e[this.uid])&&delete e[this.uid])}},removeAllEventListeners:function(){e[this.uid]&&delete e[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==n.typeOf(i)){if(s=i,"string"!==n.typeOf(s.type))throw new t.EventException(t.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?!function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=e[r]&&e[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];n.each(o,function(e){a[0].target=e.scope,d.push(u.async?function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}:function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&n.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},handleEventProps:function(e){var t=this;this.bind(e.join(" "),function(e){var t="on"+e.type.toLowerCase();"function"===n.typeOf(this[t])&&this[t].apply(this,arguments)}),n.each(e,function(e){e="on"+e.toLowerCase(e),"undefined"===n.typeOf(t[e])&&(t[e]=null)})}})}return i.instance=new i,i}),i(m,[c,u,h,p],function(e,t,n,i){function r(e,i,o,s,u){var c=this,l,d=t.guid(i+"_"),h=u||"browser";e=e||{},a[d]=this,o=t.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},o),e.preferred_caps&&(h=r.getMode(s,e.preferred_caps,h)),l=function(){var e={};return{exec:function(t,n,i,r){return l[n]&&(e[t]||(e[t]={context:this,instance:new l[n]}),e[t].instance[i])?e[t].instance[i].apply(this,r):void 0},removeInstance:function(t){delete e[t]},removeAllInstances:function(){var n=this;t.each(e,function(e,i){"function"===t.typeOf(e.instance.destroy)&&e.instance.destroy.call(e.context),n.removeInstance(i)})}}}(),t.extend(this,{initialized:!1,uid:d,type:i,mode:r.getMode(s,e.required_caps,h),shimid:d+"_container",clients:0,options:e,can:function(e,n){var i=arguments[2]||o;if("string"===t.typeOf(e)&&"undefined"===t.typeOf(n)&&(e=r.parseCaps(e)),"object"===t.typeOf(e)){for(var a in e)if(!this.can(a,e[a],i))return!1;return!0}return"function"===t.typeOf(i[e])?i[e].call(this,n):n===i[e]},getShimContainer:function(){var e,i=n.get(this.shimid);return i||(e=this.options.container?n.get(this.options.container):document.body,i=document.createElement("div"),i.id=this.shimid,i.className="moxie-shim moxie-shim-"+this.type,t.extend(i.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),e.appendChild(i),e=null),i},getShim:function(){return l},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec.call(this,this.uid,e,t,n)},exec:function(e,t){var n=[].slice.call(arguments,2);return c[e]&&c[e][t]?c[e][t].apply(this,n):c.shimExec.apply(this,arguments)},destroy:function(){if(c){var e=n.get(this.shimid);e&&e.parentNode.removeChild(e),l&&l.removeAllInstances(),this.unbindAll(),delete a[this.uid],this.uid=null,d=c=l=e=null}}}),this.mode&&e.required_caps&&!this.can(e.required_caps)&&(this.mode=!1)}var o={},a={};return r.order="html5,flash,silverlight,html4",r.getRuntime=function(e){return a[e]?a[e]:!1},r.addConstructor=function(e,t){t.prototype=i.instance,o[e]=t},r.getConstructor=function(e){return o[e]||null},r.getInfo=function(e){var t=r.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},r.parseCaps=function(e){var n={};return"string"!==t.typeOf(e)?e||{}:(t.each(e.split(","),function(e){n[e]=!0}),n)},r.can=function(e,t){var n,i=r.getConstructor(e),o;return i?(n=new i({required_caps:t}),o=n.mode,n.destroy(),!!o):!1},r.thatCan=function(e,t){var n=(t||r.order).split(/\s*,\s*/);for(var i in n)if(r.can(n[i],e))return n[i];return null},r.getMode=function(e,n,i){var r=null;if("undefined"===t.typeOf(i)&&(i="browser"),n&&!t.isEmptyObj(e)){if(t.each(n,function(n,i){if(e.hasOwnProperty(i)){var o=e[i](n);if("string"==typeof o&&(o=[o]),r){if(!(r=t.arrayIntersect(r,o)))return r=!1}else r=o}}),r)return-1!==t.inArray(i,r)?i:r[0];if(r===!1)return!1}return i},r.capTrue=function(){return!0},r.capFalse=function(){return!1},r.capTest=function(e){return function(){return!!e}},r}),i(g,[c,f,u,m],function(e,t,n,i){return function r(){var e;n.extend(this,{connectRuntime:function(r){function o(n){var s,u;return n.length?(s=n.shift().toLowerCase(),(u=i.getConstructor(s))?(e=new u(r),e.bind("Init",function(){e.initialized=!0,setTimeout(function(){e.clients++,a.trigger("RuntimeInit",e)},1)}),e.bind("Error",function(){e.destroy(),o(n)}),e.mode?void e.init():void e.trigger("Error")):void o(n)):(a.trigger("RuntimeError",new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)),void(e=null))}var a=this,s;if("string"===n.typeOf(r)?s=r:"string"===n.typeOf(r.ruid)&&(s=r.ruid),s){if(e=i.getRuntime(s))return e.clients++,e;throw new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)}o((r.runtime_order||i.order).split(/\s*,\s*/))},disconnectRuntime:function(){e&&--e.clients<=0&&e.destroy(),e=null},getRuntime:function(){return e&&e.uid?e:e=null},exec:function(){return e?e.exec.apply(this,arguments):null}})}}),i(v,[u,c,d,h,f,p,l,m,g],function(e,t,n,i,r,o,a,s,u){function c(t){var o=this,c,d,h;if(-1!==e.inArray(e.typeOf(t),["string","node"])&&(t={browse_button:t}),d=i.get(t.browse_button),!d)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR);h={accept:[{title:a.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:d.parentNode||document.body},t=e.extend({},h,t),"string"==typeof t.required_caps&&(t.required_caps=s.parseCaps(t.required_caps)),"string"==typeof t.accept&&(t.accept=n.mimes2extList(t.accept)),c=i.get(t.container),c||(c=document.body),"static"===i.getStyle(c,"position")&&(c.style.position="relative"),c=d=null,u.call(o),e.extend(o,{uid:e.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){o.bind("RuntimeInit",function(n,r){o.ruid=r.uid,o.shimid=r.shimid,o.bind("Ready",function(){o.trigger("Refresh")},999),o.bind("Refresh",function(){var n,o,a,s;a=i.get(t.browse_button),s=i.get(r.shimid),a&&(n=i.getPos(a,i.get(t.container)),o=i.getSize(a),s&&e.extend(s.style,{top:n.y+"px",left:n.x+"px",width:o.w+"px",height:o.h+"px"})),s=a=null}),r.exec.call(o,"FileInput","init",t)}),o.connectRuntime(e.extend({},t,{required_caps:{select_file:!0}}))},disable:function(t){var n=this.getRuntime();n&&n.exec.call(this,"FileInput","disable","undefined"===e.typeOf(t)?!0:t)},refresh:function(){o.trigger("Refresh")},destroy:function(){var t=this.getRuntime();t&&(t.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===e.typeOf(this.files)&&e.each(this.files,function(e){e.destroy()}),this.files=null,this.unbindAll()}}),this.handleEventProps(l)}var l=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return c.prototype=o.instance,c}),i(w,[],function(){var e=function(e){return unescape(encodeURIComponent(e))},t=function(e){return decodeURIComponent(escape(e))},n=function(e,n){if("function"==typeof window.atob)return n?t(window.atob(e)):window.atob(e);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,h=0,f=0,p="",m=[];if(!e)return e;e+="";do s=i.indexOf(e.charAt(h++)),u=i.indexOf(e.charAt(h++)),c=i.indexOf(e.charAt(h++)),l=i.indexOf(e.charAt(h++)),d=s<<18|u<<12|c<<6|l,r=d>>16&255,o=d>>8&255,a=255&d,64==c?m[f++]=String.fromCharCode(r):64==l?m[f++]=String.fromCharCode(r,o):m[f++]=String.fromCharCode(r,o,a);while(h>18&63,u=d>>12&63,c=d>>6&63,l=63&d,m[f++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(ha;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(I,[f,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(T,[u,f,p,w,x,m,R,y,A,I,c,d],function(e,t,n,i,r,o,a,s,u,c,l,d){function h(){this.uid=e.guid("uid_")}function f(){function n(e,t){return w.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?w[e]:v[e]:void(l.can("define_property")?w[e]=t:v[e]=t):void 0}function u(t){function i(){B&&(B.destroy(),B=null),s.dispatchEvent("loadend"),s=null}function r(r){B.bind("LoadStart",function(e){n("readyState",f.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),O&&s.upload.dispatchEvent(e)}),B.bind("Progress",function(e){n("readyState")!==f.LOADING&&(n("readyState",f.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),B.bind("UploadProgress",function(e){O&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),B.bind("Load",function(t){n("readyState",f.DONE),n("status",Number(r.exec.call(B,"XMLHttpRequest","getStatus")||0)),n("statusText",p[n("status")]||""),n("response",r.exec.call(B,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),k=r.exec.call(B,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(O&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),B.bind("Abort",function(e){s.dispatchEvent(e),i()}),B.bind("Error",function(e){N=!0,n("readyState",f.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(B,"XMLHttpRequest","send",{url:E,method:_,async:y,user:x,password:R,headers:b,mimeType:I,encoding:A,responseType:s.responseType,withCredentials:s.withCredentials,options:H},t)}var s=this;C=(new Date).getTime(),B=new a,"string"==typeof H.required_caps&&(H.required_caps=o.parseCaps(H.required_caps)),H.required_caps=e.extend({},H.required_caps,{return_response_type:s.responseType}),t instanceof c&&(H.required_caps.send_multipart=!0),e.isEmptyObj(b)||(H.required_caps.send_custom_headers=!0),L||(H.required_caps.do_cors=!0),H.ruid?r(B.connectRuntime(H)):(B.bind("RuntimeInit",function(e,t){r(t)}),B.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),B.connectRuntime(H))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),C=M=null}var v=this,w={timeout:0,readyState:f.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},y=!0,E,_,b={},x,R,A=null,I=null,T=!1,S=!1,O=!1,D=!1,N=!1,L=!1,C,M,F=null,P=null,H={},B,k="",U;e.extend(this,w,{uid:e.guid("uid_"),upload:new h,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(x=u||l.user,R=c||l.pass,y=s||!0,y===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);T=!y,S=!1,b={},g.call(this),n("readyState",f.OPENED),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(b[r]?b[r]+=", "+o:b[r]=o,!0)},getAllResponseHeaders:function(){return k||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:k&&""!==k&&(U||(U={},e.each(k.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),U[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),U.hasOwnProperty(t))?U[t].header+": "+U[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[f.LOADING,f.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,P=o},send:function(n,r){if(H="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.readyState!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)H.ruid=n.ruid,I=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();H.ruid=o.ruid,I=o.type||"application/octet-stream"}}else"string"==typeof n&&(A="UTF-8",I="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=H.required_caps&&H.required_caps.send_browser_cookies&&!L),O=!T&&this.upload.hasEventListener(),N=!1,D=!n,T||(S=!0),u.call(this,n)},abort:function(){if(N=!0,T=!1,~e.inArray(n("readyState"),[f.UNSENT,f.OPENED,f.DONE]))n("readyState",f.UNSENT);else{if(n("readyState",f.DONE),S=!1,!B)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);B.getRuntime().exec.call(B,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){B&&("function"===e.typeOf(B.destroy)&&B.destroy(),B=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}}),this.handleEventProps(m.concat(["readystatechange"])),this.upload.handleEventProps(m)}var p={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};h.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return f.UNSENT=0,f.OPENED=1,f.HEADERS_RECEIVED=2,f.LOADING=3,f.DONE=4,f.prototype=n.instance,f}),i(S,[u,w,g,p],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;h>i&&(h=i),n=t.btoa(c.substr(d,h)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,h;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),h=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(O,[u,h,f,A,T,m,g,S,c,p,y,E,w],function(e,t,n,i,r,o,a,s,u,c,l,d,h){function f(){function i(e){e||(e=this.exec("Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof f){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)"data:"===t.substr(0,5)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r.code)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){c.apply(this,arguments)},downsize:function(t){var i={width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,crop:!1,preserveHeaders:!0,resample:!1};t="object"==typeof t?e.extend(i,t):e.extend(i,{width:arguments[0],height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]});try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);this.exec("Image","downsize",t.width,t.height,t.crop,t.preserveHeaders)}catch(r){this.trigger("error",r.code)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsBlob",e||"image/jpeg",t||90)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return h.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i,r){function o(t,r){var o=this;if(u.can("create_canvas")){var l=o.getAsCanvas();if(l)return i.appendChild(l),l=null,o.destroy(),void a.trigger("embedded")}var d=o.getAsDataURL(t,r);if(!d)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",d.length))i.innerHTML='',o.destroy(),a.trigger("embedded");else{var f=new s;f.bind("TransportingComplete",function(){c=a.connectRuntime(this.result.ruid),a.bind("Embedded",function(){e.extend(c.getShimContainer().style,{top:"0px",left:"0px",width:o.width+"px",height:o.height+"px"}),c=null},999),c.exec.call(a,"ImageView","display",this.result.uid,width,height),o.destroy()}),f.transport(h.atob(d.substring(d.indexOf("base64,")+7)),t,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i})}}var a=this,c;r=e.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90},r||{});try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT;var l=new f;return l.bind("Resize",function(){o.call(this,r.type,r.quality)}),l.bind("Load",function(){l.downsize(r)}),this.meta.thumb&&this.meta.thumb.width>=r.width&&this.meta.thumb.height>=r.height?l.load(this.meta.thumb.data):l.clone(this,!1),l}catch(d){this.trigger("error",d.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}}),this.handleEventProps(p),this.bind("Load Resize",function(){i.call(this)},999)}var p=["progress","load","error","resize","embedded"];return f.MAX_RESIZE_WIDTH=8192,f.MAX_RESIZE_HEIGHT=8192,f.prototype=c.instance,f}),i(D,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.verComp(i.version,9,">"))}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.verComp(i.version,21,">=")},select_multiple:function(){return!(!r.can("select_file")||"Safari"===i.browser&&"Windows"===i.os||"iOS"===i.os&&i.verComp(i.osVersion,"7.0.0",">")&&i.verComp(i.osVersion,"8.0.0","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(L,[D,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){var e;n.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,h,f,p,m;e=s,h=e.accept.mimes||o.extList2mimes(e.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=i.get(c.uid),n.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),f=i.get(e.browse_button),c.can("summon_file_dialog")&&("static"===i.getStyle(f,"position")&&(f.style.position="relative"),p=parseInt(i.getStyle(f,"z-index"),10)||1,f.style.zIndex=p,d.style.zIndex=p-1,r.addEvent(f,"click",function(e){var t=i.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?f:d,r.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),r.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),r.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),r.addEvent(i.get(e.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(i){if(u.files=[],n.each(this.files,function(n){var i="";return e.directory&&"."==n.name?!0:(n.webkitRelativePath&&(i="/"+n.webkitRelativePath.replace(/^\//,"")),n=new t(c.uid,n),n.relativePath=i,void u.files.push(n))}),"IE"!==a.browser&&"IEMobile"!==a.browser)this.value="";else{var r=this.cloneNode(!0);this.parentNode.replaceChild(r,this),r.onchange=g}u.files.length&&u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},disable:function(e){var t=this.getRuntime(),n;(n=i.get(t.uid))&&(n.disabled=!!e)},destroy:function(){var t=this.getRuntime(),n=t.getShim(),o=t.getShimContainer();r.removeAllEvents(o,this.uid),r.removeAllEvents(e&&i.get(e.container),this.uid),r.removeAllEvents(e&&i.get(e.browse_button),this.uid),o&&(o.innerHTML=""),n.removeInstance(this.uid),e=o=n=null}})}return e.FileInput=s}),i(C,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(M,[D,E,u,h,N,d],function(e,t,n,i,r,o){function a(){function e(e){if(!e.dataTransfer||!e.dataTransfer.types)return!1;var t=n.toArray(e.dataTransfer.types||[]);return-1!==n.inArray("Files",t)||-1!==n.inArray("public.file-url",t)||-1!==n.inArray("application/x-moz-file",t)}function a(e,n){if(u(e)){var i=new t(g,e);i.relativePath=n||"",f.push(i)}}function s(e){for(var t=[],i=0;i=")&&u.verComp(u.version,7,"<"),h="Android Browser"===u.browser,m=!1;if(p=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),f=c(),f.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||h)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return void e.call(s,n,r);if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}f.upload?(n.withCredentials&&(f.withCredentials=!0),f.addEventListener("load",function(e){s.trigger(e)}),f.addEventListener("error",function(e){s.trigger(e)}),f.addEventListener("progress",function(e){s.trigger(e)}),f.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):f.onreadystatechange=function v(){switch(f.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=f.getResponseHeader("Content-Length")||0),f.responseText&&(t=f.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:f.onreadystatechange=function(){},s.trigger(0===f.status?"error":"load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){f.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in f&&("json"!==n.responseType||u.can("return_response_type","json")?f.responseType=n.responseType:f.responseType="text"),m?f.sendAsBinary?f.sendAsBinary(r):!function(){for(var e=new Uint8Array(r.length),t=0;t0&&o.set(new Uint8Array(t.slice(0,e)),0),o.set(new Uint8Array(r),e),o.set(new Uint8Array(t.slice(e+i)),e+r.byteLength),this.clear(),t=o.buffer,n=new DataView(t);break}default:return t}},length:function(){return t?t.byteLength:0},clear:function(){n=t=null}})}function i(t){function n(e,n,i){i=3===arguments.length?i:t.length-n-1,t=t.substr(0,n)+e+t.substr(i+n)}e.extend(this,{readByteAt:function(e){return t.charCodeAt(e)},writeByteAt:function(e,t){n(String.fromCharCode(t),e,1)},SEGMENT:function(e,i,r){switch(arguments.length){case 1:return t.substr(e);case 2:return t.substr(e,i);case 3:n(null!==r?r:"",e,i);break;default:return t}},length:function(){return t?t.length:0},clear:function(){t=null}})}return e.extend(t.prototype,{littleEndian:!1,read:function(e,t){var n,i,r;if(e+t>this.length())throw new Error("You are trying to read outside the source boundaries.");for(i=this.littleEndian?0:-8*(t-1),r=0,n=0;t>r;r++)n|=this.readByteAt(e+r)<this.length())throw new Error("You are trying to write outside the source boundaries.");for(i=this.littleEndian?0:-8*(n-1),r=0;n>r;r++)this.writeByteAt(e+r,t>>Math.abs(i+8*r)&255)},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){var t=this.read(e,4);return t>2147483647?t-4294967296:t},CHAR:function(e){return String.fromCharCode(this.read(e,1))},STRING:function(e,t){return this.asArray("CHAR",e,t).join("")},asArray:function(e,t,n){for(var i=[],r=0;n>r;r++)i[r]=this[e](t+r);return i}}),t}),i(B,[H,f],function(e,t){return function n(i){var r=[],o,a,s,u=0;if(o=new e(i),65496!==o.SHORT(0))throw o.clear(),new t.ImageError(t.ImageError.WRONG_FORMAT);for(a=2;a<=o.length();)if(s=o.SHORT(a),s>=65488&&65495>=s)a+=2;else{if(65498===s||65497===s)break;u=o.SHORT(a+2)+2,s>=65505&&65519>=s&&r.push({hex:s,name:"APP"+(15&s),start:a,length:u,segment:o.SEGMENT(a,u)}),a+=u}return o.clear(),{headers:r,restore:function(t){var n,i,o;for(o=new e(t),a=65504==o.SHORT(2)?4+o.SHORT(4):2,i=0,n=r.length;n>i;i++)o.SEGMENT(a,0,r[i].segment),a+=r[i].length;return t=o.SEGMENT(),o.clear(),t},strip:function(t){var i,r,o,a;for(o=new n(t),r=o.headers,o.purge(),i=new e(t),a=r.length;a--;)i.SEGMENT(r[a].start,r[a].length,"");return t=i.SEGMENT(),i.clear(),t},get:function(e){for(var t=[],n=0,i=r.length;i>n;n++)r[n].name===e.toUpperCase()&&t.push(r[n].segment);return t}, +set:function(e,t){var n=[],i,o,a;for("string"==typeof t?n.push(t):n=t,i=o=0,a=r.length;a>i&&(r[i].name===e.toUpperCase()&&(r[i].segment=n[o],r[i].length=n[o].length,o++),!(o>=n.length));i++);},purge:function(){this.headers=r=[]}}}}),i(k,[u,H,f],function(e,n,i){function r(o){function a(n,r){var o=this,a,s,u,c,h,f,p,m,g=[],v={},w={1:"BYTE",7:"UNDEFINED",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",9:"SLONG",10:"SRATIONAL"},y={BYTE:1,UNDEFINED:1,ASCII:1,SHORT:2,LONG:4,RATIONAL:8,SLONG:4,SRATIONAL:8};for(a=o.SHORT(n),s=0;a>s;s++)if(g=[],p=n+2+12*s,u=r[o.SHORT(p)],u!==t){if(c=w[o.SHORT(p+=2)],h=o.LONG(p+=2),f=y[c],!f)throw new i.ImageError(i.ImageError.INVALID_META_ERR);if(p+=4,f*h>4&&(p=o.LONG(p)+d.tiffHeader),p+f*h>=this.length())throw new i.ImageError(i.ImageError.INVALID_META_ERR);"ASCII"!==c?(g=o.asArray(c,p,h),m=1==h?g[0]:g,l.hasOwnProperty(u)&&"object"!=typeof m?v[u]=l[u][m]:v[u]=m):v[u]=e.trim(o.STRING(p,h).replace(/\0$/,""))}return v}function s(e,t,n){var i,r,o,a=0;if("string"==typeof t){var s=c[e.toLowerCase()];for(var u in s)if(s[u]===t){t=u;break}}i=d[e.toLowerCase()+"IFD"],r=this.SHORT(i);for(var l=0;r>l;l++)if(o=i+12*l+2,this.SHORT(o)==t){a=o+8;break}if(!a)return!1;try{this.write(a,n,4)}catch(h){return!1}return!0}var u,c,l,d,h,f;if(n.call(this,o),c={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},d={tiffHeader:10},h=d.tiffHeader,u={clear:this.clear},e.extend(this,{read:function(){try{return r.prototype.read.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},write:function(){try{return r.prototype.write.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return f||null},EXIF:function(){var t=null;if(d.exifIFD){try{t=a.call(this,d.exifIFD,c.exif)}catch(n){return null}if(t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var i=0,r="";i=65472&&65475>=n)return t+=5,{height:e.SHORT(t),width:e.SHORT(t+=2)};i=e.SHORT(t+=2),t+=i-2}return null}function s(){var e=d.thumb(),t,n;return e&&(t=new i(e),n=a(t),t.clear(),n)?(n.data=e,n):null}function u(){d&&l&&c&&(d.clear(),l.purge(),c.clear(),h=l=d=c=null)}var c,l,d,h;if(c=new i(o),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o);try{d=new r(l.get("app1")[0])}catch(f){}h=a.call(this),e.extend(this,{type:"image/jpeg",size:c.length(),width:h&&h.width||0,height:h&&h.height||0,setExif:function(t,n){return d?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),void l.set("app1",d.SEGMENT())):!1},writeHeaders:function(){return l.restore(arguments.length?arguments[0]:o)},stripHeaders:function(e){return l.strip(e)},purge:function(){u.call(this)}}),d&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS(),thumb:s()})}return o}),i(G,[f,u,H],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:s.LONG(t),height:s.LONG(t+=4)}):null}function o(){s&&(s.clear(),i=l=u=c=s=null)}function a(e){var t,n,i,r;return t=s.LONG(e),n=s.STRING(e+=4,4),i=e+=4,r=s.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l;s=new n(i),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+h>a?a-g:h,w=0;o>w;){var y=w+h>o?o-w:h;p.clearRect(0,0,h,h),p.drawImage(e,-w,-g);var E=w*s/o+c<<0,_=Math.ceil(y*s/o),b=g*u/a/m+l<<0,x=Math.ceil(v*u/a/m);d.drawImage(f,0,0,y,v,E,b,_,x),w+=h}g+=h}f=p=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(j,[D,u,f,w,y,E,z,q,d,c],function(e,t,n,i,r,o,a,s,u,c){function l(){function e(){if(!_&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return _||y}function l(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function d(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function h(e){var t=this;y=new Image,y.onerror=function(){v.call(this),t.trigger("error",n.ImageError.WRONG_FORMAT)},y.onload=function(){t.trigger("load")},y.src="data:"==e.substr(0,5)?e:d(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",n.ImageError.WRONG_FORMAT)},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c=0,l=0,d,h,f,p;if(A=o,p=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(p,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),r?(n=Math.min(n,d.width),i=Math.min(i,d.height),s=Math.max(n/d.width,i/d.height)):s=Math.min(n/d.width,i/d.height),s>1&&!r&&o?void this.trigger("Resize"):(_||(_=document.createElement("canvas")),h=Math.round(d.width*s),f=Math.round(d.height*s),r?(_.width=n,_.height=i,h>n&&(c=Math.round((h-n)/2)),f>i&&(l=Math.round((f-i)/2))):(_.width=h,_.height=f),A||g(_.width,_.height,p),m.call(this,d,_,-c,-l,h,f),this.width=_.width,this.height=_.height,R=!0,void a.trigger("Resize"))}function m(e,t,n,i,r,o){if("iOS"===c.OS)s.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var a=t.getContext("2d");a.drawImage(e,n,i,r,o)}}function g(e,t,n){switch(n){case 5:case 6:case 7:case 8:_.width=t,_.height=e;break;default:_.width=e,_.height=t}var i=_.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function v(){E&&(E.purge(),E=null),b=y=_=x=null,R=!1}var w=this,y,E,_,b,x,R=!1,A=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(b=e.getSource(),void h.call(this,b)):void f.call(this,e.getSource(),function(e){r&&(b=l(e)),h.call(t,e)})},loadFromImage:function(e,t){this.meta=e.meta,x=new o(null,{name:e.name,size:e.size,type:e.type}),h.call(this,t?b=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!E&&b&&t.can("access_image_binary")&&(E=new a(b)),n={width:e().width||0,height:e().height||0,type:x.type||u.getFileMime(x.name),size:b&&b.length||x.size||0,name:x.name||"",meta:E&&E.meta||this.meta||{}},!n.meta||!n.meta.thumb||n.meta.thumb.data instanceof r||(n.meta.thumb.data=new r(null,{type:"image/jpeg",data:n.meta.thumb.data})),n},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return _&&(_.id=this.uid+"_canvas"),_},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new o(null,{name:x.name||"",type:e,data:w.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!R)return y.src;if("image/jpeg"!==e)return _.toDataURL("image/png");try{return _.toDataURL("image/jpeg",t/100)}catch(n){return _.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!R)return b||(b=l(w.getAsDataURL(e,t))),b;if("image/jpeg"!==e)b=l(w.getAsDataURL(e,t));else{var n;t||(t=90);try{n=_.toDataURL("image/jpeg",t/100)}catch(i){n=_.toDataURL("image/jpeg")}b=l(n),E&&(b=E.stripHeaders(b),A&&(E.meta&&E.meta.exif&&E.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),b=E.writeHeaders(b)),E.purge(),E=null)}return R=!1,b},destroy:function(){w=null,v.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=l}),i(X,[u,c,h,f,m],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(e){var i=n.get(e);i&&"OBJECT"==i.nodeName&&("IE"===t.browser?(i.style.display="none",function r(){4==i.readyState?s(e):setTimeout(r,10)}()):i.parentNode.removeChild(i))}function s(e){var t=n.get(e);if(t){for(var i in t)"function"==typeof t[i]&&(t[i]=null);t.parentNode.removeChild(t)}}function u(s){var u=this,d;s=e.extend({swf_url:t.swf_url},s),r.call(this,s,c,{access_binary:function(e){return e&&"browser"===u.mode},access_image_binary:function(e){return e&&"browser"===u.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===u.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===u.mode},return_status_code:function(t){return"browser"===u.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===u.mode},send_browser_cookies:function(e){return e&&"browser"===u.mode},send_custom_headers:function(e){return e&&"browser"===u.mode},send_multipart:r.capTrue,slice_blob:function(e){return e&&"browser"===u.mode},stream_upload:function(e){return e&&"browser"===u.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===u.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return u.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n='',"IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,d=setTimeout(function(){u&&!u.initialized&&u.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){a(u.uid),e.call(u),clearTimeout(d),s=d=e=u=null}}(this.destroy)},l)}var c="flash",l={};return r.addConstructor(c,u),l}),i(V,[X,E,u],function(e,t,n){var i={init:function(e){var i=this,r=this.getRuntime();this.bind("Change",function(){var e=r.shimExec.call(i,"FileInput","getFiles");i.files=[],n.each(e,function(e){i.files.push(new t(r.uid,e))})},999),this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=i}),i(W,[X,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(Y,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i=this;return i.result="","readAsDataURL"===e&&(i.result="data:"+(t.type||"")+";base64,"),i.bind("Progress",function(t,r){r&&(i.result+=n(r,e))},999),i.getRuntime().shimExec.call(this,"FileReader","readAsBase64",t.uid)}};return e.FileReader=i}),i($,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[X,u,y,E,A,I,S],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var h=i.getBlob();h.isDetached()?u(h,function(e){h.destroy(),s(d,e)}):s(d,h)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[X,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[X,u,S,y,A],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getInfo:function(){var e=this.getRuntime(),t=e.shimExec.call(this,"Image","getInfo");return!t.meta||!t.meta.thumb||t.meta.thumb.data instanceof i||(t.meta.thumb.data=new i(e.uid,t.meta.thumb.data)),t},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,c,h,f,m],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='',l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(ee,[Q,E,u],function(e,t,n){var i={init:function(e){function i(e){for(var t="",n=0;ni;i++)n=t.keys[i],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),r.meta[e][n]=s)}),!r.meta||!r.meta.thumb||r.meta.thumb.data instanceof n||(r.meta.thumb.data=new n(e.uid,r.meta.thumb.data))),r.width=parseInt(o.width,10),r.height=parseInt(o.height,10),r.size=parseInt(o.size,10),r.type=o.type,r.name=o.name,r}})}),i(ue,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ce,[ue,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){function e(){var o=this,l=o.getRuntime(),d,h,f,p,m,g;g=n.guid("uid_"),d=l.getShimContainer(),s&&(f=i.get(s+"_form"),f&&n.extend(f.style,{top:"100%"})),p=document.createElement("form"),p.setAttribute("id",g+"_form"),p.setAttribute("method","post"),p.setAttribute("enctype","multipart/form-data"),p.setAttribute("encoding","multipart/form-data"),n.extend(p.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),n.extend(m.style,{fontSize:"999px",opacity:0}),p.appendChild(m),d.appendChild(p),n.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===a.browser&&a.verComp(a.version,10,"<")&&n.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var n;if(this.value){if(this.files){if(n=this.files[0],0===n.size)return void p.parentNode.removeChild(p)}else n={name:this.value};n=new t(l.uid,n),this.onchange=function(){},e.call(o),o.files=[n],m.setAttribute("id",n.uid),p.setAttribute("id",n.uid+"_form"),o.trigger("change"),m=p=null}},l.can("summon_file_dialog")&&(h=i.get(c.browse_button),r.removeEvent(h,"click",o.uid),r.addEvent(h,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},o.uid)),s=g,d=f=h=null}var s,u=[],c;n.extend(this,{init:function(t){var n=this,a=n.getRuntime(),s;c=t,u=t.accept.mimes||o.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,o,u;e=i.get(t.browse_button),a.can("summon_file_dialog")&&("static"===i.getStyle(e,"position")&&(e.style.position="relative"),o=parseInt(i.getStyle(e,"z-index"),10)||1,e.style.zIndex=o,s.style.zIndex=o-1),u=a.can("summon_file_dialog")?e:s,r.addEvent(u,"mouseover",function(){n.trigger("mouseenter")},n.uid),r.addEvent(u,"mouseout",function(){n.trigger("mouseleave")},n.uid),r.addEvent(u,"mousedown",function(){n.trigger("mousedown")},n.uid),r.addEvent(i.get(t.container),"mouseup",function(){n.trigger("mouseup")},n.uid),e=null}(),e.call(this),s=null,n.trigger({type:"ready",async:!0})},disable:function(e){var t;(t=i.get(s))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),n=e.getShimContainer();r.removeAllEvents(n,this.uid),r.removeAllEvents(c&&i.get(c.container),this.uid),r.removeAllEvents(c&&i.get(c.browse_button),this.uid),n&&(n.innerHTML=""),t.removeInstance(this.uid),s=u=c=n=t=null}})}return e.FileInput=s}),i(le,[ue,F],function(e,t){return e.FileReader=t}),i(de,[ue,u,h,x,f,N,y,I],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,h){function f(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),p.trigger({type:"progress",loaded:c.length,total:c.length}),y&&p.trigger({type:"uploadprogress",loaded:y.size||1025,total:y.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return void e.call(p,function(){p.trigger("error")});u=404}e.call(p,function(){p.trigger("load")})},p.uid)}var p=this,m=p.getRuntime(),g,v,w,y;if(u=c=null,h instanceof s&&h.hasBlob()){if(y=h.getBlob(),g=y.uid,w=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),m.getShimContainer().appendChild(v);v.setAttribute("target",g+"_iframe"),h instanceof s&&h.each(function(e,n){if(e instanceof a)w&&w.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),w?v.insertBefore(i,w):v.appendChild(i)}}),v.setAttribute("action",d.url),f(),v.submit(),p.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{ +return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(he,[ue,j],function(e,t){return e.Image=t}),a([u,c,l,d,h,f,p,m,g,v,w,y,E,_,b,x,R,A,I,T,S,O,N])}(this);;(function(e){"use strict";var t={},n=e.moxie.core.utils.Basic.inArray;return function r(e){var i,s;for(i in e)s=typeof e[i],s==="object"&&!~n(i,["Exceptions","Env","Mime"])?r(e[i]):s==="function"&&(t[i]=e[i])}(e.moxie),t.Env=e.moxie.core.utils.Env,t.Mime=e.moxie.core.utils.Mime,t.Exceptions=e.moxie.core.Exceptions,e.mOxie=t,e.o||(e.o=t),t})(this); \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.dev.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.dev.js new file mode 100644 index 0000000000..606cf7fc28 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.dev.js @@ -0,0 +1,2347 @@ +/** + * Plupload - multi-runtime File Uploader + * v2.1.8 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2015-07-21 + */ +/** + * Plupload.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global mOxie:true */ + +;(function(window, o, undef) { + +var delay = window.setTimeout +, fileFilters = {} +; + +// convert plupload features to caps acceptable by mOxie +function normalizeCaps(settings) { + var features = settings.required_features, caps = {}; + + function resolve(feature, value, strict) { + // Feature notation is deprecated, use caps (this thing here is required for backward compatibility) + var map = { + chunks: 'slice_blob', + jpgresize: 'send_binary_string', + pngresize: 'send_binary_string', + progress: 'report_upload_progress', + multi_selection: 'select_multiple', + dragdrop: 'drag_and_drop', + drop_element: 'drag_and_drop', + headers: 'send_custom_headers', + urlstream_upload: 'send_binary_string', + canSendBinary: 'send_binary', + triggerDialog: 'summon_file_dialog' + }; + + if (map[feature]) { + caps[map[feature]] = value; + } else if (!strict) { + caps[feature] = value; + } + } + + if (typeof(features) === 'string') { + plupload.each(features.split(/\s*,\s*/), function(feature) { + resolve(feature, true); + }); + } else if (typeof(features) === 'object') { + plupload.each(features, function(value, feature) { + resolve(feature, value); + }); + } else if (features === true) { + // check settings for required features + if (settings.chunk_size > 0) { + caps.slice_blob = true; + } + + if (settings.resize.enabled || !settings.multipart) { + caps.send_binary_string = true; + } + + plupload.each(settings, function(value, feature) { + resolve(feature, !!value, true); // strict check + }); + } + + return caps; +} + +/** + * @module plupload + * @static + */ +var plupload = { + /** + * Plupload version will be replaced on build. + * + * @property VERSION + * @for Plupload + * @static + * @final + */ + VERSION : '2.1.8', + + /** + * The state of the queue before it has started and after it has finished + * + * @property STOPPED + * @static + * @final + */ + STOPPED : 1, + + /** + * Upload process is running + * + * @property STARTED + * @static + * @final + */ + STARTED : 2, + + /** + * File is queued for upload + * + * @property QUEUED + * @static + * @final + */ + QUEUED : 1, + + /** + * File is being uploaded + * + * @property UPLOADING + * @static + * @final + */ + UPLOADING : 2, + + /** + * File has failed to be uploaded + * + * @property FAILED + * @static + * @final + */ + FAILED : 4, + + /** + * File has been uploaded successfully + * + * @property DONE + * @static + * @final + */ + DONE : 5, + + // Error constants used by the Error event + + /** + * Generic error for example if an exception is thrown inside Silverlight. + * + * @property GENERIC_ERROR + * @static + * @final + */ + GENERIC_ERROR : -100, + + /** + * HTTP transport error. For example if the server produces a HTTP status other than 200. + * + * @property HTTP_ERROR + * @static + * @final + */ + HTTP_ERROR : -200, + + /** + * Generic I/O error. For example if it wasn't possible to open the file stream on local machine. + * + * @property IO_ERROR + * @static + * @final + */ + IO_ERROR : -300, + + /** + * @property SECURITY_ERROR + * @static + * @final + */ + SECURITY_ERROR : -400, + + /** + * Initialization error. Will be triggered if no runtime was initialized. + * + * @property INIT_ERROR + * @static + * @final + */ + INIT_ERROR : -500, + + /** + * File size error. If the user selects a file that is too large it will be blocked and an error of this type will be triggered. + * + * @property FILE_SIZE_ERROR + * @static + * @final + */ + FILE_SIZE_ERROR : -600, + + /** + * File extension error. If the user selects a file that isn't valid according to the filters setting. + * + * @property FILE_EXTENSION_ERROR + * @static + * @final + */ + FILE_EXTENSION_ERROR : -601, + + /** + * Duplicate file error. If prevent_duplicates is set to true and user selects the same file again. + * + * @property FILE_DUPLICATE_ERROR + * @static + * @final + */ + FILE_DUPLICATE_ERROR : -602, + + /** + * Runtime will try to detect if image is proper one. Otherwise will throw this error. + * + * @property IMAGE_FORMAT_ERROR + * @static + * @final + */ + IMAGE_FORMAT_ERROR : -700, + + /** + * While working on files runtime may run out of memory and will throw this error. + * + * @since 2.1.2 + * @property MEMORY_ERROR + * @static + * @final + */ + MEMORY_ERROR : -701, + + /** + * Each runtime has an upper limit on a dimension of the image it can handle. If bigger, will throw this error. + * + * @property IMAGE_DIMENSIONS_ERROR + * @static + * @final + */ + IMAGE_DIMENSIONS_ERROR : -702, + + /** + * Mime type lookup table. + * + * @property mimeTypes + * @type Object + * @final + */ + mimeTypes : o.mimes, + + /** + * In some cases sniffing is the only way around :( + */ + ua: o.ua, + + /** + * Gets the true type of the built-in object (better version of typeof). + * @credits Angus Croll (http://javascriptweblog.wordpress.com/) + * + * @method typeOf + * @static + * @param {Object} o Object to check. + * @return {String} Object [[Class]] + */ + typeOf: o.typeOf, + + /** + * Extends the specified object with another object. + * + * @method extend + * @static + * @param {Object} target Object to extend. + * @param {Object..} obj Multiple objects to extend with. + * @return {Object} Same as target, the extended object. + */ + extend : o.extend, + + /** + * Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. + * The only way a user would be able to get the same ID is if the two persons at the same exact millisecond manages + * to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. + * It's more probable for the earth to be hit with an asteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property + * to an user unique key. + * + * @method guid + * @static + * @return {String} Virtually unique id. + */ + guid : o.guid, + + /** + * Get array of DOM Elements by their ids. + * + * @method get + * @for Utils + * @param {String} id Identifier of the DOM Element + * @return {Array} + */ + get : function get(ids) { + var els = [], el; + + if (o.typeOf(ids) !== 'array') { + ids = [ids]; + } + + var i = ids.length; + while (i--) { + el = o.get(ids[i]); + if (el) { + els.push(el); + } + } + + return els.length ? els : null; + }, + + /** + * Executes the callback function for each item in array/object. If you return false in the + * callback it will break the loop. + * + * @method each + * @static + * @param {Object} obj Object to iterate. + * @param {function} callback Callback function to execute for each item. + */ + each : o.each, + + /** + * Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields. + * + * @method getPos + * @static + * @param {Element} node HTML element or element id to get x, y position from. + * @param {Element} root Optional root element to stop calculations at. + * @return {object} Absolute position of the specified element object with x, y fields. + */ + getPos : o.getPos, + + /** + * Returns the size of the specified node in pixels. + * + * @method getSize + * @static + * @param {Node} node Node to get the size of. + * @return {Object} Object with a w and h property. + */ + getSize : o.getSize, + + /** + * Encodes the specified string. + * + * @method xmlEncode + * @static + * @param {String} s String to encode. + * @return {String} Encoded string. + */ + xmlEncode : function(str) { + var xmlEncodeChars = {'<' : 'lt', '>' : 'gt', '&' : 'amp', '"' : 'quot', '\'' : '#39'}, xmlEncodeRegExp = /[<>&\"\']/g; + + return str ? ('' + str).replace(xmlEncodeRegExp, function(chr) { + return xmlEncodeChars[chr] ? '&' + xmlEncodeChars[chr] + ';' : chr; + }) : str; + }, + + /** + * Forces anything into an array. + * + * @method toArray + * @static + * @param {Object} obj Object with length field. + * @return {Array} Array object containing all items. + */ + toArray : o.toArray, + + /** + * Find an element in array and return its index if present, otherwise return -1. + * + * @method inArray + * @static + * @param {mixed} needle Element to find + * @param {Array} array + * @return {Int} Index of the element, or -1 if not found + */ + inArray : o.inArray, + + /** + * Extends the language pack object with new items. + * + * @method addI18n + * @static + * @param {Object} pack Language pack items to add. + * @return {Object} Extended language pack object. + */ + addI18n : o.addI18n, + + /** + * Translates the specified string by checking for the english string in the language pack lookup. + * + * @method translate + * @static + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + translate : o.translate, + + /** + * Checks if object is empty. + * + * @method isEmptyObj + * @static + * @param {Object} obj Object to check. + * @return {Boolean} + */ + isEmptyObj : o.isEmptyObj, + + /** + * Checks if specified DOM element has specified class. + * + * @method hasClass + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Class name + */ + hasClass : o.hasClass, + + /** + * Adds specified className to specified DOM element. + * + * @method addClass + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Class name + */ + addClass : o.addClass, + + /** + * Removes specified className from specified DOM element. + * + * @method removeClass + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Class name + */ + removeClass : o.removeClass, + + /** + * Returns a given computed style of a DOM element. + * + * @method getStyle + * @static + * @param {Object} obj DOM element like object. + * @param {String} name Style you want to get from the DOM element + */ + getStyle : o.getStyle, + + /** + * Adds an event handler to the specified object and store reference to the handler + * in objects internal Plupload registry (@see removeEvent). + * + * @method addEvent + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Name to add event listener to. + * @param {Function} callback Function to call when event occurs. + * @param {String} (optional) key that might be used to add specifity to the event record. + */ + addEvent : o.addEvent, + + /** + * Remove event handler from the specified object. If third argument (callback) + * is not specified remove all events with the specified name. + * + * @method removeEvent + * @static + * @param {Object} obj DOM element to remove event listener(s) from. + * @param {String} name Name of event listener to remove. + * @param {Function|String} (optional) might be a callback or unique key to match. + */ + removeEvent: o.removeEvent, + + /** + * Remove all kind of events from the specified object + * + * @method removeAllEvents + * @static + * @param {Object} obj DOM element to remove event listeners from. + * @param {String} (optional) unique key to match, when removing events. + */ + removeAllEvents: o.removeAllEvents, + + /** + * Cleans the specified name from national characters (diacritics). The result will be a name with only a-z, 0-9 and _. + * + * @method cleanName + * @static + * @param {String} s String to clean up. + * @return {String} Cleaned string. + */ + cleanName : function(name) { + var i, lookup; + + // Replace diacritics + lookup = [ + /[\300-\306]/g, 'A', /[\340-\346]/g, 'a', + /\307/g, 'C', /\347/g, 'c', + /[\310-\313]/g, 'E', /[\350-\353]/g, 'e', + /[\314-\317]/g, 'I', /[\354-\357]/g, 'i', + /\321/g, 'N', /\361/g, 'n', + /[\322-\330]/g, 'O', /[\362-\370]/g, 'o', + /[\331-\334]/g, 'U', /[\371-\374]/g, 'u' + ]; + + for (i = 0; i < lookup.length; i += 2) { + name = name.replace(lookup[i], lookup[i + 1]); + } + + // Replace whitespace + name = name.replace(/\s+/g, '_'); + + // Remove anything else + name = name.replace(/[^a-z0-9_\-\.]+/gi, ''); + + return name; + }, + + /** + * Builds a full url out of a base URL and an object with items to append as query string items. + * + * @method buildUrl + * @static + * @param {String} url Base URL to append query string items to. + * @param {Object} items Name/value object to serialize as a querystring. + * @return {String} String with url + serialized query string items. + */ + buildUrl : function(url, items) { + var query = ''; + + plupload.each(items, function(value, name) { + query += (query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value); + }); + + if (query) { + url += (url.indexOf('?') > 0 ? '&' : '?') + query; + } + + return url; + }, + + /** + * Formats the specified number as a size string for example 1024 becomes 1 KB. + * + * @method formatSize + * @static + * @param {Number} size Size to format as string. + * @return {String} Formatted size string. + */ + formatSize : function(size) { + + if (size === undef || /\D/.test(size)) { + return plupload.translate('N/A'); + } + + function round(num, precision) { + return Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision); + } + + var boundary = Math.pow(1024, 4); + + // TB + if (size > boundary) { + return round(size / boundary, 1) + " " + plupload.translate('tb'); + } + + // GB + if (size > (boundary/=1024)) { + return round(size / boundary, 1) + " " + plupload.translate('gb'); + } + + // MB + if (size > (boundary/=1024)) { + return round(size / boundary, 1) + " " + plupload.translate('mb'); + } + + // KB + if (size > 1024) { + return Math.round(size / 1024) + " " + plupload.translate('kb'); + } + + return size + " " + plupload.translate('b'); + }, + + + /** + * Parses the specified size string into a byte value. For example 10kb becomes 10240. + * + * @method parseSize + * @static + * @param {String|Number} size String to parse or number to just pass through. + * @return {Number} Size in bytes. + */ + parseSize : o.parseSizeStr, + + + /** + * A way to predict what runtime will be choosen in the current environment with the + * specified settings. + * + * @method predictRuntime + * @static + * @param {Object|String} config Plupload settings to check + * @param {String} [runtimes] Comma-separated list of runtimes to check against + * @return {String} Type of compatible runtime + */ + predictRuntime : function(config, runtimes) { + var up, runtime; + + up = new plupload.Uploader(config); + runtime = o.Runtime.thatCan(up.getOption().required_features, runtimes || config.runtimes); + up.destroy(); + return runtime; + }, + + /** + * Registers a filter that will be executed for each file added to the queue. + * If callback returns false, file will not be added. + * + * Callback receives two arguments: a value for the filter as it was specified in settings.filters + * and a file to be filtered. Callback is executed in the context of uploader instance. + * + * @method addFileFilter + * @static + * @param {String} name Name of the filter by which it can be referenced in settings.filters + * @param {String} cb Callback - the actual routine that every added file must pass + */ + addFileFilter: function(name, cb) { + fileFilters[name] = cb; + } +}; + + +plupload.addFileFilter('mime_types', function(filters, file, cb) { + if (filters.length && !filters.regexp.test(file.name)) { + this.trigger('Error', { + code : plupload.FILE_EXTENSION_ERROR, + message : plupload.translate('File extension error.'), + file : file + }); + cb(false); + } else { + cb(true); + } +}); + + +plupload.addFileFilter('max_file_size', function(maxSize, file, cb) { + var undef; + + maxSize = plupload.parseSize(maxSize); + + // Invalid file size + if (file.size !== undef && maxSize && file.size > maxSize) { + this.trigger('Error', { + code : plupload.FILE_SIZE_ERROR, + message : plupload.translate('File size error.'), + file : file + }); + cb(false); + } else { + cb(true); + } +}); + + +plupload.addFileFilter('prevent_duplicates', function(value, file, cb) { + if (value) { + var ii = this.files.length; + while (ii--) { + // Compare by name and size (size might be 0 or undefined, but still equivalent for both) + if (file.name === this.files[ii].name && file.size === this.files[ii].size) { + this.trigger('Error', { + code : plupload.FILE_DUPLICATE_ERROR, + message : plupload.translate('Duplicate file error.'), + file : file + }); + cb(false); + return; + } + } + } + cb(true); +}); + + +/** +@class Uploader +@constructor + +@param {Object} settings For detailed information about each option check documentation. + @param {String|DOMElement} settings.browse_button id of the DOM element or DOM element itself to use as file dialog trigger. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {Boolean} [settings.send_chunk_number=true] Whether to send chunks and chunk numbers, or total and offset bytes. + @param {String|DOMElement} [settings.container] id of the DOM element or DOM element itself that will be used to wrap uploader structures. Defaults to immediate parent of the `browse_button` element. + @param {String|DOMElement} [settings.drop_element] id of the DOM element or DOM element itself to use as a drop zone for Drag-n-Drop. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Object} [settings.filters={}] Set of file type filters. + @param {Array} [settings.filters.mime_types=[]] List of file types to accept, each one defined by title and list of extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String|Number} [settings.filters.max_file_size=0] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Boolean} [settings.filters.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + @param {Boolean} [settings.send_file_name=true] Whether to send file name as additional argument - 'name' (required for chunked uploads and some other cases where file name cannot be sent via normal ways). +*/ +plupload.Uploader = function(options) { + /** + Fires when the current RunTime has been initialized. + + @event Init + @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + Fires after the init event incase you need to perform actions there. + + @event PostInit + @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + Fires when the option is changed in via uploader.setOption(). + + @event OptionChanged + @since 2.1 + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {String} name Name of the option that was changed + @param {Mixed} value New value for the specified option + @param {Mixed} oldValue Previous value of the option + */ + + /** + Fires when the silverlight/flash or other shim needs to move. + + @event Refresh + @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + Fires when the overall state is being changed for the upload queue. + + @event StateChanged + @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + Fires when browse_button is clicked and browse dialog shows. + + @event Browse + @since 2.1.2 + @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + Fires for every filtered file before it is added to the queue. + + @event FileFiltered + @since 2.1 + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file Another file that has to be added to the queue. + */ + + /** + Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance. + + @event QueueChanged + @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + Fires after files were filtered and added to the queue. + + @event FilesAdded + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Array} files Array of file objects that were added to queue by the user. + */ + + /** + Fires when file is removed from the queue. + + @event FilesRemoved + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Array} files Array of files that got removed. + */ + + /** + Fires just before a file is uploaded. Can be used to cancel the upload for the specified file + by returning false from the handler. + + @event BeforeUpload + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File to be uploaded. + */ + + /** + Fires when a file is to be uploaded by the runtime. + + @event UploadFile + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File to be uploaded. + */ + + /** + Fires while a file is being uploaded. Use this event to update the current file upload progress. + + @event UploadProgress + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File that is currently being uploaded. + */ + + /** + Fires when file chunk is uploaded. + + @event ChunkUploaded + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File that the chunk was uploaded for. + @param {Object} result Object with response properties. + @param {Number} result.offset The amount of bytes the server has received so far, including this chunk. + @param {Number} result.total The size of the file. + @param {String} result.response The response body sent by the server. + @param {Number} result.status The HTTP status code sent by the server. + @param {String} result.responseHeaders All the response headers as a single string. + */ + + /** + Fires when a file is successfully uploaded. + + @event FileUploaded + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File that was uploaded. + @param {Object} result Object with response properties. + @param {String} result.response The response body sent by the server. + @param {Number} result.status The HTTP status code sent by the server. + @param {String} result.responseHeaders All the response headers as a single string. + */ + + /** + Fires when all files in a queue are uploaded. + + @event UploadComplete + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Array} files Array of file objects that was added to queue/selected by the user. + */ + + /** + Fires when a error occurs. + + @event Error + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Object} error Contains code, message and sometimes file and other details. + @param {Number} error.code The plupload error code. + @param {String} error.message Description of the error (uses i18n). + */ + + /** + Fires when destroy method is called. + + @event Destroy + @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + var uid = plupload.guid() + , settings + , files = [] + , preferred_caps = {} + , fileInputs = [] + , fileDrops = [] + , startTime + , total + , disabled = false + , xhr + ; + + + // Private methods + function uploadNext() { + var file, count = 0, i; + + if (this.state == plupload.STARTED) { + // Find first QUEUED file + for (i = 0; i < files.length; i++) { + if (!file && files[i].status == plupload.QUEUED) { + file = files[i]; + if (this.trigger("BeforeUpload", file)) { + file.status = plupload.UPLOADING; + this.trigger("UploadFile", file); + } + } else { + count++; + } + } + + // All files are DONE or FAILED + if (count == files.length) { + if (this.state !== plupload.STOPPED) { + this.state = plupload.STOPPED; + this.trigger("StateChanged"); + } + this.trigger("UploadComplete", files); + } + } + } + + + function calcFile(file) { + file.percent = file.size > 0 ? Math.ceil(file.loaded / file.size * 100) : 100; + calc(); + } + + + function calc() { + var i, file; + + // Reset stats + total.reset(); + + // Check status, size, loaded etc on all files + for (i = 0; i < files.length; i++) { + file = files[i]; + + if (file.size !== undef) { + // We calculate totals based on original file size + total.size += file.origSize; + + // Since we cannot predict file size after resize, we do opposite and + // interpolate loaded amount to match magnitude of total + total.loaded += file.loaded * file.origSize / file.size; + } else { + total.size = undef; + } + + if (file.status == plupload.DONE) { + total.uploaded++; + } else if (file.status == plupload.FAILED) { + total.failed++; + } else { + total.queued++; + } + } + + // If we couldn't calculate a total file size then use the number of files to calc percent + if (total.size === undef) { + total.percent = files.length > 0 ? Math.ceil(total.uploaded / files.length * 100) : 0; + } else { + total.bytesPerSec = Math.ceil(total.loaded / ((+new Date() - startTime || 1) / 1000.0)); + total.percent = total.size > 0 ? Math.ceil(total.loaded / total.size * 100) : 0; + } + } + + + function getRUID() { + var ctrl = fileInputs[0] || fileDrops[0]; + if (ctrl) { + return ctrl.getRuntime().uid; + } + return false; + } + + + function runtimeCan(file, cap) { + if (file.ruid) { + var info = o.Runtime.getInfo(file.ruid); + if (info) { + return info.can(cap); + } + } + return false; + } + + + function bindEventListeners() { + this.bind('FilesAdded FilesRemoved', function(up) { + up.trigger('QueueChanged'); + up.refresh(); + }); + + this.bind('CancelUpload', onCancelUpload); + + this.bind('BeforeUpload', onBeforeUpload); + + this.bind('UploadFile', onUploadFile); + + this.bind('UploadProgress', onUploadProgress); + + this.bind('StateChanged', onStateChanged); + + this.bind('QueueChanged', calc); + + this.bind('Error', onError); + + this.bind('FileUploaded', onFileUploaded); + + this.bind('Destroy', onDestroy); + } + + + function initControls(settings, cb) { + var self = this, inited = 0, queue = []; + + // common settings + var options = { + runtime_order: settings.runtimes, + required_caps: settings.required_features, + preferred_caps: preferred_caps, + swf_url: settings.flash_swf_url, + xap_url: settings.silverlight_xap_url + }; + + // add runtime specific options if any + plupload.each(settings.runtimes.split(/\s*,\s*/), function(runtime) { + if (settings[runtime]) { + options[runtime] = settings[runtime]; + } + }); + + // initialize file pickers - there can be many + if (settings.browse_button) { + plupload.each(settings.browse_button, function(el) { + queue.push(function(cb) { + var fileInput = new o.FileInput(plupload.extend({}, options, { + accept: settings.filters.mime_types, + name: settings.file_data_name, + multiple: settings.multi_selection, + container: settings.container, + browse_button: el + })); + + fileInput.onready = function() { + var info = o.Runtime.getInfo(this.ruid); + + // for backward compatibility + o.extend(self.features, { + chunks: info.can('slice_blob'), + multipart: info.can('send_multipart'), + multi_selection: info.can('select_multiple') + }); + + inited++; + fileInputs.push(this); + cb(); + }; + + fileInput.onchange = function() { + self.addFile(this.files); + }; + + fileInput.bind('mouseenter mouseleave mousedown mouseup', function(e) { + if (!disabled) { + if (settings.browse_button_hover) { + if ('mouseenter' === e.type) { + o.addClass(el, settings.browse_button_hover); + } else if ('mouseleave' === e.type) { + o.removeClass(el, settings.browse_button_hover); + } + } + + if (settings.browse_button_active) { + if ('mousedown' === e.type) { + o.addClass(el, settings.browse_button_active); + } else if ('mouseup' === e.type) { + o.removeClass(el, settings.browse_button_active); + } + } + } + }); + + fileInput.bind('mousedown', function() { + self.trigger('Browse'); + }); + + fileInput.bind('error runtimeerror', function() { + fileInput = null; + cb(); + }); + + fileInput.init(); + }); + }); + } + + // initialize drop zones + if (settings.drop_element) { + plupload.each(settings.drop_element, function(el) { + queue.push(function(cb) { + var fileDrop = new o.FileDrop(plupload.extend({}, options, { + drop_zone: el + })); + + fileDrop.onready = function() { + var info = o.Runtime.getInfo(this.ruid); + + self.features.dragdrop = info.can('drag_and_drop'); // for backward compatibility + + inited++; + fileDrops.push(this); + cb(); + }; + + fileDrop.ondrop = function() { + self.addFile(this.files); + }; + + fileDrop.bind('error runtimeerror', function() { + fileDrop = null; + cb(); + }); + + fileDrop.init(); + }); + }); + } + + + o.inSeries(queue, function() { + if (typeof(cb) === 'function') { + cb(inited); + } + }); + } + + + function resizeImage(blob, params, cb) { + var img = new o.Image(); + + try { + img.onload = function() { + // no manipulation required if... + if (params.width > this.width && + params.height > this.height && + params.quality === undef && + params.preserve_headers && + !params.crop + ) { + this.destroy(); + return cb(blob); + } + // otherwise downsize + img.downsize(params.width, params.height, params.crop, params.preserve_headers); + }; + + img.onresize = function() { + cb(this.getAsBlob(blob.type, params.quality)); + this.destroy(); + }; + + img.onerror = function() { + cb(blob); + }; + + img.load(blob); + } catch(ex) { + cb(blob); + } + } + + + function setOption(option, value, init) { + var self = this, reinitRequired = false; + + function _setOption(option, value, init) { + var oldValue = settings[option]; + + switch (option) { + case 'max_file_size': + if (option === 'max_file_size') { + settings.max_file_size = settings.filters.max_file_size = value; + } + break; + + case 'chunk_size': + if (value = plupload.parseSize(value)) { + settings[option] = value; + settings.send_file_name = true; + } + break; + + case 'multipart': + settings[option] = value; + if (!value) { + settings.send_file_name = true; + } + break; + + case 'unique_names': + settings[option] = value; + if (value) { + settings.send_file_name = true; + } + break; + + case 'filters': + // for sake of backward compatibility + if (plupload.typeOf(value) === 'array') { + value = { + mime_types: value + }; + } + + if (init) { + plupload.extend(settings.filters, value); + } else { + settings.filters = value; + } + + // if file format filters are being updated, regenerate the matching expressions + if (value.mime_types) { + settings.filters.mime_types.regexp = (function(filters) { + var extensionsRegExp = []; + + plupload.each(filters, function(filter) { + plupload.each(filter.extensions.split(/,/), function(ext) { + if (/^\s*\*\s*$/.test(ext)) { + extensionsRegExp.push('\\.*'); + } else { + extensionsRegExp.push('\\.' + ext.replace(new RegExp('[' + ('/^$.*+?|()[]{}\\'.replace(/./g, '\\$&')) + ']', 'g'), '\\$&')); + } + }); + }); + + return new RegExp('(' + extensionsRegExp.join('|') + ')$', 'i'); + }(settings.filters.mime_types)); + } + break; + + case 'resize': + if (init) { + plupload.extend(settings.resize, value, { + enabled: true + }); + } else { + settings.resize = value; + } + break; + + case 'prevent_duplicates': + settings.prevent_duplicates = settings.filters.prevent_duplicates = !!value; + break; + + case 'browse_button': + case 'drop_element': + value = plupload.get(value); + + case 'container': + case 'runtimes': + case 'multi_selection': + case 'flash_swf_url': + case 'silverlight_xap_url': + settings[option] = value; + if (!init) { + reinitRequired = true; + } + break; + + default: + settings[option] = value; + } + + if (!init) { + self.trigger('OptionChanged', option, value, oldValue); + } + } + + if (typeof(option) === 'object') { + plupload.each(option, function(value, option) { + _setOption(option, value, init); + }); + } else { + _setOption(option, value, init); + } + + if (init) { + // Normalize the list of required capabilities + settings.required_features = normalizeCaps(plupload.extend({}, settings)); + + // Come up with the list of capabilities that can affect default mode in a multi-mode runtimes + preferred_caps = normalizeCaps(plupload.extend({}, settings, { + required_features: true + })); + } else if (reinitRequired) { + self.trigger('Destroy'); + + initControls.call(self, settings, function(inited) { + if (inited) { + self.runtime = o.Runtime.getInfo(getRUID()).type; + self.trigger('Init', { runtime: self.runtime }); + self.trigger('PostInit'); + } else { + self.trigger('Error', { + code : plupload.INIT_ERROR, + message : plupload.translate('Init error.') + }); + } + }); + } + } + + + // Internal event handlers + function onBeforeUpload(up, file) { + // Generate unique target filenames + if (up.settings.unique_names) { + var matches = file.name.match(/\.([^.]+)$/), ext = "part"; + if (matches) { + ext = matches[1]; + } + file.target_name = file.id + '.' + ext; + } + } + + + function onUploadFile(up, file) { + var url = up.settings.url + , chunkSize = up.settings.chunk_size + , retries = up.settings.max_retries + , features = up.features + , offset = 0 + , blob + ; + + // make sure we start at a predictable offset + if (file.loaded) { + offset = file.loaded = chunkSize ? chunkSize * Math.floor(file.loaded / chunkSize) : 0; + } + + function handleError() { + if (retries-- > 0) { + delay(uploadNextChunk, 1000); + } else { + file.loaded = offset; // reset all progress + + up.trigger('Error', { + code : plupload.HTTP_ERROR, + message : plupload.translate('HTTP Error.'), + file : file, + response : xhr.responseText, + status : xhr.status, + responseHeaders: xhr.getAllResponseHeaders() + }); + } + } + + function uploadNextChunk() { + var chunkBlob, formData, args = {}, curChunkSize; + + // make sure that file wasn't cancelled and upload is not stopped in general + if (file.status !== plupload.UPLOADING || up.state === plupload.STOPPED) { + return; + } + + // send additional 'name' parameter only if required + if (up.settings.send_file_name) { + args.name = file.target_name || file.name; + } + + if (chunkSize && features.chunks && blob.size > chunkSize) { // blob will be of type string if it was loaded in memory + curChunkSize = Math.min(chunkSize, blob.size - offset); + chunkBlob = blob.slice(offset, offset + curChunkSize); + } else { + curChunkSize = blob.size; + chunkBlob = blob; + } + + // If chunking is enabled add corresponding args, no matter if file is bigger than chunk or smaller + if (chunkSize && features.chunks) { + // Setup query string arguments + if (up.settings.send_chunk_number) { + args.chunk = Math.ceil(offset / chunkSize); + args.chunks = Math.ceil(blob.size / chunkSize); + } else { // keep support for experimental chunk format, just in case + args.offset = offset; + args.total = blob.size; + } + } + + xhr = new o.XMLHttpRequest(); + + // Do we have upload progress support + if (xhr.upload) { + xhr.upload.onprogress = function(e) { + file.loaded = Math.min(file.size, offset + e.loaded); + up.trigger('UploadProgress', file); + }; + } + + xhr.onload = function() { + // check if upload made itself through + if (xhr.status >= 400) { + handleError(); + return; + } + + retries = up.settings.max_retries; // reset the counter + + // Handle chunk response + if (curChunkSize < blob.size) { + chunkBlob.destroy(); + + offset += curChunkSize; + file.loaded = Math.min(offset, blob.size); + + up.trigger('ChunkUploaded', file, { + offset : file.loaded, + total : blob.size, + response : xhr.responseText, + status : xhr.status, + responseHeaders: xhr.getAllResponseHeaders() + }); + + // stock Android browser doesn't fire upload progress events, but in chunking mode we can fake them + if (o.Env.browser === 'Android Browser') { + // doesn't harm in general, but is not required anywhere else + up.trigger('UploadProgress', file); + } + } else { + file.loaded = file.size; + } + + chunkBlob = formData = null; // Free memory + + // Check if file is uploaded + if (!offset || offset >= blob.size) { + // If file was modified, destory the copy + if (file.size != file.origSize) { + blob.destroy(); + blob = null; + } + + up.trigger('UploadProgress', file); + + file.status = plupload.DONE; + + up.trigger('FileUploaded', file, { + response : xhr.responseText, + status : xhr.status, + responseHeaders: xhr.getAllResponseHeaders() + }); + } else { + // Still chunks left + delay(uploadNextChunk, 1); // run detached, otherwise event handlers interfere + } + }; + + xhr.onerror = function() { + handleError(); + }; + + xhr.onloadend = function() { + this.destroy(); + xhr = null; + }; + + // Build multipart request + if (up.settings.multipart && features.multipart) { + xhr.open("post", url, true); + + // Set custom headers + plupload.each(up.settings.headers, function(value, name) { + xhr.setRequestHeader(name, value); + }); + + formData = new o.FormData(); + + // Add multipart params + plupload.each(plupload.extend(args, up.settings.multipart_params), function(value, name) { + formData.append(name, value); + }); + + // Add file and send it + formData.append(up.settings.file_data_name, chunkBlob); + xhr.send(formData, { + runtime_order: up.settings.runtimes, + required_caps: up.settings.required_features, + preferred_caps: preferred_caps, + swf_url: up.settings.flash_swf_url, + xap_url: up.settings.silverlight_xap_url + }); + } else { + // if no multipart, send as binary stream + url = plupload.buildUrl(up.settings.url, plupload.extend(args, up.settings.multipart_params)); + + xhr.open("post", url, true); + + xhr.setRequestHeader('Content-Type', 'application/octet-stream'); // Binary stream header + + // Set custom headers + plupload.each(up.settings.headers, function(value, name) { + xhr.setRequestHeader(name, value); + }); + + xhr.send(chunkBlob, { + runtime_order: up.settings.runtimes, + required_caps: up.settings.required_features, + preferred_caps: preferred_caps, + swf_url: up.settings.flash_swf_url, + xap_url: up.settings.silverlight_xap_url + }); + } + } + + blob = file.getSource(); + + // Start uploading chunks + if (up.settings.resize.enabled && runtimeCan(blob, 'send_binary_string') && !!~o.inArray(blob.type, ['image/jpeg', 'image/png'])) { + // Resize if required + resizeImage.call(this, blob, up.settings.resize, function(resizedBlob) { + blob = resizedBlob; + file.size = resizedBlob.size; + uploadNextChunk(); + }); + } else { + uploadNextChunk(); + } + } + + + function onUploadProgress(up, file) { + calcFile(file); + } + + + function onStateChanged(up) { + if (up.state == plupload.STARTED) { + // Get start time to calculate bps + startTime = (+new Date()); + } else if (up.state == plupload.STOPPED) { + // Reset currently uploading files + for (var i = up.files.length - 1; i >= 0; i--) { + if (up.files[i].status == plupload.UPLOADING) { + up.files[i].status = plupload.QUEUED; + calc(); + } + } + } + } + + + function onCancelUpload() { + if (xhr) { + xhr.abort(); + } + } + + + function onFileUploaded(up) { + calc(); + + // Upload next file but detach it from the error event + // since other custom listeners might want to stop the queue + delay(function() { + uploadNext.call(up); + }, 1); + } + + + function onError(up, err) { + if (err.code === plupload.INIT_ERROR) { + up.destroy(); + } + // Set failed status if an error occured on a file + else if (err.code === plupload.HTTP_ERROR) { + err.file.status = plupload.FAILED; + calcFile(err.file); + + // Upload next file but detach it from the error event + // since other custom listeners might want to stop the queue + if (up.state == plupload.STARTED) { // upload in progress + up.trigger('CancelUpload'); + delay(function() { + uploadNext.call(up); + }, 1); + } + } + } + + + function onDestroy(up) { + up.stop(); + + // Purge the queue + plupload.each(files, function(file) { + file.destroy(); + }); + files = []; + + if (fileInputs.length) { + plupload.each(fileInputs, function(fileInput) { + fileInput.destroy(); + }); + fileInputs = []; + } + + if (fileDrops.length) { + plupload.each(fileDrops, function(fileDrop) { + fileDrop.destroy(); + }); + fileDrops = []; + } + + preferred_caps = {}; + disabled = false; + startTime = xhr = null; + total.reset(); + } + + + // Default settings + settings = { + runtimes: o.Runtime.order, + max_retries: 0, + chunk_size: 0, + multipart: true, + multi_selection: true, + file_data_name: 'file', + flash_swf_url: 'js/Moxie.swf', + silverlight_xap_url: 'js/Moxie.xap', + filters: { + mime_types: [], + prevent_duplicates: false, + max_file_size: 0 + }, + resize: { + enabled: false, + preserve_headers: true, + crop: false + }, + send_file_name: true, + send_chunk_number: true + }; + + + setOption.call(this, options, null, true); + + // Inital total state + total = new plupload.QueueProgress(); + + // Add public methods + plupload.extend(this, { + + /** + * Unique id for the Uploader instance. + * + * @property id + * @type String + */ + id : uid, + uid : uid, // mOxie uses this to differentiate between event targets + + /** + * Current state of the total uploading progress. This one can either be plupload.STARTED or plupload.STOPPED. + * These states are controlled by the stop/start methods. The default value is STOPPED. + * + * @property state + * @type Number + */ + state : plupload.STOPPED, + + /** + * Map of features that are available for the uploader runtime. Features will be filled + * before the init event is called, these features can then be used to alter the UI for the end user. + * Some of the current features that might be in this map is: dragdrop, chunks, jpgresize, pngresize. + * + * @property features + * @type Object + */ + features : {}, + + /** + * Current runtime name. + * + * @property runtime + * @type String + */ + runtime : null, + + /** + * Current upload queue, an array of File instances. + * + * @property files + * @type Array + * @see plupload.File + */ + files : files, + + /** + * Object with name/value settings. + * + * @property settings + * @type Object + */ + settings : settings, + + /** + * Total progess information. How many files has been uploaded, total percent etc. + * + * @property total + * @type plupload.QueueProgress + */ + total : total, + + + /** + * Initializes the Uploader instance and adds internal event listeners. + * + * @method init + */ + init : function() { + var self = this; + + if (typeof(settings.preinit) == "function") { + settings.preinit(self); + } else { + plupload.each(settings.preinit, function(func, name) { + self.bind(name, func); + }); + } + + bindEventListeners.call(this); + + // Check for required options + if (!settings.browse_button || !settings.url) { + this.trigger('Error', { + code : plupload.INIT_ERROR, + message : plupload.translate('Init error.') + }); + return; + } + + initControls.call(this, settings, function(inited) { + if (typeof(settings.init) == "function") { + settings.init(self); + } else { + plupload.each(settings.init, function(func, name) { + self.bind(name, func); + }); + } + + if (inited) { + self.runtime = o.Runtime.getInfo(getRUID()).type; + self.trigger('Init', { runtime: self.runtime }); + self.trigger('PostInit'); + } else { + self.trigger('Error', { + code : plupload.INIT_ERROR, + message : plupload.translate('Init error.') + }); + } + }); + }, + + /** + * Set the value for the specified option(s). + * + * @method setOption + * @since 2.1 + * @param {String|Object} option Name of the option to change or the set of key/value pairs + * @param {Mixed} [value] Value for the option (is ignored, if first argument is object) + */ + setOption: function(option, value) { + setOption.call(this, option, value, !this.runtime); // until runtime not set we do not need to reinitialize + }, + + /** + * Get the value for the specified option or the whole configuration, if not specified. + * + * @method getOption + * @since 2.1 + * @param {String} [option] Name of the option to get + * @return {Mixed} Value for the option or the whole set + */ + getOption: function(option) { + if (!option) { + return settings; + } + return settings[option]; + }, + + /** + * Refreshes the upload instance by dispatching out a refresh event to all runtimes. + * This would for example reposition flash/silverlight shims on the page. + * + * @method refresh + */ + refresh : function() { + if (fileInputs.length) { + plupload.each(fileInputs, function(fileInput) { + fileInput.trigger('Refresh'); + }); + } + this.trigger('Refresh'); + }, + + /** + * Starts uploading the queued files. + * + * @method start + */ + start : function() { + if (this.state != plupload.STARTED) { + this.state = plupload.STARTED; + this.trigger('StateChanged'); + + uploadNext.call(this); + } + }, + + /** + * Stops the upload of the queued files. + * + * @method stop + */ + stop : function() { + if (this.state != plupload.STOPPED) { + this.state = plupload.STOPPED; + this.trigger('StateChanged'); + this.trigger('CancelUpload'); + } + }, + + + /** + * Disables/enables browse button on request. + * + * @method disableBrowse + * @param {Boolean} disable Whether to disable or enable (default: true) + */ + disableBrowse : function() { + disabled = arguments[0] !== undef ? arguments[0] : true; + + if (fileInputs.length) { + plupload.each(fileInputs, function(fileInput) { + fileInput.disable(disabled); + }); + } + + this.trigger('DisableBrowse', disabled); + }, + + /** + * Returns the specified file object by id. + * + * @method getFile + * @param {String} id File id to look for. + * @return {plupload.File} File object or undefined if it wasn't found; + */ + getFile : function(id) { + var i; + for (i = files.length - 1; i >= 0; i--) { + if (files[i].id === id) { + return files[i]; + } + } + }, + + /** + * Adds file to the queue programmatically. Can be native file, instance of Plupload.File, + * instance of mOxie.File, input[type="file"] element, or array of these. Fires FilesAdded, + * if any files were added to the queue. Otherwise nothing happens. + * + * @method addFile + * @since 2.0 + * @param {plupload.File|mOxie.File|File|Node|Array} file File or files to add to the queue. + * @param {String} [fileName] If specified, will be used as a name for the file + */ + addFile : function(file, fileName) { + var self = this + , queue = [] + , filesAdded = [] + , ruid + ; + + function filterFile(file, cb) { + var queue = []; + o.each(self.settings.filters, function(rule, name) { + if (fileFilters[name]) { + queue.push(function(cb) { + fileFilters[name].call(self, rule, file, function(res) { + cb(!res); + }); + }); + } + }); + o.inSeries(queue, cb); + } + + /** + * @method resolveFile + * @private + * @param {o.File|o.Blob|plupload.File|File|Blob|input[type="file"]} file + */ + function resolveFile(file) { + var type = o.typeOf(file); + + // o.File + if (file instanceof o.File) { + if (!file.ruid && !file.isDetached()) { + if (!ruid) { // weird case + return false; + } + file.ruid = ruid; + file.connectRuntime(ruid); + } + resolveFile(new plupload.File(file)); + } + // o.Blob + else if (file instanceof o.Blob) { + resolveFile(file.getSource()); + file.destroy(); + } + // plupload.File - final step for other branches + else if (file instanceof plupload.File) { + if (fileName) { + file.name = fileName; + } + + queue.push(function(cb) { + // run through the internal and user-defined filters, if any + filterFile(file, function(err) { + if (!err) { + // make files available for the filters by updating the main queue directly + files.push(file); + // collect the files that will be passed to FilesAdded event + filesAdded.push(file); + + self.trigger("FileFiltered", file); + } + delay(cb, 1); // do not build up recursions or eventually we might hit the limits + }); + }); + } + // native File or blob + else if (o.inArray(type, ['file', 'blob']) !== -1) { + resolveFile(new o.File(null, file)); + } + // input[type="file"] + else if (type === 'node' && o.typeOf(file.files) === 'filelist') { + // if we are dealing with input[type="file"] + o.each(file.files, resolveFile); + } + // mixed array of any supported types (see above) + else if (type === 'array') { + fileName = null; // should never happen, but unset anyway to avoid funny situations + o.each(file, resolveFile); + } + } + + ruid = getRUID(); + + resolveFile(file); + + if (queue.length) { + o.inSeries(queue, function() { + // if any files left after filtration, trigger FilesAdded + if (filesAdded.length) { + self.trigger("FilesAdded", filesAdded); + } + }); + } + }, + + /** + * Removes a specific file. + * + * @method removeFile + * @param {plupload.File|String} file File to remove from queue. + */ + removeFile : function(file) { + var id = typeof(file) === 'string' ? file : file.id; + + for (var i = files.length - 1; i >= 0; i--) { + if (files[i].id === id) { + return this.splice(i, 1)[0]; + } + } + }, + + /** + * Removes part of the queue and returns the files removed. This will also trigger the FilesRemoved and QueueChanged events. + * + * @method splice + * @param {Number} start (Optional) Start index to remove from. + * @param {Number} length (Optional) Lengh of items to remove. + * @return {Array} Array of files that was removed. + */ + splice : function(start, length) { + // Splice and trigger events + var removed = files.splice(start === undef ? 0 : start, length === undef ? files.length : length); + + // if upload is in progress we need to stop it and restart after files are removed + var restartRequired = false; + if (this.state == plupload.STARTED) { // upload in progress + plupload.each(removed, function(file) { + if (file.status === plupload.UPLOADING) { + restartRequired = true; // do not restart, unless file that is being removed is uploading + return false; + } + }); + + if (restartRequired) { + this.stop(); + } + } + + this.trigger("FilesRemoved", removed); + + // Dispose any resources allocated by those files + plupload.each(removed, function(file) { + file.destroy(); + }); + + if (restartRequired) { + this.start(); + } + + return removed; + }, + + /** + Dispatches the specified event name and its arguments to all listeners. + + @method trigger + @param {String} name Event name to fire. + @param {Object..} Multiple arguments to pass along to the listener functions. + */ + + // override the parent method to match Plupload-like event logic + dispatchEvent: function(type) { + var list, args, result; + + type = type.toLowerCase(); + + list = this.hasEventListener(type); + + if (list) { + // sort event list by prority + list.sort(function(a, b) { return b.priority - a.priority; }); + + // first argument should be current plupload.Uploader instance + args = [].slice.call(arguments); + args.shift(); + args.unshift(this); + + for (var i = 0; i < list.length; i++) { + // Fire event, break chain if false is returned + if (list[i].fn.apply(list[i].scope, args) === false) { + return false; + } + } + } + return true; + }, + + /** + Check whether uploader has any listeners to the specified event. + + @method hasEventListener + @param {String} name Event name to check for. + */ + + + /** + Adds an event listener by name. + + @method bind + @param {String} name Event name to listen for. + @param {function} fn Function to call ones the event gets fired. + @param {Object} [scope] Optional scope to execute the specified function in. + @param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first + */ + bind: function(name, fn, scope, priority) { + // adapt moxie EventTarget style to Plupload-like + plupload.Uploader.prototype.bind.call(this, name, fn, priority, scope); + }, + + /** + Removes the specified event listener. + + @method unbind + @param {String} name Name of event to remove. + @param {function} fn Function to remove from listener. + */ + + /** + Removes all event listeners. + + @method unbindAll + */ + + + /** + * Destroys Plupload instance and cleans after itself. + * + * @method destroy + */ + destroy : function() { + this.trigger('Destroy'); + settings = total = null; // purge these exclusively + this.unbindAll(); + } + }); +}; + +plupload.Uploader.prototype = o.EventTarget.instance; + +/** + * Constructs a new file instance. + * + * @class File + * @constructor + * + * @param {Object} file Object containing file properties + * @param {String} file.name Name of the file. + * @param {Number} file.size File size. + */ +plupload.File = (function() { + var filepool = {}; + + function PluploadFile(file) { + + plupload.extend(this, { + + /** + * File id this is a globally unique id for the specific file. + * + * @property id + * @type String + */ + id: plupload.guid(), + + /** + * File name for example "myfile.gif". + * + * @property name + * @type String + */ + name: file.name || file.fileName, + + /** + * File type, `e.g image/jpeg` + * + * @property type + * @type String + */ + type: file.type || '', + + /** + * File size in bytes (may change after client-side manupilation). + * + * @property size + * @type Number + */ + size: file.size || file.fileSize, + + /** + * Original file size in bytes. + * + * @property origSize + * @type Number + */ + origSize: file.size || file.fileSize, + + /** + * Number of bytes uploaded of the files total size. + * + * @property loaded + * @type Number + */ + loaded: 0, + + /** + * Number of percentage uploaded of the file. + * + * @property percent + * @type Number + */ + percent: 0, + + /** + * Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. + * + * @property status + * @type Number + * @see plupload + */ + status: plupload.QUEUED, + + /** + * Date of last modification. + * + * @property lastModifiedDate + * @type {String} + */ + lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString(), // Thu Aug 23 2012 19:40:00 GMT+0400 (GET) + + /** + * Returns native window.File object, when it's available. + * + * @method getNative + * @return {window.File} or null, if plupload.File is of different origin + */ + getNative: function() { + var file = this.getSource().getSource(); + return o.inArray(o.typeOf(file), ['blob', 'file']) !== -1 ? file : null; + }, + + /** + * Returns mOxie.File - unified wrapper object that can be used across runtimes. + * + * @method getSource + * @return {mOxie.File} or null + */ + getSource: function() { + if (!filepool[this.id]) { + return null; + } + return filepool[this.id]; + }, + + /** + * Destroys plupload.File object. + * + * @method destroy + */ + destroy: function() { + var src = this.getSource(); + if (src) { + src.destroy(); + delete filepool[this.id]; + } + } + }); + + filepool[this.id] = file; + } + + return PluploadFile; +}()); + + +/** + * Constructs a queue progress. + * + * @class QueueProgress + * @constructor + */ + plupload.QueueProgress = function() { + var self = this; // Setup alias for self to reduce code size when it's compressed + + /** + * Total queue file size. + * + * @property size + * @type Number + */ + self.size = 0; + + /** + * Total bytes uploaded. + * + * @property loaded + * @type Number + */ + self.loaded = 0; + + /** + * Number of files uploaded. + * + * @property uploaded + * @type Number + */ + self.uploaded = 0; + + /** + * Number of files failed to upload. + * + * @property failed + * @type Number + */ + self.failed = 0; + + /** + * Number of files yet to be uploaded. + * + * @property queued + * @type Number + */ + self.queued = 0; + + /** + * Total percent of the uploaded bytes. + * + * @property percent + * @type Number + */ + self.percent = 0; + + /** + * Bytes uploaded per second. + * + * @property bytesPerSec + * @type Number + */ + self.bytesPerSec = 0; + + /** + * Resets the progress to its initial values. + * + * @method reset + */ + self.reset = function() { + self.size = self.loaded = self.uploaded = self.failed = self.queued = self.percent = self.bytesPerSec = 0; + }; +}; + +window.plupload = plupload; + +}(window, mOxie)); diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.full.min.js b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.full.min.js new file mode 100644 index 0000000000..2af434de4f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/includes/js/plupload.full.min.js @@ -0,0 +1,29 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.3.4 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2015-07-18 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(t,n){var i,r,o,a;if(t)if("number"===e(t.length)){for(o=0,i=t.length;i>o;o++)if(n(t[o],o)===!1)return}else if("object"===e(t))for(r in t)if(t.hasOwnProperty(r)&&n(t[r],r)===!1)return},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},h=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),Math.floor(e)},f=function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e(t)?t:""})};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,sprintf:f,parseSizeStr:h}}),i(c,[u],function(e){function t(e,t,n){var i=0,r=0,o=0,a={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},s=function(e){return e=(""+e).replace(/[_\-+]/g,"."),e=e.replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,"."),e.length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?a[e]||-7:parseInt(e,10):0};for(e=s(e),t=s(t),r=Math.max(e.length,t.length),i=0;r>i;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",h="architecture",f="console",p="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,h=arguments;n0?2==c.length?typeof c[1]==i?t[c[0]]=c[1].call(this,d):t[c[0]]=c[1]:3==c.length?typeof c[1]!==i||c[1].exec&&c[1].test?t[c[0]]=d?d.replace(c[1],c[2]):e:t[c[0]]=d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){if(navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/))return!1;var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r=(new n).getResult(),o={can:i,uaParser:n,browser:r.browser.name,version:r.browser.version,os:r.os.name,osVersion:r.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return o.OS=o.os,o}),i(l,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(d,[u,l],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete e[this.uid][t],n.isEmptyObj(e[this.uid])&&delete e[this.uid])}},removeAllEventListeners:function(){e[this.uid]&&delete e[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==n.typeOf(i)){if(s=i,"string"!==n.typeOf(s.type))throw new t.EventException(t.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?!function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=e[r]&&e[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];n.each(o,function(e){a[0].target=e.scope,d.push(u.async?function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}:function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&n.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},handleEventProps:function(e){var t=this;this.bind(e.join(" "),function(e){var t="on"+e.type.toLowerCase();"function"===n.typeOf(this[t])&&this[t].apply(this,arguments)}),n.each(e,function(e){e="on"+e.toLowerCase(e),"undefined"===n.typeOf(t[e])&&(t[e]=null)})}})}return i.instance=new i,i}),i(m,[c,u,h,p],function(e,t,n,i){function r(e,i,o,s,u){var c=this,l,d=t.guid(i+"_"),h=u||"browser";e=e||{},a[d]=this,o=t.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},o),e.preferred_caps&&(h=r.getMode(s,e.preferred_caps,h)),l=function(){var e={};return{exec:function(t,n,i,r){return l[n]&&(e[t]||(e[t]={context:this,instance:new l[n]}),e[t].instance[i])?e[t].instance[i].apply(this,r):void 0},removeInstance:function(t){delete e[t]},removeAllInstances:function(){var n=this;t.each(e,function(e,i){"function"===t.typeOf(e.instance.destroy)&&e.instance.destroy.call(e.context),n.removeInstance(i)})}}}(),t.extend(this,{initialized:!1,uid:d,type:i,mode:r.getMode(s,e.required_caps,h),shimid:d+"_container",clients:0,options:e,can:function(e,n){var i=arguments[2]||o;if("string"===t.typeOf(e)&&"undefined"===t.typeOf(n)&&(e=r.parseCaps(e)),"object"===t.typeOf(e)){for(var a in e)if(!this.can(a,e[a],i))return!1;return!0}return"function"===t.typeOf(i[e])?i[e].call(this,n):n===i[e]},getShimContainer:function(){var e,i=n.get(this.shimid);return i||(e=this.options.container?n.get(this.options.container):document.body,i=document.createElement("div"),i.id=this.shimid,i.className="moxie-shim moxie-shim-"+this.type,t.extend(i.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),e.appendChild(i),e=null),i},getShim:function(){return l},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec.call(this,this.uid,e,t,n)},exec:function(e,t){var n=[].slice.call(arguments,2);return c[e]&&c[e][t]?c[e][t].apply(this,n):c.shimExec.apply(this,arguments)},destroy:function(){if(c){var e=n.get(this.shimid);e&&e.parentNode.removeChild(e),l&&l.removeAllInstances(),this.unbindAll(),delete a[this.uid],this.uid=null,d=c=l=e=null}}}),this.mode&&e.required_caps&&!this.can(e.required_caps)&&(this.mode=!1)}var o={},a={};return r.order="html5,flash,silverlight,html4",r.getRuntime=function(e){return a[e]?a[e]:!1},r.addConstructor=function(e,t){t.prototype=i.instance,o[e]=t},r.getConstructor=function(e){return o[e]||null},r.getInfo=function(e){var t=r.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},r.parseCaps=function(e){var n={};return"string"!==t.typeOf(e)?e||{}:(t.each(e.split(","),function(e){n[e]=!0}),n)},r.can=function(e,t){var n,i=r.getConstructor(e),o;return i?(n=new i({required_caps:t}),o=n.mode,n.destroy(),!!o):!1},r.thatCan=function(e,t){var n=(t||r.order).split(/\s*,\s*/);for(var i in n)if(r.can(n[i],e))return n[i];return null},r.getMode=function(e,n,i){var r=null;if("undefined"===t.typeOf(i)&&(i="browser"),n&&!t.isEmptyObj(e)){if(t.each(n,function(n,i){if(e.hasOwnProperty(i)){var o=e[i](n);if("string"==typeof o&&(o=[o]),r){if(!(r=t.arrayIntersect(r,o)))return r=!1}else r=o}}),r)return-1!==t.inArray(i,r)?i:r[0];if(r===!1)return!1}return i},r.capTrue=function(){return!0},r.capFalse=function(){return!1},r.capTest=function(e){return function(){return!!e}},r}),i(g,[c,f,u,m],function(e,t,n,i){return function r(){var e;n.extend(this,{connectRuntime:function(r){function o(n){var s,u;return n.length?(s=n.shift().toLowerCase(),(u=i.getConstructor(s))?(e=new u(r),e.bind("Init",function(){e.initialized=!0,setTimeout(function(){e.clients++,a.trigger("RuntimeInit",e)},1)}),e.bind("Error",function(){e.destroy(),o(n)}),e.mode?void e.init():void e.trigger("Error")):void o(n)):(a.trigger("RuntimeError",new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)),void(e=null))}var a=this,s;if("string"===n.typeOf(r)?s=r:"string"===n.typeOf(r.ruid)&&(s=r.ruid),s){if(e=i.getRuntime(s))return e.clients++,e;throw new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)}o((r.runtime_order||i.order).split(/\s*,\s*/))},disconnectRuntime:function(){e&&--e.clients<=0&&e.destroy(),e=null},getRuntime:function(){return e&&e.uid?e:e=null},exec:function(){return e?e.exec.apply(this,arguments):null}})}}),i(v,[u,c,d,h,f,p,l,m,g],function(e,t,n,i,r,o,a,s,u){function c(t){var o=this,c,d,h;if(-1!==e.inArray(e.typeOf(t),["string","node"])&&(t={browse_button:t}),d=i.get(t.browse_button),!d)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR);h={accept:[{title:a.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:d.parentNode||document.body},t=e.extend({},h,t),"string"==typeof t.required_caps&&(t.required_caps=s.parseCaps(t.required_caps)),"string"==typeof t.accept&&(t.accept=n.mimes2extList(t.accept)),c=i.get(t.container),c||(c=document.body),"static"===i.getStyle(c,"position")&&(c.style.position="relative"),c=d=null,u.call(o),e.extend(o,{uid:e.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){o.bind("RuntimeInit",function(n,r){o.ruid=r.uid,o.shimid=r.shimid,o.bind("Ready",function(){o.trigger("Refresh")},999),o.bind("Refresh",function(){var n,o,a,s;a=i.get(t.browse_button),s=i.get(r.shimid),a&&(n=i.getPos(a,i.get(t.container)),o=i.getSize(a),s&&e.extend(s.style,{top:n.y+"px",left:n.x+"px",width:o.w+"px",height:o.h+"px"})),s=a=null}),r.exec.call(o,"FileInput","init",t)}),o.connectRuntime(e.extend({},t,{required_caps:{select_file:!0}}))},disable:function(t){var n=this.getRuntime();n&&n.exec.call(this,"FileInput","disable","undefined"===e.typeOf(t)?!0:t)},refresh:function(){o.trigger("Refresh")},destroy:function(){var t=this.getRuntime();t&&(t.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===e.typeOf(this.files)&&e.each(this.files,function(e){e.destroy()}),this.files=null,this.unbindAll()}}),this.handleEventProps(l)}var l=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return c.prototype=o.instance,c}),i(w,[],function(){var e=function(e){return unescape(encodeURIComponent(e))},t=function(e){return decodeURIComponent(escape(e))},n=function(e,n){if("function"==typeof window.atob)return n?t(window.atob(e)):window.atob(e);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,h=0,f=0,p="",m=[];if(!e)return e;e+="";do s=i.indexOf(e.charAt(h++)),u=i.indexOf(e.charAt(h++)),c=i.indexOf(e.charAt(h++)),l=i.indexOf(e.charAt(h++)),d=s<<18|u<<12|c<<6|l,r=d>>16&255,o=d>>8&255,a=255&d,64==c?m[f++]=String.fromCharCode(r):64==l?m[f++]=String.fromCharCode(r,o):m[f++]=String.fromCharCode(r,o,a);while(h>18&63,u=d>>12&63,c=d>>6&63,l=63&d,m[f++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(ha;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(I,[f,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(T,[u,f,p,w,x,m,R,y,A,I,c,d],function(e,t,n,i,r,o,a,s,u,c,l,d){function h(){this.uid=e.guid("uid_")}function f(){function n(e,t){return w.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?w[e]:v[e]:void(l.can("define_property")?w[e]=t:v[e]=t):void 0}function u(t){function i(){B&&(B.destroy(),B=null),s.dispatchEvent("loadend"),s=null}function r(r){B.bind("LoadStart",function(e){n("readyState",f.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),O&&s.upload.dispatchEvent(e)}),B.bind("Progress",function(e){n("readyState")!==f.LOADING&&(n("readyState",f.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),B.bind("UploadProgress",function(e){O&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),B.bind("Load",function(t){n("readyState",f.DONE),n("status",Number(r.exec.call(B,"XMLHttpRequest","getStatus")||0)),n("statusText",p[n("status")]||""),n("response",r.exec.call(B,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),k=r.exec.call(B,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(O&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),B.bind("Abort",function(e){s.dispatchEvent(e),i()}),B.bind("Error",function(e){N=!0,n("readyState",f.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(B,"XMLHttpRequest","send",{url:E,method:_,async:y,user:x,password:R,headers:b,mimeType:I,encoding:A,responseType:s.responseType,withCredentials:s.withCredentials,options:H},t)}var s=this;C=(new Date).getTime(),B=new a,"string"==typeof H.required_caps&&(H.required_caps=o.parseCaps(H.required_caps)),H.required_caps=e.extend({},H.required_caps,{return_response_type:s.responseType}),t instanceof c&&(H.required_caps.send_multipart=!0),e.isEmptyObj(b)||(H.required_caps.send_custom_headers=!0),L||(H.required_caps.do_cors=!0),H.ruid?r(B.connectRuntime(H)):(B.bind("RuntimeInit",function(e,t){r(t)}),B.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),B.connectRuntime(H))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),C=M=null}var v=this,w={timeout:0,readyState:f.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},y=!0,E,_,b={},x,R,A=null,I=null,T=!1,S=!1,O=!1,D=!1,N=!1,L=!1,C,M,F=null,P=null,H={},B,k="",U;e.extend(this,w,{uid:e.guid("uid_"),upload:new h,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(x=u||l.user,R=c||l.pass,y=s||!0,y===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);T=!y,S=!1,b={},g.call(this),n("readyState",f.OPENED),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(b[r]?b[r]+=", "+o:b[r]=o,!0)},getAllResponseHeaders:function(){return k||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:k&&""!==k&&(U||(U={},e.each(k.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),U[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),U.hasOwnProperty(t))?U[t].header+": "+U[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[f.LOADING,f.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,P=o},send:function(n,r){if(H="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.readyState!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)H.ruid=n.ruid,I=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();H.ruid=o.ruid,I=o.type||"application/octet-stream"}}else"string"==typeof n&&(A="UTF-8",I="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=H.required_caps&&H.required_caps.send_browser_cookies&&!L),O=!T&&this.upload.hasEventListener(),N=!1,D=!n,T||(S=!0),u.call(this,n)},abort:function(){if(N=!0,T=!1,~e.inArray(n("readyState"),[f.UNSENT,f.OPENED,f.DONE]))n("readyState",f.UNSENT);else{if(n("readyState",f.DONE),S=!1,!B)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);B.getRuntime().exec.call(B,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){B&&("function"===e.typeOf(B.destroy)&&B.destroy(),B=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}}),this.handleEventProps(m.concat(["readystatechange"])),this.upload.handleEventProps(m)}var p={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};h.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return f.UNSENT=0,f.OPENED=1,f.HEADERS_RECEIVED=2,f.LOADING=3,f.DONE=4,f.prototype=n.instance,f}),i(S,[u,w,g,p],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;h>i&&(h=i),n=t.btoa(c.substr(d,h)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,h;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),h=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(O,[u,h,f,A,T,m,g,S,c,p,y,E,w],function(e,t,n,i,r,o,a,s,u,c,l,d,h){function f(){function i(e){e||(e=this.exec("Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof f){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)"data:"===t.substr(0,5)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r.code)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){c.apply(this,arguments)},downsize:function(t){var i={width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,crop:!1,preserveHeaders:!0,resample:!1};t="object"==typeof t?e.extend(i,t):e.extend(i,{width:arguments[0],height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]});try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);this.exec("Image","downsize",t.width,t.height,t.crop,t.preserveHeaders)}catch(r){this.trigger("error",r.code)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsBlob",e||"image/jpeg",t||90)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return h.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i,r){function o(t,r){var o=this;if(u.can("create_canvas")){var l=o.getAsCanvas();if(l)return i.appendChild(l),l=null,o.destroy(),void a.trigger("embedded")}var d=o.getAsDataURL(t,r);if(!d)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",d.length))i.innerHTML='',o.destroy(),a.trigger("embedded");else{var f=new s;f.bind("TransportingComplete",function(){c=a.connectRuntime(this.result.ruid),a.bind("Embedded",function(){e.extend(c.getShimContainer().style,{top:"0px",left:"0px",width:o.width+"px",height:o.height+"px"}),c=null},999),c.exec.call(a,"ImageView","display",this.result.uid,width,height),o.destroy()}),f.transport(h.atob(d.substring(d.indexOf("base64,")+7)),t,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i})}}var a=this,c;r=e.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90},r||{});try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT;var l=new f;return l.bind("Resize",function(){o.call(this,r.type,r.quality)}),l.bind("Load",function(){l.downsize(r)}),this.meta.thumb&&this.meta.thumb.width>=r.width&&this.meta.thumb.height>=r.height?l.load(this.meta.thumb.data):l.clone(this,!1),l}catch(d){this.trigger("error",d.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}}),this.handleEventProps(p),this.bind("Load Resize",function(){i.call(this)},999)}var p=["progress","load","error","resize","embedded"];return f.MAX_RESIZE_WIDTH=8192,f.MAX_RESIZE_HEIGHT=8192,f.prototype=c.instance,f}),i(D,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.verComp(i.version,9,">"))}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.verComp(i.version,21,">=")},select_multiple:function(){return!(!r.can("select_file")||"Safari"===i.browser&&"Windows"===i.os||"iOS"===i.os&&i.verComp(i.osVersion,"7.0.0",">")&&i.verComp(i.osVersion,"8.0.0","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(L,[D,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){var e;n.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,h,f,p,m;e=s,h=e.accept.mimes||o.extList2mimes(e.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=i.get(c.uid),n.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),f=i.get(e.browse_button),c.can("summon_file_dialog")&&("static"===i.getStyle(f,"position")&&(f.style.position="relative"),p=parseInt(i.getStyle(f,"z-index"),10)||1,f.style.zIndex=p,d.style.zIndex=p-1,r.addEvent(f,"click",function(e){var t=i.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?f:d,r.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),r.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),r.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),r.addEvent(i.get(e.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(i){if(u.files=[],n.each(this.files,function(n){var i="";return e.directory&&"."==n.name?!0:(n.webkitRelativePath&&(i="/"+n.webkitRelativePath.replace(/^\//,"")),n=new t(c.uid,n),n.relativePath=i,void u.files.push(n))}),"IE"!==a.browser&&"IEMobile"!==a.browser)this.value="";else{var r=this.cloneNode(!0);this.parentNode.replaceChild(r,this),r.onchange=g}u.files.length&&u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},disable:function(e){var t=this.getRuntime(),n;(n=i.get(t.uid))&&(n.disabled=!!e)},destroy:function(){var t=this.getRuntime(),n=t.getShim(),o=t.getShimContainer();r.removeAllEvents(o,this.uid),r.removeAllEvents(e&&i.get(e.container),this.uid),r.removeAllEvents(e&&i.get(e.browse_button),this.uid),o&&(o.innerHTML=""),n.removeInstance(this.uid),e=o=n=null}})}return e.FileInput=s}),i(C,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(M,[D,E,u,h,N,d],function(e,t,n,i,r,o){function a(){function e(e){if(!e.dataTransfer||!e.dataTransfer.types)return!1;var t=n.toArray(e.dataTransfer.types||[]);return-1!==n.inArray("Files",t)||-1!==n.inArray("public.file-url",t)||-1!==n.inArray("application/x-moz-file",t)}function a(e,n){if(u(e)){var i=new t(g,e);i.relativePath=n||"",f.push(i)}}function s(e){for(var t=[],i=0;i=")&&u.verComp(u.version,7,"<"),h="Android Browser"===u.browser,m=!1;if(p=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),f=c(),f.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||h)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return void e.call(s,n,r);if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}f.upload?(n.withCredentials&&(f.withCredentials=!0),f.addEventListener("load",function(e){s.trigger(e)}),f.addEventListener("error",function(e){s.trigger(e)}),f.addEventListener("progress",function(e){s.trigger(e)}),f.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):f.onreadystatechange=function v(){switch(f.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=f.getResponseHeader("Content-Length")||0),f.responseText&&(t=f.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:f.onreadystatechange=function(){},s.trigger(0===f.status?"error":"load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){f.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in f&&("json"!==n.responseType||u.can("return_response_type","json")?f.responseType=n.responseType:f.responseType="text"),m?f.sendAsBinary?f.sendAsBinary(r):!function(){for(var e=new Uint8Array(r.length),t=0;t0&&o.set(new Uint8Array(t.slice(0,e)),0),o.set(new Uint8Array(r),e),o.set(new Uint8Array(t.slice(e+i)),e+r.byteLength),this.clear(),t=o.buffer,n=new DataView(t);break}default:return t}},length:function(){return t?t.byteLength:0},clear:function(){n=t=null}})}function i(t){function n(e,n,i){i=3===arguments.length?i:t.length-n-1,t=t.substr(0,n)+e+t.substr(i+n)}e.extend(this,{readByteAt:function(e){return t.charCodeAt(e)},writeByteAt:function(e,t){n(String.fromCharCode(t),e,1)},SEGMENT:function(e,i,r){switch(arguments.length){case 1:return t.substr(e);case 2:return t.substr(e,i);case 3:n(null!==r?r:"",e,i);break;default:return t}},length:function(){return t?t.length:0},clear:function(){t=null}})}return e.extend(t.prototype,{littleEndian:!1,read:function(e,t){var n,i,r;if(e+t>this.length())throw new Error("You are trying to read outside the source boundaries.");for(i=this.littleEndian?0:-8*(t-1),r=0,n=0;t>r;r++)n|=this.readByteAt(e+r)<this.length())throw new Error("You are trying to write outside the source boundaries.");for(i=this.littleEndian?0:-8*(n-1),r=0;n>r;r++)this.writeByteAt(e+r,t>>Math.abs(i+8*r)&255)},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){var t=this.read(e,4);return t>2147483647?t-4294967296:t},CHAR:function(e){return String.fromCharCode(this.read(e,1))},STRING:function(e,t){return this.asArray("CHAR",e,t).join("")},asArray:function(e,t,n){for(var i=[],r=0;n>r;r++)i[r]=this[e](t+r);return i}}),t}),i(B,[H,f],function(e,t){return function n(i){var r=[],o,a,s,u=0;if(o=new e(i),65496!==o.SHORT(0))throw o.clear(),new t.ImageError(t.ImageError.WRONG_FORMAT);for(a=2;a<=o.length();)if(s=o.SHORT(a),s>=65488&&65495>=s)a+=2;else{if(65498===s||65497===s)break;u=o.SHORT(a+2)+2,s>=65505&&65519>=s&&r.push({hex:s,name:"APP"+(15&s),start:a,length:u,segment:o.SEGMENT(a,u)}),a+=u}return o.clear(),{headers:r,restore:function(t){var n,i,o;for(o=new e(t),a=65504==o.SHORT(2)?4+o.SHORT(4):2,i=0,n=r.length;n>i;i++)o.SEGMENT(a,0,r[i].segment),a+=r[i].length;return t=o.SEGMENT(),o.clear(),t},strip:function(t){var i,r,o,a;for(o=new n(t),r=o.headers,o.purge(),i=new e(t),a=r.length;a--;)i.SEGMENT(r[a].start,r[a].length,"");return t=i.SEGMENT(),i.clear(),t},get:function(e){for(var t=[],n=0,i=r.length;i>n;n++)r[n].name===e.toUpperCase()&&t.push(r[n].segment);return t}, +set:function(e,t){var n=[],i,o,a;for("string"==typeof t?n.push(t):n=t,i=o=0,a=r.length;a>i&&(r[i].name===e.toUpperCase()&&(r[i].segment=n[o],r[i].length=n[o].length,o++),!(o>=n.length));i++);},purge:function(){this.headers=r=[]}}}}),i(k,[u,H,f],function(e,n,i){function r(o){function a(n,r){var o=this,a,s,u,c,h,f,p,m,g=[],v={},w={1:"BYTE",7:"UNDEFINED",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",9:"SLONG",10:"SRATIONAL"},y={BYTE:1,UNDEFINED:1,ASCII:1,SHORT:2,LONG:4,RATIONAL:8,SLONG:4,SRATIONAL:8};for(a=o.SHORT(n),s=0;a>s;s++)if(g=[],p=n+2+12*s,u=r[o.SHORT(p)],u!==t){if(c=w[o.SHORT(p+=2)],h=o.LONG(p+=2),f=y[c],!f)throw new i.ImageError(i.ImageError.INVALID_META_ERR);if(p+=4,f*h>4&&(p=o.LONG(p)+d.tiffHeader),p+f*h>=this.length())throw new i.ImageError(i.ImageError.INVALID_META_ERR);"ASCII"!==c?(g=o.asArray(c,p,h),m=1==h?g[0]:g,l.hasOwnProperty(u)&&"object"!=typeof m?v[u]=l[u][m]:v[u]=m):v[u]=e.trim(o.STRING(p,h).replace(/\0$/,""))}return v}function s(e,t,n){var i,r,o,a=0;if("string"==typeof t){var s=c[e.toLowerCase()];for(var u in s)if(s[u]===t){t=u;break}}i=d[e.toLowerCase()+"IFD"],r=this.SHORT(i);for(var l=0;r>l;l++)if(o=i+12*l+2,this.SHORT(o)==t){a=o+8;break}if(!a)return!1;try{this.write(a,n,4)}catch(h){return!1}return!0}var u,c,l,d,h,f;if(n.call(this,o),c={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},d={tiffHeader:10},h=d.tiffHeader,u={clear:this.clear},e.extend(this,{read:function(){try{return r.prototype.read.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},write:function(){try{return r.prototype.write.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return f||null},EXIF:function(){var t=null;if(d.exifIFD){try{t=a.call(this,d.exifIFD,c.exif)}catch(n){return null}if(t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var i=0,r="";i=65472&&65475>=n)return t+=5,{height:e.SHORT(t),width:e.SHORT(t+=2)};i=e.SHORT(t+=2),t+=i-2}return null}function s(){var e=d.thumb(),t,n;return e&&(t=new i(e),n=a(t),t.clear(),n)?(n.data=e,n):null}function u(){d&&l&&c&&(d.clear(),l.purge(),c.clear(),h=l=d=c=null)}var c,l,d,h;if(c=new i(o),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o);try{d=new r(l.get("app1")[0])}catch(f){}h=a.call(this),e.extend(this,{type:"image/jpeg",size:c.length(),width:h&&h.width||0,height:h&&h.height||0,setExif:function(t,n){return d?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),void l.set("app1",d.SEGMENT())):!1},writeHeaders:function(){return l.restore(arguments.length?arguments[0]:o)},stripHeaders:function(e){return l.strip(e)},purge:function(){u.call(this)}}),d&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS(),thumb:s()})}return o}),i(G,[f,u,H],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:s.LONG(t),height:s.LONG(t+=4)}):null}function o(){s&&(s.clear(),i=l=u=c=s=null)}function a(e){var t,n,i,r;return t=s.LONG(e),n=s.STRING(e+=4,4),i=e+=4,r=s.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l;s=new n(i),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+h>a?a-g:h,w=0;o>w;){var y=w+h>o?o-w:h;p.clearRect(0,0,h,h),p.drawImage(e,-w,-g);var E=w*s/o+c<<0,_=Math.ceil(y*s/o),b=g*u/a/m+l<<0,x=Math.ceil(v*u/a/m);d.drawImage(f,0,0,y,v,E,b,_,x),w+=h}g+=h}f=p=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(j,[D,u,f,w,y,E,z,q,d,c],function(e,t,n,i,r,o,a,s,u,c){function l(){function e(){if(!_&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return _||y}function l(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function d(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function h(e){var t=this;y=new Image,y.onerror=function(){v.call(this),t.trigger("error",n.ImageError.WRONG_FORMAT)},y.onload=function(){t.trigger("load")},y.src="data:"==e.substr(0,5)?e:d(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",n.ImageError.WRONG_FORMAT)},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c=0,l=0,d,h,f,p;if(A=o,p=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(p,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),r?(n=Math.min(n,d.width),i=Math.min(i,d.height),s=Math.max(n/d.width,i/d.height)):s=Math.min(n/d.width,i/d.height),s>1&&!r&&o?void this.trigger("Resize"):(_||(_=document.createElement("canvas")),h=Math.round(d.width*s),f=Math.round(d.height*s),r?(_.width=n,_.height=i,h>n&&(c=Math.round((h-n)/2)),f>i&&(l=Math.round((f-i)/2))):(_.width=h,_.height=f),A||g(_.width,_.height,p),m.call(this,d,_,-c,-l,h,f),this.width=_.width,this.height=_.height,R=!0,void a.trigger("Resize"))}function m(e,t,n,i,r,o){if("iOS"===c.OS)s.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var a=t.getContext("2d");a.drawImage(e,n,i,r,o)}}function g(e,t,n){switch(n){case 5:case 6:case 7:case 8:_.width=t,_.height=e;break;default:_.width=e,_.height=t}var i=_.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function v(){E&&(E.purge(),E=null),b=y=_=x=null,R=!1}var w=this,y,E,_,b,x,R=!1,A=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(b=e.getSource(),void h.call(this,b)):void f.call(this,e.getSource(),function(e){r&&(b=l(e)),h.call(t,e)})},loadFromImage:function(e,t){this.meta=e.meta,x=new o(null,{name:e.name,size:e.size,type:e.type}),h.call(this,t?b=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!E&&b&&t.can("access_image_binary")&&(E=new a(b)),n={width:e().width||0,height:e().height||0,type:x.type||u.getFileMime(x.name),size:b&&b.length||x.size||0,name:x.name||"",meta:E&&E.meta||this.meta||{}},!n.meta||!n.meta.thumb||n.meta.thumb.data instanceof r||(n.meta.thumb.data=new r(null,{type:"image/jpeg",data:n.meta.thumb.data})),n},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return _&&(_.id=this.uid+"_canvas"),_},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new o(null,{name:x.name||"",type:e,data:w.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!R)return y.src;if("image/jpeg"!==e)return _.toDataURL("image/png");try{return _.toDataURL("image/jpeg",t/100)}catch(n){return _.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!R)return b||(b=l(w.getAsDataURL(e,t))),b;if("image/jpeg"!==e)b=l(w.getAsDataURL(e,t));else{var n;t||(t=90);try{n=_.toDataURL("image/jpeg",t/100)}catch(i){n=_.toDataURL("image/jpeg")}b=l(n),E&&(b=E.stripHeaders(b),A&&(E.meta&&E.meta.exif&&E.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),b=E.writeHeaders(b)),E.purge(),E=null)}return R=!1,b},destroy:function(){w=null,v.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=l}),i(X,[u,c,h,f,m],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(e){var i=n.get(e);i&&"OBJECT"==i.nodeName&&("IE"===t.browser?(i.style.display="none",function r(){4==i.readyState?s(e):setTimeout(r,10)}()):i.parentNode.removeChild(i))}function s(e){var t=n.get(e);if(t){for(var i in t)"function"==typeof t[i]&&(t[i]=null);t.parentNode.removeChild(t)}}function u(s){var u=this,d;s=e.extend({swf_url:t.swf_url},s),r.call(this,s,c,{access_binary:function(e){return e&&"browser"===u.mode},access_image_binary:function(e){return e&&"browser"===u.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===u.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===u.mode},return_status_code:function(t){return"browser"===u.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===u.mode},send_browser_cookies:function(e){return e&&"browser"===u.mode},send_custom_headers:function(e){return e&&"browser"===u.mode},send_multipart:r.capTrue,slice_blob:function(e){return e&&"browser"===u.mode},stream_upload:function(e){return e&&"browser"===u.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===u.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return u.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n='',"IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,d=setTimeout(function(){u&&!u.initialized&&u.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){a(u.uid),e.call(u),clearTimeout(d),s=d=e=u=null}}(this.destroy)},l)}var c="flash",l={};return r.addConstructor(c,u),l}),i(V,[X,E,u],function(e,t,n){var i={init:function(e){var i=this,r=this.getRuntime();this.bind("Change",function(){var e=r.shimExec.call(i,"FileInput","getFiles");i.files=[],n.each(e,function(e){i.files.push(new t(r.uid,e))})},999),this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=i}),i(W,[X,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(Y,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i=this;return i.result="","readAsDataURL"===e&&(i.result="data:"+(t.type||"")+";base64,"),i.bind("Progress",function(t,r){r&&(i.result+=n(r,e))},999),i.getRuntime().shimExec.call(this,"FileReader","readAsBase64",t.uid)}};return e.FileReader=i}),i($,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[X,u,y,E,A,I,S],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var h=i.getBlob();h.isDetached()?u(h,function(e){h.destroy(),s(d,e)}):s(d,h)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[X,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[X,u,S,y,A],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getInfo:function(){var e=this.getRuntime(),t=e.shimExec.call(this,"Image","getInfo");return!t.meta||!t.meta.thumb||t.meta.thumb.data instanceof i||(t.meta.thumb.data=new i(e.uid,t.meta.thumb.data)),t},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,c,h,f,m],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='',l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(ee,[Q,E,u],function(e,t,n){var i={init:function(e){function i(e){for(var t="",n=0;ni;i++)n=t.keys[i],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),r.meta[e][n]=s)}),!r.meta||!r.meta.thumb||r.meta.thumb.data instanceof n||(r.meta.thumb.data=new n(e.uid,r.meta.thumb.data))),r.width=parseInt(o.width,10),r.height=parseInt(o.height,10),r.size=parseInt(o.size,10),r.type=o.type,r.name=o.name,r}})}),i(ue,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ce,[ue,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){function e(){var o=this,l=o.getRuntime(),d,h,f,p,m,g;g=n.guid("uid_"),d=l.getShimContainer(),s&&(f=i.get(s+"_form"),f&&n.extend(f.style,{top:"100%"})),p=document.createElement("form"),p.setAttribute("id",g+"_form"),p.setAttribute("method","post"),p.setAttribute("enctype","multipart/form-data"),p.setAttribute("encoding","multipart/form-data"),n.extend(p.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),n.extend(m.style,{fontSize:"999px",opacity:0}),p.appendChild(m),d.appendChild(p),n.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===a.browser&&a.verComp(a.version,10,"<")&&n.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var n;if(this.value){if(this.files){if(n=this.files[0],0===n.size)return void p.parentNode.removeChild(p)}else n={name:this.value};n=new t(l.uid,n),this.onchange=function(){},e.call(o),o.files=[n],m.setAttribute("id",n.uid),p.setAttribute("id",n.uid+"_form"),o.trigger("change"),m=p=null}},l.can("summon_file_dialog")&&(h=i.get(c.browse_button),r.removeEvent(h,"click",o.uid),r.addEvent(h,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},o.uid)),s=g,d=f=h=null}var s,u=[],c;n.extend(this,{init:function(t){var n=this,a=n.getRuntime(),s;c=t,u=t.accept.mimes||o.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,o,u;e=i.get(t.browse_button),a.can("summon_file_dialog")&&("static"===i.getStyle(e,"position")&&(e.style.position="relative"),o=parseInt(i.getStyle(e,"z-index"),10)||1,e.style.zIndex=o,s.style.zIndex=o-1),u=a.can("summon_file_dialog")?e:s,r.addEvent(u,"mouseover",function(){n.trigger("mouseenter")},n.uid),r.addEvent(u,"mouseout",function(){n.trigger("mouseleave")},n.uid),r.addEvent(u,"mousedown",function(){n.trigger("mousedown")},n.uid),r.addEvent(i.get(t.container),"mouseup",function(){n.trigger("mouseup")},n.uid),e=null}(),e.call(this),s=null,n.trigger({type:"ready",async:!0})},disable:function(e){var t;(t=i.get(s))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),n=e.getShimContainer();r.removeAllEvents(n,this.uid),r.removeAllEvents(c&&i.get(c.container),this.uid),r.removeAllEvents(c&&i.get(c.browse_button),this.uid),n&&(n.innerHTML=""),t.removeInstance(this.uid),s=u=c=n=t=null}})}return e.FileInput=s}),i(le,[ue,F],function(e,t){return e.FileReader=t}),i(de,[ue,u,h,x,f,N,y,I],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,h){function f(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),p.trigger({type:"progress",loaded:c.length,total:c.length}),y&&p.trigger({type:"uploadprogress",loaded:y.size||1025,total:y.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return void e.call(p,function(){p.trigger("error")});u=404}e.call(p,function(){p.trigger("load")})},p.uid)}var p=this,m=p.getRuntime(),g,v,w,y;if(u=c=null,h instanceof s&&h.hasBlob()){if(y=h.getBlob(),g=y.uid,w=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),m.getShimContainer().appendChild(v);v.setAttribute("target",g+"_iframe"),h instanceof s&&h.each(function(e,n){if(e instanceof a)w&&w.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),w?v.insertBefore(i,w):v.appendChild(i)}}),v.setAttribute("action",d.url),f(),v.submit(),p.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{ +return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(he,[ue,j],function(e,t){return e.Image=t}),a([u,c,l,d,h,f,p,m,g,v,w,y,E,_,b,x,R,A,I,T,S,O,N])}(this);;(function(e){"use strict";var t={},n=e.moxie.core.utils.Basic.inArray;return function r(e){var i,s;for(i in e)s=typeof e[i],s==="object"&&!~n(i,["Exceptions","Env","Mime"])?r(e[i]):s==="function"&&(t[i]=e[i])}(e.moxie),t.Env=e.moxie.core.utils.Env,t.Mime=e.moxie.core.utils.Mime,t.Exceptions=e.moxie.core.Exceptions,e.mOxie=t,e.o||(e.o=t),t})(this); +/** + * Plupload - multi-runtime File Uploader + * v2.1.8 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2015-07-21 + */ +;(function(e,t,n){function s(e){function r(e,t,r){var i={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",urlstream_upload:"send_binary_string",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};i[e]?n[i[e]]=t:r||(n[e]=t)}var t=e.required_features,n={};if(typeof t=="string")o.each(t.split(/\s*,\s*/),function(e){r(e,!0)});else if(typeof t=="object")o.each(t,function(e,t){r(t,e)});else if(t===!0){e.chunk_size>0&&(n.slice_blob=!0);if(e.resize.enabled||!e.multipart)n.send_binary_string=!0;o.each(e,function(e,t){r(t,!!e,!0)})}return n}var r=e.setTimeout,i={},o={VERSION:"2.1.8",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,get:function(n){var r=[],i;t.typeOf(n)!=="array"&&(n=[n]);var s=n.length;while(s--)i=t.get(n[s]),i&&r.push(i);return r.length?r:null},each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t0?"&":"?")+n),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===n||/\D/.test(e))return o.translate("N/A");var r=Math.pow(1024,4);return e>r?t(e/r,1)+" "+o.translate("tb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("gb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,n){var r,i;return r=new o.Uploader(e),i=t.Runtime.thatCan(r.getOption().required_features,n||e.runtimes),r.destroy(),i},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(e,t,n){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("max_file_size",function(e,t,n){var r;e=o.parseSize(e),t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function g(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n0?Math.ceil(e.loaded/e.size*100):100,b()}function b(){var e,t;d.reset();for(e=0;e0?Math.ceil(d.uploaded/f.length*100):0:(d.bytesPerSec=Math.ceil(d.loaded/((+(new Date)-p||1)/1e3)),d.percent=d.size>0?Math.ceil(d.loaded/d.size*100):0)}function w(){var e=c[0]||h[0];return e?e.getRuntime().uid:!1}function E(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function S(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()}),this.bind("CancelUpload",O),this.bind("BeforeUpload",C),this.bind("UploadFile",k),this.bind("UploadProgress",L),this.bind("StateChanged",A),this.bind("QueueChanged",b),this.bind("Error",_),this.bind("FileUploaded",M),this.bind("Destroy",D)}function x(e,n){var r=this,i=0,s=[],u={runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:l,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(u[t]=e[t])}),e.browse_button&&o.each(e.browse_button,function(n){s.push(function(s){var a=new t.FileInput(o.extend({},u,{accept:e.filters.mime_types,name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:n}));a.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),i++,c.push(this),s()},a.onchange=function(){r.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(r){v||(e.browse_button_hover&&("mouseenter"===r.type?t.addClass(n,e.browse_button_hover):"mouseleave"===r.type&&t.removeClass(n,e.browse_button_hover)),e.browse_button_active&&("mousedown"===r.type?t.addClass(n,e.browse_button_active):"mouseup"===r.type&&t.removeClass(n,e.browse_button_active)))}),a.bind("mousedown",function(){r.trigger("Browse")}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.drop_element&&o.each(e.drop_element,function(e){s.push(function(n){var s=new t.FileDrop(o.extend({},u,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);r.features.dragdrop=e.can("drag_and_drop"),i++,h.push(this),n()},s.ondrop=function(){r.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,n()}),s.init()})}),t.inSeries(s,function(){typeof n=="function"&&n(i)})}function T(e,r,i){var s=new t.Image;try{s.onload=function(){if(r.width>this.width&&r.height>this.height&&r.quality===n&&r.preserve_headers&&!r.crop)return this.destroy(),i(e);s.downsize(r.width,r.height,r.crop,r.preserve_headers)},s.onresize=function(){i(this.getAsBlob(e.type,r.quality)),this.destroy()},s.onerror=function(){i(e)},s.load(e)}catch(o){i(e)}}function N(e,n,r){function f(e,t,n){var r=a[e];switch(e){case"max_file_size":e==="max_file_size"&&(a.max_file_size=a.filters.max_file_size=t);break;case"chunk_size":if(t=o.parseSize(t))a[e]=t,a.send_file_name=!0;break;case"multipart":a[e]=t,t||(a.send_file_name=!0);break;case"unique_names":a[e]=t,t&&(a.send_file_name=!0);break;case"filters":o.typeOf(t)==="array"&&(t={mime_types:t}),n?o.extend(a.filters,t):a.filters=t,t.mime_types&&(a.filters.mime_types.regexp=function(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(a.filters.mime_types));break;case"resize":n?o.extend(a.resize,t,{enabled:!0}):a.resize=t;break;case"prevent_duplicates":a.prevent_duplicates=a.filters.prevent_duplicates=!!t;break;case"browse_button":case"drop_element":t=o.get(t);case"container":case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a[e]=t,n||(u=!0);break;default:a[e]=t}n||i.trigger("OptionChanged",e,t,r)}var i=this,u=!1;typeof e=="object"?o.each(e,function(e,t){f(t,e,r)}):f(e,n,r),r?(a.required_features=s(o.extend({},a)),l=s(o.extend({},a,{required_features:!0}))):u&&(i.trigger("Destroy"),x.call(i,a,function(e){e?(i.runtime=t.Runtime.getInfo(w()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})}))}function C(e,t){if(e.settings.unique_names){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}}function k(e,n){function h(){u-->0?r(p,1e3):(n.loaded=f,e.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:n,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}))}function p(){var d,v,g={},y;if(n.status!==o.UPLOADING||e.state===o.STOPPED)return;e.settings.send_file_name&&(g.name=n.target_name||n.name),s&&a.chunks&&c.size>s?(y=Math.min(s,c.size-f),d=c.slice(f,f+y)):(y=c.size,d=c),s&&a.chunks&&(e.settings.send_chunk_number?(g.chunk=Math.ceil(f/s),g.chunks=Math.ceil(c.size/s)):(g.offset=f,g.total=c.size)),m=new t.XMLHttpRequest,m.upload&&(m.upload.onprogress=function(t){n.loaded=Math.min(n.size,f+t.loaded),e.trigger("UploadProgress",n)}),m.onload=function(){if(m.status>=400){h();return}u=e.settings.max_retries,y=c.size?(n.size!=n.origSize&&(c.destroy(),c=null),e.trigger("UploadProgress",n),n.status=o.DONE,e.trigger("FileUploaded",n,{response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()})):r(p,1)},m.onerror=function(){h()},m.onloadend=function(){this.destroy(),m=null},e.settings.multipart&&a.multipart?(m.open("post",i,!0),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),v=new t.FormData,o.each(o.extend(g,e.settings.multipart_params),function(e,t){v.append(t,e)}),v.append(e.settings.file_data_name,d),m.send(v,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(i=o.buildUrl(e.settings.url,o.extend(g,e.settings.multipart_params)),m.open("post",i,!0),m.setRequestHeader("Content-Type","application/octet-stream"),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),m.send(d,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url}))}var i=e.settings.url,s=e.settings.chunk_size,u=e.settings.max_retries,a=e.features,f=0,c;n.loaded&&(f=n.loaded=s?s*Math.floor(n.loaded/s):0),c=n.getSource(),e.settings.resize.enabled&&E(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?T.call(this,c,e.settings.resize,function(e){c=e,n.size=e.size,p()}):p()}function L(e,t){y(t)}function A(e){if(e.state==o.STARTED)p=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,b())}function O(){m&&m.abort()}function M(e){b(),r(function(){g.call(e)},1)}function _(e,t){t.code===o.INIT_ERROR?e.destroy():t.code===o.HTTP_ERROR&&(t.file.status=o.FAILED,y(t.file),e.state==o.STARTED&&(e.trigger("CancelUpload"),r(function(){g.call(e)},1)))}function D(e){e.stop(),o.each(f,function(e){e.destroy()}),f=[],c.length&&(o.each(c,function(e){e.destroy()}),c=[]),h.length&&(o.each(h,function(e){e.destroy()}),h=[]),l={},v=!1,p=m=null,d.reset()}var u=o.guid(),a,f=[],l={},c=[],h=[],p,d,v=!1,m;a={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_file_name:!0,send_chunk_number:!0},N.call(this,e,null,!0),d=new o.QueueProgress,o.extend(this,{id:u,uid:u,state:o.STOPPED,features:{},runtime:null,files:f,settings:a,total:d,init:function(){var e=this;typeof a.preinit=="function"?a.preinit(e):o.each(a.preinit,function(t,n){e.bind(n,t)}),S.call(this);if(!a.browse_button||!a.url){this.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")});return}x.call(this,a,function(n){typeof a.init=="function"?a.init(e):o.each(a.init,function(t,n){e.bind(n,t)}),n?(e.runtime=t.Runtime.getInfo(w()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})},setOption:function(e,t){N.call(this,e,t,!this.runtime)},getOption:function(e){return e?a[e]:a},refresh:function(){c.length&&o.each(c,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),g.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){v=arguments[0]!==n?arguments[0]:!0,c.length&&o.each(c,function(e){e.disable(v)}),this.trigger("DisableBrowse",v)},getFile:function(e){var t;for(t=f.length-1;t>=0;t--)if(f[t].id===e)return f[t]},addFile:function(e,n){function c(e,n){var r=[];t.each(s.settings.filters,function(t,n){i[n]&&r.push(function(r){i[n].call(s,t,e,function(e){r(!e)})})}),t.inSeries(r,n)}function h(e){var i=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!l)return!1;e.ruid=l,e.connectRuntime(l)}h(new o.File(e))}else e instanceof t.Blob?(h(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),u.push(function(t){c(e,function(n){n||(f.push(e),a.push(e),s.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(i,["file","blob"])!==-1?h(new t.File(null,e)):i==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,h):i==="array"&&(n=null,t.each(e,h))}var s=this,u=[],a=[],l;l=w(),h(e),u.length&&t.inSeries(u,function(){a.length&&s.trigger("FilesAdded",a)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=f.length-1;n>=0;n--)if(f[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=f.splice(e===n?0:e,t===n?f.length:t),i=!1;return this.state==o.STARTED&&(o.each(r,function(e){if(e.status===o.UPLOADING)return i=!0,!1}),i&&this.stop()),this.trigger("FilesRemoved",r),o.each(r,function(e){e.destroy()}),i&&this.start(),r},dispatchEvent:function(e){var t,n,r;e=e.toLowerCase(),t=this.hasEventListener(e);if(t){t.sort(function(e,t){return t.priority-e.priority}),n=[].slice.call(arguments),n.shift(),n.unshift(this);for(var i=0;i0&&(n.slice_blob=!0);if(e.resize.enabled||!e.multipart)n.send_binary_string=!0;o.each(e,function(e,t){r(t,!!e,!0)})}return n}var r=e.setTimeout,i={},o={VERSION:"2.1.8",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,get:function(n){var r=[],i;t.typeOf(n)!=="array"&&(n=[n]);var s=n.length;while(s--)i=t.get(n[s]),i&&r.push(i);return r.length?r:null},each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t0?"&":"?")+n),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===n||/\D/.test(e))return o.translate("N/A");var r=Math.pow(1024,4);return e>r?t(e/r,1)+" "+o.translate("tb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("gb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,n){var r,i;return r=new o.Uploader(e),i=t.Runtime.thatCan(r.getOption().required_features,n||e.runtimes),r.destroy(),i},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(e,t,n){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("max_file_size",function(e,t,n){var r;e=o.parseSize(e),t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function g(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n0?Math.ceil(e.loaded/e.size*100):100,b()}function b(){var e,t;d.reset();for(e=0;e0?Math.ceil(d.uploaded/f.length*100):0:(d.bytesPerSec=Math.ceil(d.loaded/((+(new Date)-p||1)/1e3)),d.percent=d.size>0?Math.ceil(d.loaded/d.size*100):0)}function w(){var e=c[0]||h[0];return e?e.getRuntime().uid:!1}function E(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function S(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()}),this.bind("CancelUpload",O),this.bind("BeforeUpload",C),this.bind("UploadFile",k),this.bind("UploadProgress",L),this.bind("StateChanged",A),this.bind("QueueChanged",b),this.bind("Error",_),this.bind("FileUploaded",M),this.bind("Destroy",D)}function x(e,n){var r=this,i=0,s=[],u={runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:l,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(u[t]=e[t])}),e.browse_button&&o.each(e.browse_button,function(n){s.push(function(s){var a=new t.FileInput(o.extend({},u,{accept:e.filters.mime_types,name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:n}));a.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),i++,c.push(this),s()},a.onchange=function(){r.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(r){v||(e.browse_button_hover&&("mouseenter"===r.type?t.addClass(n,e.browse_button_hover):"mouseleave"===r.type&&t.removeClass(n,e.browse_button_hover)),e.browse_button_active&&("mousedown"===r.type?t.addClass(n,e.browse_button_active):"mouseup"===r.type&&t.removeClass(n,e.browse_button_active)))}),a.bind("mousedown",function(){r.trigger("Browse")}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.drop_element&&o.each(e.drop_element,function(e){s.push(function(n){var s=new t.FileDrop(o.extend({},u,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);r.features.dragdrop=e.can("drag_and_drop"),i++,h.push(this),n()},s.ondrop=function(){r.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,n()}),s.init()})}),t.inSeries(s,function(){typeof n=="function"&&n(i)})}function T(e,r,i){var s=new t.Image;try{s.onload=function(){if(r.width>this.width&&r.height>this.height&&r.quality===n&&r.preserve_headers&&!r.crop)return this.destroy(),i(e);s.downsize(r.width,r.height,r.crop,r.preserve_headers)},s.onresize=function(){i(this.getAsBlob(e.type,r.quality)),this.destroy()},s.onerror=function(){i(e)},s.load(e)}catch(o){i(e)}}function N(e,n,r){function f(e,t,n){var r=a[e];switch(e){case"max_file_size":e==="max_file_size"&&(a.max_file_size=a.filters.max_file_size=t);break;case"chunk_size":if(t=o.parseSize(t))a[e]=t,a.send_file_name=!0;break;case"multipart":a[e]=t,t||(a.send_file_name=!0);break;case"unique_names":a[e]=t,t&&(a.send_file_name=!0);break;case"filters":o.typeOf(t)==="array"&&(t={mime_types:t}),n?o.extend(a.filters,t):a.filters=t,t.mime_types&&(a.filters.mime_types.regexp=function(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(a.filters.mime_types));break;case"resize":n?o.extend(a.resize,t,{enabled:!0}):a.resize=t;break;case"prevent_duplicates":a.prevent_duplicates=a.filters.prevent_duplicates=!!t;break;case"browse_button":case"drop_element":t=o.get(t);case"container":case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a[e]=t,n||(u=!0);break;default:a[e]=t}n||i.trigger("OptionChanged",e,t,r)}var i=this,u=!1;typeof e=="object"?o.each(e,function(e,t){f(t,e,r)}):f(e,n,r),r?(a.required_features=s(o.extend({},a)),l=s(o.extend({},a,{required_features:!0}))):u&&(i.trigger("Destroy"),x.call(i,a,function(e){e?(i.runtime=t.Runtime.getInfo(w()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})}))}function C(e,t){if(e.settings.unique_names){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}}function k(e,n){function h(){u-->0?r(p,1e3):(n.loaded=f,e.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:n,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}))}function p(){var d,v,g={},y;if(n.status!==o.UPLOADING||e.state===o.STOPPED)return;e.settings.send_file_name&&(g.name=n.target_name||n.name),s&&a.chunks&&c.size>s?(y=Math.min(s,c.size-f),d=c.slice(f,f+y)):(y=c.size,d=c),s&&a.chunks&&(e.settings.send_chunk_number?(g.chunk=Math.ceil(f/s),g.chunks=Math.ceil(c.size/s)):(g.offset=f,g.total=c.size)),m=new t.XMLHttpRequest,m.upload&&(m.upload.onprogress=function(t){n.loaded=Math.min(n.size,f+t.loaded),e.trigger("UploadProgress",n)}),m.onload=function(){if(m.status>=400){h();return}u=e.settings.max_retries,y=c.size?(n.size!=n.origSize&&(c.destroy(),c=null),e.trigger("UploadProgress",n),n.status=o.DONE,e.trigger("FileUploaded",n,{response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()})):r(p,1)},m.onerror=function(){h()},m.onloadend=function(){this.destroy(),m=null},e.settings.multipart&&a.multipart?(m.open("post",i,!0),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),v=new t.FormData,o.each(o.extend(g,e.settings.multipart_params),function(e,t){v.append(t,e)}),v.append(e.settings.file_data_name,d),m.send(v,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(i=o.buildUrl(e.settings.url,o.extend(g,e.settings.multipart_params)),m.open("post",i,!0),m.setRequestHeader("Content-Type","application/octet-stream"),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),m.send(d,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url}))}var i=e.settings.url,s=e.settings.chunk_size,u=e.settings.max_retries,a=e.features,f=0,c;n.loaded&&(f=n.loaded=s?s*Math.floor(n.loaded/s):0),c=n.getSource(),e.settings.resize.enabled&&E(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?T.call(this,c,e.settings.resize,function(e){c=e,n.size=e.size,p()}):p()}function L(e,t){y(t)}function A(e){if(e.state==o.STARTED)p=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,b())}function O(){m&&m.abort()}function M(e){b(),r(function(){g.call(e)},1)}function _(e,t){t.code===o.INIT_ERROR?e.destroy():t.code===o.HTTP_ERROR&&(t.file.status=o.FAILED,y(t.file),e.state==o.STARTED&&(e.trigger("CancelUpload"),r(function(){g.call(e)},1)))}function D(e){e.stop(),o.each(f,function(e){e.destroy()}),f=[],c.length&&(o.each(c,function(e){e.destroy()}),c=[]),h.length&&(o.each(h,function(e){e.destroy()}),h=[]),l={},v=!1,p=m=null,d.reset()}var u=o.guid(),a,f=[],l={},c=[],h=[],p,d,v=!1,m;a={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_file_name:!0,send_chunk_number:!0},N.call(this,e,null,!0),d=new o.QueueProgress,o.extend(this,{id:u,uid:u,state:o.STOPPED,features:{},runtime:null,files:f,settings:a,total:d,init:function(){var e=this;typeof a.preinit=="function"?a.preinit(e):o.each(a.preinit,function(t,n){e.bind(n,t)}),S.call(this);if(!a.browse_button||!a.url){this.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")});return}x.call(this,a,function(n){typeof a.init=="function"?a.init(e):o.each(a.init,function(t,n){e.bind(n,t)}),n?(e.runtime=t.Runtime.getInfo(w()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})},setOption:function(e,t){N.call(this,e,t,!this.runtime)},getOption:function(e){return e?a[e]:a},refresh:function(){c.length&&o.each(c,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),g.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){v=arguments[0]!==n?arguments[0]:!0,c.length&&o.each(c,function(e){e.disable(v)}),this.trigger("DisableBrowse",v)},getFile:function(e){var t;for(t=f.length-1;t>=0;t--)if(f[t].id===e)return f[t]},addFile:function(e,n){function c(e,n){var r=[];t.each(s.settings.filters,function(t,n){i[n]&&r.push(function(r){i[n].call(s,t,e,function(e){r(!e)})})}),t.inSeries(r,n)}function h(e){var i=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!l)return!1;e.ruid=l,e.connectRuntime(l)}h(new o.File(e))}else e instanceof t.Blob?(h(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),u.push(function(t){c(e,function(n){n||(f.push(e),a.push(e),s.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(i,["file","blob"])!==-1?h(new t.File(null,e)):i==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,h):i==="array"&&(n=null,t.each(e,h))}var s=this,u=[],a=[],l;l=w(),h(e),u.length&&t.inSeries(u,function(){a.length&&s.trigger("FilesAdded",a)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=f.length-1;n>=0;n--)if(f[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=f.splice(e===n?0:e,t===n?f.length:t),i=!1;return this.state==o.STARTED&&(o.each(r,function(e){if(e.status===o.UPLOADING)return i=!0,!1}),i&&this.stop()),this.trigger("FilesRemoved",r),o.each(r,function(e){e.destroy()}),i&&this.start(),r},dispatchEvent:function(e){var t,n,r;e=e.toLowerCase(),t=this.hasEventListener(e);if(t){t.sort(function(e,t){return t.priority-e.priority}),n=[].slice.call(arguments),n.shift(),n.unshift(this);for(var i=0;iupload($data); + } + + /** + * Render Fields for general view. + * + * @param object $media_form Midea files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + public function renderGeneral($media_form, $new) + { + $html = ''; + + foreach ($media_form->getFieldset('general') as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + + return $html; + } + + /** + * Render Layout and fields + * + * @param object $media_form Midea files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + public function render($media_form, $new) + { + $html = ''; + + $html .= JHtml::_('bootstrap.addTab', 'myTab', 'options', JText::_('Options')); + + $html .= '
      '; + + foreach ($media_form->getFieldsets('params') as $name => $fieldset) + { + if ($name !== 'general') + { + $html .= '
      '; + + foreach ($media_form->getFieldset($name) as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + + $html .= '
      '; + } + } + + $html .= '
      '; + $html .= JHtml::_('bootstrap.endTab'); + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.png b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2376b775b1d1d3b0088c449164b6f31005cfa7 GIT binary patch literal 1109 zcmV-b1giUqP){ zvn*Q0w=hjZ)le;ml*@wNz`%A)!pP8uLJc9}Bu}H7&#ou6j?50O0qhO{U@3rVrHEz1 z{2`Bb-?o^Us^j!suKwY1^UgSd0BtU1YAj?@r+Efa*VfP+4PY2hF6I?Pz`X`4d+3T->2u|1}ZlM83fwP|)O3rdI407%K00+>($^{Fv!4knf{MXfr;zS<_e zejzbQPnV5i=n}dO%*pv|YjCC99Uy!6mWnwQOE^87XnGsVoJPhr?m*Si80AtPxx-k> z^yHn5+sM#I5>cqXjt~YCu!YbbBLIXpfIN3se9YWsYSnT2{(!spAPi>Ix`C7+v&Ko? zUb{s&aFF?Nw*J1#;dk~^nVbb++cX&c59k);Ffed?2e|QBSV0FETz4?&w z`aBIg&-V2@01W(KG(Z@J*p35`Kx6?VVH7hQhAKvn=R@D7*AIx}2msSidGRIOK?L0n zg;Ge;-q8So0&o%lF!Yb2NDv93Oogf?|CWhWnZtKG^z3bAB$%unVBop5?b}qRW~fx_ zqXC2v*tV@8wzQD~;+bR=C`}x|b6Yev9x_>*<_t!=eh`c1ph*pU9ve{}ZSvuB?8J@Dlhryu9Qlk#VpyK(b3ed;g_d9?m0 z?)BWp4+{&YmX?;H6u=->GS#ONdnnz`%fDRW-u-1--Imx~-&{O*_Wb87D=Vvjmjb|d z7cXD@NPnm8k))I~x0<+)OQ+MlfA!Lp&lVPbyaDuqCJ+GZFx2%}G79XSBoHLS17Z@r b&w|`aH^O000000NkvXXu0mjfq~{dO literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.xml b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.xml new file mode 100644 index 0000000000..c63f30daaa --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/legacy.xml @@ -0,0 +1,98 @@ + + + Legacy + Adapter for legacy JBS servers and mediafiles configurations. + + filename + + +
      + + + + + + + +
      +
      + +
      + + + + + + +
      +
      + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + +
      +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/legacy/media.xml b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/media.xml new file mode 100644 index 0000000000..949eeb6db7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/legacy/media.xml @@ -0,0 +1,122 @@ + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/fields/jbsmmedia.php b/build/com_proclaim-9.2.1/admin/addons/servers/local/fields/jbsmmedia.php new file mode 100644 index 0000000000..7226551bca --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/local/fields/jbsmmedia.php @@ -0,0 +1,270 @@ +$name; + } + + return parent::__get($name); + } + + /** + * Method to set certain otherwise inaccessible properties of the form field object. + * + * @param string $name The property name for which to the the value. + * @param mixed $value The value of the property. + * + * @return void + * + * @since 3.2 + */ + public function __set($name, $value) + { + switch ($name) + { + case 'authorField': + case 'asset': + case 'link': + case 'width': + case 'height': + case 'preview': + case 'directory': + $this->$name = (string) $value; + break; + + case 'previewWidth': + case 'previewHeight': + $this->$name = (int) $value; + break; + + default: + parent::__set($name, $value); + } + } + + /** + * Method to attach a JForm object to the field. + * + * @param SimpleXMLElement $element The SimpleXMLElement object representing the `` tag for the form field object. + * @param mixed $value The form field value to validate. + * @param string $group The field name group control value. This acts as as an array container for the field. + * For example if the field has name="foo" and the group value is set to "bar" then the + * full field name would end up being "bar[foo]". + * + * @return boolean True on success. + * + * @see JFormField::setup() + * @since 3.2 + */ + public function setup(SimpleXMLElement $element, $value, $group = null) + { + $result = parent::setup($element, $value, $group); + + if ($result == true) + { + $assetField = $this->element['asset_field'] ? (string) $this->element['asset_field'] : 'asset_id'; + + $this->authorField = $this->element['created_by_field'] ? (string) $this->element['created_by_field'] : 'created_by'; + $this->asset = $this->form->getValue($assetField) ? $this->form->getValue($assetField) : (string) $this->element['asset_id']; + $this->link = (string) $this->element['link']; + $this->width = isset($this->element['width']) ? (int) $this->element['width'] : 800; + $this->height = isset($this->element['height']) ? (int) $this->element['height'] : 500; + $this->preview = (string) $this->element['preview']; + $this->directory = (string) $this->element['directory']; + $this->previewWidth = isset($this->element['preview_width']) ? (int) $this->element['preview_width'] : 200; + $this->previewHeight = isset($this->element['preview_height']) ? (int) $this->element['preview_height'] : 200; + } + + return $result; + } + + /** + * Method to get the field input markup for a media selector. + * Use attributes to identify specific created_by and asset_id fields + * + * @return string The field input markup. + * + * @since 1.6 + */ + protected function getInput() + { + if (empty($this->layout)) + { + throw new UnexpectedValueException(sprintf('%s has no layout assigned.', $this->name)); + } + + return $this->getRenderer($this->layout)->render($this->getLayoutData()); + } + + /** + * Get the data that is going to be passed to the layout + * + * @return array + */ + public function getLayoutData() + { + // Get the basic field data + $data = parent::getLayoutData(); + + $asset = $this->asset; + + if ($asset == '') + { + $asset = JFactory::getApplication()->input->get('option'); + } + + if ($this->value && file_exists(JPATH_ROOT . '/' . $this->value)) + { + $this->folder = explode('/', $this->value); + $this->folder = array_diff_assoc($this->folder, explode('/', JComponentHelper::getParams('com_media')->get('image_path', 'images'))); + array_pop($this->folder); + $this->folder = implode('/', $this->folder); + } + elseif (file_exists(JPATH_ROOT . '/' . JComponentHelper::getParams('com_media')->get('image_path', 'images') . '/' . $this->directory)) + { + $this->folder = $this->directory; + } + else + { + $this->folder = ''; + } + + $extraData = array( + 'asset' => $asset, + 'authorField' => $this->authorField, + 'authorId' => $this->form->getValue($this->authorField), + 'folder' => $this->folder, + 'link' => $this->link, + 'preview' => $this->preview, + 'previewHeight' => $this->previewHeight, + 'previewWidth' => $this->previewWidth, + ); + + return array_merge($data, $extraData); + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/fields/plupload.php b/build/com_proclaim-9.2.1/admin/addons/servers/local/fields/plupload.php new file mode 100644 index 0000000000..bb84f8f690 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/local/fields/plupload.php @@ -0,0 +1,92 @@ +addScript(JUri::root() . 'administrator/components/com_biblestudy/addons/servers/legacy/includes/js/plupload.full.min.js'); + $document->addScript(JUri::root() . 'administrator/components/com_biblestudy/addons/servers/legacy/includes/js/legacy.js'); + $view = $app->input->get('view'); + $admin = JBSMParams::getAdmin(); + + if (isset($this->form->s_params['uploadpath'])) + { + $upload = $this->form->s_params['uploadpath']; + } + else + { + $upload = $admin->params->get('uploadpath', '/images/biblestudy/media/'); + } + + $document->addScriptDeclaration(' + jQuery(document).ready(function() { + uploader.setOption("url", "index.php?option=com_biblestudy&task=' . $view . '.xhr&' . JSession::getFormToken() . '=1"); + uploader.bind("BeforeUpload", function() { + uploader.setOption("multipart_params", { + handler: "' . $this->element["handler"] . '", + path: "' . $upload . '" + }); + }); + uploader.init(); + }); + '); + + $class = $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' : ''; + + $html = ''; + $html .= ' + '; + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/language/en-GB/en-GB.jbs_addon_local.ini b/build/com_proclaim-9.2.1/admin/addons/servers/local/language/en-GB/en-GB.jbs_addon_local.ini new file mode 100644 index 0000000000..5f4b68b937 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/local/language/en-GB/en-GB.jbs_addon_local.ini @@ -0,0 +1,28 @@ +JBS_ADDON_LOCAL_BASE="Base URL" +JBS_ADDON_LOCAL_DETAILS="Details" +JBS_ADDON_LOCAL_PARAMETERS="Parameters" +JBS_ADDON_LOCAL_MEDIA_PARAMETERS="Media Parameters" +JBS_ADDON_LOCAL_UPLOAD="Upload" +JBS_ADDON_LOCAL_UPLOAD_DESC="Upload here" +JBD_ADDON_LOCAL_FILE_LINKER="File Linker" +JBS_ADDON_LOCAL_FILE_SETTINGS="File Settings" +JBS_ADDON_LOCAL_MEDIA="Media" +JBS_ADDON_LOCAL_PROTOCOL="Protocl" +JBS_ADDON_LOCAL_PROTOCOL_DESC="Protocal of the server that needs to be used. http:// or https://, Default is (http://)" +JBS_ADDON_LOCAL_MEDIA_TYPE_DEF="Default Media Settings" +JBS_ADDON_LOCAL_BUTTON_COLOR="Custon button color" +JBS_ADDON_LOCAL_BUTTON_COLOR_DESC="Pick a color for the background of the button" +JBS_ADDON_LOCAL_MEDIA_USE_BUTTON="Use button/icon" +JBS_ADDON_LOCAL_MEDIA_USE_BUTTON_DESC="Choose whether to use a button or an icon instead of an image. This will override an image chosen" +JBS_ADDON_LOCAL_BUTTON_TYPE="Button color" +JBS_ADDON_LOCAL_BUTTON_TYPE_DESC="Choose from the available colors that come from Bootstrap. Blue is Primary, No color is Link, Green is Success, Light blue is Info, Orange is Warning, and Red is Danger" +JBS_ADDON_LOCAL_ICON_TYPE="Icon Type" +JBS_ADDON_LOCAL_ICON_TYPE_DESC="Choose an icon type from a selected number of icons available in Joomla" +JBS_ADDON_LOCAL_FONT_SIZE="Font Size (only numbers)" +JBS_ADDON_LOCAL_FONT_SIZE_DESC="Type in a font size in whole numbers only. This will affect the size of the icon" +JBS_ADDON_LOCAL_CUSTOM_ICON="Custom Icon" +JBS_ADDON_LOCAL_CUSTOM_ICON_DESC="Use any of the FontAwesome icons with this format fa fa-facebook. See http://fontawesome.io/icons/" +JBS_ADDON_LOCAL_BUTTON_TEXT="Button Text" +JBS_ADDON_LOCAL_BUTTON_TEXT_DESC="If you choose only a button, enter text for that button" +JBS_ADDON_LOCAL_DOWNLOAD_USE_BUTTON="Default Download Icon" +JBS_ADDON_LOCAL_DOWNLOAD_USE_BUTTON_DESC="Choose whether to use a button/icon or image for the default download icon. Button/icon overrides image choice" diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/language/local.php b/build/com_proclaim-9.2.1/admin/addons/servers/local/language/local.php new file mode 100644 index 0000000000..4f810ca79e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/local/language/local.php @@ -0,0 +1,137 @@ +upload($data); + } + + /** + * Render Fields for general view. + * + * @param object $media_form Midea files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + public function renderGeneral($media_form, $new) + { + $html = ''; + $fields = $media_form->getFieldset('general'); + + if ($fields) + { + foreach ($media_form->getFieldset('general') as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + } + + return $html; + } + + /** + * Render Layout and fields + * + * @param object $media_form Midea files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + public function render($media_form, $new) + { + $html = ''; + + $html .= JHtml::_('bootstrap.addTab', 'myTab', 'options', JText::_('Options')); + + $html .= '
      '; + + foreach ($media_form->getFieldsets('params') as $name => $fieldset) + { + if ($name !== 'general') + { + $html .= '
      '; + + foreach ($media_form->getFieldset($name) as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + + $html .= '
      '; + } + } + + $html .= '
      '; + $html .= JHtml::_('bootstrap.endTab'); + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/local.php b/build/com_proclaim-9.2.1/admin/addons/servers/local/local.php new file mode 100644 index 0000000000..4f810ca79e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/local/local.php @@ -0,0 +1,137 @@ +upload($data); + } + + /** + * Render Fields for general view. + * + * @param object $media_form Midea files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + public function renderGeneral($media_form, $new) + { + $html = ''; + $fields = $media_form->getFieldset('general'); + + if ($fields) + { + foreach ($media_form->getFieldset('general') as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + } + + return $html; + } + + /** + * Render Layout and fields + * + * @param object $media_form Midea files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + public function render($media_form, $new) + { + $html = ''; + + $html .= JHtml::_('bootstrap.addTab', 'myTab', 'options', JText::_('Options')); + + $html .= '
      '; + + foreach ($media_form->getFieldsets('params') as $name => $fieldset) + { + if ($name !== 'general') + { + $html .= '
      '; + + foreach ($media_form->getFieldset($name) as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + + $html .= '
      '; + } + } + + $html .= '
      '; + $html .= JHtml::_('bootstrap.endTab'); + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/local.png b/build/com_proclaim-9.2.1/admin/addons/servers/local/local.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0c5340acf6a6200044091e4f9bbd25033583e5 GIT binary patch literal 2174 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 AF8}}l literal 0 HcmV?d00001 diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/local.xml b/build/com_proclaim-9.2.1/admin/addons/servers/local/local.xml new file mode 100644 index 0000000000..aa77272315 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/local/local.xml @@ -0,0 +1,89 @@ + + + Local Server + Use the same server serving this website as a source of media. + + filename + + +
      + + + + + + + +
      +
      + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + +
      +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/local/media.xml b/build/com_proclaim-9.2.1/admin/addons/servers/local/media.xml new file mode 100644 index 0000000000..0621bcfe59 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/local/media.xml @@ -0,0 +1,107 @@ + + + +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/server.php b/build/com_proclaim-9.2.1/admin/addons/servers/server.php new file mode 100644 index 0000000000..9ee45e62ba --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/server.php @@ -0,0 +1,144 @@ + + + +
      + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + +
      +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.php b/build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.php new file mode 100644 index 0000000000..e1edb275ca --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.php @@ -0,0 +1,137 @@ +getFieldset('general'); + + if ($fields) + { + foreach ($fields as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + } + + return $html; + } + + /** + * Render Layout and fields + * + * @param object $media_form Midea files form + * @param bool $new If media is new + * + * @return string + * + * @since 9.1.3 + */ + public function render($media_form, $new) + { + $html = ''; + $html .= JHtml::_('bootstrap.addTab', 'myTab', 'options', JText::_('Options')); + + $html .= '
      '; + + foreach ($media_form->getFieldsets('params') as $name => $fieldset) + { + if ($name !== 'general') + { + $html .= '
      '; + + foreach ($media_form->getFieldset($name) as $field): + $html .= '
      '; + $html .= '
      '; + $html .= $field->label; + $html .= '
      '; + $html .= '
      '; + + // Way to set defaults on new media + if ($new) + { + $s_name = $field->fieldname; + + if (isset($media_form->s_params[$s_name])) + { + $field->setValue($media_form->s_params[$s_name]); + } + } + + $html .= $field->input; + $html .= '
      '; + $html .= '
      '; + endforeach; + + $html .= '
      '; + } + } + + $html .= '
      '; + $html .= JHtml::_('bootstrap.endTab'); + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.png b/build/com_proclaim-9.2.1/admin/addons/servers/youtube/youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..cfdc119b3b817d1b367f760cfad0114824892e34 GIT binary patch literal 1604 zcmV-K2D|x*P)mm#vbAKqFfej3R6Tf~I{@3c)6X z(mc3td2&g?h1e7fbzMv&lZ1dBkON7Ot*6NNBMLaSVr#YEyLa!`^x^Ku-PNw-paW<3 z-nnPy{LeZ6Il~BA~BTWg18+5n}TYf*`>21M;O3KcrT* z>v^-lk!x?db@^`j2keS-1~{s!HUH;N6aBlk zBoZALDwoStDiuuA#J27FbInO7Z51UYaVti)SbR!r{XYpjsg&G1(Er%Fk(@kvl7j~i zV%s*8lam}fc8nkh+B(@ty5ljrW3f2!x&#I+!yGWABnX0zIyN@O?c2Axckdqa^Ycth zOl%l^t47!B?T!PCNT5!%^(ODxvxnZ^UQVArjbRuJ4-a$v_;H4YhM1n7rdTX;;=~EA zT)D!XJ9n6xnpzV?bUjlU0La$#bOIoyWMX21vuDq;W5*6ssTAkWpJ!%fhRc^Pv#_wh z;^HEyREkom#P#dfJC-0?wkiPK7GFL4qyfqFwl`~3E zqaCVFGB`MhX`1ZXwTmDKn&w6893AVJ1tI{nZg1Q=*6OTvtestF1Wg%ezh~EzuC6X@ z+veiMi{$fpVzC$ib8~ad&dzoWqQ!s60nMXrC(|@JaNq!mM1pPGwlO_D&Ft(f3hAAX%mFuhPHEo=UZNkZHNGDK5F!e*AnXcV z|2l`rbAcNfBng(#E+$3;6%_*{i0dV0{s5_n$d(D%cP1{!n#TBCsOyWf*N@_V#p z5kxbfX>cIExQM#HT#qC6${6MgFMwr2rGoS6XE>KWZi+qr=NX&}|HZ#~E1LB+Vib!Q zx9?DS>esD(pg|CI|30#iuTS#+{U3tGMdE+@BjtDAMQ5_eQW1h6tZ5J+Eeq*5Xxk36 z0Aa=qqmh*wutKq#?eM*R7Su~nwvpLvUB%K8;@hRr?3-_phQd1Z8nRd*c616AkAv@H zJpUYB@4kaE^eiHu$2#;oy8ikX%-<#v*=${LoF>xC8eeJ$1?3VllWtN`&4|ooPy*EU z?Z{jX^~}>q&q4SeVl{kQUEY!{&@ZpE3 z@0MUC1R%=gHYFg^j2s71EH-Po98NA45w;D!k0_Nu>+o9;AnY7|hMD=V;dD@;wn(WBvx zX+#<}qCf+zO5l5~x$9L=uENMjQ_BP(orX)7!i8?$45Qn*6F&L~@_G2;3n&y|`*t{W z3g+hEgAd@%H{tEKA(aY!8wTaULHr=V4MCj~SFbGq%t-iKTnV8(kDtHy9s?IHG>{7c zN;USlWrfc|H2Q(oV4C1K;j@%$-d7GE=Kfo6;Yfv}xdn{WZbrSpISFHy1jBXdnV+Zc z^UpUf$0JJa#TO~;-HU4&xLV|aap2?V<@6`O`@pz@xDp!i + + YouTube + Adapter for YouTube configurations. + + filename + + + + +
      + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + +
      +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/api.php b/build/com_proclaim-9.2.1/admin/api.php new file mode 100644 index 0000000000..1640253737 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/api.php @@ -0,0 +1,116 @@ +load('com_biblestudy', BIBLESTUDY_PATH_ADMIN, 'en-GB', true); +$language->load('com_biblestudy', BIBLESTUDY_PATH_ADMIN, null, true); + +// Component debugging +if (JBSMBibleStudyHelper::debug() === '1' || JFactory::getApplication()->input->getInt('jbsmdbg', '0') === '1') +{ + define('JBSMDEBUG', 1); +} +else +{ + define('JBSMDEBUG', 0); +} + +// Include the JLog class. +jimport('joomla.log.log'); +JLog::addLogger( + array( + 'text_file' => 'com_biblestudy.errors.php' + ), + JLog::ALL, + 'com_biblestudy' +); + +// JBSM has been initialized +define('JBSM_LOADED', 1); diff --git a/build/com_proclaim-9.2.1/admin/biblestudy.php b/build/com_proclaim-9.2.1/admin/biblestudy.php new file mode 100644 index 0000000000..a6295f9787 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/biblestudy.php @@ -0,0 +1,68 @@ +authorise('core.manage', 'com_biblestudy')) +{ + throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 404); +} + +// Always load JBSM API if it exists. +$api = JPATH_ADMINISTRATOR . '/components/com_biblestudy/api.php'; + +if (file_exists($api)) +{ + require_once $api; +} + +if (version_compare(PHP_VERSION, BIBLESTUDY_MIN_PHP, '<')) +{ + throw new Exception(JText::_('JERROR_ERROR') . JText::sprintf('JBS_CMN_PHP_ERROR', BIBLESTUDY_MIN_PHP), 404); +} + +addCSS(); + +$app = JFactory::getApplication(); + +$jbsstate = JBSMDbHelper::getInstallState(); + +$type = $app->input->getWord('view'); + +$controller = JControllerLegacy::getInstance('Biblestudy'); + +if ($jbsstate && $type == 'install') +{ + JBSMHelper::clearcache('admin'); + JBSMHelper::clearcache('site'); + $app->input->set('task', 'browse'); +} + +$controller->execute($app->input->getCmd('task')); +$controller->redirect(); + +/** + * Global css + * + * @return void + * + * @since 7.0 + */ +function addCSS() +{ + if (JBSMDEBUG) + { + JHtml::stylesheet('media/com_biblestudy/css/biblestudy-debug.css'); + } + + JHtml::stylesheet('media/com_biblestudy/css/general.css'); + JHtml::stylesheet('media/com_biblestudy/css/icons.css'); +} diff --git a/build/com_proclaim-9.2.1/admin/config.xml b/build/com_proclaim-9.2.1/admin/config.xml new file mode 100644 index 0000000000..1fe05b68ac --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/config.xml @@ -0,0 +1,88 @@ + + +
      + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      +
      + +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/controller.php b/build/com_proclaim-9.2.1/admin/controller.php new file mode 100644 index 0000000000..798763f6b1 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controller.php @@ -0,0 +1,95 @@ +input->getCmd('view', 'cpanel'); + $layout = $app->input->getCmd('layout', 'default'); + + if ($layout !== 'modal') + { + JBSMBibleStudyHelper::addSubmenu($view); + } + + $jbsstate = JBSMDbHelper::getInstallState(); + + if ($jbsstate) + { + $cache = new JCache(array('defaultgroup' => 'com_biblestudy')); + $cache->clean(); + $app->input->set('view', 'install'); + $app->input->set('scanstate', 'start'); + } + + if (!$view) + { + $app->input->set('view ', 'cpanel'); + } + + return parent::display(); + } + + /** + * Write the XML file Called from admin podcast list page. + * + * @return void + * + * @since 9.0.0 + */ + public function writeXMLFile() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $podcasts = new JBSMPodcast; + $result = $podcasts->makePodcasts(); + $this->setRedirect('index.php?option=com_biblestudy&view=podcasts&' . JSession::getFormToken() . '=1', $result); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/admin.php b/build/com_proclaim-9.2.1/admin/controllers/admin.php new file mode 100644 index 0000000000..11dc168a5f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/admin.php @@ -0,0 +1,889 @@ +input->get('tooltype', '', 'post'); + + /** @var BiblestudyModelAdmin $model */ + $model = $this->getModel(); + + switch ($tool) + { + case 'players': + $this->changePlayers(); + break; + + case 'popups': + $this->changePopup(); + break; + + case 'playerbymediatype': + $msg = $model->playerByMediaType(); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + break; + } + } + + /** + * Change media images from a digital file to css + * + * @return void + * + * @since 7.0.0 + */ + public function mediaimages() + { + $post = $_POST['jform']; + $decoded = json_decode($post['mediaimage']); + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('id, params') + ->from('#__bsms_mediafiles'); + $db->setQuery($query); + $images = $db->loadObjectList(); + $error = 0; + $added = 0; + $errortext = ''; + $msg = JText::_('JBS_RESULTS') . ': '; + + switch ($decoded->media_use_button_icon) + { + case 1: + // Button only + $buttontype = $decoded->media_button_type; + $buttontext = $decoded->media_button_text; + + if (!isset($post['media_icon_type'])) + { + $post['media_icon_type'] = 0; + } + + foreach ($images as $media) + { + $reg = new Registry; + $reg->loadString($media->params); + + if ($reg->get('media_button_type') == $buttontype && $reg->get('media_button_text') == $buttontext) + { + $query = $db->getQuery(true); + $reg->set('media_button_color', $post['media_button_color']); + $reg->set('media_button_text', $post['media_button_text']); + $reg->set('media_button_type', $post['media_button_type']); + $reg->set('media_custom_icon', $post['media_custom_icon']); + $reg->set('media_icon_text_size', $post['media_icon_text_size']); + $reg->set('media_icon_type', $post['media_icon_type']); + $reg->set('media_image', $post['media_image']); + $reg->set('media_use_button_icon', $post['media_use_button_icon']); + $db->setQuery($query); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + + try + { + $db->setQuery($query); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->execute(); + $rows = $db->getAffectedRows(); + $added = $added + $rows; + } + catch (RuntimeException $e) + { + $errortext .= $e->getMessage() . '
      '; + $error++; + } + } + } + + $msg .= JText::_('JBS_ERROR') . ': ' . $error . '
      ' . $errortext . '
      ' . JText::_('JBS_RESULTS') . + ': ' . $added . ' ' . JText::_('JBS_SUCCESS'); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + break; + case 2: + $buttontype = $decoded->media_button_type; + $icontype = $decoded->media_icon_type; + + foreach ($images as $media) + { + $reg = new Registry; + $reg->loadString($media->params); + + if ($reg->get('media_button_type') == $buttontype && $reg->get('media_icon_type') == $icontype) + { + $query = $db->getQuery(true); + $reg->set('media_button_color', $post['media_button_color']); + $reg->set('media_button_text', $post['media_button_text']); + $reg->set('media_button_type', $post['media_button_type']); + $reg->set('media_custom_icon', $post['media_custom_icon']); + $reg->set('media_icon_text_size', $post['media_icon_text_size']); + $reg->set('media_icon_type', $post['media_icon_type']); + $reg->set('media_image', $post['media_image']); + $reg->set('media_use_button_icon', $post['media_use_button_icon']); + $db->setQuery($query); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + + try + { + $db->setQuery($query); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->execute(); + $rows = $db->getAffectedRows(); + $added = $added + $rows; + } + catch (RuntimeException $e) + { + $errortext .= $e->getMessage() . '
      '; + $error++; + } + } + } + + $msg .= JText::_('JBS_ERROR') . ': ' . $error . '
      ' . $errortext . '
      ' . JText::_('JBS_RESULTS') . + ': ' . $added . ' ' . JText::_('JBS_SUCCESS'); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + break; + case 3: + // Icon only + $icontype = $decoded->media_icon_type; + + if (!isset($post['media_button_type'])) + { + $post['media_button_type'] = 0; + } + + foreach ($images as $media) + { + $reg = new Registry; + $reg->loadString($media->params); + + if ($reg->get('media_icon_type') == $icontype) + { + $query = $db->getQuery(true); + $reg->set('media_button_color', $post['media_button_color']); + $reg->set('media_button_text', $post['media_button_text']); + $reg->set('media_button_type', $post['media_button_type']); + $reg->set('media_custom_icon', $post['media_custom_icon']); + $reg->set('media_icon_text_size', $post['media_icon_text_size']); + $reg->set('media_icon_type', $post['media_icon_type']); + $reg->set('media_image', $post['media_image']); + $reg->set('media_use_button_icon', $post['media_use_button_icon']); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->setQuery($query); + + try + { + $db->setQuery($query); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->execute(); + $rows = $db->getAffectedRows(); + $added = $added + $rows; + } + catch (RuntimeException $e) + { + $errortext .= $e->getMessage() . '
      '; + $error++; + } + } + } + + $msg .= JText::_('JBS_ERROR') . ': ' . $error . '
      ' . $errortext . '
      ' . JText::_('JBS_RESULTS') . + ': ' . $added . ' ' . JText::_('JBS_SUCCESS'); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + break; + case 0: + // It's an image + $mediaimage = $decoded->media_image; + + if (!isset($post['media_icon_type'])) + { + $post['media_icon_type'] = 0; + } + + if (!isset($post['media_button_type'])) + { + $post['media_button_type'] = 0; + } + + foreach ($images as $media) + { + $reg = new Registry; + $reg->loadString($media->params); + + if ($reg->get('media_image') == $mediaimage) + { + $query = $db->getQuery(true); + $reg->set('media_button_color', $post['media_button_color']); + $reg->set('media_button_text', $post['media_button_text']); + $reg->set('media_button_type', $post['media_button_type']); + $reg->set('media_custom_icon', $post['media_custom_icon']); + $reg->set('media_icon_text_size', $post['media_icon_text_size']); + $reg->set('media_icon_type', $post['media_icon_type']); + $reg->set('media_image', $post['media_image']); + $reg->set('media_use_button_icon', $post['media_use_button_icon']); + + try + { + $db->setQuery($query); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->execute(); + $rows = $db->getAffectedRows(); + $added = $added + $rows; + } + catch (RuntimeException $e) + { + $errortext .= $e->getMessage() . '
      '; + $error++; + } + } + } + + $msg .= JText::_('JBS_ERROR') . ': ' . $error . '
      ' . $errortext . '
      ' . JText::_('JBS_RESULTS') . + ': ' . $added . ' ' . JText::_('JBS_SUCCESS'); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + break; + default: + $msg = JText::_('JBS_NOTHING_MATCHED'); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + break; + } + } + + /** + * Change Player Modes + * + * @return void + * + * @since 7.0.0 + */ + public function changePlayers() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $db = JFactory::getDbo(); + $msg = JText::_('JBS_CMN_OPERATION_SUCCESSFUL'); + $post = $_POST['jform']; + $reg = new Registry; + $reg->loadArray($post['params']); + $from = $reg->get('from', 'x'); + $to = $reg->get('to', 'x'); + + if ($from != 'x' && $to != 'x') + { + $query = $db->getQuery(true); + $query->select('id, params') + ->from('#__bsms_mediafiles'); + $db->setQuery($query); + + foreach ($db->loadObjectList() as $media) + { + $reg = new Registry; + $reg->loadString($media->params); + + if ($reg->get('player', 0) == $from) + { + $reg->set('player', $to); + + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->setQuery($query); + + if (!$db->execute()) + { + $msg = JText::_('JBS_ADM_ERROR_OCCURED'); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + } + } + } + } + else + { + $msg = JText::_('JBS_ADM_ERROR_OCCURED') . ': Missed setting the From or Two'; + } + + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + } + + /** + * Change Media Popup + * + * @return void + * + * @since 7.0.0 + */ + public function changePopup() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $db = JFactory::getDbo(); + $msg = null; + $post = $_POST['jform']; + $reg = new Registry; + $reg->loadArray($post['params']); + $from = $reg->get('pFrom', 'x'); + $form2 = ''; + $to = $reg->get('pTo', 'x'); + $msg = JText::_('JBS_CMN_OPERATION_SUCCESSFUL'); + $query = $db->getQuery(true); + $query->select('id, params') + ->from('#__bsms_mediafiles'); + $db->setQuery($query); + + foreach ($db->loadObjectList() as $media) + { + $reg = new Registry; + $reg->loadString($media->params); + + if ($from == '100') + { + $from = '0'; + $form2 = '100'; + } + elseif ($to == '100') + { + $to = ''; + } + + if ($reg->get('popup', 0) == $from || $reg->get('popup', 0) == $form2) + { + $reg->set('popup', $to); + + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->setQuery($query); + + if (!$db->execute()) + { + $msg = JText::_('JBS_ADM_ERROR_OCCURED'); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + } + } + } + + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + } + + /** + * Reset Hits + * + * @return void + * + * @since 7.0.0 + */ + public function resetHits() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $db = JFactory::getDbo(); + $msg = null; + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles') + ->set('hits = ' . 0) + ->where('hits != 0'); + $db->setQuery($query); + + if (!$db->execute()) + { + $msg = JText::_('JBS_ADM_ERROR_OCCURED'); + } + else + { + $msg = JText::_('JBS_CMN_OPERATION_SUCCESSFUL'); + } + + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + } + + /** + * Reset Downloads + * + * @return void + * + * @since 7.0.0 + */ + public function resetDownloads() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $msg = null; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles') + ->set('downloads = ' . 0) + ->where('downloads != 0'); + $db->setQuery($query); + + if (!$db->execute()) + { + $msg = JText::_('JBS_CMN_ERROR_RESETTING_DOWNLOADS'); + } + else + { + $updated = $db->getAffectedRows(); + $msg = JText::_('JBS_CMN_RESET_SUCCESSFUL') . ' ' . $updated . ' ' . JText::_('JBS_CMN_ROWS_RESET'); + } + + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + } + + /** + * Reset Players + * + * @return void + * + * @since 7.0.0 + */ + public function resetPlays() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $msg = null; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles') + ->set('plays = ' . 0) + ->where('plays != 0'); + $db->setQuery($query); + + if (!$db->execute()) + { + $msg = JText::_('JBS_CMN_ERROR_RESETTING_PLAYS'); + } + else + { + $updated = $db->getAffectedRows(); + $msg = JText::_('JBS_CMN_RESET_SUCCESSFUL') . ' ' . $updated . ' ' . JText::_('JBS_CMN_ROWS_RESET'); + } + + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $msg); + } + + /** + * Return back to c-panel + * + * @return void + * + * @since 7.0.0 + */ + public function back() + { + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1'); + } + + /** + * Convert SermonSpeaker to BibleStudy + * + * @return void + * + * @since 7.0.0 + */ + public function convertSermonSpeaker() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $convert = new JBSMSSConvert; + $ssconversion = $convert->convertSS(); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $ssconversion); + } + + /** + * Convert PreachIt to BibleStudy + * + * @return void + * + * @since 7.0.0 + */ + public function convertPreachIt() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $convert = new JBSMPIconvert; + $piconversion = $convert->convertPI(); + $this->setRedirect('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', $piconversion); + } + + /** + * Tries to fix missing database updates + * + * @return void + * + * @since 7.1.0 + * @throws Exception + */ + public function fix() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Needed for DB fixer + JLoader::register('BiblestudyModelInstall', BIBLESTUDY_PATH_ADMIN_MODELS . '/install.php'); + + /** @var BiblestudyModelAdmin $model */ + $model = $this->getModel('admin'); + $model->fix(); + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=database', false)); + } + + /** + * Reset Db to install + * + * @return void + * + * @throws Exception + * @since 7.1.0 + */ + public function dbReset() + { + $user = JFactory::getUser(); + + if (in_array('8', $user->groups)) + { + JBSMDbHelper::resetdb(); + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=assats&task=assets.browse&' . JSession::getFormToken() . '=1', false)); + } + else + { + JFactory::getApplication()->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'eroor'); + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=cpanel', false)); + } + } + + /** + * Alias Updates + * + * @return void + * + * @since 7.1.0 + */ + public function aliasUpdate() + { + // Check for request forgeries. + JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN')); + + $alias = new JBSMAlias; + $update = $alias->updateAlias(); + $this->setMessage(JText::_('JBS_ADM_ALIAS_ROWS') . $update); + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=admin&layout=edit&id=1', false)); + } + + /** + * Do the import + * + * @param boolean $parent Source of info + * + * @return void + * + * @throws Exception + * @since 7.0.0 + */ + public function doimport($parent = true) + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $copysuccess = false; + $result = null; + $alt = ''; + + // This should be where the form admin/form_migrate comes to with either the file select box or the tmp folder input field + $app = JFactory::getApplication(); + $input = new JInput; + $input->set('view', $input->get('view', 'admin', 'cmd')); + + // Add commands to move tables from old prefix to new + $oldprefix = $input->get('oldprefix', '', 'string'); + + if ($oldprefix) + { + if ($this->copyTables($oldprefix)) + { + $copysuccess = 1; + } + else + { + $app->enqueueMessage(JText::_('JBS_CMN_DATABASE_NOT_COPIED'), 'worning'); + $copysuccess = false; + } + } + else + { + $import = new JBSMRestore; + $result = $import->importdb($parent); + $alt = '&jbsmalt=1'; + } + + if ($result || $copysuccess) + { + $this->setRedirect('index.php?option=com_biblestudy&view=install&scanstate=start&jbsimport=1' . $alt); + } + else + { + $this->setRedirect('index.php?option=com_biblestudy&view=migrate'); + } + } + + /** + * Copy Old Tables to new Joomla! Tables + * + * @param string $oldprefix Old table Prefix + * + * @return boolean + * + * @throws Exception + * @since 7.0.0 + */ + public function copyTables($oldprefix) + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Create table tablename_new like tablename; -> this will copy the structure... + // Insert into tablename_new select * from tablename; -> this would copy all the data + $db = JFactory::getDbo(); + $tables = $db->getTableList(); + $prefix = $db->getPrefix(); + + foreach ($tables as $table) + { + $isjbs = substr_count($table, $oldprefix . 'bsms'); + + if ($isjbs) + { + $oldlength = strlen($oldprefix); + $newsubtablename = substr($table, $oldlength); + $newtablename = $prefix . $newsubtablename; + $query = 'DROP TABLE IF EXISTS ' . $newtablename; + + if (!JBSMDbHelper::performDB($query)) + { + return false; + } + + $query = 'CREATE TABLE ' . $newtablename . ' LIKE ' . $table; + + if (!JBSMDbHelper::performDB($query)) + { + return false; + } + + $query = 'INSERT INTO ' . $newtablename . ' SELECT * FROM ' . $table; + + if (!JBSMDbHelper::performDB($query)) + { + return false; + } + } + } + + return true; + } + + /** + * Import function from the backup page + * + * @return void + * + * @throws Exception + * @since 7.1.0 + */ + public function import() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $application = JFactory::getApplication(); + $import = new JBSMRestore; + $parent = false; + $result = $import->importdb($parent); + + if ($result === true) + { + $application->enqueueMessage('' . JText::_('JBS_CMN_OPERATION_SUCCESSFUL') . ''); + } + elseif ($result === false) + { + // Do nothing + } + else + { + $application->enqueueMessage('' . $result . ''); + } + + $this->setRedirect('index.php?option=com_biblestudy&view=backup'); + } + + /** + * Export Db + * + * @return void + * + * @since 7.0.0 + */ + public function export() + { + // Check for request forgeries. + JSession::checkToken('get') or JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $input = new JInput; + $run = $input->get('run', '', 'int'); + $export = new JBSMBackup; + + if (!$result = $export->exportdb($run)) + { + $msg = JText::_('JBS_CMN_OPERATION_FAILED'); + $this->setRedirect('index.php?option=com_biblestudy&view=backup', $msg); + } + elseif ($run == 2) + { + if (!$result) + { + $msg = $result; + } + else + { + $msg = JText::_('JBS_CMN_OPERATION_SUCCESSFUL'); + } + + $this->setRedirect('index.php?option=com_biblestudy&view=backup', $msg); + } + } + + /** + * Get Thumbnail List XHR + * + * @throws Exception + * + * @return void + * + * @since 9.0.0 + */ + public function getThumbnailListXHR() + { + $document = JFactory::getDocument(); + $input = JFactory::getApplication()->input; + $images_paths = array(); + + $document->setMimeEncoding('application/json'); + + $image_types = $input->get('images', null, 'array'); + $count = 0; + + foreach ($image_types as $image_type) + { + $images = JFolder::files(JPATH_ROOT . '/' . 'images/biblestudy/' . $image_type, 'original_', true, true); + + if ( $images != false) + { + $count += count($images); + } + + $images_paths[] = array(array('type' => $image_type, 'images' => $images)); + } + + echo json_encode(array('total' => $count, 'paths' => $images_paths)); + + JFactory::getApplication()->close(); + } + + /** + * Create Thumbnail XHR + * + * @throws Exception + * + * @return void + * + * @since 9.0.0 + */ + public function createThumbnailXHR() + { + $document = JFactory::getDocument(); + $input = JFactory::getApplication()->input; + + $document->setMimeEncoding('application/json'); + + $image_path = $input->get('image_path', null, 'string'); + $new_size = $input->get('new_size', null, 'integer'); + + JBSMThumbnail::resize($image_path, $new_size); + + JFactory::getApplication()->close(); + } + + /** + * Archive Old Message and Media + * + * @return void + * + * @since 9.0.1 + */ + public function doArchive() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + /** @var BiblestudyModelArchive $model */ + $model = $this->getModel('archive'); + $msg = $model->doArchive(); + $this->setRedirect('index.php?option=com_biblestudy&view=cpanel', $msg); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/assets.php b/build/com_proclaim-9.2.1/admin/controllers/assets.php new file mode 100644 index 0000000000..4d570564c1 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/assets.php @@ -0,0 +1,179 @@ +modelName = 'assets'; + } + + /** + * Constructor. + * + * @param string $task An optional associative array of configuration settings. + * + * @return void + * + * @since 1.5 + */ + public function execute($task) + { + if ($task != 'run' && $task != 'checkassets' && $task != 'clear') + { + $task = 'browse'; + } + + parent::execute($task); + } + + /** + * Check Assets + * + * @return void + * + * @since 8.0.0 + */ + public function checkassets() + { + // Check for request forgeries. + JSession::checkToken('get') or JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + /** @var BibleStudyModelAssets $model */ + $model = $this->getModel('assets'); + $checkassets = $model->checkAssets(); + $session = JFactory::getSession(); + $session->set('assat_stack', '', 'JBSM'); + $session->set('checkassets', $checkassets, 'JBSM'); + parent::display(); + } + + /** + * Start of installer display hook. + * + * @return void + * + * @since 8.0.0 + */ + public function browse() + { + // Check for request forgeries. + JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN')); + + $app = JFactory::getApplication(); + $session = JFactory::getSession(); + $stack = $session->get('asset_stack', '', 'JBSM'); + + if (empty($stack) || !is_array($stack)) + { + JBSMHelper::clearcache('site'); + JBSMHelper::clearcache('admin'); + $session->set('asset_stack', '', 'JBSM'); + + /** @var BibleStudyModelAssets $model */ + $model = $this->getModel('assets'); + $state = $model->startScanning(); + $app->input->set('scanstate', $state); + $app->input->set('view', 'assets'); + + $this->display(false); + } + else + { + $this->run(); + } + } + + /** + * Clear and start of installer display hook. + * + * @return void + * + * @since 9.0.2 + */ + public function clear() + { + // Check for request forgeries. + JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN')); + + JBSMHelper::clearcache('admin'); + JBSMHelper::clearcache('site'); + $session = JFactory::getSession(); + $session->set('assat_stack', '', 'JBSM'); + $app = JFactory::getApplication(); + $app->input->set('view', 'assets'); + $this->display(false); + } + + /** + * Run function loop + * + * @return void + * + * @since 8.0.0 + */ + public function run() + { + // Check for request forgeries. + JSession::checkToken('get') or JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $app = JFactory::getApplication(); + /** @var BibleStudyModelAssets $model */ + $model = $this->getModel('assets'); + $state = $model->run(); + $app->input->set('scanstate', $state); + $app->input->set('view', 'assets'); + + $this->display(false); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/comment.php b/build/com_proclaim-9.2.1/admin/controllers/comment.php new file mode 100644 index 0000000000..0fe75132f5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/comment.php @@ -0,0 +1,98 @@ +getModel('Comment', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=comments' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + // In the absence of better information, revert to the component permissions. + return parent::allowAdd(); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + $user = JFactory::getUser(); + + // Check general edit permission first. + if ($user->authorise('core.edit', 'com_biblestudy.comment.' . $recordId)) + { + return true; + } + + // Since there is no asset tracking, revert to the component permissions. + return parent::allowEdit($data, $key); + } + + /** + * Proxy for getModel + * + * @param string $name The model name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return BiblestudyModelComment + * + * @since 7.1.0 + */ + public function getModel($name = 'Comment', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/comments.php b/build/com_proclaim-9.2.1/admin/controllers/comments.php new file mode 100644 index 0000000000..c35026ff4d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/comments.php @@ -0,0 +1,38 @@ + true)); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/cpanel.php b/build/com_proclaim-9.2.1/admin/controllers/cpanel.php new file mode 100644 index 0000000000..8b1307785c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/cpanel.php @@ -0,0 +1,22 @@ +modelName = 'install'; + } + + /** + * Constructor. + * + * @param string $task An optional associative array of configuration settings. + * + * @return void + * + * @since 9.0.0 + */ + public function execute($task) + { + if ($task != 'run' && $task != 'clear' && $task != 'browse') + { + $task = 'browse'; + } + + parent::execute($task); + } + + /** + * Start of installer display hook. + * + * @return void + * + * @since 9.0.0 + */ + public function browse() + { + $app = JFactory::getApplication(); + $session = JFactory::getSession(); + $stack = $session->get('migration_stack', '', 'JBSM'); + + if (empty($stack)) + { + JBSMHelper::clearcache('site'); + JBSMHelper::clearcache('admin'); + $session->set('migration_stack', '', 'JBSM'); + + /** @var BibleStudyModelInstall $model */ + $model = $this->getModel('install'); + $state = $model->startScanning(); + $app->input->set('scanstate', $state); + $app->input->set('view', 'install'); + + $this->display(false); + } + else + { + $this->clear(); + } + } + + /** + * Clear and start of installer display hook. + * + * @return void + * + * @since 9.0.0 + */ + public function clear() + { + JBSMHelper::clearcache('site'); + JBSMHelper::clearcache('admin'); + $session = JFactory::getSession(); + $session->set('migration_stack', '', 'JBSM'); + $this->browse(); + } + + /** + * Run function loop + * + * @return void + * + * @since 9.0.0 + */ + public function run() + { + $app = JFactory::getApplication(); + /** @var BibleStudyModelInstall $model */ + $model = $this->getModel('install'); + $state = $model->run(); + $app->input->set('scanstate', $state); + $app->input->set('view', 'install'); + + $this->display(false); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/location.php b/build/com_proclaim-9.2.1/admin/controllers/location.php new file mode 100644 index 0000000000..63ecf80c7b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/location.php @@ -0,0 +1,58 @@ +getModel('Location', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=locations' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Proxy for getModel + * + * @param string $name The model name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return BiblestudyModelLocation + * + * @since 7.1.0 + */ + public function getModel($name = 'Location', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/locations.php b/build/com_proclaim-9.2.1/admin/controllers/locations.php new file mode 100644 index 0000000000..f55e8bd348 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/locations.php @@ -0,0 +1,71 @@ +input->post->get('cid', array(), 'array'); + $order = $this->input->post->get('order', array(), 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + ArrayHelper::toInteger($order); + + $model = $this->getModel(); + + // Save the ordering + $return = $model->saveorder($pks, $order); + + if ($return) + { + echo "1"; + } + + // Close the application + JFactory::getApplication()->close(); + } + + /** + * Proxy for getModel + * + * @param string $name The name of the model + * @param string $prefix The prefix for the PHP class name + * @param array $config Configuration array for model. Optional. + * + * @return BiblestudyModelLocation + * + * @since 7.0.0 + */ + public function getModel($name = 'Location', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/mediafile.php b/build/com_proclaim-9.2.1/admin/controllers/mediafile.php new file mode 100644 index 0000000000..f11e0988e1 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/mediafile.php @@ -0,0 +1,301 @@ +setUserState('com_biblestudy.edit.mediafile.createdate', null); + $app->setUserState('com_biblestudy.edit.mediafile.study_id', null); + $app->setUserState('com_biblestudy.edit.mediafile.server_id', null); + + return true; + } + + return false; + } + + /** + * Resets the User state for the server type. Needed to allow the value from the DB to be used + * + * @param int $key ? + * @param string $urlVar ? + * + * @return bool + * + * @throws Exception + * @since 9.0.0 + */ + public function edit($key = null, $urlVar = null) + { + $app = JFactory::getApplication(); + $result = parent::edit(); + + if ($result) + { + $app->setUserState('com_biblestudy.edit.mediafile.createdate', null); + $app->setUserState('com_biblestudy.edit.mediafile.study_id', null); + $app->setUserState('com_biblestudy.edit.mediafile.server_id', null); + } + + return true; + } + + /** + * Handles XHR requests (i.e. File uploads) + * + * @return void + * + * @throws Exception + * @since 9.0.0 + */ + public function xhr() + { + JSession::checkToken('get') or die('Invalid Token'); + $input = JFactory::getApplication()->input; + + $addonType = $input->get('type', 'Legacy', 'string'); + $handler = $input->get('handler'); + + // Load the addon + $addon = JBSMAddon::getInstance($addonType); + + if (method_exists($addon, $handler)) + { + echo json_encode($addon->$handler($input)); + + $app = JFactory::getApplication(); + $app->close(); + } + else + { + throw new Exception(JText::sprintf('Handler: "' . $handler . '" does not exist!'), 404); + } + } + + /** + * Method to run batch operations. + * + * @param BiblestudyModelMediafile $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 1.6 + */ + public function batch($model = null) + { + /** @type BiblestudyModelMediafile $model */ + $model = $this->getModel('Mediafile', 'BiblestudyModel', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=mediafiles' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to cancel an edit. + * + * @param string $key The name of the primary key of the URL variable. + * + * @return boolean True if access level checks pass, false otherwise. + * + * @throws Exception + * @since 12.2 + */ + public function cancel($key = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $app = JFactory::getApplication(); + $model = $this->getModel(); + /** @type TableMediafile $table */ + $table = $model->getTable(); + $checkin = property_exists($table, 'checked_out'); + + if (empty($key)) + { + $key = $table->getKeyName(); + } + + $recordId = $app->input->getInt($key); + + // Attempt to check-in the current record. + if ($recordId) + { + if ($checkin) + { + if ($model->checkin($recordId) === false) + { + // Check-in failed, go back to the record and display a notice. + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError())); + $this->setMessage($this->getError(), 'error'); + + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_item + . $this->getRedirectToItemAppend($recordId, $key), false + ) + ); + + return false; + } + } + } + + if ($this->input->getCmd('return') && parent::cancel($key)) + { + $this->setRedirect(base64_decode($this->input->getCmd('return'))); + + return true; + } + + $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list, false)); + + return false; + } + + /** + * Sets the server for this media record + * + * @return void + * + * @throws Exception + * @since 9.0.0 + */ + public function setServer() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $app = JFactory::getApplication(); + $input = $app->input; + + $data = $input->get('jform', array(), 'post', 'array'); + $cdate = $data['createdate']; + $study_id = $data['study_id']; + $server_id = $data['server_id']; + + // Save server in the session + $app->setUserState('com_biblestudy.edit.mediafile.createdate', $cdate); + $app->setUserState('com_biblestudy.edit.mediafile.study_id', $study_id); + $app->setUserState('com_biblestudy.edit.mediafile.server_id', $server_id); + + $redirect = $this->getRedirectToItemAppend($data['id']); + $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $redirect, false)); + } + + /** + * Function that allows child controller access to model data after the data has been saved. + * + * @param JModelLegacy $model The data model object. + * @param array $validData The validated data. + * + * @return void + * + * @throws Exception + * @since 3.1 + */ + protected function postSaveHook(JModelLegacy $model, $validData = array()) + { + $return = $this->input->getCmd('return'); + $task = $this->input->get('task'); + + if ($return && $task !== 'apply') + { + JFactory::getApplication()->enqueueMessage(JText::_('JBS_MED_SAVE'), 'message'); + $this->setRedirect(base64_decode($return)); + } + + return; + } + + /** + * Gets the URL arguments to append to an item redirect. + * + * @param integer $recordId The primary key id for the item. + * @param string $urlVar The name of the URL variable for the id. + * + * @return string The arguments to append to the redirect URL. + * + * @since 12.2 + */ + protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') + { + $tmpl = $this->input->get('tmpl'); + $layout = $this->input->get('layout', 'edit', 'string'); + $return = $this->input->getCmd('return'); + $options = $this->input->get('options'); + $append = ''; + + // Setup redirect info. + if ($tmpl) + { + $append .= '&tmpl=' . $tmpl; + } + + if ($layout) + { + $append .= '&layout=' . $layout; + } + + if ($recordId) + { + $append .= '&' . $urlVar . '=' . $recordId; + } + + if ($options) + { + $append .= '&options=' . $options; + } + + if ($return) + { + $append .= '&return=' . $return; + } + + return $append; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/mediafiles.php b/build/com_proclaim-9.2.1/admin/controllers/mediafiles.php new file mode 100644 index 0000000000..cf3dc9b864 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/mediafiles.php @@ -0,0 +1,107 @@ +input->post->get('cid', array(), 'array'); + + $model = $this->getModel(); + $return = $model->checkin($ids); + + if ($return === false) + { + // Checkin failed. + $message = JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError()); + $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list, false), $message, 'error'); + + return false; + } + else + { + // Checkin succeeded. + $message = JText::plural($this->text_prefix . '_N_ITEMS_CHECKED_IN', count($ids)); + $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list, false), $message); + + return true; + } + } + + /** + * Method to save the submitted ordering values for records via AJAX. + * + * @return void + * + * @since 3.0 + */ + public function saveOrderAjax() + { + // Get the input + $pks = $this->input->post->get('cid', array(), 'array'); + $order = $this->input->post->get('order', array(), 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + ArrayHelper::toInteger($order); + + // Get the model + $model = $this->getModel(); + + // Save the ordering + $return = $model->saveorder($pks, $order); + + if ($return) + { + echo "1"; + } + + // Close the application + JFactory::getApplication()->close(); + } + + /** + * Proxy for getModel + * + * @param string $name The name of the model + * @param string $prefix The prefix for the PHP class name + * @param array $config Set ignore request + * + * @return BiblestudyModelMediafile + * + * @since 7.0 + */ + public function &getModel($name = 'Mediafile', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/message.php b/build/com_proclaim-9.2.1/admin/controllers/message.php new file mode 100644 index 0000000000..4ad1acfd68 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/message.php @@ -0,0 +1,234 @@ +get('id'); + + // Check general edit permission first. + if ($user->authorise('core.edit', 'com_biblestudy.message.' . $recordId)) + { + return true; + } + + // Fallback on edit.own. + // First test if the permission is available. + if ($user->authorise('core.edit.own', 'com_biblestudy.message.' . $recordId)) + { + // Now test the owner is the user. + $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; + + if (empty($ownerId) && $recordId) + { + // Need to do a lookup from the model. + $record = $this->getModel()->getItem($recordId); + + if (empty($record)) + { + return false; + } + + $ownerId = $record->created_by; + } + + // If the owner matches 'me' then do the test. + if ($ownerId == $userId) + { + return true; + } + } + + // Since there is no asset tracking, revert to the component permissions. + return parent::allowEdit($data, $key); + } + + /** + * Reset Hits + * + * @return void + * + * @since 1.5 + */ + public function resetHits() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $msg = null; + $input = new JInput; + $id = $input->get('id', 0, 'int'); + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->update('#__bsms_studies') + ->set('hits = ' . $db->q('0')) + ->where(' id = ' . (int) $id); + $db->setQuery($query); + + if (!$db->execute()) + { + $msg = JText::_('JBS_CMN_ERROR_RESETTING_HITS'); + $this->setRedirect('index.php?option=com_biblestudy&view=message&controller=admin&layout=form&cid[]=' . $id, $msg); + } + else + { + $updated = $db->getAffectedRows(); + $msg = JText::_('JBS_CMN_RESET_SUCCESSFUL') . ' ' . $updated . ' ' . JText::_('JBS_CMN_ROWS_RESET'); + $this->setRedirect('index.php?option=com_biblestudy&view=message&controller=message&layout=form&cid[]=' . $id, $msg); + } + } + + /** + * Method to run batch operations. + * + * @param JModelLegacy $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 1.6 + */ + public function batch($model = null) + { + // Set the model + $model = $this->getModel('Message', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=messages' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to get a model object, loading it if required. + * + * @param string $name The model name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return BibleStudyModelMessage + * + * @since 12.2 + */ + public function getModel($name = 'Message', $prefix = 'BibleStudyModel', $config = array('ignore_request' => true)) + { + return parent::getModel($name, $prefix, array('ignore_request' => true)); + } + + /** + * Method to save a record. + * + * @param string $key The name of the primary key of the URL variable. + * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). + * + * @return boolean True if successful, false otherwise. + * + * @since 1.5 + */ + public function save($key = null, $urlVar = null) + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + /** @var BibleStudyModelTopic $model */ + $model = $this->getModel('Topic'); + $app = JFactory::getApplication(); + $data = $this->input->post->get('jform', array(), 'array'); + + // Get Tags + $vTags = $data['topics']; + $iTags = explode(",", $vTags); + JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_biblestudy/tables'); + + // Remove Exerting StudyTopics tags + $db = JFactory::getDbo(); + $qurey = $db->getQuery(true); + $qurey->delete('#__bsms_studytopics') + ->where('study_id =' . $data['id']); + $db->setQuery($qurey); + + if (!$db->execute()) + { + $app->enqueueMessage('error deleting topics', 'error'); + } + + foreach ($iTags as $aTag) + { + if (is_numeric($aTag)) + { + // It's an existing tag. Add it + if ($aTag != "") + { + /** @type TableStudyTopics $tagRow */ + $tagRow = JTable::getInstance('studytopics', 'Table'); + $tagRow->study_id = $data['id']; + $tagRow->topic_id = $aTag; + + if (!$tagRow->store()) + { + $app->enqueueMessage('Error Storing Tags with Message', 'error'); + + return false; + } + } + } + else + { + // It's a new tag. Gotta insert it into the Topics table. + if ($aTag != "") + { + $model->save(array('topic_text' => $aTag, 'language' => $data['language'])); + + // Gotta somehow make sure this isn't a duplicate... + /** @type TableStudyTopics $tagRow */ + $tagRow = JTable::getInstance('studytopics', 'Table'); + $tagRow->study_id = $data['id']; + $tagRow->topic_id = $model->getState('topic.id'); + + if (!$tagRow->store()) + { + $app->enqueueMessage('Error Storing New Tags', 'error'); + + return false; + } + } + } + } + + return parent::save($key, $urlVar); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/messages.php b/build/com_proclaim-9.2.1/admin/controllers/messages.php new file mode 100644 index 0000000000..1bb292543a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/messages.php @@ -0,0 +1,71 @@ +input->post->get('cid', array(), 'array'); + $order = $this->input->post->get('order', array(), 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + ArrayHelper::toInteger($order); + + $model = $this->getModel(); + + // Save the ordering + $return = $model->saveorder($pks, $order); + + if ($return) + { + echo "1"; + } + + // Close the application + JFactory::getApplication()->close(); + } + + /** + * Proxy for getModel + * + * @param string $name The model name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return BiblestudyModelMessage + * + * @since 7.0 + */ + public function getModel($name = 'Message', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/messagetype.php b/build/com_proclaim-9.2.1/admin/controllers/messagetype.php new file mode 100644 index 0000000000..c50320c48e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/messagetype.php @@ -0,0 +1,40 @@ +getModel('Messagetype', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=messagetypes' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/messagetypes.php b/build/com_proclaim-9.2.1/admin/controllers/messagetypes.php new file mode 100644 index 0000000000..c96b3ddc0a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/messagetypes.php @@ -0,0 +1,37 @@ + true)); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/podcast.php b/build/com_proclaim-9.2.1/admin/controllers/podcast.php new file mode 100644 index 0000000000..8cccee316f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/podcast.php @@ -0,0 +1,22 @@ + true)); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/serie.php b/build/com_proclaim-9.2.1/admin/controllers/serie.php new file mode 100644 index 0000000000..340f41f40e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/serie.php @@ -0,0 +1,89 @@ +getModel('Serie', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=series' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + $allow = null; + + if ($allow === null) + { + // In the absence of better information, revert to the component permissions. + return parent::allowAdd(); + } + else + { + return $allow; + } + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + $user = JFactory::getUser(); + + // Check general edit permission first. + if ($user->authorise('core.edit', 'com_biblestudy.serie.' . $recordId)) + { + return true; + } + + // Since there is no asset tracking, revert to the component permissions. + return parent::allowEdit($data, $key); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/series.php b/build/com_proclaim-9.2.1/admin/controllers/series.php new file mode 100644 index 0000000000..c96dec3be7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/series.php @@ -0,0 +1,71 @@ +input->post->get('cid', array(), 'array'); + $order = $this->input->post->get('ordering', array(), 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + ArrayHelper::toInteger($order); + + // Get the model + $model = $this->getModel(); + + // Save the ordering + $return = $model->saveorder($pks, $order); + + if ($return) + { + echo "1"; + } + + // Close the application + JFactory::getApplication()->close(); + } + + /** + * Proxy for getModel + * + * @param string $name The model name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return BiblestudyModelSerie + * + * @since 7.0.0 + */ + public function getModel($name = 'Serie', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/server.php b/build/com_proclaim-9.2.1/admin/controllers/server.php new file mode 100644 index 0000000000..5ff917a613 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/server.php @@ -0,0 +1,91 @@ +setUserState('com_biblestudy.edit.server.server_name', null); + $app->setUserState('com_biblestudy.edit.server.type', null); + + return true; + } + + return false; + } + + /** + * Resets the User state for the server type. Needed to allow the value from the DB to be used + * + * @param int $key ? + * @param string $urlVar ? + * + * @return bool + * + * @since 9.0.0 + */ + public function edit($key = null, $urlVar = null) + { + $app = JFactory::getApplication(); + $result = parent::edit(); + + if ($result) + { + $app->setUserState('com_biblestudy.edit.server.server_name', null); + $app->setUserState('com_biblestudy.edit.server.type', null); + } + + return true; + } + + /** + * Sets the type of endpoint currently being configured. + * + * @return void + * + * @since 9.0.0 + */ + public function setType() + { + $app = JFactory::getApplication(); + $input = $app->input; + + $data = $input->get('jform', array(), 'post'); + $sname = $data['server_name']; + $type = json_decode(base64_decode($data['type'])); + + $recordId = isset($type->id) ? $type->id : 0; + + // Save the endpoint in the session + $app->setUserState('com_biblestudy.edit.server.type', $type->name); + $app->setUserState('com_biblestudy.edit.server.server_name', $sname); + + $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/servers.php b/build/com_proclaim-9.2.1/admin/controllers/servers.php new file mode 100644 index 0000000000..b79c5f122d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/servers.php @@ -0,0 +1,38 @@ + true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/teacher.php b/build/com_proclaim-9.2.1/admin/controllers/teacher.php new file mode 100644 index 0000000000..9cbd2dde0d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/teacher.php @@ -0,0 +1,58 @@ +getModel('Teacher', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_biblestudy&view=teachers' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Proxy for getModel + * + * @param string $name The model name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return BiblestudyModelTeacher + * + * @since 7.0 + */ + public function getModel($name = 'Teacher', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/teachers.php b/build/com_proclaim-9.2.1/admin/controllers/teachers.php new file mode 100644 index 0000000000..f7da57487b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/teachers.php @@ -0,0 +1,72 @@ +input->post->get('cid', array(), 'array'); + $order = $this->input->post->get('order', array(), 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + ArrayHelper::toInteger($order); + + // Get the model + $model = $this->getModel(); + + // Save the ordering + $return = $model->saveorder($pks, $order); + + if ($return) + { + echo "1"; + } + + // Close the application + JFactory::getApplication()->close(); + } + + /** + * Proxy for getModel + * + * @param string $name The model name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return BiblestudyModelTeacher + * + * @since 7.0.0 + */ + public function getModel($name = 'Teacher', $prefix = 'BiblestudyModel', $config = array('ignore_request' => true)) + { + /** @var BiblestudyModelTeacher $model */ + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/template.php b/build/com_proclaim-9.2.1/admin/controllers/template.php new file mode 100644 index 0000000000..02dc4af897 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/template.php @@ -0,0 +1,111 @@ +get('cid', '', 'array'); + ArrayHelper::toInteger($cid); + + $model = & $this->getModel('template'); + + if ($model->copy($cid)) + { + $msg = JText::_('JBS_TPL_TEMPLATE_COPIED'); + } + else + { + $msg = $model->getError(); + } + + $this->setRedirect('index.php?option=com_biblestudy&view=templates', $msg); + } + + /** + * Make Template Default + * + * @return void + * + * @since 7.0 + */ + public function makeDefault() + { + $app = JFactory::getApplication(); + $input = new JInput; + $cid = $input->get('cid', array(0), 'array'); + + if (!is_array($cid) || count($cid) < 1) + { + $app->enqueueMessage(JText::_('JBS_CMN_SELECT_ITEM_UNPUBLISH'), 'error'); + } + + $model = $this->getModel('template'); + + if (!$model->makeDefault($cid, 0)) + { + echo "\n"; + } + + $this->setRedirect('index.php?option=com_biblestudy&view=templates'); + } + + /** + * Get Template Settings + * + * @param string $template filename + * + * @return boolean|string + * + * @since 7.0 + * + * @deprecated 8.0.0 Not used in scope bcc + */ + public function getTemplate($template) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('tc.id, tc.templatecode,tc.type,tc.filename'); + $query->from('#__bsms_templatecode as tc'); + $query->where('tc.filename ="' . $template . '"'); + $db->setQuery($query); + + if (!$object = $db->loadObject()) + { + return false; + } + + $templatereturn = ' + INSERT INTO `#__bsms_templatecode` SET `type` = ' . $db->q($object->type) . ', + `templatecode` = ' . $db->q($object->templatecode) . ', + `filename` = ' . $db->q($template) . ', + `published` = ' . $db->q('1'); + + return $templatereturn; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/templatecode.php b/build/com_proclaim-9.2.1/admin/controllers/templatecode.php new file mode 100644 index 0000000000..6f1348b2aa --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/templatecode.php @@ -0,0 +1,47 @@ + true)) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/templatecodes.php b/build/com_proclaim-9.2.1/admin/controllers/templatecodes.php new file mode 100644 index 0000000000..c7246194b1 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/templatecodes.php @@ -0,0 +1,38 @@ + true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/templates.php b/build/com_proclaim-9.2.1/admin/controllers/templates.php new file mode 100644 index 0000000000..6344884db3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/templates.php @@ -0,0 +1,473 @@ + true)); + + return $model; + } + + /** + * Import Template + * + * @return boolean|JControllerLegacy + * + * @since 8.0 + */ + public function template_import() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Set Variables. + $sermonstemplate = null; + $sermontemplate = null; + $teacherstemplate = null; + $teachertemplate = null; + $seriesdisplaystemplate = null; + $seriesdisplaytemplate = null; + $moduletemplate = null; + + /** + * Attempt to increase the maximum execution time for php scripts with check for safe_mode. + */ + if (!ini_get('safe_mode')) + { + set_time_limit(300); + } + + $input = new JInputFiles; + $userfile = $input->get('template_import'); + $app = JFactory::getApplication(); + $tc = 0; + + // Make sure that file uploads are enabled in php + if (!(bool) ini_get('file_uploads')) + { + $app->enqueueMessage(JText::_('JBS_CMN_UPLOADS_NOT_ENABLED'), 'warning'); + $this->setRedirect('index.php?option=com_biblestudy&view=templates'); + } + + // If there is no uploaded file, we have a problem... + if (!is_array($userfile)) + { + $app->enqueueMessage(JText::_('JBS_CMN_NO_FILE_SELECTED'), 'warning'); + $this->setRedirect('index.php?option=com_biblestudy&view=templates'); + } + + // Check if there was a problem uploading the file. + if ($userfile['error'] || $userfile['size'] < 1) + { + $app->enqueueMessage(JText::_('JBS_CMN_WARN_INSTALL_UPLOAD_ERROR'), 'warning'); + $this->setRedirect('index.php?option=com_biblestudy&view=templates'); + } + + // Build the appropriate paths + $tmp_dest = JPATH_SITE . '/tmp/' . $userfile['name']; + + $tmp_src = $userfile['tmp_name']; + + // Move uploaded file + jimport('joomla.filesystem.file'); + move_uploaded_file($tmp_src, $tmp_dest); + + $db = JFactory::getDbo(); + + $query = file_get_contents(JPATH_SITE . '/tmp/' . $userfile['name']); + $queries = $db->splitSql($query); + + if (count($queries) == 0) + { + // No queries to process + return 0; + } + + foreach ($queries as $querie) + { + $querie = trim($querie); + + if (substr_count($querie, 'INSERT')) + { + if ($querie != '' && $querie{0} != '#') + { + // Check for duplicate names and change + if (substr_count($querie, '#__bsms_styles')) + { + // Defecating this as we nologer support style in DB + } + elseif (substr_count($querie, '#__bsms_templatecode')) + { + // Start to insert new Record + $this->performDB($querie); + + // Get new record insert to change name + $query = $db->getQuery(true); + $query->select('filename, id, type') + ->from('#__bsms_templatecode') + ->order($db->q('id') . ' DESC'); + $db->setQuery($query, 0, 1); + $data = $db->loadObject(); + $query = $db->getQuery(true); + $query->update('#__bsms_styles') + ->set($db->qn('filename') . ' = ' . $db->q($data->filename . '_copy' . $data->id)) + ->where($db->qn('id') . ' = ' . (int) $data->id); + $this->performDB($query); + + $tc++; + + // Store new Recorded so it can be seen. + JTable::addIncludePath(JPATH_COMPONENT . '/tables'); + $table = JTable::getInstance('Templatecode', 'Table', array('dbo' => $db)); + + try + { + $table->load($data->id); + $table->store(); + } + catch (Exception $e) + { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + } + elseif (substr_count($querie, '#__bsms_templates')) + { + // Start to insert new Record + $this->performDB($querie); + + // Get new record insert to change name + $query = $db->getQuery(true); + $query->select('id, title, params') + ->from('#__bsms_templates') + ->order($db->q('id') . ' DESC'); + $db->setQuery($query, 0, 1); + $data = $db->loadObject(); + $query = $db->getQuery(true); + $query->update('#__bsms_templates') + ->set($db->qn('title') . ' = ' . $db->q($data->filename . '_copy' . $data->id)) + ->where($db->qn('id') . ' = ' . (int) $data->id); + $this->performDB($query); + } + } + } + } + + // Get new record insert to change name + $query = $db->getQuery(true); + $query->select('id, type, filename') + ->from('#__bsms_templatecode') + ->order($db->q('id') . ' DESC'); + $db->setQuery($query, 0, $tc); + $data = $db->loadObjectList(); + + foreach ($data AS $tpcode) + { + // Preload variables for templates + $type = $tpcode->type; + + switch ($type) + { + case 1: + // Sermonlist + $sermonstemplate = $tpcode->filename; + break; + case 2: + // Sermon + $sermontemplate = $tpcode->filename; + break; + case 3: + // Teachers + $teacherstemplate = $tpcode->filename; + break; + case 4: + // Teacher + $teachertemplate = $tpcode->filename; + break; + case 5: + // Serieslist + $seriesdisplaystemplate = $tpcode->filename; + break; + case 6: + // Series + $seriesdisplaytemplate = $tpcode->filename; + break; + case 7: + // Module + $moduletemplate = $tpcode->filename; + break; + } + } + + // Get new record insert to change name + $query = $db->getQuery(true); + $query->select('id, title, params') + ->from('#__bsms_templates') + ->order('id'); + $db->setQuery($query, 1); + $data = $db->loadObject(); + + // Load Table Data. + JTable::addIncludePath(JPATH_COMPONENT . '/tables'); + /** @type TableTemplate $table */ + $table = JTable::getInstance('Template', 'Table', array('dbo' => $db)); + + try + { + $table->load($data->id); + } + catch (Exception $e) + { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + + // Need to adjust the params and write back + $registry = new Registry; + $registry->loadString($table->params); + $params = $registry; + $params->set('sermonstemplate', $sermonstemplate); + $params->set('sermontemplate', $sermontemplate); + $params->set('teacherstemplate', $teacherstemplate); + $params->set('teachertemplate', $teachertemplate); + $params->set('seriesdisplaystemplate', $seriesdisplaystemplate); + $params->set('seriesdisplaytemplate', $seriesdisplaytemplate); + $params->set('moduletemplate', $moduletemplate); + + // Now write the params back into the $table array and store. + $table->params = (string) $params->toString(); + + $table->store(); + + $message = JText::_('JBS_TPL_IMPORT_SUCCESS'); + + return $this->setRedirect('index.php?option=com_biblestudy&view=templates', $message); + } + + /** + * Perform DB Query + * + * @param string $query Query + * + * @return boolean + * + * @since 8.0 + */ + private function performDB($query) + { + $db = JFactory::getDbo(); + $db->setQuery($query); + + if (!$db->execute()) + { + return false; + } + + return true; + } + + /** + * Export the Template + * + * @return boolean|JControllerLegacy + * + * @since 8.0 + */ + public function template_export() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $input = new JInput; + $data = $input->get('template_export'); + $exporttemplate = $data; + + if (!$exporttemplate) + { + $message = JText::_('JBS_TPL_NO_FILE_SELECTED'); + $this->setRedirect('index.php?option=com_biblestudy&view=templates', $message); + } + + jimport('joomla.filesystem.file'); + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('t.id, t.type, t.params, t.title, t.text'); + $query->from('#__bsms_templates as t'); + $query->where('t.id = ' . $exporttemplate); + $db->setQuery($query); + $result = $db->loadObject(); + $objects[] = $this->getExportSetting($result); + $filecontents = implode(' ', $objects); + $filename = $result->title . '.sql'; + $filepath = JPATH_ROOT . '/tmp/' . $filename; + + if (!JFile::write($filepath, $filecontents)) + { + return false; + } + + $xport = new JBSMBackup; + $xport->output_file($filepath, $filename, 'text/x-sql'); + JFile::delete($filepath); + $message = JText::_('JBS_TPL_EXPORT_SUCCESS'); + + return $this->setRedirect('index.php?option=com_biblestudy&view=templates', $message); + } + + /** + * Get Exported Template Settings + * + * @param object $result ? + * + * @return string + * + * @since 8.0 + */ + private function getExportSetting($result) + { + // Export must be in this order: css, template files, template. + $registry = new Registry; + $registry->loadString($result->params); + $params = $registry; + $db = JFactory::getDbo(); + $objects = ''; + $css = $params->get('css'); + $css = substr($css, 0, -4); + + if ($css) + { + $objects = "--\n-- CSS Style Code\n--\n"; + $query2 = $db->getQuery(true); + $query2->select('style.*'); + $query2->from('#__bsms_styles AS style'); + $query2->where('style.filename = "' . $css . '"'); + $db->setQuery($query2); + $db->execute(); + $cssresult = $db->loadObject(); + $objects .= "\nINSERT INTO #__bsms_styles SET `published` = '1',\n`filename` = " . $db->q($cssresult->filename) + . ",\n`stylecode` = " . $db->q($cssresult->stylecode) . ";\n"; + } + + // Get the individual template files + $sermons = $params->get('sermonstemplate'); + + if ($sermons) + { + $objects .= "\n--\n-- Sermons\n--"; + $objects .= $this->getTemplate($sermons); + } + + $sermon = $params->get('sermontemplate'); + + if ($sermon) + { + $objects .= "\n--\n-- Sermon\n--"; + $objects .= $this->getTemplate($sermon); + } + + $teachers = $params->get('teacherstemplate'); + + if ($teachers) + { + $objects .= "\n--\n-- Teachers\n--"; + $objects .= $this->getTemplate($teachers); + } + + $teacher = $params->get('teachertemplate'); + + if ($teacher) + { + $objects .= "\n--\n-- Teacher\n--"; + $objects .= $this->getTemplate($teacher); + } + + $seriesdisplays = $params->get('seriesdisplaystemplate'); + + if ($seriesdisplays) + { + $objects .= "\n--\n-- Seriesdisplays\n--"; + $objects .= $this->getTemplate($seriesdisplays); + } + + $seriesdisplay = $params->get('seriesdisplaytemplate'); + + if ($seriesdisplay) + { + $objects .= "\n--\n-- SeriesDisplay\n--"; + $objects .= $this->getTemplate($seriesdisplay); + } + + $objects .= "\n\n--\n-- Template Table\n--\n"; + + // Create the main template insert + $objects .= "\nINSERT INTO #__bsms_templates SET `type` = " . $db->q($result->type) . ","; + $objects .= "\n`params` = " . $db->q($result->params) . ","; + $objects .= "\n`title` = " . $db->q($result->title) . ","; + $objects .= "\n`text` = " . $db->q($result->text) . ";"; + + $objects .= "\n-- --------------------------------------------------------\n\n"; + + return $objects; + } + + /** + * Get Template Settings + * + * @param array $template ? + * + * @return boolean|string + * + * @since 8.0 + */ + public function getTemplate($template) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('tc.id, tc.templatecode,tc.type,tc.filename'); + $query->from('#__bsms_templatecode as tc'); + $query->where('tc.filename ="' . $template . '"'); + $db->setQuery($query); + + if (!$object = $db->loadObject()) + { + return false; + } + + $templatereturn = ' + INSERT INTO `#__bsms_templatecode` SET `type` = "' . $db->escape($object->type) . '", + `templatecode` = "' . $db->escape($object->templatecode) . '", + `filename`="' . $db->escape($template) . '", + `published` = "1"; + '; + + return $templatereturn; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/topic.php b/build/com_proclaim-9.2.1/admin/controllers/topic.php new file mode 100644 index 0000000000..85747e3fa3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/topic.php @@ -0,0 +1,22 @@ + true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } +} diff --git a/build/com_proclaim-9.2.1/admin/controllers/upload.php b/build/com_proclaim-9.2.1/admin/controllers/upload.php new file mode 100644 index 0000000000..73cc565639 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/controllers/upload.php @@ -0,0 +1,273 @@ +get('current_dir', null, 'com_biblestudy'); + $targetDirDecoded = base64_decode($targetDirBase64); + $targetDirWithSep = $targetDirDecoded . DIRECTORY_SEPARATOR; + + // Check for snooping + $targetDirCleaned = JPath::check($targetDirWithSep); + + // Finally + $targetDir = $targetDirCleaned; + + // Get parameters + $chunk = $input->getInt('chunk', 0); + $chunks = $input->getInt('chunks', 0); + + // Current file name + $fileNameFromReq = $input->getString('name', ''); + + // Clean the fileName for security reasons + $fileName = JFile::makeSafe($fileNameFromReq); + + // Check file extension + $ext_images = $params->get('image_file_extensions', null); + $ext_other = $params->get('other_files_extension', null); + + // Prepare extensions for validation + $exts = $ext_images . ',' . $ext_other; + $exts_lc = strtolower($exts); + $exts_arr = explode(',', $exts_lc); + + // Check token + if (!$session->checkToken('request')) + { + $this->_setResponse(400, JText::_('JINVALID_TOKEN')); + } + + // Check user perms + if (!$user->authorise('core.create', 'com_biblestudy')) + { + $this->_setResponse(400, JText::_('JBS_ERROR_PERM_DENIDED')); + } + + // Directory check + if (!file_exists($targetDir) && !is_dir($targetDir) && strpos(JUri::base(), $targetDir) !== false) + { + $this->_setResponse(100, JText::_('JBS_ERROR_UPLOAD_INVALID_PATH')); + } + + // File type check + if (!in_array(JFile::getExt($fileName), $exts_arr)) + { + $this->_setResponse(100, JText::_('JBS_ERROR_UPLOAD_INVALID_FILE_EXTENSION')); + } + + // Make sure the fileName is unique but only if chunk is disabled + if ($chunks < 2 && file_exists($targetDir . '/' . $fileName)) + { + $ext = strrpos($fileName, '.'); + $fileName_a = substr($fileName, 0, $ext); + $fileName_b = substr($fileName, $ext); + + $count = 1; + + while (file_exists($targetDir . '/' . $fileName_a . '_' . $count . $fileName_b)) + { + $count++; + } + + $fileName = $fileName_a . '_' . $count . $fileName_b; + } + + $filePath = $targetDir . '/' . $fileName; + + // Remove old temp files + if ($cleanupTargetDir && ($dir = opendir($targetDir))) + { + while (($file = readdir($dir)) !== false) + { + $tmpfilePath = $targetDir . '/' . $file; + + // Remove temp file if it is older than the max age and is not the current file + if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge) && ($tmpfilePath != "{$filePath}.part")) + { + JFile::delete($tmpfilePath); + } + } + + closedir($dir); + } + else + { + $this->_setResponse(100, 'Failed to open temp directory.'); + } + + // Look for the content type header + if (isset($_SERVER["HTTP_CONTENT_TYPE"])) + { + $contentType = $_SERVER["HTTP_CONTENT_TYPE"]; + } + + if (isset($_SERVER["CONTENT_TYPE"])) + { + $contentType = $_SERVER["CONTENT_TYPE"]; + } + + // Handle non multipart uploads older WebKit versions didn't support multipart in HTML5 + if (strpos($contentType, "multipart") !== false) + { + if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) + { + // Open temp file + $out = fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab"); + + if ($out) + { + // Read binary input stream and append it to temp file + $in = fopen($_FILES['file']['tmp_name'], "rb"); + + if ($in) + { + while ($buff = fread($in, 4096)) + { + fwrite($out, $buff); + } + } + else + { + $this->_setResponse(101, "Failed to open input stream."); + } + + fclose($in); + fclose($out); + JFile::delete($_FILES['file']['tmp_name']); + } + else + { + $this->_setResponse(102, "Failed to open output stream."); + } + } + else + { + $this->_setResponse(103, "Failed to move uploaded file"); + } + } + else + { + // Open temp file + $out = fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab"); + + if ($out) + { + // Read binary input stream and append it to temp file + $in = fopen("php://input", "rb"); + + if ($in) + { + while ($buff = fread($in, 4096)) + { + fwrite($out, $buff); + } + } + else + { + $this->_setResponse(101, "Failed to open input stream."); + } + + fclose($in); + fclose($out); + } + else + { + $this->_setResponse(102, "Failed to open output stream."); + } + } + + // Check if file has been uploaded + if (!$chunks || $chunk == $chunks - 1) + { + // Strip the temp .part suffix off + @rename("{$filePath}.part", $filePath); + } + + $this->_setResponse(0, null, false); + } + + /** + * Set the JSON response and exists script + * + * @param int $code Error Code + * @param string $msg Error Message + * @param bool $error ? + * + * @return void + * + * @since 9.0 + */ + private function _setResponse($code, $msg = null, $error = true) + { + if ($error) + { + $jsonrpc = array( + "error" => 1, + "code" => $code, + "msg" => $msg + ); + } + else + { + $jsonrpc = array( + "error" => 0, + "code" => $code, + "msg" => "File uploaded!" + ); + } + + die(json_encode($jsonrpc)); + } +} diff --git a/build/com_proclaim-9.2.1/admin/help/en-GB/biblestudy.html b/build/com_proclaim-9.2.1/admin/help/en-GB/biblestudy.html new file mode 100644 index 0000000000..fa88e7ee0d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/help/en-GB/biblestudy.html @@ -0,0 +1,8 @@ +
      Proclaim Help Screen
      +

      All help has been moved to our documentation site: +

      + Find + answers here
      Also + visit our forum +

      diff --git a/build/com_proclaim-9.2.1/admin/help/en-GB/templatecodehelp.html b/build/com_proclaim-9.2.1/admin/help/en-GB/templatecodehelp.html new file mode 100644 index 0000000000..9e2dc13220 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/help/en-GB/templatecodehelp.html @@ -0,0 +1,508 @@ + + + + + Template Code Helper + + + + + +

      Template Code Helper (click field to select)

      + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Studies Codes (for all views)
      To get the list, see each view
      Title
      Study Number
      Description
      Date
      Id
      Scripture 1
      Scripture 2
      Title
      Media
      Duration
      Topics
      Study Thumbnail
      Series Thumbnail
      Secondary Reference
      Link to Details View
      Topics
      Teacher Name
      Teacher Title
      Teacher Image
      Topics
      Hits
      Submitted By
      Slug
      Total Plays
      Total Downloads
      Location
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Sermon List Codes
      List Introduction
      Popular Study Drop Down
      Go Button
      Teachers Dropdown
      Series Dropdown
      Message Types Dropdown
      Years Dropdown
      Locations Dropdown
      Topics Dropdown
      Books Dropdown
      Languages Dropdown
      Order (Asc, Desc) Dropdown
      Pagination links;
      Pagination Limit Box
      Pagination array
      Sample Code
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Sermon Display Codes (Plus any studies code)
      Print Button
      Social Media Box
      Study Text
      Main Reference Passage
      Related Studies Drop Down
      Sample Code
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Series List Codes (plus Series Display Codes below)
      To get each series +
      Link to each series
      Series Image
      Series Drop down box
      Main Series Page Image
      Footer Pagination Links
      Series Title
      Series Teacher Image
      Series Description
      Series Teacher Name
      Series Teacher Title
      Series Teacher Image
      Sample Code
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Series Display Codes
      Series Title
      Series Thumbnail
      Series Studies +
      Series Description
      Series Teacher Name
      Series Teacher Title
      Series Teacher Image
      Sample Code
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + +
      Teacher List Codes (plus Teacher Display Codes below)
      Each Teacher's Information +
      Link to each teacher
      Teacher Image
      Sample Code
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Teacher Display Codes
      Teacher Thumbnail
      Large Teacher Image
      Teacher's Studies
      Teacher Title
      Teacher Phone
      Teacher Email
      Teacher Website
      Teacher Introduction
      Teacher Long Information
      Teacher Address
      Teacher Facebook URL
      Teacher Twitter URL
      Teacher Blog URL
      Teacher Web Link1 URL
      Teacher Web Link1 Label
      Teacher Web Link2 URL
      Teacher Web Link2 Label
      Teacher Web Link3 URL
      Teacher Web Link3 Label
      +
      +
      + + + + + + + + + + + +
      Module Codes (Plus any Studies Code from above)
      Link to more studies
      Sample Code
      +
      +
      + + diff --git a/build/com_proclaim-9.2.1/admin/helpers/alias.php b/build/com_proclaim-9.2.1/admin/helpers/alias.php new file mode 100644 index 0000000000..d9b091fd2a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/alias.php @@ -0,0 +1,134 @@ +getQuery(true); + $query->update($db->qn($r['table'])) + ->set('alias=' . $db->q($alias)) + ->where('id=' . $db->q($r['id'])); + $db->setQuery($query); + $db->execute(); + $done++; + } + } + } + + return $done; + } + + /** + * Get Object's for tables + * + * @return array + * + * @since 1.5 + */ + private static function getObjects() + { + $objects = array( + array('name' => '#__bsms_series', 'titlefield' => 'series_text'), + array('name' => '#__bsms_studies', 'titlefield' => 'studytitle'), + array('name' => '#__bsms_message_type', 'titlefield' => 'message_type'), + array('name' => '#__bsms_teachers', 'titlefield' => 'teachername'), + ); + + return $objects; + } + + /** + * Get Table fields for updating. + * + * @param string $table Table + * @param string $title Title + * + * @return boolean|array + * + * @since 1.5 + */ + private static function getTableQuery($table, $title) + { + $data = array(); + + if (!$table) + { + return false; + } + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('id, alias, ' . $title) + ->from($table); + $db->setQuery($query); + $results = $db->loadObjectList(); + + foreach ($results as $result) + { + if (!$result->alias) + { + $temp = array( + 'id' => $result->id, + 'title' => $result->$title, + 'alias' => $result->alias, + 'table' => $table + ); + $data[] = $temp; + } + } + + return $data; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/biblestudyhelper.php b/build/com_proclaim-9.2.1/admin/helpers/biblestudyhelper.php new file mode 100644 index 0000000000..caf1129c7e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/biblestudyhelper.php @@ -0,0 +1,797 @@ +set($action, $user->authorise($action, $assetName)); + } + + return $result; + } + + /** + * Configure the Linkbar. + * + * @param string $vName The name of the active view. + * + * @return void + * + * @since 1.6 + * @throws Exception + */ + public static function addSubmenu($vName) + { + $simple_view = JBSMHelper::getSimpleView(); + + self::rendermenu( + JText::_('JBS_CMN_CONTROL_PANEL'), 'index.php?option=com_biblestudy&view=cpanel', $vName == 'cpanel' + ); + self::rendermenu( + JText::_('JBS_CMN_ADMINISTRATION'), 'index.php?option=com_biblestudy&task=admin.edit&id=1', $vName == 'admin' + ); + self::rendermenu( + JText::_('JBS_CMN_STUDIES'), 'index.php?option=com_biblestudy&view=messages', $vName == 'messages' + ); + self::rendermenu( + JText::_('JBS_CMN_MEDIA_FILES'), 'index.php?option=com_biblestudy&view=mediafiles', $vName == 'mediafiles' + ); + self::rendermenu( + JText::_('JBS_CMN_TEACHERS'), 'index.php?option=com_biblestudy&view=teachers', $vName == 'teachers' + ); + self::rendermenu( + JText::_('JBS_CMN_SERIES'), 'index.php?option=com_biblestudy&view=series', $vName == 'series' + ); + + if (!$simple_view) + { + self::rendermenu( + JText::_('JBS_CMN_MESSAGETYPES'), 'index.php?option=com_biblestudy&view=messagetypes', $vName == 'messagetypes' + ); + self::rendermenu( + JText::_('JBS_CMN_LOCATIONS'), 'index.php?option=com_biblestudy&view=locations', $vName == 'locations' + ); + self::rendermenu( + JText::_('JBS_CMN_TOPICS'), 'index.php?option=com_biblestudy&view=topics', $vName == 'topics' + ); + self::rendermenu( + JText::_('JBS_CMN_COMMENTS'), 'index.php?option=com_biblestudy&view=comments', $vName == 'comments' + ); + } + + self::rendermenu( + JText::_('JBS_CMN_SERVERS'), 'index.php?option=com_biblestudy&view=servers', $vName == 'servers' + ); + self::rendermenu( + JText::_('JBS_CMN_PODCASTS'), 'index.php?option=com_biblestudy&view=podcasts', $vName == 'podcasts' + ); + + if (!$simple_view) + { + self::rendermenu( + JText::_('JBS_CMN_TEMPLATES'), 'index.php?option=com_biblestudy&view=templates', $vName == 'templates' + ); + self::rendermenu( + JText::_('JBS_CMN_TEMPLATECODE'), 'index.php?option=com_biblestudy&view=templatecodes', $vName == 'templatecodes' + ); + } + } + + /** + * Rendering Menu based on Joomla! Version. + * + * @param string $text Label + * @param string $url Url of link + * @param string $vName Name of view + * + * @return void + * + * @since 1.5 + */ + public static function rendermenu($text, $url, $vName) + { + JHtmlSidebar::addEntry($text, $url, $vName); + } + + /** + * Applies the content tag filters to arbitrary text as per settings for current user group + * + * @param string $text The string to filter + * + * @return string The filtered string + * + * @since 1.5 + */ + public static function filterText($text) + { + // Filter settings + jimport('joomla.application.component.helper'); + $config = JComponentHelper::getParams('com_biblestudy'); + $user = JFactory::getUser(); + $userGroups = JAccess::getGroupsByUser($user->get('id')); + + $filters = $config->get('filters'); + + $blackListTags = array(); + $blackListAttributes = array(); + + $whiteListTags = array(); + $whiteListAttributes = array(); + + $whiteList = false; + $blackList = false; + $unfiltered = false; + + // Cycle through each of the user groups the user is in. + // Remember they are include in the Public group as well. + foreach ($userGroups AS $groupId) + { + // May have added a group by not saved the filters. + if (!isset($filters->$groupId)) + { + continue; + } + + // Each group the user is in could have different filtering properties. + $filterData = $filters->$groupId; + $filterType = strtoupper($filterData->filter_type); + + if ($filterType == 'NH') + { + // Maximum HTML filtering. + } + else + { + if ($filterType == 'NONE') + { + // No HTML filtering. + $unfiltered = true; + } + else + { + // Black or white list. + // Prepossess the tags and attributes. + $tags = explode(',', $filterData->filter_tags); + $attributes = explode(',', $filterData->filter_attributes); + $tempTags = array(); + $tempAttributes = array(); + + foreach ($tags AS $tag) + { + $tag = trim($tag); + + if ($tag) + { + $tempTags[] = $tag; + } + } + + foreach ($attributes AS $attribute) + { + $attribute = trim($attribute); + + if ($attribute) + { + $tempAttributes[] = $attribute; + } + } + + // Collect the black or white list tags and attributes. + // Each list is cumulative. + if ($filterType == 'BL') + { + $blackList = true; + $blackListTags = array_merge($blackListTags, $tempTags); + $blackListAttributes = array_merge($blackListAttributes, $tempAttributes); + } + else + { + if ($filterType == 'WL') + { + $whiteList = true; + $whiteListTags = array_merge($whiteListTags, $tempTags); + $whiteListAttributes = array_merge($whiteListAttributes, $tempAttributes); + } + } + } + } + } + + // Remove duplicates before processing (because the black list uses both sets of arrays). + $blackListTags = array_unique($blackListTags); + $blackListAttributes = array_unique($blackListAttributes); + $whiteListTags = array_unique($whiteListTags); + $whiteListAttributes = array_unique($whiteListAttributes); + + // Unfiltered assumes first priority. + if ($unfiltered) + { + $filter = JFilterInput::getInstance(array(), array(), 1, 1, 0); + } + else + { + // Black lists take second precedence. + if ($blackList) + { + // Remove the white-listed attributes from the black-list. + $filter = JFilterInput::getInstance( + + // Blacklisted tags + array_diff($blackListTags, $whiteListTags), + // Blacklisted attributes + array_diff($blackListAttributes, $whiteListAttributes), + // Blacklist tags + 1, + // Blacklist attributes + 1 + ); + } + else + { + // White lists take third precedence. + if ($whiteList) + { + // Turn off xss auto clean + $filter = JFilterInput::getInstance($whiteListTags, $whiteListAttributes, 0, 0, 0); + } + else + { + // No HTML takes last place. + $filter = JFilterInput::getInstance(); + } + } + } + + $text = $filter->clean($text, 'html'); + + return $text; + } + + /** + * Debug switch state form Admin Settings page + * + * @return int '1' is on '0' is off + * + * @since 7.1.0 + * @throws Exception + */ + public static function debug() + { + if (!JBSMDbHelper::getInstallState()) + { + self::$admin_params = JBSMParams::getAdmin(); + + if (!isset(self::$admin_params->debug)) + { + self::$admin_params = new stdClass; + self::$admin_params->debug = 1; + } + + return self::$admin_params->debug; + } + + return 0; + } + + /** + * Media Types + * + * @since 8.0.0 + * @depreciated 9.0.0 + * + * @throws Exception For bad function + * @return void + */ + public static function getMediaTypes() + { + JLog::add('getMediaTypes is nologer supported', JLog::NOTICE, 'com_biblestudy'); + throw new Exception('Bad function getMediaTypes is nologer supported'); + } + + /** + * Media Years + * + * @return array Returns list of years of media files based on createdate + * + * @since 8.0.0 + * @throws Exception + */ + public static function getMediaYears() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('DISTINCT YEAR(createdate) as value, YEAR(createdate) as text'); + $query->from('#__bsms_mediafiles'); + $query->order('value'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + } + + return $options; + } + + /** + * Message Types + * + * @return array Returns list of message types + * + * @since 8.0.0 + * @throws Exception + */ + public static function getMessageTypes() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('messageType.id AS value, messageType.message_type AS text'); + $query->from('#__bsms_message_type AS messageType'); + $query->join('INNER', '#__bsms_studies AS study ON study.messagetype = messageType.id'); + $query->group('messageType.id'); + $query->order('messageType.message_type'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + } + + return $options; + } + + /** + * Study Years + * + * @return array Returns list of years of studies based on studydate + * + * @since 8.0.0 + * @throws Exception + */ + public static function getStudyYears() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('DISTINCT YEAR(studydate) as value, YEAR(studydate) as text'); + $query->from('#__bsms_studies'); + $query->order('value'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + } + + return $options; + } + + /** + * Teachers + * + * @return array Returns list of Teachers + * + * @since 8.0.0 + * @throws Exception + */ + public static function getTeachers() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('teacher.id AS value, teacher.teachername AS text'); + $query->from('#__bsms_teachers AS teacher'); + $query->join('INNER', '#__bsms_studies AS study ON study.teacher_id = teacher.id'); + $query->group('teacher.id'); + $query->order('teacher.teachername'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + } + + return $options; + } + + /** + * Study Books + * + * @return array Returns list of books + * + * @since 8.0.0 + * @throws Exception + */ + public static function getStudyBooks() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('book.booknumber AS value, book.bookname AS text, book.id'); + $query->from('#__bsms_books AS book'); + $query->join('INNER', '#__bsms_studies AS study ON study.booknumber = book.booknumber'); + $query->group('book.id'); + $query->order('book.booknumber'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + } + + foreach ($options as $option) + { + $option->text = JText::_($option->text); + } + + return $options; + } + + /** + * Study Media Types + * + * @return array Returns list of books + * + * @since 8.0.0 + * @throws Exception + */ + public static function getStudyMediaTypes() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('messageType.id AS value, messageType.message_type AS text'); + $query->from('#__bsms_message_type AS messageType'); + $query->join('INNER', '#__bsms_studies AS study ON study.messagetype = messageType.id'); + $query->group('messageType.id'); + $query->order('messageType.message_type'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + } + + return $options; + } + + /** + * Study Locations + * + * @return array Returns list of books + * + * @since 8.0.0 + * @throws Exception + */ + public static function getStudyLocations() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('id AS value, location_text AS text'); + $query->from('#__bsms_locations'); + $query->order('location_text ASC'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + } + + return $options; + } + + /** + * Sorting the array a Column + * + * @param array &$arr Array to sort + * @param string $col Sort column + * @param int $dir Direction to sort + * + * @return void applied back to the array + * + * @since 1.5 + */ + public static function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) + { + $sort_col = array(); + + foreach ($arr as $key => $row) + { + $sort_col[$key] = $row[$col]; + } + + array_multisort($sort_col, $dir, $arr); + } + + /** + * Debug stop + * + * @param string $msg Message to sent. + * + * @return void + * + * @throws Exception + * + * @since 1.5 + */ + public static function stop($msg = '') + { + echo $msg; + $mainframe = JFactory::getApplication(); + $mainframe->close(); + } + + /** + * String Starts With + * + * @param string $haystack String to search. + * @param string $needle What to search for. + * + * @return boolean + * + * @since 1.5 + */ + public static function startsWith($haystack, $needle) + { + // Search backwards starting from haystack length characters from the end + return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== false; + } + + /** + * String Ends with. + * + * @param string $haystack String to search. + * @param string $needle What to search for. + * + * @return boolean + * + * @since 1.5 + */ + public static function endsWith($haystack, $needle) + { + // Search forward starting from end minus needle length characters + return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false); + } + + /** + * Get user ids in an object + * + * @return array + * + * @since 9.1.4 + * @throws Exception + */ + public static function getUsers() + { + $options = array(); + + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('id AS value, username AS text'); + $query->from('#__users'); + $query->order('id'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'worning'); + + return $options; + } + + return $options; + } + + /** + * Get haf of array count + * + * @param array|object $array Array or Object to count + * + * @return object + * + * @since 9.1.7 + */ + public static function halfarray($array) + { + $count = count($array); + + $return = new stdClass; + $return->half = floor($count / 2); + $return->count = $count; + + return $return; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/dbhelper.php b/build/com_proclaim-9.2.1/admin/helpers/dbhelper.php new file mode 100644 index 0000000000..9d930c0b36 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/dbhelper.php @@ -0,0 +1,619 @@ +getTableList(); + $prefix = $db->getPrefix(); + + foreach ($tables AS $table) + { + $tableAF = str_replace($prefix, "#__", $table); + + if ($tableAF == $cktable) + { + return true; + } + } + + return false; + } + + /** + * Alters a table + * command is only needed for MODIFY. Can be used to ADD, DROP, MODIFY, or CHANGE tables. + * + * @param array $tables Tables is an array of tables, fields, type of query and optional command line + * @param string $from Where the query is coming from for msg + * + * @return boolean + * + * @throws Exception + * @since 7.0 + */ + public static function alterDB($tables, $from = null) + { + $db = JFactory::getDbo(); + + foreach ($tables as $t) + { + $type = strtolower($t['type']); + $command = $t['command']; + $table = $t['table']; + $field = $t['field']; + + switch ($type) + { + case 'drop': + if (!$table || !$field) + { + break; + } + + // Check the field to see if it exists first + if (self::checkTables($table, $field) === true) + { + $query = 'ALTER TABLE ' . $db->qn($table) . ' DROP ' . $db->qn($field); + + if (!self::performDB($query, $from)) + { + return false; + } + } + break; + + case 'index': + if (!$table || !$field) + { + break; + } + + $query = 'ALTER TABLE ' . $db->qn($table) . ' ADD INDEX ' . $db->qn($field) . ' ' . $command; + + if (!self::performDB($query, $from)) + { + return false; + } + + break; + + case 'add': + if (!$table || !$field) + { + break; + } + + if (self::checkTables($table, $field) !== true) + { + $query = 'ALTER TABLE ' . $db->qn($table) . ' ADD ' . $db->qn($field) . ' ' . $command; + + if (!self::performDB($query, $from)) + { + return false; + } + } + break; + + case 'column': + if (!$table || !$field) + { + break; + } + + if (self::checkTables($table, $field) !== true) + { + $query = 'ALTER TABLE ' . $db->qn($table) . ' ADD COLUMN' . $db->qn($field) . ' ' . $command; + + if (!self::performDB($query, $from)) + { + return false; + } + } + break; + + case 'modify': + if (!$table || !$field) + { + break; + } + + if (self::checkTables($table, $field) === true) + { + $query = 'ALTER TABLE ' . $db->qn($table) . ' MODIFY ' . $db->qn($field) . ' ' . $command; + + if (!self::performDB($query, $from)) + { + return false; + } + } + break; + + case 'change': + if (!$table || !$field) + { + break; + } + + if (self::checkTables($table, $field) === true) + { + $query = 'ALTER TABLE ' . $db->qn($table) . ' CHANGE ' . $db->qn($field) . ' ' . $command; + + if (!self::performDB($query, $from)) + { + return false; + } + } + } + } + + return true; + } + + /** + * Discover the fields in a table + * + * @param string $table Is the table you are checking + * @param string $field Checking against. + * + * @return boolean false equals field does not exist + * + * @since 7.0 + */ + public static function checkTables($table, $field) + { + $db = JFactory::getDbo(); + + $fields = $db->getTableColumns($table, 'false'); + + if ($fields) + { + if (array_key_exists($field, $fields) === true) + { + return true; + } + } + + return false; + } + + /** + * performs a database query + * + * @param string $query Is a Joomla ready query + * @param string $from Where the source of the query comes from + * @param int $limit Set the Limit of the query + * + * @return boolean true if success, or error string if failed + * + * @since 7.0 + * @throws Exception + */ + public static function performDB($query, $from = null, $limit = null) + { + if (!$query) + { + return false; + } + + $db = JFactory::getDbo(); + $db->setQuery($query, 0, $limit); + + if (!$db->execute()) + { + JFactory::getApplication()->enqueueMessage($from . JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', $db->stderr(true)), 'warning'); + + return false; + } + else + { + JLog::add($from . $query, JLog::INFO, 'com_biblestudy'); + + return true; + } + } + + /** + * Checks a table for the existence of a field, if it does not find it, runs the Admin model fix() + * + * @param string $table table is the table you are checking + * @param string $field field you are checking + * + * @return boolean + * + * @since 7.0 + * @throws Exception + */ + public static function checkDB($table, $field) + { + $done = self::checkTables($table, $field); + + if (!$done) + { + /** @var BiblestudyModelAdmin $admin */ + $admin = JModelLegacy::getInstance('Admin', 'BiblestudyModel'); + $admin->fix(); + + return true; + } + else + { + return true; + } + } + + /** + * Get Objects for tables + * + * @return array + * + * @since 7.0 + */ + public static function getObjects() + { + $db = JFactory::getDbo(); + $tables = $db->getTableList(); + $prefix = $db->getPrefix(); + $prelength = strlen($prefix); + $bsms = 'bsms_'; + $objects = array(); + + foreach ($tables as $table) + { + if (strstr($table, $prefix) && strstr($table, $bsms)) + { + $table = substr_replace($table, '#__', 0, $prelength); + $objects[] = array('name' => $table); + } + } + + return $objects; + } + + /** + * Get State of install for Main Admin Controller + * + * @return bool false if table exists | true if dos not + * + * @since 7.1.0 + */ + public static function getInstallState() + { + if (!is_bool(self::$install_state)) + { + $db = JFactory::getDbo(); + + // Check if JBSM can be found from the database + $table = $db->getPrefix() . 'bsms_admin'; + $db->setQuery("SHOW TABLES LIKE {$db->quote($table)}"); + + if ($db->loadResult() != $table) + { + self::$install_state = true; + } + else + { + self::$install_state = false; + } + } + + return self::$install_state; + } + + /** + * Fix up css. + * + * @param string $filename Name of css file + * @param boolean $parent if coming form the update script + * @param string $newcss New css style + * @param int $id this is the id of record to be fixed + * + * @return boolean + * + * @throws Exception + * @since 7.1.0 + */ + public static function fixupcss($filename, $parent, $newcss, $id = null) + { + $app = JFactory::getApplication(); + /* Start by getting existing Style */ + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('*')->from('#__bsms_styles'); + + if ($filename) + { + $query->where($db->qn('filename') . ' = ' . $db->q($filename)); + } + else + { + $query->where($db->qn('id') . ' = ' . (int) $id); + } + + $db->setQuery($query); + $result = $db->loadObject(); + $oldcss = $result->stylecode; + + /* Now the arrays of changes that need to be done. */ + $oldlines = array( + ".bsm_teachertable_list", "#bslisttable", "#bslisttable", "#landing_table", "#landing_separator", + "#landing_item", "#landing_title", "#landinglist" + ); + $newlines = array( + "#bsm_teachertable_list", ".bslisttable", ".bslisttable", ".landing_table", ".landing_separator", + ".landing_item", ".landing_title", ".landinglist" + ); + $oldcss = str_replace($oldlines, $newlines, $oldcss); + + /* now see if we are adding new css to the db css */ + if ($parent || $newcss) + { + $newcss = $db->escape($newcss) . ' ' . $oldcss; + } + else + { + $newcss = $oldcss; + } + + /* no apply the new css back to the table */ + $query = $db->getQuery(true); + $query->update('#__bsms_styles')->set('stylecode="' . $newcss . '"'); + + if ($filename) + { + $query->where($db->qn('filename') . ' = ' . $db->q($filename)); + } + else + { + $query->where($db->qn('id') . ' = ' . (int) $id); + } + + $db->setQuery($query); + + if (!$db->execute()) + { + $app->enqueueMessage(JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', ''), 'error'); + + return false; + } + + /* If we are not coming from the upgrade scripts we update the table and let them know what was updated. */ + if (!$parent) + { + self::reloadtable($result, 'Style'); + $app->enqueueMessage(JText::_('JBS_STYLE_CSS_FIX_COMPLETE') . ': ' . $result->filename, 'notice'); + } + + return true; + } + + /** + * Set table store() + * + * @param object $result Object list that we will get the id from. + * @param string $table Table to be reloaded. + * + * @return boolean + * + * @throws Exception + * + * @since 7.0 + */ + public static function reloadtable($result, $table = 'Style') + { + $db = JFactory::getDbo(); + + // Store new Recorder so it can be seen. + JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); + $table = JTable::getInstance($table, 'Table', array('dbo' => $db)); + + try + { + $table->load($result->id); + + // This is a Joomla bug for currentAssetId being missing in table.php. When fixed in Joomla should be removed + @$table->store(); + } + catch (Exception $e) + { + throw new Exception('Caught exception: ' . $e->getMessage(), 500); + } + + return true; + } + + /** + * Reset Database back to defaults + * + * @param bool $install If coming from the installer true|false not form installer + * + * @return boolean|int + * + * @throws Exception + * @since 7.0 + */ + public static function resetdb($install = false) + { + $app = JFactory::getApplication(); + $db = JFactory::getDbo(); + jimport('joomla.filesystem.folder'); + jimport('joomla.filesystem.file'); + $path = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'components/com_biblestudy/install/sql'; + + $files = str_replace('.sql', '', JFolder::files($path, '\.sql$')); + $files = array_reverse($files, true); + + if ($install == true) + { + foreach ($files as $a => $file) + { + if (strpos($file, 'uninstall') !== false) + { + unset($files[$a]); + } + } + } + + foreach ($files as $value) + { + // Get file contents + $buffer = file_get_contents($path . '/' . $value . '.sql'); + + // Graceful exit and rollback if read not successful + if ($buffer === false) + { + $app->enqueueMessage(JText::_('JBS_INS_ERROR_SQL_READBUFFER'), 'error'); + + return false; + } + + // Create an array of queries from the sql file + $queries = $db->splitSql($buffer); + + if (count($queries) == 0) + { + // No queries to process + return 0; + } + + // Process each query in the $queries array (split out of sql file). + foreach ($queries as $query) + { + $query = trim($query); + + if ($query != '' && $query{0} != '#') + { + $db->setQuery($query); + + if (!$db->execute()) + { + $app->enqueueMessage(JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', ' in ' . $value), 'error'); + + return false; + } + } + } + } + + // Remove old assets. + $query = $db->getQuery(true); + $query->delete('#__assets') + ->where('name LIKE ' . $db->q('com_biblestudy.%')); + $db->setQuery($query); + $db->execute(); + + if (!$install) + { + $app->enqueueMessage(JText::_('JBS_INS_RESETDB'), 'message'); + } + + return true; + } + + /** + * Clean up Study Topics Duplicates + * + * @return void + * + * @throws Exception + * @since 8.0.0 + * + */ + public static function CleanStudyTopics() + { + $app = JFactory::getApplication(); + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_studies'); + $db->setQuery($query); + $results = $db->loadObjectList(); + + foreach ($results AS $result) + { + $query = $db->getQuery(true); + $query->select('id, topic_id')->from('#__bsms_studytopics')->where('study_id = ' . $result->id); + $db->setQuery($query); + $resulta = $db->loadObjectList(); + $c = count($resulta); + + if ($resulta && $c > 1) + { + $t = 1; + + foreach ($resulta AS $study_topics) + { + $query = $db->getQuery(true); + $query->select('id') + ->from('#__bsms_studytopics') + ->where('study_id = ' . $result->id) + ->where('topic_id = ' . $study_topics->topic_id) + ->order('id desc'); + $db->setQuery($query); + $results = $db->loadObjectList(); + $records = count($results); + + if ($records > 1) + { + foreach ($results AS $id) + { + if ($t < $records) + { + $query = $db->getQuery(true); + $query->delete('#__bsms_studytopics') + ->where('id = ' . $id->id); + $db->setQuery($query); + + if (!$db->execute()) + { + $app->enqueueMessage('Error with Deleting duplicat topics record ' . $id->id, 'error'); + } + else + { + $app->enqueueMessage('Removed Duplicat topic Record ' . $id->id, 'notice'); + } + + $t++; + } + } + } + } + } + } + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/defaulttemplatecode.php b/build/com_proclaim-9.2.1/admin/helpers/defaulttemplatecode.php new file mode 100644 index 0000000000..4e118e9131 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/defaulttemplatecode.php @@ -0,0 +1,15 @@ +' . $params->get('tip_title') . ' :: '; + + $tip1 = $JBSMElements->getElement($params->get('tip_item1'), $row, $params, $template, $type = 0); + $tip2 = $JBSMElements->getElement($params->get('tip_item2'), $row, $params, $template, $type = 0); + $tip3 = $JBSMElements->getElement($params->get('tip_item3'), $row, $params, $template, $type = 0); + $tip4 = $JBSMElements->getElement($params->get('tip_item4'), $row, $params, $template, $type = 0); + $tip5 = $JBSMElements->getElement($params->get('tip_item5'), $row, $params, $template, $type = 0); + + $linktext .= '' . $params->get('tip_item1_title') . ': ' . $tip1 . '
      '; + $linktext .= '' . $params->get('tip_item2_title') . ': ' . $tip2 . '
      '; + $linktext .= '' . $params->get('tip_item3_title') . ': ' . $tip3 . '
      '; + $linktext .= '' . $params->get('tip_item4_title') . ': ' . $tip4 . '
      '; + $linktext .= '' . $params->get('tip_item5_title') . ': ' . $tip5; + $linktext .= '">'; + + return $linktext; + } + + /** + * Get ShowHide. + * + * @return string + * + * @deprecated 7.1.8 + * + * @since 8.2.0 + */ + public static function getShowhide() + { + $showhide = ' + function HideContent(d) { + document.getElementById(d).style.display = "none"; + } + function ShowContent(d) { + document.getElementById(d).style.display = "block"; + } + function ReverseDisplay(d) { + if(document.getElementById(d).style.display == "none") { document.getElementById(d).style.display = "block"; } + else { document.getElementById(d).style.display = "none"; } + } + '; + + return $showhide; + } + + /** + * Method to get file size + * + * @param string $url URL + * + * @return int|boolean Return size or false read. + * + * @since 9.0.0 + */ + public static function getRemoteFileSize($url) + { + if ($url == '') + { + return 0; + } + + if (substr_count($url, 'youtu.be') > 0) + { + return 0; + } + + if (substr_count($url, 'youtube.com') > 0) + { + return 0; + } + + // Removes a bad url problem in some DB's + if (substr_count($url, '/http')) + { + $url = ltrim($url, '/'); + } + + if (!substr_count($url, 'http://') && !substr_count($url, 'https://')) + { + if (substr_count($url, '//')) + { + $url = 'http:' . $url; + } + elseif (!substr_count($url, '//')) + { + $url = 'http://' . $url; + } + } + + try + { + $headers = @get_headers($url, true); + } + catch (Exception $e) + { + return 0; + } + + if (is_array($headers)) + { + $head = array_change_key_case($headers); + } + else + { + return 0; + } + + if (isset($head['content-length'])) + { + return $head['content-length']; + } + else + { + return 0; + } + } + + /** + * Set File Size for MediaFile + * + * @param int $id ID of MediaFile + * @param int $size Size of file in bits + * + * @return void + * + * @since 9.0.14 + */ + public static function SetFileSize($id, $size) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('id, params') + ->from('#__bsms_mediafiles') + ->where('id = ' . (int) $id); + + $db->setQuery($query); + $media = $db->loadObject(); + + $reg = new Joomla\Registry\Registry; + $reg->loadString($media->params); + $reg->set('size', $size); + + $update = new stdClass; + $update->id = $id; + $update->params = $reg->toString(); + + $db->updateObject('#__bsms_mediafiles', $update, 'id'); + } + + /** + * Media Build URL Fix up for '/' and protocol. + * + * @param string $spath Server Path + * @param string $path File + * @param Registry $params Parameters. + * @param bool $setProtocol True add protocol els no + * @param bool $local Local server + * @param bool $podcast True if from a precast + * + * @return string Completed path. + * + * @since 9.0.3 + */ + public static function MediaBuildUrl($spath, $path, $params, $setProtocol = false, $local = false, $podcast = false) + { + $spath = rtrim($spath, '/'); + $path = ltrim($path, '/'); + $host = $_SERVER['HTTP_HOST']; + $protocol = JUri::root(); + + if (empty($path)) + { + return false; + } + + // To see if the server is local + if (strpos($spath, $host) !== false) + { + $local = true; + } + + if (substr_count($path, 'http://') && $podcast) + { + return str_replace('http://', "", $path); + } + elseif (substr_count($path, 'https://') && $podcast) + { + return str_replace('https://', "", $path); + } + elseif (!empty($spath) && $podcast) + { + return str_replace('//', "", $spath) . '/' . $path; + } + + if (!substr_count($path, '://') && !substr_count($path, '//') && $setProtocol) + { + if (empty($spath)) + { + return $protocol . $path; + } + elseif ((substr_count($spath, '://') || substr_count($spath, '//')) && !empty($spath)) + { + if (substr_count($spath, '//')) + { + $spath = substr($spath, 2); + $protocol = $params->get('protocol', 'http://'); + } + + return $protocol . $spath . '/' . $path; + } + + // Set Protocol based on server status + if (!$local) + { + $protocol = $params->get('protocol', '//'); + $path = $protocol . $spath . '/' . $path; + } + else + { + $path = $protocol . $path; + } + } + elseif ((!substr_count($spath, '://') || !substr_count($spath, '//')) && !empty($spath)) + { + $path = $spath . '/' . $path; + } + + return $path; + } + + /** + * Clear Cache of JBSM + * + * @param string $state Where to clean the cache from. Site or Admin. + * + * @since 9.0.4 + * @return void + */ + public static function clearcache($state = 'site') + { + $conf = JFactory::getConfig(); + $options = array(); + + if ($state == 'admin') + { + $options = array( + 'defaultgroup' => 'com_biblestudy', + 'storage' => $conf->get('cache_handler', ''), + 'caching' => true, + 'cachebase' => $conf->get('cache_path', JPATH_ADMINISTRATOR . '/cache') + ); + } + elseif ($state == 'site') + { + $options = array( + 'defaultgroup' => 'com_biblestudy', + 'storage' => $conf->get('cache_handler', ''), + 'caching' => true, + 'cachebase' => $conf->get('cache_path', JPATH_SITE . '/cache') + ); + } + + $cache = JCache::getInstance('', $options); + $cache->clean(); + } + + /** + * Remove Http + * + * @param string $url Url + * + * @return mixed + * + * @since 9.0.18 + */ + public static function remove_http($url) + { + $disallowed = array('http://', 'https://'); + + foreach ($disallowed as $d) + { + if (strpos($url, $d) === 0) + { + return str_replace($d, '', $url); + } + } + + return $url; + } + + /** + * Get Simple View Sate + * + * @param Registry $params AdminTable + parametors + * @param string $simple Not Used right now + * + * @return int + * + * @since 9.1.6 + * @throws Exception + */ + public static function getSimpleView($params = null, $simple = null) + { + if (is_null($params)) + { + $params = JBSMParams::getAdmin(); + } + + $simple = $params->params->get('simple_mode'); + + if ($simple) + { + return 1; + } + + return 0; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/html/biblestudy.php b/build/com_proclaim-9.2.1/admin/helpers/html/biblestudy.php new file mode 100644 index 0000000000..3859b05412 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/html/biblestudy.php @@ -0,0 +1,480 @@ +get('debug'); + } + + JHtml::_('bootstrap.framework', $debug); + $app = JFactory::getApplication(); + $menu = $app->getMenu(); + + if ($menu->getActive() !== null) + { + JHtml::_('bootstrap.loadCss'); + } + + JHtml::script('media/com_biblestudy/js/biblestudy.js'); + JHtml::script('media/com_biblestudy/js/modernizr.js'); + + self::$loaded[__METHOD__] = true; + + return; + } + + /** + * Loads CSS files needed by Bootstrap + * + * @param Joomla\Registry\Registry $params Params for css + * @param string $url Url of a css file to load + * @param string $extra Url of a css file to load + * + * @return void + * + * @since 3.0 + */ + public static function loadCss($params, $url = null, $extra = null) + { + JHtml::stylesheet('media/com_biblestudy/css/general.css'); + + // Import Stylesheets + if ($params) + { + $css = $params->get('css'); + + if ($css <= "-1") + { + JHtml::stylesheet('media/com_biblestudy/css/biblestudy.css'); + } + else + { + JHtml::stylesheet('media/com_biblestudy/css/site/' . $css); + } + } + + if ($url) + { + JHtml::stylesheet($url); + } + + if ($extra === 'font-awesome') + { + JHtml::script('https://use.fontawesome.com/releases/v5.3.1/js/all.js', + [], + ['integrity' => 'sha384-kW+oWsYx3YpxvjtZjFXqazFpA7UP/MbiY4jvs+RWZo2+N94PFZ36T6TFkc9O3qoB', 'crossorigin' => 'anonymous', 'defer' => 'defer'] + ); + JHtml::script('https://use.fontawesome.com/releases/v5.4.2/js/v4-shims.js', + [], + ['integrity' => 'sha384-kW+oWsYx3YpxvjtZjFXqazFpA7UP/MbiY4jvs+RWZo2+N94PFZ36T6TFkc9O3qoB', 'crossorigin' => 'anonymous', 'defer' => 'defer'] + ); + } + } + + /** + * Display a batch widget for the player selector. + * + * @return string The necessary HTML for the widget. + * + * @since 2.5 + */ + public static function players() + { + // Create the batch selector to change the player on a selection list. + $lines = array( + '', '' + ); + + return implode("\n", $lines); + } + + /** + * Method to get the field options. + * + * @return object The field option objects. + * + * @since 1.6 + */ + public static function playerlist() + { + $options = array(); + $options[] = array('value' => '', 'text' => JText::_('JBS_CMN_USE_GLOBAL')); + $options[] = array('value' => 0, 'text' => JText::_('JBS_CMN_DIRECT_LINK')); + $options[] = array('value' => 1, 'text' => JText::_('JBS_CMN_USE_INTERNAL_PLAYER')); + $options[] = array('value' => 3, 'text' => JText::_('JBS_CMN_USE_AV')); + $options[] = array('value' => 7, 'text' => JText::_('JBS_CMN_USE_MP3_PLAYER')); + $options[] = array('value' => 8, 'text' => JText::_('JBS_CMN_USE_EMBED_CODE')); + $object = new stdClass; + + foreach ($options as $key => $value) + { + $object->$key = $value; + } + + return $object; + } + + /** + * Display a batch widget for the player selector. + * + * @return string The necessary HTML for the widget. + * + * @since 2.5 + */ + public static function link_type() + { + // Create the batch selector to change the player on a selection list. + $lines = array( + '', + '' + ); + + return implode("\n", $lines); + } + + /** + * Method to get the field options. + * + * @return Object The field option objects. + * + * @since 1.6 + */ + public static function Link_typelist() + { + $options = array(); + + $options[] = array('value' => 0, 'text' => JText::_('JBS_MED_NO_DOWNLOAD_ICON')); + $options[] = array('value' => 1, 'text' => JText::_('JBS_MED_SHOW_DOWNLOAD_ICON')); + $options[] = array('value' => 2, 'text' => JText::_('JBS_MED_SHOW_ONLY_DOWNLOAD_ICON')); + + $object = new stdClass; + + foreach ($options as $key => $value) + { + $object->$key = $value; + } + + return $object; + } + + /** + * Display a batch widget for the popup selector. + * + * @return string The necessary HTML for the widget. + * + * @since 2.5 + */ + public static function popup() + { + // Create the batch selector to change the popup on a selection list. + $lines = array( + '', '' + ); + + return implode("\n", $lines); + } + + /** + * Method to get the field options. + * + * @return object The field option objects. + * + * @since 1.6 + */ + public static function popuplist() + { + $options = array(); + $options[] = array('value' => 3, 'text' => JText::_('JBS_CMN_USE_GLOBAL')); + $options[] = array('value' => 2, 'text' => JText::_('JBS_CMN_INLINE')); + $options[] = array('value' => 1, 'text' => JText::_('JBS_CMN_POPUP')); + + $object = new stdClass; + + foreach ($options as $key => $value) + { + $object->$key = $value; + } + + return $object; + } + + /** + * Display a batch widget for the player selector. + * + * @return string The necessary HTML for the widget. + * + * @since 2.5 + */ + public static function mediatype() + { + // Create the batch selector to change the mediatype on a selection list. + $lines = array( + '', + '' + ); + + return implode("\n", $lines); + } + + /** + * Method to get the field options. + * + * @return array The field option objects. + * + * @since 1.6 + * @throws Exception + */ + public static function Mediatypelist() + { + $options = null; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('id As value, media_text As text'); + $query->from('#__bsms_media AS a'); + $query->order('a.media_text ASC'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning'); + } + + return $options; + } + + /** + * Display a batch widget for the teacher selector. + * + * @return string The necessary HTML for the widget. + * + * @since 2.5 + * @throws Exception + */ + public static function Teacher() + { + // Create the batch selector to change the teacher on a selection list. + $lines = array( + '', + '' + ); + + return implode("\n", $lines); + } + + /** + * Method to get the field options. + * + * @return array The field option objects. + * + * @since 1.6 + * @throws Exception + */ + public static function Teacherlist() + { + $options = null; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('id As value, teachername As text'); + $query->from('#__bsms_teachers AS a'); + $query->order('a.teachername ASC'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning'); + } + + return $options; + } + + /** + * Display a batch widget for the teacher selector. + * + * @return string The necessary HTML for the widget. + * + * @since 2.5 + * @throws Exception + */ + public static function Messagetype() + { + // Create the batch selector to change the message type on a selection list. + $lines = array( + '', + '' + ); + + return implode("\n", $lines); + } + + /** + * Method to get the field options. + * + * @return array The field option objects. + * + * @since 1.6 + * @throws Exception + */ + public static function Messagetypelist() + { + $options = null; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('id As value, message_type As text'); + $query->from('#__bsms_message_type AS a'); + $query->order('a.message_type ASC'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning'); + } + + return $options; + } + + /** + * Display a batch widget for the teacher selector. + * + * @return string The necessary HTML for the widget. + * + * @since 2.5 + * @throws Exception + */ + public static function Series() + { + // Create the batch selector to change the series on a selection list. + $lines = array( + '', + '' + ); + + return implode("\n", $lines); + } + + /** + * Method to get the field options. + * + * @return array The field option objects. + * + * @since 1.6 + * @throws Exception + */ + public static function Serieslist() + { + $options = null; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('id As value, series_text As text'); + $query->from('#__bsms_series AS a'); + $query->order('a.series_text ASC'); + + // Get the options. + $db->setQuery($query); + + try + { + $options = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning'); + } + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/html/bsmedia.php b/build/com_proclaim-9.2.1/admin/helpers/html/bsmedia.php new file mode 100644 index 0000000000..6767af9abc --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/html/bsmedia.php @@ -0,0 +1,113 @@ +get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/new.png', JText::_('JNEW'), null, true); + } + else + { + $text = '' . JText::_('JNEW'); + } + } + else + { + $text = JText::_('JNEW') . ' '; + } + + // Add the button classes to the attribs array + if (isset($attribs['class'])) + { + $attribs['class'] = $attribs['class'] . ' btn btn-primary'; + } + else + { + $attribs['class'] = 'btn btn-primary'; + } + + $button = JHtml::_('link', JRoute::_($url), $text, $attribs); + + $output = '' . $button . ''; + + return $output; + } + + /** + * Method to generate a link to the email item page for the given article + * + * @param object $article The article information + * @param Registry $params The item parameters + * @param array $attribs Optional attributes for the link + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML markup for the email item link + * + * @since 7.0 + * @throws \Exception + */ + public static function email($article, $params, $attribs = array(), $legacy = false) + { + require_once JPATH_SITE . '/components/com_mailto/helpers/mailto.php'; + + $uri = JUri::getInstance(); + $base = $uri->toString(array('scheme', 'host', 'port')); + $template = JFactory::getApplication()->getTemplate(); + $link = $base . JRoute::_(JBSMHelperRoute::getArticleRoute($article->id, $article->language), false); + $url = 'index.php?option=com_mailto&tmpl=component&template=' . $template . '&link=' . MailtoHelper::addLink($link); + + $status = 'width=400,height=350,menubar=yes,resizable=yes'; + + if ($params->get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/emailButton.png', JText::_('JGLOBAL_EMAIL'), null, true); + } + else + { + $text = '' . JText::_('JGLOBAL_EMAIL'); + } + } + else + { + $text = JText::_('JGLOBAL_EMAIL'); + } + + $attribs['title'] = JText::_('JGLOBAL_EMAIL'); + $attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;"; + $attribs['rel'] = 'nofollow'; + + $output = JHtml::_('link', JRoute::_($url), $text, $attribs); + + return $output; + } + + /** + * Display an edit icon for the article. + * + * This icon will not display in a popup window, nor if the article is trashed. + * Edit access checks must be performed in the calling code. + * + * @param object $article The article information + * @param Registry $params The item parameters + * @param array $attribs Optional attributes for the link + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML for the article edit icon. + * + * @since 1.6 + */ + public static function edit($article, $params, $attribs = array(), $legacy = false) + { + $user = JFactory::getUser(); + $uri = JUri::getInstance(); + + // Ignore if in a popup window. + if ($params && $params->get('popup')) + { + return null; + } + + // Ignore if the state is negative (trashed). + if ($article->published < 0) + { + return null; + } + + JHtml::_('bootstrap.tooltip'); + + // Show checked_out icon if the article is checked out by a different user + if (property_exists($article, 'checked_out') + && property_exists($article, 'checked_out_time') + && $article->checked_out > 0 + && $article->checked_out != $user->get('id')) + { + $checkoutUser = JFactory::getUser($article->checked_out); + $button = JHtml::_('image', 'system/checked_out.png', null, null, true); + $date = JHtml::_('date', $article->checked_out_time); + $tooltip = JText::_('JLIB_HTML_CHECKED_OUT') . ' :: ' . JText::sprintf('COM_CONTENT_CHECKED_OUT_BY', $checkoutUser->name) + . '
      ' . $date; + + return '' . $button . ''; + } + + $url = 'index.php?option=com_biblestudy&task=messageform.edit&a_id=' . $article->id . '&return=' . base64_encode($uri); + + if ($article->published == 0) + { + $overlib = JText::_('JUNPUBLISHED'); + } + else + { + $overlib = JText::_('JPUBLISHED'); + } + + if ($legacy) + { + $icon = $article->state ? 'edit.png' : 'edit_unpublished.png'; + + if (strtotime($article->publish_up) > strtotime(JFactory::getDate()) + || ((strtotime($article->publish_down) < strtotime(JFactory::getDate())) && $article->publish_down != JFactory::getDbo()->getNullDate())) + { + $icon = 'edit_unpublished.png'; + } + + $text = JHtml::_('image', 'system/' . $icon, JText::_('JGLOBAL_EDIT'), null, true); + } + else + { + $icon = $article->published ? 'edit' : 'eye-close'; + + if (strtotime($article->publish_up) > strtotime(JFactory::getDate()) + || ((strtotime($article->publish_down) < strtotime(JFactory::getDate())) && $article->publish_down != JFactory::getDbo()->getNullDate())) + { + $icon = 'eye-close'; + } + + $text = '' + . JText::_('JGLOBAL_EDIT'); + } + + $output = JHtml::_('link', JRoute::_($url), $text, $attribs); + + return $output; + } + + /** + * Method to generate a popup link to print an article + * + * @param object $article The article information + * @param Registry $params The item parameters + * @param array $attribs Optional attributes for the link + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML markup for the popup link + * + * @since 7.0 + * @throws \Exception + */ + public static function print_popup($article, $params, $attribs = array(), $legacy = false) + { + $app = JFactory::getApplication(); + $input = $app->input; + $request = $input->request; + + $url = JBSMHelperRoute::getArticleRoute($article->id, $article->language); + $url .= '&tmpl=component&print=1&layout=default&page=' . @$request->limitstart; + + $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no'; + + // Checks template image directory for image, if non found default are loaded + if ($params->get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), null, true); + } + else + { + $text = '' . JText::_('JGLOBAL_PRINT'); + } + } + else + { + $text = JText::_('JGLOBAL_PRINT'); + } + + $attribs['title'] = JText::_('JGLOBAL_PRINT'); + $attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;"; + $attribs['rel'] = 'nofollow'; + + return JHtml::_('link', JRoute::_($url), $text, $attribs); + } + + /** + * Method to generate a link to print an article + * + * @param object $article Not used, @deprecated for 4.0 + * @param Registry $params The item parameters + * @param array $attribs Not used, @deprecated for 4.0 + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML markup for the popup link + * + * @since 7.0 + */ + public static function print_screen($article, $params, $attribs = array(), $legacy = false) + { + // Checks template image directory for image, if none found default are loaded + if ($params->get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), null, true); + } + else + { + $text = '' . JText::_('JGLOBAL_PRINT'); + } + } + else + { + $text = JText::_('JGLOBAL_PRINT'); + } + + return '' . $text . ''; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/html/jwplayer.php b/build/com_proclaim-9.2.1/admin/helpers/html/jwplayer.php new file mode 100644 index 0000000000..eb5dd53278 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/html/jwplayer.php @@ -0,0 +1,277 @@ +params; + $key = $params->get('jwplayer_key', '8eJ+ik6aOUabfOisJzomcM2Z3h1VZ9+6cufBXQ=='); + $cdn = $params->get('jwplayer_cdn', 'https://content.jwplatform.com/libraries/HPyI6990.js'); + + if ($cdn) + { + $doc->addScriptDeclaration('jwplayer.key="' . $key . '";'); + JHtml::script($cdn); + } + else + { + JHtml::script('media/com_biblestudy/player/jwplayer.js'); + $doc->addScriptDeclaration('jwplayer.key="' . $key . '";'); + } + + self::$loaded[__METHOD__] = true; + + return; + } + + /** + * Render html for media presentation for JW Player + * + * @param object $media Media info + * @param Registry $params Params from media have to be in object for do to protection. + * @param bool $popup If from a popup + * @param object $player To make player for audio like (MP3, M4A, etc..) + * @param int $t Template id. + * + * @return string + * + * @since 9.0.0 + */ + public static function render($media, $params, $popup = false, $player = null, $t = null) + { + $popupmarg = 0; + + // Used to set for MP3 and audio player look + if (isset($player->mp3) && $player->mp3 == true) + { + $media->playerheight = 30; + } + else + { + $media->playerheight = $params->get('player_hight'); + } + + $media->path1 = JBSMHelper::MediaBuildUrl($media->sparams->get('path'), $params->get('filename'), $params, true); + + // Fall back check to see if JWplayer can play the media. if not will try and return a link to the file. + $acceptedFormats = array('aac', 'm4a', 'f4a', 'mp3', 'ogg', 'oga', 'mp4', 'm4v', 'f4v', 'mov', 'flv', 'webm', 'm3u8', 'mpd', 'DVR'); + + if (!in_array(pathinfo($media->path1, PATHINFO_EXTENSION), $acceptedFormats) + && !strpos($media->path1, 'youtube.com') + && !strpos($media->path1, 'youtu.be') + && !strpos($media->path1, 'rtmp://')) + { + return ''; + } + + // + + if ($params->get('playerheight') < 55 && $params->get('playerheight') && !isset($player->mp3)) + { + $media->playerheight = 55; + } + elseif ($params->get('playerheight') && !isset($player->mp3)) + { + $media->playerheight = $params->get('playerheight'); + } + + if ($params->get('playerwidth') && !isset($player->mp3)) + { + $media->playerwidth = $params->get('playerwidth'); + } + elseif (isset($player->mp3) && isset($player->playerwidth)) + { + $media->playerwidth = $player->playerwidth; + } + else + { + $media->playerwidth = $params->get('player_width'); + } + + if ($params->get('playervars')) + { + $media->extraparams = $params->get('playervars'); + } + + if ($params->get('altflashvars')) + { + $media->flashvars = $params->get('altflashvars'); + } + + $media->backcolor = $params->get('backcolor', '0x287585'); + $media->frontcolor = $params->get('frontcolor', '0xFFFFFF'); + $media->lightcolor = $params->get('lightcolor', '0x000000'); + $media->screencolor = $params->get('screencolor', '0xFFFFFF'); + + if ($params->get('autostart', 1) == 1) + { + $media->autostart = 'true'; + } + else + { + $media->autostart = 'false'; + } + + if ($params->get('playeridlehide')) + { + $media->playeridlehide = 'true'; + } + else + { + $media->playeridlehide = 'false'; + } + + if ($params->get('autostart') == 1) + { + $media->autostart = 'true'; + } + elseif ($params->get('autostart') == 2) + { + $media->autostart = 'false'; + } + + // Calculate Height base off width for a 16:9 ratio. + $render = ""; + $rat1 = 16; + $rat2 = 9; + + $ratio = $media->playerwidth / $rat1; + $height = $ratio * $rat2; + + if ($popup) + { + if ($params->get('playerresponsive') != 0) + { + $media->playerwidth = '100%'; + $render .= "
      "; + } + else + { + $render .= "
      playerwidth . "px; height:" . $height . "px;\">"; + } + + $popupmarg = $params->get('popupmargin', '50'); + } + + $render .= "
      "; + + if ($params->get('media_popout_yes', true)) + { + $popouttext = $params->get('media_popout_text', JText::_('JBS_CMN_POPOUT')); + } + else + { + $popouttext = ''; + } + + if ($popup || $params->get('pcplaylist')) + { + $render .= "
      "; + } + elseif ($popouttext) + { + // Add space for popup window + $player->playerwidth = $player->playerwidth + 20; + $player->playerheight = $player->playerheight + $popupmarg; + $render .= "player + . "&view=popup&t=" . $t . "&mediaid=" . $media->id . "&tmpl=component', 'newwindow', 'width=" + . $player->playerwidth . ",height=" . + $player->playerheight . "'); return false\">" . $popouttext . ""; + } + + $render .= ""; + + $render .= ""; + + return $render; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/image.php b/build/com_proclaim-9.2.1/admin/helpers/image.php new file mode 100644 index 0000000000..0c23644e11 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/image.php @@ -0,0 +1,82 @@ +path = $path; + + if (!empty($path)) + { + $tmp->size = filesize($tmp->path); + $ext = strtolower(JFile::getExt($path)); + + switch ($ext) + { + // Image + case 'jpg': + case 'png': + case 'gif': + case 'xcf': + case 'odg': + case 'bmp': + case 'jpeg': + $info = getimagesize($tmp->path); + $tmp->width = $info[0]; + $tmp->height = $info[1]; + $tmp->type = $info[2]; + $tmp->mime = $info['mime']; + + if (!$tmp->width) + { + $tmp->width = 0; + } + + if (!$tmp->height) + { + $tmp->height = 0; + } + } + } + + return $tmp; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/imagelib.php b/build/com_proclaim-9.2.1/admin/helpers/imagelib.php new file mode 100644 index 0000000000..201b5f9450 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/imagelib.php @@ -0,0 +1,212 @@ +getMessage(); + } + + return null; + } +} + +/** + * Abstraction layer for the GD PHP library + * + * @package Proclaim.Admin + * @since 7.0.0 + */ +class GDLib extends JBSMImageLib +{ + /** + * Extension Name + * + * @var string + * + * @since 1.5 + */ + public static $extension = 'com_biblestudy'; + + /** + * Construct System. + * + * @since 1.5 + */ + public function __construct() + { + // Check that the library exists + if (!function_exists("gd_info")) + { + die("GD is not found"); + } + } + + /** + * Resize Image + * + * @param string $targetFile Target File Path + * @param string $originalFile File + * @param int $newWidth Image New Width + * @param int $canv_width Image Canvas Width + * @param int $canv_height Image Canvas Height + * + * @return void + * + * @throws Exception + * @since 9.0.18 + */ + public static function resize_image( + $targetFile, + $originalFile, + $newWidth = 200, + $canv_width = 200, + $canv_height = 200) + { + $info = getimagesize($originalFile); + $mime = $info['mime']; + + switch ($mime) + { + case 'image/jpeg': + $image_create_func = 'imagecreatefromjpeg'; + $image_save_func = 'imagejpeg'; + $new_image_ext = 'jpg'; + break; + + case 'image/png': + $image_create_func = 'imagecreatefrompng'; + $image_save_func = 'imagepng'; + $new_image_ext = 'png'; + break; + + case 'image/gif': + $image_create_func = 'imagecreatefromgif'; + $image_save_func = 'imagegif'; + $new_image_ext = 'gif'; + break; + + default: + throw new Exception('Unknown image type.'); + } + + $img = $image_create_func($originalFile); + list($width, $height) = getimagesize($originalFile); + + $newHeight = ($height / $width) * $newWidth; + $tmp = imagecreatetruecolor($canv_width, $canv_height); + imagecopyresampled($tmp, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); + + if (file_exists($targetFile)) + { + unlink($targetFile); + } + + $image_save_func($tmp, "$targetFile"); + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/params.php b/build/com_proclaim-9.2.1/admin/helpers/params.php new file mode 100644 index 0000000000..3a5aacec0b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/params.php @@ -0,0 +1,194 @@ +params Registry + */ +class JBSMParams +{ + /** + * Extension Name + * + * @var string + * + * @since 1.5 + */ + public static $extension = 'com_biblestudy'; + + /** @var Object Admin Table + * + * @since 1.5 */ + public static $admin; + + /** @var Object Template Table + * + * @since 1.5 */ + public static $template_table; + + /** @var int Default template id and used to check if changed form from last query + * + * @since 1.5 */ + public static $t_id = 1; + + /** + * Gets the settings from Admin + * + * @return mixed Return Admin table + * + * @since 7.0 + * @throws Exception + */ + public static function getAdmin() + { + if (!self::$admin) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_admin') + ->where($db->qn('id') . ' = ' . (int) 1); + $db->setQuery($query); + $admin = $db->loadObject(); + + if (isset($admin->params)) + { + $registry = new Registry; + + // Used to Catch Jason Error's + try + { + $registry->loadString($admin->params); + } + catch (Exception $e) + { + $msg = $e->getMessage(); + JFactory::getApplication()->enqueueMessage('Can\'t load Admin Params - ' . $msg, 'error'); + } + $admin->params = $registry; + + // Add the current user id + $user = JFactory::getUser(); + $admin->user_id = $user->id; + } + + self::$admin = $admin; + } + + return self::$admin; + } + + /** + * Get Template Params + * + * @param int $pk Id of Template to look for + * + * @return TableTemplate Return active template info + * + * @since 7.0 + * @throws Exception + */ + public static function getTemplateparams($pk = null) + { + $db = JFactory::getDbo(); + + if (!$pk) + { + $pk = JFactory::getApplication()->input->getInt('t', '1'); + } + + if (self::$t_id != $pk || !self::$template_table) + { + self::$t_id = $pk; + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_templates') + ->where('published = ' . (int) 1) + ->where('id = ' . (int) self::$t_id); + $db->setQuery($query); + $template = $db->loadObject(); + + if (!$template) + { + self::$t_id = 1; + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_templates') + ->where('published = ' . (int) 1) + ->where('id = ' . (int) self::$t_id); + $db->setQuery($query); + $template = $db->loadObject(); + } + + if ($template) + { + $registry = new Registry; + $registry->loadString($template->params); + $template->params = $registry; + } + else + { + $template = new stdClass; + $template->params = new Registry; + } + + self::$template_table = $template; + } + + return self::$template_table; + } + + /** + * Update Component Params + * + * @param array $param_array Array ('name' => 'params') + * + * @return void + * + * @since 9.1.5 + */ + public static function setCompParams($param_array) + { + if (count($param_array) > 0) + { + // Read the existing component value(s) + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('params') + ->from('#__extensions') + ->where('name = ' . $db->q('com_biblestudy')); + $db->setQuery($query); + $params = json_decode($db->loadResult(), true); + + // Add the new variable(s) to the existing one(s) + foreach ( $param_array as $name => $value ) + { + $params[(string) $name] = (string) $value; + } + + // Store the combined new and existing values back as a JSON string + $paramsString = json_encode($params); + $query->clear(); + $query->update('#__extensions') + ->set('params = ' . $db->q($paramsString)) + ->where('name = ' . $db->q('com_biblestudy')); + $db->setQuery($query); + $db->execute(); + } + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/searchfilters.php b/build/com_proclaim-9.2.1/admin/helpers/searchfilters.php new file mode 100644 index 0000000000..739ee540ff --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/searchfilters.php @@ -0,0 +1,44 @@ + array( + 'method' => 'studyDate', 'type' => 'data', 'db' => 'studydate' + ), '[filterBook]' => array( + 'method' => 'filterBook', 'type' => 'generic', 'db' => null + ) +); diff --git a/build/com_proclaim-9.2.1/admin/helpers/tags.php b/build/com_proclaim-9.2.1/admin/helpers/tags.php new file mode 100644 index 0000000000..2d71ba8b1c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/tags.php @@ -0,0 +1,46 @@ +enqueueMessage('Need to update this function', 'error'); + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/template.php b/build/com_proclaim-9.2.1/admin/helpers/template.php new file mode 100644 index 0000000000..456268591a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/template.php @@ -0,0 +1,270 @@ +enqueueMessage('Use of old function replace ASAP', 'error'); +/** + * Template helper class + * + * @package Proclaim.Admin + * @since 7.0.1 + * + * @deprecate 8.0.1 + */ +class JBSMTemplate +{ + /** + * Extension Deceleration + * + * @var string + * + * @since 1.5 + */ + public static $extension = 'com_biblestudy'; + + /** + * Template types + * + * @var array + * + * @since 1.5 + */ + protected $tmplTypes = array( + 'tmplList' => 'List', 'tmplListItem' => 'List Item', 'tmplSingleItem' => 'Single Item', + 'tmplModuleList' => 'Module List', 'tmplModuleItem' => 'Module List Item', 'tmplPopup' => 'Popup Media Player' + ); + + /** + * Tags + * + * @var array + * + * @since 1.5 + */ + private $tags; + + /** + * DBO + * + * @var JDatabaseDriver + * + * @since 1.5 + */ + private $DBO; + + /** + * Builds arrays of all the possible tags. + * + * @since 1.5 + */ + public function __construct() + { + include_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/tagDefinitions.helper.php'; + + // Creates array of all the tags and their associated field names + $tagsStudy = array( + '[studyDate]' => array('fieldName' => 'studydate'), '[studyTeacher]' => array('fieldName' => 'teacher_id'), + '[studyNumber]' => array('fieldName' => 'studynumber'), '[studyScripture1]' => array( + 'fieldName' => array( + 'booknumber', 'chapter_begin', 'verse_begin', 'chapter_end' + ) + ), '[studyScripture2]' => array( + 'fieldName' => array( + 'booknumber2', 'chapter_begin2', 'verse_begin2', 'chapter_end2' + ) + ), '[secondaryReference]' => array('fieldName' => 'secondary_reference'), + '[studyDVD]' => array('fieldName' => 'prod_dvd'), '[studyCD]' => array('fieldName' => 'prod_cd'), + '[studyTitle]' => array('fieldName' => 'studytitle'), '[studyIntro]' => array('fieldName' => 'studyintro'), + '[studyComments]' => array('fieldName' => 'comments'), '[studyHits]' => array('fieldName' => 'hits'), + '[studyUserAdded]' => array('fieldName' => 'user_id'), + '[studyLocation]' => array('fieldName' => 'location_id'), + '[studyMessageType]' => array('fieldName' => 'messagetype'), + '[studySeries]' => array('fieldName' => 'series_id'), '[studyTopic]' => array('fieldName' => 'topic_id'), + '[studyText]' => array('fieldName' => 'studytext'), '[studyMedia]' + ); + $tagsStudyList = array( + '[filterLocation]', '[filterBook]', '[filterTeacher]', '[filterSeries]', '[filterType]', '[filterYear]', + '[filterTopic]', '[filterOrder]', '[studiesList]', '[pagination]' + ); + $tagsTeacher = array( + ' + [teacherName]', '[teacherTitle]', '[teacherPhone]', '[teacherEmail]', '[teacherWebsite]', + '[teacherInformation]', '[teacherImage]', '[teacherShortDescription]' + ); + $tagsTeacherList = array( + '[teachersList]' + ); + + // Creates an associative array of all the category tags and makes it available to the class + $this->tags = array( + 'tagsStudy' => $tagsStudy, 'tagsStudyList' => $tagsStudyList, 'tagsTeacher' => $tagsTeacher, + 'tagsTeacherList' => $tagsTeacherList + ); + $this->DBO = JFactory::getDbo(); + } + + /** + * Get Instance + * + * @staticvar bibleStudyTemplate $instance + * @return JBSMTemplate + * + * @since 1.5 + */ + public function &getInstance() + { + static $instance; + + if (!$instance) + { + $instance = new JBSMTemplate; + } + + return $instance; + } + + /** + * Generates a list of tags that are being used in the input template. + * + * @param string $itemTmpl String Raw Html template + * @param int $id Int An Id of a template to load. This replaces the contents of the $itemTmpl + * @param boolean $fieldNames Boolean Default False. Set to True of you want to load the db fieldnames that correspond to the tags + * + * @return array + * + * @since 1.5 + */ + public function loadTagList($itemTmpl = null, $id = null, $fieldNames = false) + { + $tagArray = null; + + if (isset($id)) + { + $itemTmpl = $this->queryTemplate($id); + $itemTmpl = $itemTmpl->tmpl; + } + + foreach ($this->tags as $tagCategory) + { + foreach ($tagCategory as $tag) + { + if (!is_array($tag)) + { + $tagSearch = $tag; + } + else + { + $tagSearch = key($tagCategory); + } + + if (stristr($itemTmpl, $tagSearch)) + { + if ($fieldNames) + { + $tagArray[] = $tag['fieldName']; + } + else + { + $tagArray[] = $tagSearch; + } + } + + next($tagCategory); + } + } + + return $tagArray; + } + + /** + * Returns the template object from the database + * + * @param int $id The id of the template to query + * + * @return Object Row Object list + * + * @since 1.5 + */ + public function queryTemplate($id) + { + $query = $this->DBO->getQuery(true); + $query->select('*') + ->from('#__bsms_templates') + ->from('id = ' . (int) $id); + $this->DBO->setQuery($query); + + return $this->DBO->loadObject(); + } + + /** + * Generates a drop down list of all the template types. Used in TemplateEdit View to + * generate the dropdown box of template types. + * + * @param string $DefaultSelected Defines the default item + * + * @return string HTML Dropdown box + * + * @since 1.5 + */ + public function loadTmplTypesOption($DefaultSelected) + { + $i = null; + + foreach ($this->tmplTypes as $type) + { + $i[] = JHtml::_('select.option', key($this->tmplTypes), $type); + next($this->tmplTypes); + } + + return JHtml::_('select.genericlist', $i, 'type', null, 'value', 'text', $DefaultSelected); + } + + /** + * Builds list of fields to be used in the SELECT statement, so only the fields required + * by the template are selected + * + * @param array $fields The fields to include in the SELECT + * + * @return String + * + * @since 1.5 + */ + public function buildSqlSELECT($fields) + { + $SELECT = null; + + foreach ($fields as $field) + { + if (is_array($field)) + { + $SELECT[] = implode(', ', $field); + } + else + { + $SELECT[] = $field; + } + } + + return implode(', ', $SELECT); + } + + /** + * Study Date string. + * + * @return string + * + * @since 1.5 + */ + public function studyDate() + { + return 'Some date'; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/thumbnail.php b/build/com_proclaim-9.2.1/admin/helpers/thumbnail.php new file mode 100644 index 0000000000..3e2423e6ff --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/thumbnail.php @@ -0,0 +1,110 @@ +resize($size, $size, true); + $thumbnail->toFile($thumb, IMAGETYPE_JPEG); + + return; + } + + /** + * Resize image + * + * @param string $path Path to file + * @param int $new_size New image size + * + * @return null + * + * @since 9.0 + */ + public static function resize($path, $new_size) + { + $filename = str_replace('original_', '', basename($path)); + + // Delete existing thumbnail + $old_thumbs = JFolder::files(dirname($path), 'thumb_', true, true); + + foreach ($old_thumbs as $thumb) + { + JFile::delete($thumb); + } + + // Create new thumbnail + $image = new JImage($path); + $thumbnail = $image->resize($new_size, $new_size); + $thumbnail->toFile(dirname($path) . '/thumb_' . $filename, IMAGETYPE_PNG); + + return; + } + + /** + * Resize image + * + * @param string $path Path to file + * @param string $file file to check + * + * @return boolean + * + * @since 9.0 + */ + public static function check($path, $file = null) + { + if (!JFolder::exists($path)) + { + return false; + } + elseif ($file) + { + return JFile::exists(JPATH_ROOT . $path . $file); + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/translated.php b/build/com_proclaim-9.2.1/admin/helpers/translated.php new file mode 100644 index 0000000000..ea3dd4e55d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/translated.php @@ -0,0 +1,153 @@ +topic_text = $text; + $output[] = $topicItem; + } + + return $output; + } + + /** + * Translate a topicItem to clear text + * + * @param object $topicItem stdClass containing topic_text and topic_params + * + * @return string|NULL translated string or null if topicItem is not initialised + * + * @since 7.0.0 + */ + public static function getTopicItemTranslated($topicItem) + { + // If there is no topic to translate, just return + if ($topicItem) + { + // First choice: evaluate language strings + $itemparams = new Registry; + $itemparams->loadString($topicItem->topic_params); + $currentLanguage = JFactory::getLanguage()->getTag(); + + // First choice: string in current language + if ($currentLanguage) + { + if ($itemparams->get($currentLanguage)) + { + return ($itemparams->get($currentLanguage)); + } + } + + // Second choice: language file + $jtextString = JText::_($topicItem->topic_text); + + $string1 = strncmp($jtextString, 'JBS_TOP_', 8) == 0 || strncmp($jtextString, '??JBS_TOP_', 10) == 0; + $string2 = strlen($jtextString) == 0 || strcmp($jtextString, '????') == 0; + + if ($string1 || $string2) + { + // Third choice: string in default language selected for site + $defaultLanguage = JComponentHelper::getParams('com_languages')->get('site'); + + if ($defaultLanguage) + { + if ($itemparams->get($defaultLanguage)) + { + return ($itemparams->get($defaultLanguage)); + } + } + } + + // Fallback: second choice + return ($jtextString); + } + + return (null); + } + + /** + * Translate a concatenated list of topics to clear text + * + * @param object $topicItem stdClass containing the studies id and tp_id (i.e. concatenated topic ids) + * + * @return string:null translated string with format '[, [, ]]' or null if topicItem is not initialised + * + * @since 7.0.0 + */ + public static function getConcatTopicItemTranslated($topicItem) + { + if ($topicItem) + { + // Check if there should be topics at all to save time + if ($topicItem->tp_id) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('#__bsms_topics.topic_text, #__bsms_topics.params AS topic_params') + ->from('#__bsms_topics') + ->leftJoin('#__bsms_studytopics ON (#__bsms_studytopics.study_id = ' . $db->q($topicItem->id) . ') ') + ->where('published = ' . 1) + ->where('#__bsms_topics.id = #__bsms_studytopics.topic_id'); + $db->setQuery($query); + $results = $db->loadObjectList(); + $output = ''; + $count = count($results); + + for ($i = 0; $i < $count; $i++) + { + if ($i > 0) + { + $output .= ', '; + } + + $output .= self::getTopicItemTranslated($results[$i]); + } + + return $output; + } + } + + return null; + } +} diff --git a/build/com_proclaim-9.2.1/admin/helpers/uploadscript.php b/build/com_proclaim-9.2.1/admin/helpers/uploadscript.php new file mode 100644 index 0000000000..d527db2d52 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/helpers/uploadscript.php @@ -0,0 +1,118 @@ +folder = $data->get('path', '', 'path'); + + // Total length of post back data in bytes. + $contentLength = (int) $_SERVER['CONTENT_LENGTH']; + + // Instantiate the media helper + $mediaHelper = new JHelperMedia; + + // Maximum allowed size of post back data in MB. + $postMaxSize = $mediaHelper->toBytes(ini_get('post_max_size')); + + // Maximum allowed size of script execution in MB. + $memoryLimit = $mediaHelper->toBytes(ini_get('memory_limit')); + + // Check for the total size of post back data. + if (($postMaxSize > 0 && $contentLength > $postMaxSize) + || ($memoryLimit != -1 && $contentLength > $memoryLimit)) + { + return ['data' => '', 'error' => '']; + } + + $uploadMaxSize = $params->get('upload_maxsize', 0) * 1024 * 1024; + $uploadMaxFileSize = $mediaHelper->toBytes(ini_get('upload_max_filesize')); + + $file['name'] = JFile::makeSafe($file['name']); + $file['name'] = str_replace(' ', '-', $file['name']); + $file['filepath'] = JPath::clean(implode(DIRECTORY_SEPARATOR, array(JPATH_ROOT, $this->folder, $file['name']))); + + if (($file['error'] == 1) + || ($uploadMaxSize > 0 && $file['size'] > $uploadMaxSize) + || ($uploadMaxFileSize > 0 && $file['size'] > $uploadMaxFileSize)) + { + // File size exceed either 'upload_max_filesize' or 'upload_maxsize'. + return ['data' => '', 'error' => 'File size exceed either \'upload_max_filesize\' or \'upload_maxsize\'']; + } + + if (!isset($file['name'])) + { + // No filename (after the name was cleaned by JFile::makeSafe) + return ['data' => '', 'error' => 'No filename']; + } + + // Set FTP credentials, if given + JClientHelper::setCredentialsFromRequest('ftp'); + JPluginHelper::importPlugin('content'); + $dispatcher = JEventDispatcher::getInstance(); + + if (!$mediaHelper->canUpload($file, 'com_biblestudy')) + { + // The file can't be uploaded + return ['data' => '', 'error' => 'The file can\'t be uploaded by types allowed']; + } + + // Trigger the onContentBeforeSave event. + $object_file = (object) $file; + $result = $dispatcher->trigger('onContentBeforeSave', array('com_biblestudy.file', &$object_file, true)); + + if (in_array(false, $result, true)) + { + // There are some errors in the plugins + return ['data' => '', 'error' => 'Plugin errors on upload']; + } + + if (!JFile::upload($object_file->tmp_name, $object_file->filepath)) + { + return ['data' => '', 'error' => 'Could not upload']; + } + + // Trigger the onContentAfterSave event. + $dispatcher->trigger('onContentAfterSave', array('com_biblestudy.file', &$object_file, true)); + + // Return Success + return array( + 'data' => array( + 'filename' => $object_file->filepath, + 'size' => $_FILES['file']['size'] + ) + ); + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/sql/install-defaults.sql b/build/com_proclaim-9.2.1/admin/install/sql/install-defaults.sql new file mode 100644 index 0000000000..cbc70c9bb2 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/install-defaults.sql @@ -0,0 +1,310 @@ +-- Dump of table #__bsms_admin +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_admin` (`id`, `drop_tables`, `params`, `asset_id`, `access`, `installstate`, `debug`) +VALUES + (1, 0, + '{\"simple_mode\":\"1\",\"metakey\":\"\",\"metadesc\":\"\",\"compat_mode\":\"0\",\"studylistlimit\":\"10\",\"show_location_media\":\"0\",\"popular_limit\":\"\",\"character_filter\":\"1\",\"format_popular\":\"0\",\"default_main_image\":\"\",\"default_series_image\":\"\",\"default_teacher_image\":\"\",\"default_download_image\":\"\",\"default_showHide_image\":\"\",\"thumbnail_teacher_size\":\"150\",\"thumbnail_series_size\":\"150\",\"thumbnail_study_size\":\"150\",\"location_id\":\"-1\",\"teacher_id\":\"1\",\"series_id\":\"-1\",\"booknumber\":\"-1\",\"messagetype\":\"-1\",\"default_study_image\":\"\",\"download\":\"1\",\"target\":\" \",\"server\":\"1\",\"podcast\":[\"-1\"],\"from\":\"x\",\"to\":\"x\",\"pFrom\":\"x\",\"pTo\":\"x\",\"controls\":\"1\",\"jwplayer_pro\":\"0\",\"jwplayer_key\":\"\",\"jwplayer_cdn\":\"\",\"jwplayer_skin\":\"\",\"jwplayer_autostart\":\"false\",\"jwplayer_fallback\":\"true\",\"jwplayer_mute\":\"false\",\"jwplayer_stagevideo\":\"false\",\"jwplayer_primary\":\"html5\",\"playlist\":\"false\",\"jwplayer_listbar\":\"false\",\"jwplayer_logo\":\"\",\"sharing\":\"false\",\"jwplayer_related\":\"false\",\"jwplayer_advertising\":\"\",\"rtmp\":\"Comming Soon\",\"ga\":\"Comming Soon\",\"jwplayer_sitecatalyst\":\"Comming Soon\",\"captions\":\"false\"}', + 7587, 1, NULL, 0); + + +-- Dump of table #__bsms_books +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_books` (`id`, `bookname`, `booknumber`, `published`) +VALUES + (1, 'JBS_BBK_GENESIS', 101, 1), + (2, 'JBS_BBK_EXODUS', 102, 1), + (3, 'JBS_BBK_LEVITICUS', 103, 1), + (4, 'JBS_BBK_NUMBERS', 104, 1), + (5, 'JBS_BBK_DEUTERONOMY', 105, 1), + (6, 'JBS_BBK_JOSHUA', 106, 1), + (7, 'JBS_BBK_JUDGES', 107, 1), + (8, 'JBS_BBK_RUTH', 108, 1), + (9, 'JBS_BBK_1SAMUEL', 109, 1), + (10, 'JBS_BBK_2SAMUEL', 110, 1), + (11, 'JBS_BBK_1KINGS', 111, 1), + (12, 'JBS_BBK_2KINGS', 112, 1), + (13, 'JBS_BBK_1CHRONICLES', 113, 1), + (14, 'JBS_BBK_2CHRONICLES', 114, 1), + (15, 'JBS_BBK_EZRA', 115, 1), + (16, 'JBS_BBK_NEHEMIAH', 116, 1), + (17, 'JBS_BBK_ESTHER', 117, 1), + (18, 'JBS_BBK_JOB', 118, 1), + (19, 'JBS_BBK_PSALM', 119, 1), + (20, 'JBS_BBK_PROVERBS', 120, 1), + (21, 'JBS_BBK_ECCLESIASTES', 121, 1), + (22, 'JBS_BBK_SONG_OF_SOLOMON', 122, 1), + (23, 'JBS_BBK_ISAIAH', 123, 1), + (24, 'JBS_BBK_JEREMIAH', 124, 1), + (25, 'JBS_BBK_LAMENTATIONS', 125, 1), + (26, 'JBS_BBK_EZEKIEL', 126, 1), + (27, 'JBS_BBK_DANIEL', 127, 1), + (28, 'JBS_BBK_HOSEA', 128, 1), + (29, 'JBS_BBK_JOEL', 129, 1), + (30, 'JBS_BBK_AMOS', 130, 1), + (31, 'JBS_BBK_OBADIAH', 131, 1), + (32, 'JBS_BBK_JONAH', 132, 1), + (33, 'JBS_BBK_MICAH', 133, 1), + (34, 'JBS_BBK_NAHUM', 134, 1), + (35, 'JBS_BBK_HABAKKUK', 135, 1), + (36, 'JBS_BBK_ZEPHANIAH', 136, 1), + (37, 'JBS_BBK_HAGGAI', 137, 1), + (38, 'JBS_BBK_ZECHARIAH', 138, 1), + (39, 'JBS_BBK_MALACHI', 139, 1), + (40, 'JBS_BBK_MATTHEW', 140, 1), + (41, 'JBS_BBK_MARK', 141, 1), + (42, 'JBS_BBK_LUKE', 142, 1), + (43, 'JBS_BBK_JOHN', 143, 1), + (44, 'JBS_BBK_ACTS', 144, 1), + (45, 'JBS_BBK_ROMANS', 145, 1), + (46, 'JBS_BBK_1CORINTHIANS', 146, 1), + (47, 'JBS_BBK_2CORINTHIANS', 147, 1), + (48, 'JBS_BBK_GALATIANS', 148, 1), + (49, 'JBS_BBK_EPHESIANS', 149, 1), + (50, 'JBS_BBK_PHILIPPIANS', 150, 1), + (51, 'JBS_BBK_COLOSSIANS', 151, 1), + (52, 'JBS_BBK_1THESSALONIANS', 152, 1), + (53, 'JBS_BBK_2THESSALONIANS', 153, 1), + (54, 'JBS_BBK_1TIMOTHY', 154, 1), + (55, 'JBS_BBK_2TIMOTHY', 155, 1), + (56, 'JBS_BBK_TITUS', 156, 1), + (57, 'JBS_BBK_PHILEMON', 157, 1), + (58, 'JBS_BBK_HEBREWS', 158, 1), + (59, 'JBS_BBK_JAMES', 159, 1), + (60, 'JBS_BBK_1PETER', 160, 1), + (61, 'JBS_BBK_2PETER', 161, 1), + (62, 'JBS_BBK_1JOHN', 162, 1), + (63, 'JBS_BBK_2JOHN', 163, 1), + (64, 'JBS_BBK_3JOHN', 164, 1), + (65, 'JBS_BBK_JUDE', 165, 1), + (66, 'JBS_BBK_REVELATION', 166, 1), + (67, 'JBS_BBK_TOBIT', 167, 1), + (68, 'JBS_BBK_JUDITH', 168, 1), + (69, 'JBS_BBK_1MACCABEES', 169, 1), + (70, 'JBS_BBK_2MACCABEES', 170, 1), + (71, 'JBS_BBK_WISDOM', 171, 1), + (72, 'JBS_BBK_SIRACH', 172, 1), + (73, 'JBS_BBK_BARUCH', 173, 1); + +-- Dump of table #__bsms_locations +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_locations` (`id`, `location_text`, `contact_id`, `address`, `suburb`, `state`, `country`, `postcode`, `telephone`, `fax`, `misc`, `image`, `email_to`, `default_con`, `checked_out`, `checked_out_time`, `params`, `user_id`, `mobile`, `webpage`, `sortname1`, `sortname2`, `sortname3`, `language`, `created`, `created_by`, `created_by_alias`, `modified`, `modified_by`, `metakey`, `metadesc`, `metadata`, `featured`, `xreference`, `version`, `hits`, `publish_up`, `publish_down`, `published`, `asset_id`, `access`, `ordering`, `landing_show`) +VALUES + (1, 'My Location', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, '0000-00-00 00:00:00', '', 0, + '', '', '', '', '', '', '0000-00-00 00:00:00', 0, '', '0000-00-00 00:00:00', 0, '', '', '', 0, '', 1, 0, + '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 7480, 1, 1, NULL); + +-- Dump of table #__bsms_mediafiles +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_mediafiles` (`id`, `study_id`, `server_id`, `podcast_id`, `metadata`, `ordering`, `createdate`, `hits`, `published`, `comment`, `downloads`, `plays`, `params`, `asset_id`, `access`, `language`, `created_by`, `created_by_alias`, `modified`, `modified_by`, `checked_out`, `checked_out_time`) +VALUES + (1, 1, 1, '1', '{\"plays\":\"0\", \"downloads\":\"0\"}', 0, '2009-09-13 00:10:00', 0, 1, 'Sample Media file', 0, 10, + '{\"link_type\":\"\",\"docMan_id\":\"0\",\"article_id\":\"-1\",\"virtueMart_id\":\"0\",\"player\":\"7\",\"popup\":\"3\",\"mediacode\":\"\",\"filename\":\"\\/MediaFiles\\/2015\\/2015-008.mp3\",\"size\":false,\"special\":\"\",\"media_image\":\"images\\/biblestudy\\/speaker24.png\",\"mime_type\":\"audio\\/mp3\",\"playerwidth\":\"\",\"playerheight\":\"\",\"itempopuptitle\":\"\",\"itempopupfooter\":\"\",\"popupmargin\":\"50\",\"autostart\":\"false\"}', + 7481, 1, '*', 1, 'admin', '0000-00-00 00:00:00', 1, 0, '0000-00-00 00:00:00'), + (2, 1, 3, '', '', 0, '2010-03-12 18:10:00', 0, 1, '', 0, 6, + '{\"link_type\":\"0\",\"docMan_id\":\"0\",\"article_id\":\"-1\",\"virtueMart_id\":\"0\",\"player\":\"0\",\"popup\":\"2\",\"mediacode\":\"\",\"filename\":\"\\/images\\/growthgroupquestions\\/Colossians3_5-11Questions.pdf\",\"size\":0,\"special\":\"\",\"media_image\":\"images\\/biblestudy\\/pdf16.png\",\"mime_type\":\"application\\/pdf\",\"playerwidth\":\"\",\"playerheight\":\"\",\"itempopuptitle\":\"\",\"itempopupfooter\":\"\",\"popupmargin\":\"50\",\"autostart\":\"\"}', + 7593, 1, '*', 0, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00'), + (3, 1, 2, '', '', 0, '2015-07-28 19:18:07', 0, 1, '', 0, 0, + '{\"link_type\":\"0\",\"docMan_id\":\"0\",\"article_id\":\"-1\",\"virtueMart_id\":\"0\",\"player\":\"1\",\"popup\":\"3\",\"mediacode\":\"\",\"filename\":\"https:\\/\\/youtu.be\\/PsFo6MhAB9o\",\"size\":0,\"special\":\"\",\"media_image\":\"images\\/biblestudy\\/youtube24.png\",\"mime_type\":\"video\\/mp4\",\"playerwidth\":\"\",\"playerheight\":\"\",\"itempopuptitle\":\"\",\"itempopupfooter\":\"\",\"popupmargin\":\"50\",\"autostart\":\"\"}', + 7596, 1, '*', 0, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00'); + +-- Dump of table #__bsms_message_type +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_message_type` (`id`, `message_type`, `alias`, `published`, `asset_id`, `access`, `ordering`, `landing_show`) +VALUES + (1, 'Sunday', X'73756E646179', 1, 7482, 1, 1, NULL); + +-- Dump of table #__bsms_podcast +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_podcast` (`id`, `title`, `website`, `description`, `image`, `imageh`, `imagew`, `author`, `podcastimage`, `podcastsearch`, `filename`, `language`, `editor_name`, `editor_email`, `podcastlimit`, `published`, `episodetitle`, `custom`, `detailstemplateid`, `asset_id`, `access`, `alternatelink`, `alternateimage`, `podcast_subscribe_show`, `podcast_image_subscribe`, `podcast_subscribe_desc`, `alternatewords`, `episodesubtitle`, `customsubtitle`, `linktype`) +VALUES + (1, 'My Podcast', 'www.mywebsite.com', 'Podcast Description goes here', 'www.mywebsite.com/myimage.jpg', 30, 30, + 'Pastor Billy', 'www.mywebsite.com/myimage.jpg', 'jesus', 'mypodcast.xml', '*', 'Jim Editor', 'jim@mywebsite.com', + 50, 1, 0, '', 1, 7483, 1, '', '', 0, '', '', '', 0, '', 0); + +-- Dump of table #__bsms_series +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_series` (`id`, `series_text`, `alias`, `teacher`, `description`, `series_thumbnail`, `published`, `asset_id`, `ordering`, `access`, `language`, `landing_show`, `pc_show`) +VALUES + (1, 'Worship Series', X'776F72736869702D736572696573', -1, '', '', 1, 7484, 1, 1, '*', NULL, 1); + +-- Dump of table #__bsms_servers +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_servers` (`id`, `server_name`, `published`, `asset_id`, `access`, `type`, `params`, `media`) +VALUES + (1, 'Legacy MP3', 1, 7478, 1, 'legacy', + '{\"path\":\"\\/\\/www.calvarychapelnewberg.net\\/\",\"protocol\":\"http:\\/\\/\"}', + '{\"link_type\":\"1\",\"player\":\"7\",\"popup\":\"3\",\"mediacode\":\"\",\"media_image\":\"images\\/biblestudy\\/mp3.png\",\"mime_type\":\"audio\\/mp3\",\"autostart\":\"1\"}'), + (2, 'Legacy YouTube', 1, 7588, 1, 'legacy', '{\"path\":\"\",\"protocol\":\"http:\\/\\/\"}', + '{\"link_type\":\"0\",\"player\":\"1\",\"popup\":\"3\",\"mediacode\":\"\",\"media_image\":\"images\\/biblestudy\\/youtube24.png\",\"mime_type\":\"video\\/mp4\",\"autostart\":\"1\"}'), + (3, 'Legacy PDF', 1, 7589, 1, 'legacy', + '{\"path\":\"http:\\/\\/calvarynewberg.org\\/\",\"protocol\":\"http:\\/\\/\"}', + '{\"link_type\":\"1\",\"player\":\"0\",\"popup\":\"2\",\"mediacode\":\"\",\"media_image\":\"images\\/biblestudy\\/pdf16.png\",\"mime_type\":\"application\\/pdf\",\"autostart\":\"1\"}'); + + +-- Dump of table #__bsms_studies +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_studies` (`id`, `studydate`, `teacher_id`, `studynumber`, `booknumber`, `chapter_begin`, `verse_begin`, `chapter_end`, `verse_end`, `secondary_reference`, `booknumber2`, `chapter_begin2`, `verse_begin2`, `chapter_end2`, `verse_end2`, `prod_dvd`, `prod_cd`, `server_cd`, `server_dvd`, `image_cd`, `image_dvd`, `studytext2`, `comments`, `hits`, `user_id`, `user_name`, `show_level`, `location_id`, `studytitle`, `alias`, `studyintro`, `messagetype`, `series_id`, `studytext`, `thumbnailm`, `thumbhm`, `thumbwm`, `params`, `checked_out`, `checked_out_time`, `published`, `publish_up`, `publish_down`, `modified`, `modified_by`, `asset_id`, `access`, `ordering`, `language`, `download_id`) +VALUES + (1, '2010-03-13 00:10:00', 1, '2015-01', 151, 3, 5, 3, 11, '', '-1', '', '', '', '', NULL, NULL, NULL, NULL, NULL, + '0', NULL, 1, 0, 0, '', '0', 1, 'Four Steps to Defeating the Flesh', + X'666F75722D73746570732D746F2D646566656174696E672D7468652D666C657368', + 'If you’ve lived around Oregon very long you know what Oregon mud is like. The soils in the Willamette Valley contain a fair amount of clay. I remember trying to put in a sprinkler system when we first built our house. Foolishly, I thought I could beat the winter rains and get the system put in. Such was not the case. Towards the end I remember slogging around the yard—with each step I took it got harder and harder to walk as more and more mud clung to my shoes.', + '1', 1, + 'If you’ve lived around Oregon very long you know what Oregon mud is like. The soils in the Willamette Valley contain a fair amount of clay. I remember trying to put in a sprinkler system when we first built our house. Foolishly, I thought I could beat the winter rains and get the system put in. Such was not the case. Towards the end I remember slogging around the yard—with each step I took it got harder and harder to walk as more and more mud clung to my shoes. I use that analogy because the goal of becoming a Christian is to become like God in our character. We realize the old ways of sin just aren’t working for us and we come to Christ who forgives us and gives us eternal life. As Paul says: “old things have passed away, and look new things have come” (2 Cor 5:17). So far so good. The trouble starts when we begin walking around in this life. Instead of feeling light and free and pure—we feel the “old man” or “the flesh” sticking to our character like clay sticking to our shoes. The old ways of thinking, speaking, and acting are still with us—ready to take over at the slightest provocation or temptation. It makes it hard to walk with Christ effectively and smoothly. Paul says it well in: Romans 7:18 “For I know that nothing good lives in me, that is, in my flesh. For the desire to do what is good is with me, but there is no ability to do it. 19 For I do not do the good that I want to do, but I practice the evil that I do not want to do. 20 Now if I do what I do not want, I am no longer the one doing it, but it is the sin that lives in me.” So what’s a Christian to do? The goal is to be like Christ but the flesh seems to be so successful in holding us back. That’s what Colossians 3 and much of Chapter 4 is about. Paul outlines for us what the old character looks like, and what the new nature looks like by contrast. He describes the process of change as something as simple as changing your clothes. It’s simple in theory, difficult in practice, but totally worth the effort. He describes this change away from the old character with four actions: “put to death” (verse 5), “put away” (verse 8) and “put off” (verse 9), then we are to “put on” the new character of Christ (verse 10). The character traits that we are to kill, put away, and put off are: improper or unchecked desire, anger, and lying. From these three spring most of the things we associate with “the flesh”. 5 Paul starts off with “therefore”. In light of the fact that we are risen people, we need to start thinking like citizens of heaven (the new age), not like residents of earth (this age). Paul says for us to “put to death what belongs to your earthly nature.” The word “put to death” means: “to make dead.” How does that happen? Paul gives us a clue in Romans 8:13: “But if by the Spirit you put to death the deeds of the body, you will live.” So there is this cooperation that takes place between God’s Spirit and us. In reality, you will not be free from the presence and temptation to act in the old ways until you are given you new body. But as James 1:14 says: “But each person is tempted when he is drawn away and enticed by his own evil desires. 15 Then after desire has conceived, it gives birth to sin, and when sin is fully grown, it gives birth to death.   Evil thoughts will occur; it is what we do with them that matters. When they come we can, by the power of the Spirit, tell them they are dead and have no place in us anymore. Do it strongly; do it often. Picture those thoughts on a paper, and then nail that paper to the cross. Jesus died to rid you of acting on those thought patterns. The word “put to death” can mean: “to deprive of power.” Cut the supply lines to the old nature and it will become weak nd starve. So here is the big question: what in your life is still feeding the flesh? It’s different for everyone, mind you. Starve the flesh and it will go a long way to killing it. This is part 1: “kill the old ways, one thought at a time.” Next, Paul lists five manifestations of the flesh that we need to watch out for. Make no mistake—these are powerful forces in the human mind and are not easily dissuaded or killed. Sexual immorality. It means any sexual intimacy outside of the marriage between a man and a woman. Impurity means the character infected by immoral behavior. Lust refers to any unbridled passion but here likely refers to sexual desire that is out of bounds and out of control. Evil desire is probably better translated as lust—but could refer to the thoughts that precede lust. Remember again, it isn’t the temptation but what we do with it that matters. We sin when we focus on and even encourage impure thoughts that lead to impure actions. Greed, which is idolatry. Greed here is a general term for unchecked physical pleasure. Paul calls it greed because the worship of pleasure – the worship of anything for that matter – takes first place in front of God, and that is idolatry. In Paul’s day, literal idol worship was rampant, as was sexual immorality with temple prostitutes as part of that idolatry. And because sex is such a powerful thing, these actions led to impure thoughts, desires, and lusts. 6 God’s wrath is the natural outpouring against anyone who is not pure. Doing something that is sinful is disobeying God because He said “Be holy, even as I am holy” (Lev. 11:45). Some people say that a loving God cannot be a wrathful God. But you cannot have love without wrath against evil. Love means protecting the innocent against evil. It means coming against evil and destroying it. Just ask any parent who has lost a child to horrible violence—and you begin to understand the love and wrath of God. Before we get too smug in the opinion that we aren’t like those disobedient sinners—look at the next verse. 7 Before we knew Jesus we all disobeyed and were guilty as charged. “All have sinned and fall short of the glory of God” (Romans 3:23). We acted out these things (“walked”) because we were steeped in them. We could translate this verse as: “when your life consisted of such wretched things as these.” As fallen people we couldn’t help but act in these ways, but not anymore. Now we are steeped in the Messiah’s forgiving and cleansing love. We don’t have to act out the deeds of the flesh any more. And Paul goes onto to step 2 of how to do that next. 8 Step One is to “Kill kill, kill them all” – all the thoughts that come from the flesh and urge us to think and do things that are not like God. We should nail those thoughts to the cross. Step Two is to “put off” or “put away” the deeds of the flesh. The flesh should feel like a foreign intruder. We don’t just ignore it; we actively push it away. The Greek here is the picture of taking off your clothes. The flesh is like an old set of worn out clothes that, through the Spirit, we can literally take off. Paul helps us understand this by being very specific in another major area of the old nature: anger. He brings in five ways anger destroys us. Anger and wrath are related. Anger is Greek word for a plant that is bursting with juice. What a great picture of when we get red-hot with anger and our face literally flushes red with blood. Wrath means: “to rush in” and is what we do when we are angry. How often do we get angry and let our anger vent with hurtful words that later we wish we could take back. Malice is when we mean to hurt someone—often the result of anger. Slander is what we say about them to hurt them. It’s the Greek word: blasphema. In this case it is hurtful words about another, rather than God. Finally “filthy language” refers to the words used—words which hurt both the speaker and the hearer. Why do we get angry? There are many answers to that question—but I want to bring in four main ones: Frustration – when a goal is thwarted; like getting to work on time thwarted by heavy traffic. Hurt – when the words or actions of another wounds us. Loss – when something that we hold dear is taken away, like a job or a spouse. Victim thinking – when I don’t get what I think I deserve. Put it to death by declaring the sin nature dead on the cross. Romans 6:6 “For we know that our old self was crucified with Him in order that sin’s dominion over the body may be abolished, so that we may no longer be enslaved to sin”. Put it away by separating yourself from that old character, like you’d change out of an old set of clothes. Put it off, remove its power, by thinking of the flesh as something foreign to you, like a limb that is no longer a part of your body—gangrenous and in need of amputation. Then put on the character of Christ like putting on a costume in a play. The more you wear it the more comfortable you will be in it and the more you will own that new character Each one of us struggles with different parts of our old nature. You can be a Christian for many years and still struggle with areas of the flesh. I think that often what happens is a trigger occurs—perhaps a word or phrase that reminds our unconscious mind of an abuse from childhood. We don’t think about but that trigger dis-regulates us, our pre-frontal cortex goes offline and our fleshly nature takes over. The trick is to begin to notice it—even physically in our body—and then work with the Holy Spirit to put you back into your new-self state of mind. 9 – 10 In verse 9, Paul moves to the third major category of the flesh—our interactions with others in relation to the truth. Lying is a default human behavior that we learn at a very young age. We bend facts and manipulate the truth in order to get a result we feel we can’t get by telling the truth. We do it in big ways and in small ways all the time. But lying is not a character trait of heaven—and lying is one of the sins specifically mentioned in Revelation 21:15 as being excluded from heaven. It’s part of the old set of clothes that we need to “put off”. It means: “to wholly strip off of oneself” or “to disarm”. Does it mean we must then be completely transparently honest with everything we think at all times? Of course not. Ephesians 4:15 says: “Speaking the truth in love let us grow in every way into Him.” Be honest always, and always speak those truths in a way that will build up and encourage another’s relationship with Christ. One way we disarm lying is to think: what can I say that will benefit this person, truly. Sometimes that is saying a difficult thing, but not in a hurtful way, but a helpful one. We move now from “putting off” the old character to “putting on” a new one—which is the character of Christ. The words literally mean to put on a change of clothes. Paul uses the same Greek word in Rom. 13:14: “But put on the Lord Jesus Christ, and make no plans to satisfy the fleshly desires.” The word can also mean: “to sink into”. Believe it or not, you have the power to put on or sink into the character of Jesus—forcing out the old flesh, which is always making plans to satisfy itself. At first it might feel very foreign, like wearing a costume while playing a part in a play. But you know, that’s okay. Play the part of a person who thinks, acts, and speaks like Jesus in love, joy, peace, patience, kindness, gentleness and the like. It might feel a little hypocritical at first but the more you practice the part the more comfortable you get with it and the more it becomes part of you. All you are doing really is cooperating with the force of the Holy Spirit in you that already wants to make these changes. It is part of that “renewal” process Paul talks about here. The more we know about Jesus and His character, and the more we work towards mirroring that character, the more into His “image” we become. You’ll find in the end that this new character is the “real” new you that God has been making all along. 11 Verse 11 brings up what is often the source of the fleshly desires that run counter to the character of Christ—divisions along racial, economic, social, and religious differences. After Alexander the Great conquered much of the known world, he spread the Greek culture far and wide. So the Greeks felt very self-important culturally. The Jews also felt very superior religiously as they had the Torah and a covenant with Yahweh. This division was never so strident when it came to who was in the covenant and who was out—via circumcision. Barbarians were any non-Greek or non-Jews and Scythians were a little known race of people from the far-northern part of the Middle East who were thought to be no better than animals. Slavery was well known in that culture and separated people along socio-economic lines. Often times it is these things that cause the flesh to flare up. But Paul says Christ is in all peoples (how that could be rendered). Jesus is the great equalizer of religious, racial, cultural and socio-economic status. Also, as Paul says in Galatians 3:28, the great equalizer of gender inequalities. In Christ we should never let those things separate us. That’s the old way, not the new. So we’re talked about three ways to help rid ourselves of the old nature and one way to help nurture the new character. Try it on with something you are struggling with, like anger. Picture what it would be like if something or someone makes you angry. How would you normally react and how can these new steps intervene? What are the qualities in the new character that replace unchecked desire, anger, and dishonesty? Fidelity (commitment in your relationships with others and with God) Security (trusting that God will supply your needs) Love (self-sacrificing, other-centered affection that looks out for the good of others always) We’ll talk more about these as they relate to everyday life in the coming verses.', + '', NULL, NULL, + '{\"metakey\":\"Rain, Flesh, \\\"Sexual immorality\\\", Impurity, Lust, \\\"Evil desire\\\", Greed, Frustration, Hurt, Loss, \\\"Victim thinking\\\", \\\"Put it to death\\\", \\\"Put it away\\\",\\\"Put it off\\\"\",\"metadesc\":\"\"}', + 0, '0000-00-00 00:00:00', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '2015-07-28 23:46:05', 627, 7479, 1, 1, + '*', -1); + +-- Dump of table #__bsms_studytopics +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_studytopics` (`id`, `study_id`, `topic_id`, `asset_id`, `access`) +VALUES + (3, 1, 114, 7594, 1), + (4, 1, 114, 7595, 1); + + +-- Dump of table #__bsms_teachers +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_teachers` (`id`, `teacher_image`, `teacher_thumbnail`, `teachername`, `alias`, `title`, `phone`, `email`, `website`, `information`, `image`, `imageh`, `imagew`, `thumb`, `thumbw`, `thumbh`, `short`, `ordering`, `catid`, `list_show`, `published`, `asset_id`, `access`, `language`, `facebooklink`, `twitterlink`, `bloglink`, `link1`, `linklabel1`, `link2`, `linklabel2`, `link3`, `linklabel3`, `contact`, `address`, `landing_show`, `address1`) +VALUES + (1, '', '', 'Billy Sunday', X'62696C6C792D73756E646179', 'Pastor', '555-555-5555', 'billy@sunday.com', + 'http://billysunday.com', + 'William Ashley Sunday was an American athlete who after being a popular outfielder in baseballs National League during the 1880s became the most celebrated and influential American evangelist during the first two decades of the 20th century. ', + 'media/com_biblestudy/images/billy_sunday11.jpg', '276', '197', 'media/com_biblestudy/images/images.jpg', '101', + '141', 'Billy Sunday: 1862-1935', 0, 1, 1, 1, 7489, 1, '*', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, '', NULL, ''); + +-- Dump of table #__bsms_templatatecode + +INSERT INTO `#__bsms_templatecode` (`id`, `published`, `type`, `filename`, `asset_id`, `templatecode`) VALUES +(1, 1, 1, 'easy', 188, 'get(\'id\');\r\n$listOrder = $this->escape($this->state->get(\'list.ordering\'));\r\n$listDirn = $this->escape($this->state->get(\'list.direction\'));\r\n$archived = $this->state->get(\'filter.published\') == 2 ? true : false;\r\n$trashed = $this->state->get(\'filter.published\') == -2 ? true : false;\r\n$saveOrder = $listOrder == \'study.ordering\';\r\n$columns = 12;\r\n\r\n\r\n\r\n?>\r\n\r\n\r\n\r\n
      \r\n

      \r\n Teachings\r\n

      \r\n
      \r\n\r\n\r\n\r\n
      \r\n\r\n page->books;\r\n echo $this->page->teachers;\r\n echo $this->page->series;\r\n $oddeven = \'\';\r\n $class1 = \'#d3d3d3\';\r\n $class2 = \'\';?>\r\n
      \r\nitems as $study)\r\n{\r\n\r\n $oddeven = ($oddeven == $class1) ? $class2 : $class1;\r\n ?>\r\n
      \r\n
      \r\n study_thumbnail) {echo \'\'.$study->study_thumbnail .\'\'; echo \'
      \';} ?>\r\n studytitle;?>
      \r\n scripture1;?> | studydate;?>
      \r\n
      teachername;?>

      \r\n media; ?>\r\n
      \r\n\r\n\r\n
      \r\n\r\n
      \r\n pagination->getPageslinks();?>\r\n
      \r\n'); + +-- Dump of table #__bsms_templates +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_templates` (`id`, `type`, `tmpl`, `published`, `params`, `title`, `text`, `pdf`, `asset_id`, `access`) +VALUES + (1, 'tmplList', '', 1, + '{\"useterms\":\"0\",\"terms\":\"\",\"css\":\"biblestudy.css\",\"studieslisttemplateid\":\"1\",\"sermonstemplate\":\"0\",\"detailstemplateid\":\"1\",\"sermontemplate\":\"0\",\"teachertemplateid\":\"1\",\"teachertemplate\":\"0\",\"teacherstemplate\":\"0\",\"serieslisttemplateid\":\"1\",\"seriesdisplaystemplate\":\"0\",\"seriesdetailtemplateid\":\"1\",\"seriesdisplaytemplate\":\"0\",\"offset\":\"false\",\"teacher_id\":[\"-1\"],\"series_id\":[\"-1\"],\"booknumber\":[\"-1\"],\"topic_id\":[\"-1\"],\"messagetype\":[\"-1\"],\"locations\":[\"-1\"],\"show_verses\":\"0\",\"stylesheet\":\"\",\"date_format\":\"2\",\"custom_date_format\":\"\",\"duration_type\":\"2\",\"protocol\":\"http:\\/\\/\",\"player\":\"0\",\"popuptype\":\"window\",\"internal_popup\":\"1\",\"special\":\"_blank\",\"autostart\":\"1\",\"playerresposive\":\"1\",\"player_width\":\"400\",\"player_height\":\"300\",\"embedshare\":\"TRUE\",\"backcolor\":\"0x287585\",\"frontcolor\":\"0xFFFFFF\",\"lightcolor\":\"0x000000\",\"screencolor\":\"0x000000\",\"popuptitle\":\"{{title}}\",\"popupfooter\":\"{{filename}}\",\"popupmargin\":\"50\",\"popupbackground\":\"black\",\"popupimage\":\"media\\/com_biblestudy\\/images\\/speaker24.png\",\"show_filesize\":\"1\",\"playerposition\":\"over\",\"playeridlehide\":\"1\",\"default_order\":\"DESC\",\"default_order_secondary\":\"ASC\",\"show_page_title\":\"1\",\"show_page_image\":\"1\",\"list_page_title\":\"Bible Studies\",\"list_title_align\":\"text-align:center\",\"use_headers_list\":\"1\",\"studies_element\":\"1\",\"list_intro\":\"\",\"intro_show\":\"1\",\"list_teacher_show\":\"1\",\"listteachers\":[],\"teacherlink\":\"1\",\"showpodcastsubscribelist\":\"1\",\"subscribeintro\":\"Our Podcasts\",\"details_text\":\"Study Details\",\"show_book_search\":\"1\",\"ddbooks\":\"1\",\"booklist\":\"1\",\"use_go_button\":\"1\",\"ddgobutton\":\"2\",\"show_teacher_search\":\"1\",\"ddteachers\":\"3\",\"show_series_search\":\"1\",\"ddseries\":\"4\",\"show_type_search\":\"1\",\"ddmessagetype\":\"5\",\"show_year_search\":\"1\",\"ddyears\":\"6\",\"show_order_search\":\"1\",\"ddorder\":\"7\",\"show_topic_search\":\"1\",\"ddtopics\":\"8\",\"show_locations_search\":\"1\",\"ddlocations\":\"9\",\"show_popular\":\"1\",\"ddpopular\":\"10\",\"listlanguage\":\"0\",\"ddlanguage\":\"11\",\"show_pagination\":\"1\",\"listcolor1\":\"#8f8fb2\",\"listcolor2\":\"#ccccff\",\"rowspanitem\":\"1\",\"rowspanitemspan\":\"2\",\"rowspanitemimage\":\"img-polaroid\",\"rowspanitempull\":\"pull-left\",\"scripture1row\":\"0\",\"scripture1col\":\"3\",\"scripture1colspan\":\"2\",\"scripture1element\":\"1\",\"scripture1custom\":\"\",\"scripture1linktype\":\"0\",\"scripture2row\":\"0\",\"scripture2col\":\"1\",\"scripture2colspan\":\"3\",\"scripture2element\":\"1\",\"scripture2custom\":\"\",\"scripture2linktype\":\"0\",\"secondaryrow\":\"0\",\"secondarycol\":\"1\",\"secondarycolspan\":\"1\",\"secondaryelement\":\"1\",\"secondarycustom\":\"\",\"secondarylinktype\":\"0\",\"jbsmediarow\":\"1\",\"jbsmediacol\":\"4\",\"jbsmediacolspan\":\"4\",\"jbsmediaelement\":\"0\",\"jbsmediacustom\":\"\",\"jbsmedialinktype\":\"2\",\"titlerow\":\"1\",\"titlecol\":\"2\",\"titlecolspan\":\"4\",\"titleelement\":\"1\",\"titlecustom\":\"\",\"titlelinktype\":\"0\",\"daterow\":\"1\",\"datecol\":\"1\",\"datecolspan\":\"2\",\"dateelement\":\"1\",\"datecustom\":\"\",\"datelinktype\":\"0\",\"teacherrow\":\"0\",\"teachercol\":\"1\",\"teachercolspan\":\"1\",\"teacherelement\":\"1\",\"teachercustom\":\"\",\"teacherlinktype\":\"0\",\"teacherimagerrow\":\"0\",\"teacherimagecol\":\"1\",\"teacherimagecolspan\":\"1\",\"teacherimageelement\":\"1\",\"teacherimagecustom\":\"\",\"teacher-titlerow\":\"0\",\"teacher-titlecol\":\"1\",\"teacher-titlecolspan\":\"1\",\"teacher-titleelement\":\"1\",\"teacher-titlecustom\":\"\",\"teacher-titlelinktype\":\"0\",\"durationrow\":\"0\",\"durationcol\":\"1\",\"durationcolspan\":\"1\",\"durationelement\":\"1\",\"durationcustom\":\"\",\"durationlinktype\":\"0\",\"studyintrorow\":\"0\",\"studyintrocol\":\"1\",\"studyintrocolspan\":\"12\",\"studyintroelement\":\"1\",\"studyintrocustom\":\"\",\"studyintrolinktype\":\"0\",\"seriesrow\":\"0\",\"seriescol\":\"1\",\"seriescolspan\":\"1\",\"serieselement\":\"1\",\"seriescustom\":\"\",\"serieslinktype\":\"0\",\"seriesthumbnailrow\":\"0\",\"seriesthumbnailcol\":\"1\",\"seriesthumbnailcolspan\":\"1\",\"seriesthumbnailelement\":\"1\",\"seriesthumbnailcustom\":\"\",\"seriesthumbnaillinktype\":\"0\",\"seriesdescriptionrow\":\"0\",\"seriesdescriptioncol\":\"1\",\"seriesdescriptioncolspan\":\"1\",\"seriesdescriptionelement\":\"1\",\"seriesdescriptioncustom\":\"\",\"seriesdescriptionlinktype\":\"0\",\"submittedrow\":\"0\",\"submittedcol\":\"1\",\"submittedcolspan\":\"1\",\"submittedelement\":\"1\",\"submittedcustom\":\"\",\"submittedlinktype\":\"0\",\"hitsrow\":\"0\",\"hitscol\":\"1\",\"hitscolspan\":\"6\",\"hitselement\":\"1\",\"hitscustom\":\"\",\"hitslinktype\":\"0\",\"downloadsrow\":\"0\",\"downloadscol\":\"1\",\"downloadscolspan\":\"1\",\"downloadselement\":\"1\",\"downloadscustom\":\"\",\"downloadslinktype\":\"0\",\"studynumberrow\":\"0\",\"studynumbercol\":\"1\",\"studynumbercolspan\":\"1\",\"studynumberelement\":\"1\",\"studynumbercustom\":\"\",\"studynumberlinktype\":\"0\",\"topicrow\":\"0\",\"topiccol\":\"1\",\"topiccolspan\":\"6\",\"topicelement\":\"1\",\"topiccustom\":\"\",\"topiclinktype\":\"0\",\"locationsrow\":\"0\",\"locationscol\":\"1\",\"locationscolspan\":\"1\",\"locationselement\":\"1\",\"locationscustom\":\"\",\"locationslinktype\":\"0\",\"messagetyperow\":\"0\",\"messagetypecol\":\"1\",\"messagetypecolspan\":\"6\",\"messagetypeelement\":\"1\",\"messagetypecustom\":\"\",\"messagetypelinktype\":\"0\",\"thumbnailrow\":\"0\",\"thumbnailcol\":\"1\",\"thumbnailcolspan\":\"1\",\"thumbnailelement\":\"1\",\"thumbnailcustom\":\"\",\"thumbnaillinktype\":\"0\",\"customrow\":\"0\",\"customcol\":\"1\",\"customcolspan\":\"1\",\"customelement\":\"1\",\"customcustom\":\"\",\"customtext\":\"\",\"show_print_view\":\"1\",\"link_text\":\"Return to Studies List\",\"showrelated\":\"1\",\"showpodcastsubscribedetails\":\"1\",\"show_scripture_link\":\"0\",\"show_passage_view\":\"1\",\"bible_version\":\"51\",\"socialnetworking\":\"1\",\"sharetype\":\"1\",\"sharelabel\":\"Share This\",\"comments_type\":\"0\",\"show_comments\":\"1\",\"link_comments\":\"0\",\"comment_access\":\"1\",\"comment_publish\":\"0\",\"use_captcha\":\"1\",\"public_key\":\"\",\"private_key\":\"\",\"email_comments\":\"1\",\"recipient\":\"\",\"subject\":\"Comments on studies\",\"body\":\"Comments entered.\",\"study_detailtemplate\":\"\",\"teacher_title\":\"Our Teachers\",\"teachers_element\":\"1\",\"tsrowspanitem\":\"0\",\"tsrowspanitemspan\":\"4\",\"tsrowspanitemimage\":\"img-polaroid\",\"tsrowspanitempull\":\"pull-left\",\"use_headers_teacher_list\":\"1\",\"tslistcolor1\":\"\",\"tslistcolor2\":\"\",\"tsteacherrow\":\"1\",\"tsteachercol\":\"1\",\"tsteachercolspan\":\"2\",\"tsteacherelement\":\"1\",\"tsteachercustom\":\"\",\"tsteacherlinktype\":\"0\",\"tsteacherimagerrow\":\"0\",\"tsteacherimagecol\":\"1\",\"tsteacherimagecolspan\":\"1\",\"tsteacherimageelement\":\"1\",\"tsteacherimagecustom\":\"\",\"tsteacher-titlerow\":\"0\",\"tsteacher-titlecol\":\"1\",\"tsteacher-titlecolspan\":\"1\",\"tsteacher-titleelement\":\"1\",\"tsteacher-titlecustom\":\"\",\"tsteacher-titlelinktype\":\"0\",\"tsteacheremailrow\":\"0\",\"tsteacheremailcol\":\"1\",\"tsteacheremailcolspan\":\"1\",\"tsteacheremailelement\":\"1\",\"tsteacheremailcustom\":\"\",\"tsteacherwebrow\":\"0\",\"tsteacherwebcol\":\"1\",\"tsteacherwebcolspan\":\"1\",\"tsteacherwebelement\":\"1\",\"tsteacherphonerow\":\"0\",\"tsteacherphonecol\":\"1\",\"tsteacherphonecolspan\":\"1\",\"tsteacherphoneelement\":\"1\",\"tsteacherphonecustom\":\"\",\"tsteacherfbrow\":\"0\",\"tsteacherfbcol\":\"1\",\"tsteacherfbcolspan\":\"1\",\"tsteacherfbelement\":\"1\",\"tsteacherfbcustom\":\"\",\"tsteachertwrow\":\"0\",\"tsteachertwcol\":\"1\",\"tsteachertwcolspan\":\"1\",\"tsteachertwelement\":\"1\",\"tsteachertwcustom\":\"\",\"tsteacherblogrow\":\"0\",\"tsteacherblogcol\":\"1\",\"tsteacherblogcolspan\":\"1\",\"tsteacherblogelement\":\"1\",\"tsteacherblogcustom\":\"\",\"tsteachershortrow\":\"0\",\"tsteachershortcol\":\"1\",\"tsteachershortcolspan\":\"1\",\"tsteachershortelement\":\"1\",\"tsteachershortcustom\":\"\",\"tsteachershortlinktype\":\"0\",\"tscustomrow\":\"\",\"tscustomcol\":\"1\",\"tscustomcolspan\":\"1\",\"tscustomelement\":\"1\",\"tscustomcustom\":\"\",\"tscustomtext\":\"\",\"tsteacherallinonerow\":\"0\",\"tsteacherallinonecol\":\"1\",\"tsteacherallinonecolspan\":\"1\",\"tsteacherallinoneelement\":\"1\",\"tsteacherallinonecustom\":\"\",\"teacher_headercode\":\"\",\"teacher_templatecode\":\" {{teacher}} {{title}} {{teacher}} {{short}} {{information}} \",\"teacher_wrapcode\":\"0\",\"show_teacher_studies\":\"0\",\"studies\":\"\",\"label_teacher\":\"Latest Messages\",\"teacherlinkstudies\":\"1\",\"tdrowspanitem\":\"0\",\"tdrowspanitemspan\":\"4\",\"tdrowspanitemimage\":\"img-polaroid\",\"tdrowspanitempull\":\"pull-left\",\"use_headers_teacher_details\":\"1\",\"teacherdisplay_color\":\"\",\"tdteacherrow\":\"1\",\"tdteachercol\":\"1\",\"tdteachercolspan\":\"2\",\"tdteacherelement\":\"1\",\"tdteachercustom\":\"\",\"tdteacherimagerrow\":\"0\",\"tdteacherimagecol\":\"1\",\"tdteacherimagecolspan\":\"1\",\"tdteacherimageelement\":\"1\",\"tdteacherimagecustom\":\"\",\"tdteacher-titlerow\":\"0\",\"tdteacher-titlecol\":\"1\",\"tdteacher-titlecolspan\":\"1\",\"tdteacher-titleelement\":\"1\",\"tdteacher-titlecustom\":\"\",\"tdteacheremailrow\":\"0\",\"tdteacheremailcol\":\"1\",\"tdteacheremailcolspan\":\"1\",\"tdteacheremailelement\":\"1\",\"tdteacheremailcustom\":\"\",\"tdteacherwebrow\":\"0\",\"tdteacherwebcol\":\"1\",\"tdteacherwebcolspan\":\"1\",\"tdteacherwebelement\":\"1\",\"tdteacherphonerow\":\"0\",\"tdteacherphonecol\":\"1\",\"tdteacherphonecolspan\":\"1\",\"tdteacherphoneelement\":\"1\",\"tdteacherphonecustom\":\"\",\"tdteacherfbrow\":\"0\",\"tdteacherfbcol\":\"1\",\"tdteacherfbcolspan\":\"1\",\"tdteacherfbelement\":\"1\",\"tdteacherfbcustom\":\"\",\"tdteachertwrow\":\"0\",\"tdteachertwcol\":\"1\",\"tdteachertwcolspan\":\"1\",\"tdteachertwelement\":\"1\",\"tdteachertwcustom\":\"\",\"tdteacherblogrow\":\"0\",\"tdteacherblogcol\":\"1\",\"tdteacherblogcolspan\":\"1\",\"tdteacherblogelement\":\"1\",\"tdteacherblogcustom\":\"\",\"tdteachershortrow\":\"0\",\"tdteachershortcol\":\"1\",\"tdteachershortcolspan\":\"1\",\"tdteachershortelement\":\"1\",\"tdteachershortcustom\":\"\",\"tdteacherlongrow\":\"0\",\"tdteacherlongcol\":\"1\",\"tdteacherlongcolspan\":\"1\",\"tdteacherlongelement\":\"1\",\"tdteacherlongcustom\":\"\",\"tdteacheraddressrow\":\"0\",\"tdteacheraddresscol\":\"1\",\"tdteacheraddresscolspan\":\"1\",\"tdteacheraddresselement\":\"1\",\"tdteacheraddresscustom\":\"\",\"tdteacherlink1row\":\"0\",\"tdteacherlink1col\":\"1\",\"tdteacherlink1colspan\":\"1\",\"tdteacherlink1element\":\"1\",\"tdteacherlink1custom\":\"\",\"tdteacherlink2row\":\"0\",\"tdteacherlink2col\":\"1\",\"tdteacherlink2colspan\":\"1\",\"tdteacherlink2element\":\"1\",\"tdteacherlink2custom\":\"\",\"tdteacherlink3row\":\"0\",\"tdteacherlink3col\":\"1\",\"tdteacherlink3colspan\":\"1\",\"tdteacherlink3element\":\"1\",\"tdteacherlink3custom\":\"\",\"tdteacherlargeimagerow\":\"0\",\"tdteacherlargeimagecol\":\"1\",\"tdteacherlargeimagecolspan\":\"1\",\"tdteacherlargeimageelement\":\"1\",\"tdteacherlargeimagecustom\":\"\",\"tdcustomrow\":\"\",\"tdcustomcol\":\"1\",\"tdcustomcolspan\":\"1\",\"tdcustomelement\":\"1\",\"tdcustomcustom\":\"\",\"tdcustomtext\":\"\",\"tdteacherallinonerow\":\"0\",\"tdteacherallinonecol\":\"1\",\"tdteacherallinonecolspan\":\"1\",\"tdteacherallinoneelement\":\"1\",\"tdteacherallinonecustom\":\"\",\"series_title\":\"Our Series\",\"show_series_title\":\"1\",\"show_page_image_series\":\"1\",\"series_element\":\"1\",\"use_headers_series\":\"1\",\"series_show_description\":\"1\",\"series_characters\":\"\",\"search_series\":\"1\",\"series_list_teachers\":\"1\",\"series_list_years\":\"1\",\"series_list_show_pagination\":\"1\",\"series_list_order\":\"ASC\",\"series_order_field\":\"series_text\",\"srowspanitem\":\"0\",\"srowspanitemspan\":\"4\",\"srowspanitemimage\":\"img-polaroid\",\"srowspanitempull\":\"pull-left\",\"sseriesrow\":\"2\",\"sseriescol\":\"1\",\"sseriescolspan\":\"6\",\"sserieselement\":\"1\",\"sseriescustom\":\"\",\"sserieslinktype\":\"0\",\"sseriesthumbnailrow\":\"1\",\"sseriesthumbnailcol\":\"2\",\"sseriesthumbnailcolspan\":\"1\",\"sseriesthumbnailelement\":\"1\",\"sseriesthumbnailcustom\":\"\",\"sseriesthumbnaillinktype\":\"0\",\"steacherrow\":\"0\",\"steachercol\":\"1\",\"steachercolspan\":\"1\",\"steacherelement\":\"1\",\"steachercustom\":\"\",\"steacherlinktype\":\"0\",\"steacherimagerow\":\"0\",\"steacherimagecol\":\"1\",\"steacherimagecolspan\":\"1\",\"steacherimageelement\":\"1\",\"steacherimagecustom\":\"\",\"steacher-titlerow\":\"0\",\"steacher-titlecol\":\"1\",\"steacher-titlecolspan\":\"1\",\"steacher-titleelement\":\"1\",\"steacher-titlecustom\":\"\",\"steacher-titlelinktype\":\"0\",\"sdescriptionrow\":\"0\",\"sdescriptioncol\":\"1\",\"sdescriptioncolspan\":\"1\",\"sdescriptionelement\":\"1\",\"sdescriptioncustom\":\"\",\"sdescriptionlinktype\":\"0\",\"sdcustomrow\":\"0\",\"sdcustomcol\":\"1\",\"sdcustomcolspan\":\"1\",\"sdcustomelement\":\"1\",\"sdcustomcustom\":\"\",\"sdcustomtext\":\"\",\"series_detail_sort\":\"studydate\",\"series_detail_order\":\"DESC\",\"series_detail_limit\":\"\",\"series_list_return\":\"1\",\"sdrowspanitem\":\"0\",\"sdrowspanitemspan\":\"4\",\"sdrowspanitemimage\":\"img-polaroid\",\"sdrowspanitempull\":\"pull-left\",\"seriesdisplay_color\":\"\",\"use_header_seriesdisplay\":\"0\",\"sdseriesrow\":\"2\",\"sdseriescol\":\"1\",\"sdseriescolspan\":\"6\",\"sdserieselement\":\"1\",\"sdseriescustom\":\"\",\"sdserieslinktype\":\"0\",\"sdseriesthumbnailrow\":\"1\",\"sdseriesthumbnailcol\":\"2\",\"sdseriesthumbnailcolspan\":\"1\",\"sdseriesthumbnailelement\":\"1\",\"sdseriesthumbnailcustom\":\"\",\"sdseriesthumbnaillinktype\":\"0\",\"sdteacherrow\":\"0\",\"sdteachercol\":\"1\",\"sdteachercolspan\":\"1\",\"sdteacherelement\":\"1\",\"sdteachercustom\":\"\",\"sdteacherlinktype\":\"0\",\"sdteacherimagerow\":\"0\",\"sdteacherimagecol\":\"1\",\"sdteacherimagecolspan\":\"1\",\"sdteacherimageelement\":\"1\",\"sdteacherimagecustom\":\"\",\"sdteacher-titlerow\":\"0\",\"sdteacher-titlecol\":\"1\",\"sdteacher-titlecolspan\":\"1\",\"sdteacher-titleelement\":\"1\",\"sdteacher-titlecustom\":\"\",\"sdteacher-titlelinktype\":\"0\",\"sddescriptionrow\":\"0\",\"sddescriptioncol\":\"1\",\"sddescriptioncolspan\":\"1\",\"sddescriptionelement\":\"1\",\"sddescriptioncustom\":\"\",\"sddescriptionlinktype\":\"0\",\"tip_title\":\"Sermon Information\",\"tooltip\":\"1\",\"tip_item1_title\":\"Title\",\"tip_item1\":\"title\",\"tip_item2_title\":\"Details\",\"tip_item2\":\"title\",\"tip_item3_title\":\"Teacher\",\"tip_item3\":\"title\",\"tip_item4_title\":\"Reference\",\"tip_item4\":\"title\",\"tip_item5_title\":\"Date\",\"tip_item5\":\"title\",\"drowspanitem\":\"0\",\"drowspanitemspan\":\"4\",\"drowspanitemimage\":\"img-polaroid\",\"drowspanitempull\":\"pull-left\",\"dscripture1row\":\"1\",\"dscripture1col\":\"1\",\"dscripture1colspan\":\"1\",\"dscripture1element\":\"1\",\"dscripture1custom\":\"\",\"dscripture1linktype\":\"0\",\"dscripture2row\":\"0\",\"dscripture2col\":\"1\",\"dscripture2colspan\":\"1\",\"dscripture2element\":\"1\",\"dscripture2custom\":\"\",\"dscripture2linktype\":\"0\",\"dsecondaryrow\":\"0\",\"dsecondarycol\":\"1\",\"dsecondarycolspan\":\"1\",\"dsecondaryelement\":\"1\",\"dsecondarycustom\":\"\",\"dsecondarylinktype\":\"0\",\"djbsmediarow\":\"1\",\"djbsmediacol\":\"3\",\"djbsmediacolspan\":\"1\",\"djbsmediaelement\":\"1\",\"djbsmediacustom\":\"\",\"djbsmedialinktype\":\"0\",\"dcustomrow\":\"0\",\"dcustomcol\":\"1\",\"dcustomcolspan\":\"1\",\"dcustomelement\":\"1\",\"dcustomcustom\":\"\",\"dcustomtext\":\"\",\"dtitlerow\":\"1\",\"dtitlecol\":\"2\",\"dtitlecolspan\":\"3\",\"dtitleelement\":\"1\",\"dtitlecustom\":\"\",\"dtitlelinktype\":\"0\",\"ddaterow\":\"0\",\"ddatecol\":\"1\",\"ddatecolspan\":\"1\",\"ddateelement\":\"1\",\"ddatecustom\":\"\",\"ddatelinktype\":\"0\",\"dteacherrow\":\"0\",\"dteachercol\":\"1\",\"dteachercolspan\":\"1\",\"dteacherelement\":\"1\",\"dteachercustom\":\"\",\"dteacherlinktype\":\"0\",\"dteacherimagerrow\":\"0\",\"dteacherimagecol\":\"1\",\"dteacherimagecolspan\":\"1\",\"dteacherimageelement\":\"1\",\"dteacherimagecustom\":\"\",\"dteacher-titlerow\":\"0\",\"dteacher-titlecol\":\"1\",\"dteacher-titlecolspan\":\"1\",\"dteacher-titleelement\":\"1\",\"dteacher-titlecustom\":\"\",\"dteacher-titlelinktype\":\"0\",\"ddurationrow\":\"0\",\"ddurationcol\":\"1\",\"ddurationcolspan\":\"1\",\"ddurationelement\":\"1\",\"ddurationcustom\":\"\",\"ddurationlinktype\":\"0\",\"dstudyintrorow\":\"0\",\"dstudyintrocol\":\"1\",\"dstudyintrocolspan\":\"6\",\"dstudyintroelement\":\"1\",\"dstudyintrocustom\":\"\",\"dstudyintrolinktype\":\"0\",\"dseriesrow\":\"0\",\"dseriescol\":\"1\",\"dseriescolspan\":\"1\",\"dserieselement\":\"1\",\"dseriescustom\":\"\",\"dserieslinktype\":\"0\",\"dseriesthumbnailrow\":\"0\",\"dseriesthumbnailcol\":\"1\",\"dseriesthumbnailcolspan\":\"1\",\"dseriesthumbnailelement\":\"1\",\"dseriesthumbnailcustom\":\"\",\"dseriesthumbnaillinktype\":\"0\",\"dseriesdescriptionrow\":\"0\",\"dseriesdescriptioncol\":\"1\",\"dseriesdescriptioncolspan\":\"1\",\"dseriesdescriptionelement\":\"1\",\"dseriesdescriptioncustom\":\"\",\"dseriesdescriptionlinktype\":\"0\",\"dsubmittedrow\":\"0\",\"dsubmittedcol\":\"1\",\"dsubmittedcolspan\":\"1\",\"dsubmittedelement\":\"1\",\"dsubmittedcustom\":\"\",\"dsubmittedlinktype\":\"0\",\"dhitsrow\":\"0\",\"dhitscol\":\"1\",\"dhitscolspan\":\"6\",\"dhitselement\":\"1\",\"dhitscustom\":\"\",\"dhitslinktype\":\"0\",\"ddownloadsrow\":\"0\",\"ddownloadscol\":\"1\",\"ddownloadscolspan\":\"1\",\"ddownloadselement\":\"1\",\"ddownloadscustom\":\"\",\"ddownloadslinktype\":\"0\",\"dstudynumberrow\":\"0\",\"dstudynumbercol\":\"1\",\"dstudynumbercolspan\":\"1\",\"dstudynumberelement\":\"1\",\"dstudynumbercustom\":\"\",\"dstudynumberlinktype\":\"0\",\"dtopicrow\":\"0\",\"dtopiccol\":\"1\",\"dtopiccolspan\":\"6\",\"dtopicelement\":\"1\",\"dtopiccustom\":\"\",\"dtopiclinktype\":\"0\",\"dlocationsrow\":\"0\",\"dlocationscol\":\"1\",\"dlocationscolspan\":\"1\",\"dlocationselement\":\"1\",\"dlocationscustom\":\"\",\"dlocationslinktype\":\"0\",\"dmessagetyperow\":\"0\",\"dmessagetypecol\":\"1\",\"dmessagetypecolspan\":\"6\",\"dmessagetypeelement\":\"1\",\"dmessagetypecustom\":\"\",\"dmessagetypelinktype\":\"0\",\"dthumbnailrow\":\"0\",\"dthumbnailcol\":\"1\",\"dthumbnailcolspan\":\"1\",\"dthumbnailelement\":\"1\",\"dthumbnailcustom\":\"\",\"dthumbnaillinktype\":\"0\",\"landing_hide\":\"0\",\"landing_default_order\":\"ASC\",\"landing_hidelabel\":\"Show\\/Hide All\",\"headingorder_1\":\"teachers\",\"headingorder_2\":\"series\",\"headingorder_3\":\"books\",\"headingorder_4\":\"topics\",\"headingorder_5\":\"locations\",\"headingorder_6\":\"messagetypes\",\"headingorder_7\":\"years\",\"showteachers\":\"1\",\"landingteachersuselimit\":\"0\",\"landingteacherslimit\":\"\",\"teacherslabel\":\"Speakers\",\"linkto\":\"1\",\"showseries\":\"1\",\"landingseriesuselimit\":\"0\",\"landingserieslimit\":\"\",\"serieslabel\":\"Series\",\"series_linkto\":\"0\",\"showbooks\":\"1\",\"landingbookslimit\":\"\",\"bookslabel\":\"Books\",\"showtopics\":\"1\",\"landingtopicslimit\":\"\",\"topicslabel\":\"Topics\",\"showlocations\":\"1\",\"landinglocationsuselimit\":\"0\",\"landinglocationslimit\":\"\",\"locationslabel\":\"Locations\",\"showmessagetypes\":\"1\",\"landingmessagetypeuselimit\":\"0\",\"landingmessagetypeslimit\":\"\",\"messagetypeslabel\":\"Message Types\",\"showyears\":\"1\",\"landingyearslimit\":\"\",\"yearslabel\":\"Years\",\"series_order\":\"2\",\"books_order\":\"2\",\"teachers_order\":\"2\",\"years_order\":\"1\",\"topics_order\":\"2\",\"locations_order\":\"2\",\"messagetypes_order\":\"2\"}', + 'Default', 'textfile24.png', 'pdf24.png', 7490, 1); + +-- Dump of table #__bsms_timeset +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_timeset` (`timeset`, `backup`) +VALUES + ('1281646339', '1281646339'); + +-- Dump of table #__bsms_topics +-- ------------------------------------------------------------ + +INSERT INTO `#__bsms_topics` (`id`, `topic_text`, `published`, `params`, `asset_id`, `language`, `access`) +VALUES + (1, 'JBS_TOP_ABORTION', 1, NULL, 7491, '*', 1), + (2, 'JBS_TOP_GODS_ACTIVITY', 1, NULL, 7492, '*', 1), + (3, 'JBS_TOP_ADDICTION', 1, NULL, 7493, '*', 1), + (4, 'JBS_TOP_AFTERLIFE', 1, NULL, 7494, '*', 1), + (5, 'JBS_TOP_APOLOGETICS', 1, NULL, 7495, '*', 1), + (6, 'JBS_TOP_GODS_ATTRIBUTES', 1, NULL, 7496, '*', 1), + (7, 'JBS_TOP_BAPTISM', 1, NULL, 7497, '*', 1), + (8, 'JBS_TOP_BASICS_OF_CHRISTIANITY', 1, NULL, 7498, '*', 1), + (9, 'JBS_TOP_BECOMING_A_CHRISTIAN', 1, NULL, 7499, '*', 1), + (10, 'JBS_TOP_BIBLE', 1, NULL, 7500, '*', 1), + (11, 'JBS_TOP_JESUS_BIRTH', 1, NULL, 7501, '*', 1), + (12, 'JBS_TOP_CHILDREN', 1, NULL, 7502, '*', 1), + (13, 'JBS_TOP_CHRIST', 1, NULL, 7503, '*', 1), + (14, 'JBS_TOP_CHRISTIAN_CHARACTER_FRUITS', 1, NULL, 7504, '*', 1), + (15, 'JBS_TOP_CHRISTIAN_VALUES', 1, NULL, 7505, '*', 1), + (16, 'JBS_TOP_CHRISTMAS_SEASON', 1, NULL, 7506, '*', 1), + (17, 'JBS_TOP_CHURCH', 1, NULL, 7507, '*', 1), + (18, 'JBS_TOP_COMMUNICATION', 1, NULL, 7508, '*', 1), + (19, 'JBS_TOP_COMMUNION___LORDS_SUPPER', 1, NULL, 7509, '*', 1), + (21, 'JBS_TOP_CREATION', 1, NULL, 7510, '*', 1), + (22, 'JBS_TOP_JESUS_CROSS_FINAL_WEEK', 1, NULL, 7511, '*', 1), + (23, 'JBS_TOP_CULTS', 1, NULL, 7512, '*', 1), + (24, 'JBS_TOP_DEATH', 1, NULL, 7513, '*', 1), + (26, 'JBS_TOP_DESCRIPTIONS_OF_GOD', 1, NULL, 7514, '*', 1), + (27, 'JBS_TOP_DISCIPLES', 1, NULL, 7515, '*', 1), + (28, 'JBS_TOP_DISCIPLESHIP', 1, NULL, 7516, '*', 1), + (29, 'JBS_TOP_JESUS_DIVINITY', 1, NULL, 7517, '*', 1), + (30, 'JBS_TOP_DIVORCE', 1, NULL, 7518, '*', 1), + (32, 'JBS_TOP_EASTER_SEASON', 1, NULL, 7519, '*', 1), + (33, 'JBS_TOP_EMOTIONS', 1, NULL, 7520, '*', 1), + (34, 'JBS_TOP_ENTERTAINMENT', 1, NULL, 7521, '*', 1), + (35, 'JBS_TOP_EVANGELISM', 1, NULL, 7522, '*', 1), + (36, 'JBS_TOP_FAITH', 1, NULL, 7523, '*', 1), + (37, 'JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS', 1, NULL, 7524, '*', 1), + (39, 'JBS_TOP_FORGIVING_OTHERS', 1, NULL, 7525, '*', 1), + (40, 'JBS_TOP_GODS_FORGIVENESS', 1, NULL, 7526, '*', 1), + (41, 'JBS_TOP_FRIENDSHIP', 1, NULL, 7527, '*', 1), + (42, 'JBS_TOP_FULFILLMENT_IN_LIFE', 1, NULL, 7528, '*', 1), + (43, 'JBS_TOP_FUND_RAISING_RALLY', 1, NULL, 7529, '*', 1), + (44, 'JBS_TOP_FUNERALS', 1, NULL, 7530, '*', 1), + (45, 'JBS_TOP_GIVING', 1, NULL, 7531, '*', 1), + (46, 'JBS_TOP_GODS_WILL', 1, NULL, 7532, '*', 1), + (47, 'JBS_TOP_HARDSHIP_OF_LIFE', 1, NULL, 7533, '*', 1), + (48, 'JBS_TOP_HOLY_SPIRIT', 1, NULL, 7534, '*', 1), + (50, 'JBS_TOP_JESUS_HUMANITY', 1, NULL, 7535, '*', 1), + (52, 'JBS_TOP_KINGDOM_OF_GOD', 1, NULL, 7536, '*', 1), + (55, 'JBS_TOP_LEADERSHIP_ESSENTIALS', 1, NULL, 7537, '*', 1), + (56, 'JBS_TOP_JESUS_LIFE', 1, NULL, 7538, '*', 1), + (57, 'JBS_TOP_LOVE', 1, NULL, 7539, '*', 1), + (58, 'JBS_TOP_GODS_LOVE', 1, NULL, 7540, '*', 1), + (59, 'JBS_TOP_MARRIAGE', 1, NULL, 7541, '*', 1), + (61, 'JBS_TOP_JESUS_MIRACLES', 1, NULL, 7542, '*', 1), + (62, 'JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY', 1, NULL, 7543, '*', 1), + (63, 'JBS_TOP_MONEY', 1, NULL, 7544, '*', 1), + (65, 'JBS_TOP_GODS_NATURE', 1, NULL, 7545, '*', 1), + (66, 'JBS_TOP_OUR_NEED_FOR_GOD', 1, NULL, 7546, '*', 1), + (69, 'JBS_TOP_PARABLES', 1, NULL, 7547, '*', 1), + (70, 'JBS_TOP_PARANORMAL', 1, NULL, 7548, '*', 1), + (71, 'JBS_TOP_PARENTING', 1, NULL, 7549, '*', 1), + (73, 'JBS_TOP_POVERTY', 1, NULL, 7550, '*', 1), + (74, 'JBS_TOP_PRAYER', 1, NULL, 7551, '*', 1), + (76, 'JBS_TOP_PROMINENT_N_T__MEN', 1, NULL, 7552, '*', 1), + (77, 'JBS_TOP_PROMINENT_N_T__WOMEN', 1, NULL, 7553, '*', 1), + (78, 'JBS_TOP_PROMINENT_O_T__MEN', 1, NULL, 7554, '*', 1), + (79, 'JBS_TOP_PROMINENT_O_T__WOMEN', 1, NULL, 7555, '*', 1), + (82, 'JBS_TOP_MESSIANIC_PROPHECIES', 1, NULL, 7556, '*', 1), + (83, 'JBS_TOP_RACISM', 1, NULL, 7557, '*', 1), + (84, 'JBS_TOP_JESUS_RESURRECTION', 1, NULL, 7558, '*', 1), + (85, 'JBS_TOP_SECOND_COMING', 1, NULL, 7559, '*', 1), + (86, 'JBS_TOP_SEXUALITY', 1, NULL, 7560, '*', 1), + (87, 'JBS_TOP_SIN', 1, NULL, 7561, '*', 1), + (88, 'JBS_TOP_SINGLENESS', 1, NULL, 7562, '*', 1), + (89, 'JBS_TOP_SMALL_GROUPS', 1, NULL, 7563, '*', 1), + (90, 'JBS_TOP_SPIRITUAL_DISCIPLINES', 1, NULL, 7564, '*', 1), + (91, 'JBS_TOP_SPIRITUAL_GIFTS', 1, NULL, 7565, '*', 1), + (92, 'JBS_TOP_SUPERNATURAL', 1, NULL, 7566, '*', 1), + (93, 'JBS_TOP_JESUS_TEACHING', 1, NULL, 7567, '*', 1), + (94, 'JBS_TOP_TEMPTATION', 1, NULL, 7568, '*', 1), + (95, 'JBS_TOP_TEN_COMMANDMENTS', 1, NULL, 7569, '*', 1), + (97, 'JBS_TOP_TRUTH', 1, NULL, 7570, '*', 1), + (98, 'JBS_TOP_TWELVE_APOSTLES', 1, NULL, 7571, '*', 1), + (100, 'JBS_TOP_WEDDINGS', 1, NULL, 7572, '*', 1), + (101, 'JBS_TOP_WORKPLACE_ISSUES', 1, NULL, 7573, '*', 1), + (102, 'JBS_TOP_WORLD_RELIGIONS', 1, NULL, 7574, '*', 1), + (103, 'JBS_TOP_FAMILY', 1, NULL, 7575, '*', 1), + (104, 'JBS_TOP_FREEDOM', 1, NULL, 7576, '*', 1), + (105, 'JBS_TOP_STEWARDSHIP', 1, NULL, 7577, '*', 1), + (106, 'JBS_TOP_WORSHIP', 1, NULL, 7578, '*', 1), + (107, 'JBS_TOP_HOLIDAYS', 1, NULL, 7579, '*', 1), + (108, 'JBS_TOP_SPECIAL_SERVICES', 1, NULL, 7580, '*', 1), + (109, 'JBS_TOP_MEN', 1, NULL, 7581, '*', 1), + (110, 'JBS_TOP_WOMEN', 1, NULL, 7582, '*', 1), + (111, 'JBS_TOP_HOT_TOPICS', 1, NULL, 7583, '*', 1), + (112, 'JBS_TOP_NARNIA', 1, NULL, 7584, '*', 1), + (113, 'JBS_TOP_DA_VINCI_CODE', 1, NULL, 7585, '*', 1), + (114, 'JBS_TOP_RAIN', 1, NULL, 7590, '*', 1); diff --git a/build/com_proclaim-9.2.1/admin/install/sql/install.sql b/build/com_proclaim-9.2.1/admin/install/sql/install.sql new file mode 100644 index 0000000000..5967f7f2d9 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/install.sql @@ -0,0 +1,786 @@ +DROP TABLE IF EXISTS `#__bsms_install`; + +-- Dump of table #__bsms_update +-- ------------------------------------------------------------ + +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `version` VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +INSERT IGNORE INTO `#__bsms_update` (`id`, `version`) +VALUES + (1, '9.2.0'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_admin` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_admin` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `drop_tables` INT(3) DEFAULT '0', + `params` TEXT, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `installstate` TEXT, + `debug` TINYINT(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_books` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_books` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `bookname` VARCHAR(250) DEFAULT NULL, + `booknumber` INT(5) DEFAULT NULL, + `published` TINYINT(3) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_comments` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_comments` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `published` TINYINT(3) NOT NULL DEFAULT '0', + `study_id` INT(11) NOT NULL DEFAULT '0', + `user_id` INT(11) NOT NULL DEFAULT '0', + `full_name` VARCHAR(50) NOT NULL DEFAULT '', + `user_email` VARCHAR(100) NOT NULL DEFAULT '', + `comment_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_text` TEXT NOT NULL, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `language` CHAR(7) NOT NULL COMMENT 'The language code for the Comments.', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_locations` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_locations` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `location_text` VARCHAR(250) DEFAULT NULL, + `contact_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Used to link to com_contact', + `address` TEXT, + `suburb` VARCHAR(100) DEFAULT NULL, + `state` VARCHAR(100) DEFAULT NULL, + `country` VARCHAR(100) DEFAULT NULL, + `postcode` VARCHAR(100) DEFAULT NULL, + `telephone` VARCHAR(255) DEFAULT NULL, + `fax` VARCHAR(255) DEFAULT NULL, + `misc` MEDIUMTEXT, + `image` VARCHAR(255) DEFAULT NULL, + `email_to` VARCHAR(255) DEFAULT NULL, + `default_con` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', + `checked_out` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `params` TEXT NOT NULL, + `user_id` INT(11) NOT NULL DEFAULT '0', + `mobile` VARCHAR(255) NOT NULL DEFAULT '', + `webpage` VARCHAR(255) NOT NULL DEFAULT '', + `sortname1` VARCHAR(255) NOT NULL, + `sortname2` VARCHAR(255) NOT NULL, + `sortname3` VARCHAR(255) NOT NULL, + `language` CHAR(7) NOT NULL, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `created_by` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `created_by_alias` VARCHAR(255) NOT NULL DEFAULT '', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified_by` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `metakey` TEXT NOT NULL, + `metadesc` TEXT NOT NULL, + `metadata` TEXT NOT NULL, + `featured` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Set if article is featured.', + `xreference` VARCHAR(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', + `version` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `hits` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `publish_up` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `publish_down` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `published` TINYINT(3) NOT NULL DEFAULT '1', + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `ordering` INT(11) NOT NULL DEFAULT '0', + `landing_show` INT(3) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_mediafiles` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_mediafiles` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `study_id` INT(5) DEFAULT NULL, + `server_id` INT(5) DEFAULT NULL, + `podcast_id` VARCHAR(50) DEFAULT NULL, + `metadata` TEXT NOT NULL, + `ordering` INT(11) NOT NULL DEFAULT '0', + `createdate` DATETIME DEFAULT NULL, + `hits` INT(10) DEFAULT '0', + `published` TINYINT(3) NOT NULL DEFAULT '1', + `comment` TEXT, + `downloads` INT(10) DEFAULT '0', + `plays` INT(10) DEFAULT '0', + `params` TEXT, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `language` CHAR(7) NOT NULL COMMENT 'The language code for the MediaFile.', + `created_by` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `created_by_alias` VARCHAR(255) NOT NULL DEFAULT '', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified_by` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `checked_out` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_study_id` (`study_id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_message_type` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_message_type` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `message_type` TEXT NOT NULL, + `alias` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT '1', + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `ordering` INT(11) NOT NULL DEFAULT '0', + `landing_show` INT(3) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_podcast` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_podcast` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `title` VARCHAR(100) DEFAULT NULL, + `website` VARCHAR(100) DEFAULT NULL, + `description` TEXT, + `image` VARCHAR(130) DEFAULT NULL, + `imageh` INT(3) DEFAULT NULL, + `imagew` INT(3) DEFAULT NULL, + `author` VARCHAR(100) DEFAULT NULL, + `podcastimage` VARCHAR(130) DEFAULT NULL, + `podcastsearch` VARCHAR(255) DEFAULT NULL, + `filename` VARCHAR(150) DEFAULT NULL, + `language` VARCHAR(10) DEFAULT 'en-us', + `editor_name` VARCHAR(150) DEFAULT NULL, + `editor_email` VARCHAR(150) DEFAULT NULL, + `podcastlimit` INT(5) DEFAULT NULL, + `published` TINYINT(3) NOT NULL DEFAULT '1', + `episodetitle` INT(11) DEFAULT NULL, + `custom` VARCHAR(200) DEFAULT NULL, + `detailstemplateid` INT(11) DEFAULT NULL, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `alternatelink` VARCHAR(300) DEFAULT NULL COMMENT 'replaces podcast file link on subscription', + `alternateimage` VARCHAR(150) DEFAULT NULL COMMENT 'alternate image path for podcast', + `podcast_subscribe_show` INT(3) DEFAULT NULL, + `podcast_image_subscribe` VARCHAR(150) DEFAULT NULL COMMENT 'The image to use for the podcast subscription image', + `podcast_subscribe_desc` VARCHAR(150) DEFAULT NULL COMMENT 'Words to go below podcast subscribe image', + `alternatewords` VARCHAR(20) DEFAULT NULL, + `episodesubtitle` INT(11) DEFAULT NULL, + `customsubtitle` VARCHAR(200) DEFAULT NULL, + `linktype` INT(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_series` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_series` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `series_text` TEXT, + `alias` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', + `teacher` INT(3) DEFAULT NULL, + `description` TEXT, + `series_thumbnail` VARCHAR(150) DEFAULT NULL, + `published` TINYINT(3) NOT NULL DEFAULT '1', + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `ordering` INT(11) NOT NULL DEFAULT '0', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `language` CHAR(7) NOT NULL COMMENT 'The language code for the Series.', + `landing_show` INT(3) DEFAULT NULL, + `pc_show` INT(3) NOT NULL DEFAULT '1' COMMENT 'For displaying on + podcasts page', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_servers` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_servers` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `server_name` VARCHAR(250) NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT '1', + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `type` CHAR(255) NOT NULL, + `params` TEXT NOT NULL, + `media` TEXT NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_studies` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_studies` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `studydate` DATETIME DEFAULT NULL, + `teacher_id` INT(11) DEFAULT '1', + `studynumber` VARCHAR(100) DEFAULT '', + `booknumber` INT(3) DEFAULT '101', + `chapter_begin` INT(3) DEFAULT '1', + `verse_begin` INT(3) DEFAULT '1', + `chapter_end` INT(3) DEFAULT '1', + `verse_end` INT(3) DEFAULT '1', + `secondary_reference` TEXT, + `booknumber2` VARCHAR(4) DEFAULT NULL, + `chapter_begin2` VARCHAR(4) DEFAULT NULL, + `verse_begin2` VARCHAR(4) DEFAULT NULL, + `chapter_end2` VARCHAR(4) DEFAULT NULL, + `verse_end2` VARCHAR(4) DEFAULT NULL, + `prod_dvd` VARCHAR(100) DEFAULT NULL, + `prod_cd` VARCHAR(100) DEFAULT NULL, + `server_cd` VARCHAR(10) DEFAULT NULL, + `server_dvd` VARCHAR(10) DEFAULT NULL, + `image_cd` VARCHAR(10) DEFAULT NULL, + `image_dvd` VARCHAR(10) DEFAULT '0', + `studytext2` TEXT, + `comments` TINYINT(1) DEFAULT '1', + `hits` INT(10) NOT NULL DEFAULT '0', + `user_id` INT(10) DEFAULT NULL, + `user_name` VARCHAR(50) DEFAULT NULL, + `show_level` VARCHAR(100) NOT NULL DEFAULT '0', + `location_id` INT(3) DEFAULT NULL, + `studytitle` TEXT, + `alias` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', + `studyintro` TEXT, + `messagetype` VARCHAR(100) DEFAULT '1', + `series_id` INT(3) DEFAULT '0', + `studytext` TEXT, + `thumbnailm` TEXT, + `thumbhm` INT(11) DEFAULT NULL, + `thumbwm` INT(11) DEFAULT NULL, + `params` TEXT, + `checked_out` INT(11) UNSIGNED NOT NULL DEFAULT '0', + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `published` TINYINT(3) NOT NULL DEFAULT '0', + `publish_up` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `publish_down` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified_by` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `ordering` INT(11) NOT NULL DEFAULT '0', + `language` CHAR(7) NOT NULL COMMENT 'The language code for the Studies.', + `download_id` INT(10) NOT NULL DEFAULT '0' COMMENT 'Used for link to download of mediafile', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`), + KEY `idx_seriesid` (`series_id`), + KEY `idx_user` (`user_id`), + KEY `idx_createdby` (`user_id`), + KEY `idx_checkout` (`checked_out`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_studytopics` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_studytopics` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `study_id` INT(3) NOT NULL DEFAULT '0', + `topic_id` INT(3) NOT NULL DEFAULT '0', + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_study` (`study_id`), + KEY `idx_topic` (`topic_id`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_teachers` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_teachers` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `teacher_image` TEXT, + `teacher_thumbnail` TEXT, + `teachername` VARCHAR(250) NOT NULL DEFAULT '', + `alias` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', + `title` VARCHAR(250) DEFAULT NULL, + `phone` VARCHAR(50) DEFAULT NULL, + `email` VARCHAR(100) DEFAULT NULL, + `website` TEXT, + `information` TEXT, + `image` TEXT, + `imageh` TEXT, + `imagew` TEXT, + `thumb` TEXT, + `thumbw` TEXT, + `thumbh` TEXT, + `short` TEXT, + `ordering` INT(11) NOT NULL DEFAULT '0', + `catid` INT(3) DEFAULT '1', + `list_show` TINYINT(1) NOT NULL DEFAULT '1', + `published` TINYINT(3) NOT NULL DEFAULT '1', + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + `language` CHAR(7) NOT NULL COMMENT 'The language code for the Teachers.', + `facebooklink` VARCHAR(150) DEFAULT NULL, + `twitterlink` VARCHAR(150) DEFAULT NULL, + `bloglink` VARCHAR(150) DEFAULT NULL, + `link1` VARCHAR(150) DEFAULT NULL, + `linklabel1` VARCHAR(150) DEFAULT NULL, + `link2` VARCHAR(150) DEFAULT NULL, + `linklabel2` VARCHAR(150) DEFAULT NULL, + `link3` VARCHAR(150) DEFAULT NULL, + `linklabel3` VARCHAR(150) DEFAULT NULL, + `contact` INT(11) DEFAULT NULL, + `address` MEDIUMTEXT NOT NULL, + `landing_show` INT(3) DEFAULT NULL, + `address1` MEDIUMTEXT NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_templatecode` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_templatecode` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `published` TINYINT(3) NOT NULL DEFAULT '1', + `type` TINYINT(3) NOT NULL, + `filename` TEXT NOT NULL, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `templatecode` MEDIUMTEXT NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_templates` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_templates` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `type` VARCHAR(255) NOT NULL, + `tmpl` LONGTEXT NOT NULL, + `published` TINYINT(3) NOT NULL DEFAULT '1', + `params` LONGTEXT, + `title` TEXT, + `text` TEXT, + `pdf` TEXT, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_timeset` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_timeset` ( + `timeset` VARCHAR(14) NOT NULL DEFAULT '', + `backup` VARCHAR(14) DEFAULT NULL, + PRIMARY KEY (`timeset`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__bsms_topics` +-- + +CREATE TABLE IF NOT EXISTS `#__bsms_topics` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `topic_text` TEXT, + `published` TINYINT(3) NOT NULL DEFAULT '1', + `params` VARCHAR(511) DEFAULT NULL, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.', + `language` CHAR(7) DEFAULT '*', + `access` INT(10) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `idx_state` (`published`), + KEY `idx_access` (`access`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8; + +-- Dump of table #__bsms_admin +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_admin` (`id`, `drop_tables`, `params`, `asset_id`, `access`, `installstate`, `debug`) +VALUES +(1, 0, + '{\"simple_mode\":\"1\",\"metakey\":\"\",\"metadesc\":\"\",\"compat_mode\":\"0\",\"studylistlimit\":\"10\",\"show_location_media\":\"0\",\"popular_limit\":\"\",\"character_filter\":\"1\",\"format_popular\":\"0\",\"default_main_image\":\"\",\"default_series_image\":\"\",\"default_teacher_image\":\"\",\"default_download_image\":\"\",\"default_showHide_image\":\"\",\"thumbnail_teacher_size\":\"150\",\"thumbnail_series_size\":\"150\",\"thumbnail_study_size\":\"150\",\"location_id\":\"-1\",\"teacher_id\":\"1\",\"series_id\":\"-1\",\"booknumber\":\"-1\",\"messagetype\":\"-1\",\"default_study_image\":\"\",\"download\":\"1\",\"target\":\" \",\"server\":\"1\",\"podcast\":[\"-1\"],\"from\":\"x\",\"to\":\"x\",\"pFrom\":\"x\",\"pTo\":\"x\",\"controls\":\"1\",\"jwplayer_pro\":\"0\",\"jwplayer_key\":\"\",\"jwplayer_cdn\":\"\",\"jwplayer_skin\":\"\",\"jwplayer_autostart\":\"false\",\"jwplayer_fallback\":\"true\",\"jwplayer_mute\":\"false\",\"jwplayer_stagevideo\":\"false\",\"jwplayer_primary\":\"html5\",\"playlist\":\"false\",\"jwplayer_listbar\":\"false\",\"jwplayer_logo\":\"\",\"sharing\":\"false\",\"jwplayer_related\":\"false\",\"jwplayer_advertising\":\"\",\"rtmp\":\"Comming Soon\",\"ga\":\"Comming Soon\",\"jwplayer_sitecatalyst\":\"Comming Soon\",\"captions\":\"false\"}', + 7587, 1, NULL, 0); + + +-- Dump of table #__bsms_books +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_books` (`id`, `bookname`, `booknumber`, `published`) +VALUES +(1, 'JBS_BBK_GENESIS', 101, 1), +(2, 'JBS_BBK_EXODUS', 102, 1), +(3, 'JBS_BBK_LEVITICUS', 103, 1), +(4, 'JBS_BBK_NUMBERS', 104, 1), +(5, 'JBS_BBK_DEUTERONOMY', 105, 1), +(6, 'JBS_BBK_JOSHUA', 106, 1), +(7, 'JBS_BBK_JUDGES', 107, 1), +(8, 'JBS_BBK_RUTH', 108, 1), +(9, 'JBS_BBK_1SAMUEL', 109, 1), +(10, 'JBS_BBK_2SAMUEL', 110, 1), +(11, 'JBS_BBK_1KINGS', 111, 1), +(12, 'JBS_BBK_2KINGS', 112, 1), +(13, 'JBS_BBK_1CHRONICLES', 113, 1), +(14, 'JBS_BBK_2CHRONICLES', 114, 1), +(15, 'JBS_BBK_EZRA', 115, 1), +(16, 'JBS_BBK_NEHEMIAH', 116, 1), +(17, 'JBS_BBK_ESTHER', 117, 1), +(18, 'JBS_BBK_JOB', 118, 1), +(19, 'JBS_BBK_PSALM', 119, 1), +(20, 'JBS_BBK_PROVERBS', 120, 1), +(21, 'JBS_BBK_ECCLESIASTES', 121, 1), +(22, 'JBS_BBK_SONG_OF_SOLOMON', 122, 1), +(23, 'JBS_BBK_ISAIAH', 123, 1), +(24, 'JBS_BBK_JEREMIAH', 124, 1), +(25, 'JBS_BBK_LAMENTATIONS', 125, 1), +(26, 'JBS_BBK_EZEKIEL', 126, 1), +(27, 'JBS_BBK_DANIEL', 127, 1), +(28, 'JBS_BBK_HOSEA', 128, 1), +(29, 'JBS_BBK_JOEL', 129, 1), +(30, 'JBS_BBK_AMOS', 130, 1), +(31, 'JBS_BBK_OBADIAH', 131, 1), +(32, 'JBS_BBK_JONAH', 132, 1), +(33, 'JBS_BBK_MICAH', 133, 1), +(34, 'JBS_BBK_NAHUM', 134, 1), +(35, 'JBS_BBK_HABAKKUK', 135, 1), +(36, 'JBS_BBK_ZEPHANIAH', 136, 1), +(37, 'JBS_BBK_HAGGAI', 137, 1), +(38, 'JBS_BBK_ZECHARIAH', 138, 1), +(39, 'JBS_BBK_MALACHI', 139, 1), +(40, 'JBS_BBK_MATTHEW', 140, 1), +(41, 'JBS_BBK_MARK', 141, 1), +(42, 'JBS_BBK_LUKE', 142, 1), +(43, 'JBS_BBK_JOHN', 143, 1), +(44, 'JBS_BBK_ACTS', 144, 1), +(45, 'JBS_BBK_ROMANS', 145, 1), +(46, 'JBS_BBK_1CORINTHIANS', 146, 1), +(47, 'JBS_BBK_2CORINTHIANS', 147, 1), +(48, 'JBS_BBK_GALATIANS', 148, 1), +(49, 'JBS_BBK_EPHESIANS', 149, 1), +(50, 'JBS_BBK_PHILIPPIANS', 150, 1), +(51, 'JBS_BBK_COLOSSIANS', 151, 1), +(52, 'JBS_BBK_1THESSALONIANS', 152, 1), +(53, 'JBS_BBK_2THESSALONIANS', 153, 1), +(54, 'JBS_BBK_1TIMOTHY', 154, 1), +(55, 'JBS_BBK_2TIMOTHY', 155, 1), +(56, 'JBS_BBK_TITUS', 156, 1), +(57, 'JBS_BBK_PHILEMON', 157, 1), +(58, 'JBS_BBK_HEBREWS', 158, 1), +(59, 'JBS_BBK_JAMES', 159, 1), +(60, 'JBS_BBK_1PETER', 160, 1), +(61, 'JBS_BBK_2PETER', 161, 1), +(62, 'JBS_BBK_1JOHN', 162, 1), +(63, 'JBS_BBK_2JOHN', 163, 1), +(64, 'JBS_BBK_3JOHN', 164, 1), +(65, 'JBS_BBK_JUDE', 165, 1), +(66, 'JBS_BBK_REVELATION', 166, 1), +(67, 'JBS_BBK_TOBIT', 167, 1), +(68, 'JBS_BBK_JUDITH', 168, 1), +(69, 'JBS_BBK_1MACCABEES', 169, 1), +(70, 'JBS_BBK_2MACCABEES', 170, 1), +(71, 'JBS_BBK_WISDOM', 171, 1), +(72, 'JBS_BBK_SIRACH', 172, 1), +(73, 'JBS_BBK_BARUCH', 173, 1); + +-- Dump of table #__bsms_locations +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_locations` (`id`, `location_text`, `contact_id`, `address`, `suburb`, `state`, `country`, `postcode`, `telephone`, `fax`, `misc`, `image`, `email_to`, `default_con`, `checked_out`, `checked_out_time`, `params`, `user_id`, `mobile`, `webpage`, `sortname1`, `sortname2`, `sortname3`, `language`, `created`, `created_by`, `created_by_alias`, `modified`, `modified_by`, `metakey`, `metadesc`, `metadata`, `featured`, `xreference`, `version`, `hits`, `publish_up`, `publish_down`, `published`, `asset_id`, `access`, `ordering`, `landing_show`) +VALUES +(1, 'My Location', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, '0000-00-00 00:00:00', '', 0, + '', '', '', '', '', '', '0000-00-00 00:00:00', 0, '', '0000-00-00 00:00:00', 0, '', '', '', 0, '', 1, 0, + '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 7480, 1, 1, NULL); + +-- Dump of table #__bsms_mediafiles +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_mediafiles` (`id`, `study_id`, `server_id`, `podcast_id`, `metadata`, `ordering`, `createdate`, `hits`, `published`, `comment`, `downloads`, `plays`, `params`, `asset_id`, `access`, `language`, `created_by`, `created_by_alias`, `modified`, `modified_by`, `checked_out`, `checked_out_time`) +VALUES +(1, 1, 1, '1', '{\"plays\":\"0\", \"downloads\":\"0\"}', 0, '2009-09-13 00:10:00', 0, 1, 'Sample Media file', 0, 10, + '{\"link_type\":\"\",\"docMan_id\":\"0\",\"article_id\":\"-1\",\"virtueMart_id\":\"0\",\"player\":\"7\",\"popup\":\"3\",\"mediacode\":\"\",\"filename\":\"\\/MediaFiles\\/2015\\/2015-008.mp3\",\"size\":false,\"special\":\"\",\"media_image\":\"images\\/biblestudy\\/speaker24.png\",\"mime_type\":\"audio\\/mp3\",\"playerwidth\":\"\",\"playerheight\":\"\",\"itempopuptitle\":\"\",\"itempopupfooter\":\"\",\"popupmargin\":\"50\",\"autostart\":\"false\"}', + 7481, 1, '*', 1, 'admin', '0000-00-00 00:00:00', 1, 0, '0000-00-00 00:00:00'), +(2, 1, 3, '', '', 0, '2010-03-12 18:10:00', 0, 1, '', 0, 6, + '{\"link_type\":\"0\",\"docMan_id\":\"0\",\"article_id\":\"-1\",\"virtueMart_id\":\"0\",\"player\":\"0\",\"popup\":\"2\",\"mediacode\":\"\",\"filename\":\"\\/images\\/growthgroupquestions\\/Colossians3_5-11Questions.pdf\",\"size\":0,\"special\":\"\",\"media_image\":\"images\\/biblestudy\\/pdf16.png\",\"mime_type\":\"application\\/pdf\",\"playerwidth\":\"\",\"playerheight\":\"\",\"itempopuptitle\":\"\",\"itempopupfooter\":\"\",\"popupmargin\":\"50\",\"autostart\":\"\"}', + 7593, 1, '*', 0, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00'), +(3, 1, 2, '', '', 0, '2015-07-28 19:18:07', 0, 1, '', 0, 0, + '{\"link_type\":\"0\",\"docMan_id\":\"0\",\"article_id\":\"-1\",\"virtueMart_id\":\"0\",\"player\":\"1\",\"popup\":\"3\",\"mediacode\":\"\",\"filename\":\"https:\\/\\/youtu.be\\/PsFo6MhAB9o\",\"size\":0,\"special\":\"\",\"media_image\":\"images\\/biblestudy\\/youtube24.png\",\"mime_type\":\"video\\/mp4\",\"playerwidth\":\"\",\"playerheight\":\"\",\"itempopuptitle\":\"\",\"itempopupfooter\":\"\",\"popupmargin\":\"50\",\"autostart\":\"\"}', + 7596, 1, '*', 0, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00'); + +-- Dump of table #__bsms_message_type +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_message_type` (`id`, `message_type`, `alias`, `published`, `asset_id`, `access`, `ordering`, `landing_show`) +VALUES +(1, 'Sunday', X'73756E646179', 1, 7482, 1, 1, NULL); + +-- Dump of table #__bsms_podcast +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_podcast` (`id`, `title`, `website`, `description`, `image`, `imageh`, `imagew`, `author`, `podcastimage`, `podcastsearch`, `filename`, `language`, `editor_name`, `editor_email`, `podcastlimit`, `published`, `episodetitle`, `custom`, `detailstemplateid`, `asset_id`, `access`, `alternatelink`, `alternateimage`, `podcast_subscribe_show`, `podcast_image_subscribe`, `podcast_subscribe_desc`, `alternatewords`, `episodesubtitle`, `customsubtitle`, `linktype`) +VALUES +(1, 'My Podcast', 'www.mywebsite.com', 'Podcast Description goes here', 'www.mywebsite.com/myimage.jpg', 30, 30, + 'Pastor Billy', 'www.mywebsite.com/myimage.jpg', 'jesus', 'mypodcast.xml', '*', 'Jim Editor', 'jim@mywebsite.com', + 50, 1, 0, '', 1, 7483, 1, '', '', 0, '', '', '', 0, '', 0); + +-- Dump of table #__bsms_series +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_series` (`id`, `series_text`, `alias`, `teacher`, `description`, `series_thumbnail`, `published`, `asset_id`, `ordering`, `access`, `language`, `landing_show`, `pc_show`) +VALUES +(1, 'Worship Series', X'776F72736869702D736572696573', -1, '', '', 1, 7484, 1, 1, '*', NULL, 1); + +-- Dump of table #__bsms_servers +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_servers` (`id`, `server_name`, `published`, `asset_id`, `access`, `type`, `params`, `media`) +VALUES +(1, 'Legacy MP3', 1, 7478, 1, 'legacy', + '{\"path\":\"\\/\\/www.calvarychapelnewberg.net\\/\",\"protocol\":\"http:\\/\\/\"}', + '{\"link_type\":\"1\",\"player\":\"7\",\"popup\":\"3\",\"mediacode\":\"\",\"media_image\":\"images\\/biblestudy\\/mp3.png\",\"mime_type\":\"audio\\/mp3\",\"autostart\":\"1\"}'), +(2, 'Legacy YouTube', 1, 7588, 1, 'legacy', '{\"path\":\"\",\"protocol\":\"http:\\/\\/\"}', + '{\"link_type\":\"0\",\"player\":\"1\",\"popup\":\"3\",\"mediacode\":\"\",\"media_image\":\"images\\/biblestudy\\/youtube24.png\",\"mime_type\":\"video\\/mp4\",\"autostart\":\"1\"}'), +(3, 'Legacy PDF', 1, 7589, 1, 'legacy', + '{\"path\":\"http:\\/\\/calvarynewberg.org\\/\",\"protocol\":\"http:\\/\\/\"}', + '{\"link_type\":\"1\",\"player\":\"0\",\"popup\":\"2\",\"mediacode\":\"\",\"media_image\":\"images\\/biblestudy\\/pdf16.png\",\"mime_type\":\"application\\/pdf\",\"autostart\":\"1\"}'); + + +-- Dump of table #__bsms_studies +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_studies` (`id`, `studydate`, `teacher_id`, `studynumber`, `booknumber`, `chapter_begin`, `verse_begin`, `chapter_end`, `verse_end`, `secondary_reference`, `booknumber2`, `chapter_begin2`, `verse_begin2`, `chapter_end2`, `verse_end2`, `prod_dvd`, `prod_cd`, `server_cd`, `server_dvd`, `image_cd`, `image_dvd`, `studytext2`, `comments`, `hits`, `user_id`, `user_name`, `show_level`, `location_id`, `studytitle`, `alias`, `studyintro`, `messagetype`, `series_id`, `studytext`, `thumbnailm`, `thumbhm`, `thumbwm`, `params`, `checked_out`, `checked_out_time`, `published`, `publish_up`, `publish_down`, `modified`, `modified_by`, `asset_id`, `access`, `ordering`, `language`, `download_id`) +VALUES +(1, '2010-03-13 00:10:00', 1, '2015-01', 151, 3, 5, 3, 11, '', '-1', '', '', '', '', NULL, NULL, NULL, NULL, NULL, + '0', NULL, 1, 0, 0, '', '0', 1, 'Four Steps to Defeating the Flesh', + X'666F75722D73746570732D746F2D646566656174696E672D7468652D666C657368', + 'If you’ve lived around Oregon very long you know what Oregon mud is like. The soils in the Willamette Valley contain a fair amount of clay. I remember trying to put in a sprinkler system when we first built our house. Foolishly, I thought I could beat the winter rains and get the system put in. Such was not the case. Towards the end I remember slogging around the yard—with each step I took it got harder and harder to walk as more and more mud clung to my shoes.', + '1', 1, + 'If you’ve lived around Oregon very long you know what Oregon mud is like. The soils in the Willamette Valley contain a fair amount of clay. I remember trying to put in a sprinkler system when we first built our house. Foolishly, I thought I could beat the winter rains and get the system put in. Such was not the case. Towards the end I remember slogging around the yard—with each step I took it got harder and harder to walk as more and more mud clung to my shoes. I use that analogy because the goal of becoming a Christian is to become like God in our character. We realize the old ways of sin just aren’t working for us and we come to Christ who forgives us and gives us eternal life. As Paul says: “old things have passed away, and look new things have come” (2 Cor 5:17). So far so good. The trouble starts when we begin walking around in this life. Instead of feeling light and free and pure—we feel the “old man” or “the flesh” sticking to our character like clay sticking to our shoes. The old ways of thinking, speaking, and acting are still with us—ready to take over at the slightest provocation or temptation. It makes it hard to walk with Christ effectively and smoothly. Paul says it well in: Romans 7:18 “For I know that nothing good lives in me, that is, in my flesh. For the desire to do what is good is with me, but there is no ability to do it. 19 For I do not do the good that I want to do, but I practice the evil that I do not want to do. 20 Now if I do what I do not want, I am no longer the one doing it, but it is the sin that lives in me.” So what’s a Christian to do? The goal is to be like Christ but the flesh seems to be so successful in holding us back. That’s what Colossians 3 and much of Chapter 4 is about. Paul outlines for us what the old character looks like, and what the new nature looks like by contrast. He describes the process of change as something as simple as changing your clothes. It’s simple in theory, difficult in practice, but totally worth the effort. He describes this change away from the old character with four actions: “put to death” (verse 5), “put away” (verse 8) and “put off” (verse 9), then we are to “put on” the new character of Christ (verse 10). The character traits that we are to kill, put away, and put off are: improper or unchecked desire, anger, and lying. From these three spring most of the things we associate with “the flesh”. 5 Paul starts off with “therefore”. In light of the fact that we are risen people, we need to start thinking like citizens of heaven (the new age), not like residents of earth (this age). Paul says for us to “put to death what belongs to your earthly nature.” The word “put to death” means: “to make dead.” How does that happen? Paul gives us a clue in Romans 8:13: “But if by the Spirit you put to death the deeds of the body, you will live.” So there is this cooperation that takes place between God’s Spirit and us. In reality, you will not be free from the presence and temptation to act in the old ways until you are given you new body. But as James 1:14 says: “But each person is tempted when he is drawn away and enticed by his own evil desires. 15 Then after desire has conceived, it gives birth to sin, and when sin is fully grown, it gives birth to death.   Evil thoughts will occur; it is what we do with them that matters. When they come we can, by the power of the Spirit, tell them they are dead and have no place in us anymore. Do it strongly; do it often. Picture those thoughts on a paper, and then nail that paper to the cross. Jesus died to rid you of acting on those thought patterns. The word “put to death” can mean: “to deprive of power.” Cut the supply lines to the old nature and it will become weak nd starve. So here is the big question: what in your life is still feeding the flesh? It’s different for everyone, mind you. Starve the flesh and it will go a long way to killing it. This is part 1: “kill the old ways, one thought at a time.” Next, Paul lists five manifestations of the flesh that we need to watch out for. Make no mistake—these are powerful forces in the human mind and are not easily dissuaded or killed. Sexual immorality. It means any sexual intimacy outside of the marriage between a man and a woman. Impurity means the character infected by immoral behavior. Lust refers to any unbridled passion but here likely refers to sexual desire that is out of bounds and out of control. Evil desire is probably better translated as lust—but could refer to the thoughts that precede lust. Remember again, it isn’t the temptation but what we do with it that matters. We sin when we focus on and even encourage impure thoughts that lead to impure actions. Greed, which is idolatry. Greed here is a general term for unchecked physical pleasure. Paul calls it greed because the worship of pleasure – the worship of anything for that matter – takes first place in front of God, and that is idolatry. In Paul’s day, literal idol worship was rampant, as was sexual immorality with temple prostitutes as part of that idolatry. And because sex is such a powerful thing, these actions led to impure thoughts, desires, and lusts. 6 God’s wrath is the natural outpouring against anyone who is not pure. Doing something that is sinful is disobeying God because He said “Be holy, even as I am holy” (Lev. 11:45). Some people say that a loving God cannot be a wrathful God. But you cannot have love without wrath against evil. Love means protecting the innocent against evil. It means coming against evil and destroying it. Just ask any parent who has lost a child to horrible violence—and you begin to understand the love and wrath of God. Before we get too smug in the opinion that we aren’t like those disobedient sinners—look at the next verse. 7 Before we knew Jesus we all disobeyed and were guilty as charged. “All have sinned and fall short of the glory of God” (Romans 3:23). We acted out these things (“walked”) because we were steeped in them. We could translate this verse as: “when your life consisted of such wretched things as these.” As fallen people we couldn’t help but act in these ways, but not anymore. Now we are steeped in the Messiah’s forgiving and cleansing love. We don’t have to act out the deeds of the flesh any more. And Paul goes onto to step 2 of how to do that next. 8 Step One is to “Kill kill, kill them all” – all the thoughts that come from the flesh and urge us to think and do things that are not like God. We should nail those thoughts to the cross. Step Two is to “put off” or “put away” the deeds of the flesh. The flesh should feel like a foreign intruder. We don’t just ignore it; we actively push it away. The Greek here is the picture of taking off your clothes. The flesh is like an old set of worn out clothes that, through the Spirit, we can literally take off. Paul helps us understand this by being very specific in another major area of the old nature: anger. He brings in five ways anger destroys us. Anger and wrath are related. Anger is Greek word for a plant that is bursting with juice. What a great picture of when we get red-hot with anger and our face literally flushes red with blood. Wrath means: “to rush in” and is what we do when we are angry. How often do we get angry and let our anger vent with hurtful words that later we wish we could take back. Malice is when we mean to hurt someone—often the result of anger. Slander is what we say about them to hurt them. It’s the Greek word: blasphema. In this case it is hurtful words about another, rather than God. Finally “filthy language” refers to the words used—words which hurt both the speaker and the hearer. Why do we get angry? There are many answers to that question—but I want to bring in four main ones: Frustration – when a goal is thwarted; like getting to work on time thwarted by heavy traffic. Hurt – when the words or actions of another wounds us. Loss – when something that we hold dear is taken away, like a job or a spouse. Victim thinking – when I don’t get what I think I deserve. Put it to death by declaring the sin nature dead on the cross. Romans 6:6 “For we know that our old self was crucified with Him in order that sin’s dominion over the body may be abolished, so that we may no longer be enslaved to sin”. Put it away by separating yourself from that old character, like you’d change out of an old set of clothes. Put it off, remove its power, by thinking of the flesh as something foreign to you, like a limb that is no longer a part of your body—gangrenous and in need of amputation. Then put on the character of Christ like putting on a costume in a play. The more you wear it the more comfortable you will be in it and the more you will own that new character Each one of us struggles with different parts of our old nature. You can be a Christian for many years and still struggle with areas of the flesh. I think that often what happens is a trigger occurs—perhaps a word or phrase that reminds our unconscious mind of an abuse from childhood. We don’t think about but that trigger dis-regulates us, our pre-frontal cortex goes offline and our fleshly nature takes over. The trick is to begin to notice it—even physically in our body—and then work with the Holy Spirit to put you back into your new-self state of mind. 9 – 10 In verse 9, Paul moves to the third major category of the flesh—our interactions with others in relation to the truth. Lying is a default human behavior that we learn at a very young age. We bend facts and manipulate the truth in order to get a result we feel we can’t get by telling the truth. We do it in big ways and in small ways all the time. But lying is not a character trait of heaven—and lying is one of the sins specifically mentioned in Revelation 21:15 as being excluded from heaven. It’s part of the old set of clothes that we need to “put off”. It means: “to wholly strip off of oneself” or “to disarm”. Does it mean we must then be completely transparently honest with everything we think at all times? Of course not. Ephesians 4:15 says: “Speaking the truth in love let us grow in every way into Him.” Be honest always, and always speak those truths in a way that will build up and encourage another’s relationship with Christ. One way we disarm lying is to think: what can I say that will benefit this person, truly. Sometimes that is saying a difficult thing, but not in a hurtful way, but a helpful one. We move now from “putting off” the old character to “putting on” a new one—which is the character of Christ. The words literally mean to put on a change of clothes. Paul uses the same Greek word in Rom. 13:14: “But put on the Lord Jesus Christ, and make no plans to satisfy the fleshly desires.” The word can also mean: “to sink into”. Believe it or not, you have the power to put on or sink into the character of Jesus—forcing out the old flesh, which is always making plans to satisfy itself. At first it might feel very foreign, like wearing a costume while playing a part in a play. But you know, that’s okay. Play the part of a person who thinks, acts, and speaks like Jesus in love, joy, peace, patience, kindness, gentleness and the like. It might feel a little hypocritical at first but the more you practice the part the more comfortable you get with it and the more it becomes part of you. All you are doing really is cooperating with the force of the Holy Spirit in you that already wants to make these changes. It is part of that “renewal” process Paul talks about here. The more we know about Jesus and His character, and the more we work towards mirroring that character, the more into His “image” we become. You’ll find in the end that this new character is the “real” new you that God has been making all along. 11 Verse 11 brings up what is often the source of the fleshly desires that run counter to the character of Christ—divisions along racial, economic, social, and religious differences. After Alexander the Great conquered much of the known world, he spread the Greek culture far and wide. So the Greeks felt very self-important culturally. The Jews also felt very superior religiously as they had the Torah and a covenant with Yahweh. This division was never so strident when it came to who was in the covenant and who was out—via circumcision. Barbarians were any non-Greek or non-Jews and Scythians were a little known race of people from the far-northern part of the Middle East who were thought to be no better than animals. Slavery was well known in that culture and separated people along socio-economic lines. Often times it is these things that cause the flesh to flare up. But Paul says Christ is in all peoples (how that could be rendered). Jesus is the great equalizer of religious, racial, cultural and socio-economic status. Also, as Paul says in Galatians 3:28, the great equalizer of gender inequalities. In Christ we should never let those things separate us. That’s the old way, not the new. So we’re talked about three ways to help rid ourselves of the old nature and one way to help nurture the new character. Try it on with something you are struggling with, like anger. Picture what it would be like if something or someone makes you angry. How would you normally react and how can these new steps intervene? What are the qualities in the new character that replace unchecked desire, anger, and dishonesty? Fidelity (commitment in your relationships with others and with God) Security (trusting that God will supply your needs) Love (self-sacrificing, other-centered affection that looks out for the good of others always) We’ll talk more about these as they relate to everyday life in the coming verses.', + '', NULL, NULL, + '{\"metakey\":\"Rain, Flesh, \\\"Sexual immorality\\\", Impurity, Lust, \\\"Evil desire\\\", Greed, Frustration, Hurt, Loss, \\\"Victim thinking\\\", \\\"Put it to death\\\", \\\"Put it away\\\",\\\"Put it off\\\"\",\"metadesc\":\"\"}', + 0, '0000-00-00 00:00:00', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '2015-07-28 23:46:05', 627, 7479, 1, 1, + '*', -1); + +-- Dump of table #__bsms_studytopics +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_studytopics` (`id`, `study_id`, `topic_id`, `asset_id`, `access`) +VALUES +(3, 1, 114, 7594, 1), +(4, 1, 114, 7595, 1); + + +-- Dump of table #__bsms_teachers +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_teachers` (`id`, `teacher_image`, `teacher_thumbnail`, `teachername`, `alias`, `title`, `phone`, `email`, `website`, `information`, `image`, `imageh`, `imagew`, `thumb`, `thumbw`, `thumbh`, `short`, `ordering`, `catid`, `list_show`, `published`, `asset_id`, `access`, `language`, `facebooklink`, `twitterlink`, `bloglink`, `link1`, `linklabel1`, `link2`, `linklabel2`, `link3`, `linklabel3`, `contact`, `address`, `landing_show`, `address1`) +VALUES +(1, '', '', 'Billy Sunday', X'62696C6C792D73756E646179', 'Pastor', '555-555-5555', 'billy@sunday.com', + 'http://billysunday.com', + 'William Ashley Sunday was an American athlete who after being a popular outfielder in baseballs National League during the 1880s became the most celebrated and influential American evangelist during the first two decades of the 20th century. ', + 'media/com_biblestudy/images/billy_sunday11.jpg', '276', '197', 'media/com_biblestudy/images/images.jpg', '101', + '141', 'Billy Sunday: 1862-1935', 0, 1, 1, 1, 7489, 1, '*', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, '', NULL, ''); + +-- Dump of table #__bsms_templatatecode + +INSERT IGNORE INTO `#__bsms_templatecode` (`id`, `published`, `type`, `filename`, `asset_id`, `templatecode`) VALUES +(1, 1, 1, 'easy', 188, 'get(\'id\');\r\n$listOrder = $this->escape($this->state->get(\'list.ordering\'));\r\n$listDirn = $this->escape($this->state->get(\'list.direction\'));\r\n$archived = $this->state->get(\'filter.published\') == 2 ? true : false;\r\n$trashed = $this->state->get(\'filter.published\') == -2 ? true : false;\r\n$saveOrder = $listOrder == \'study.ordering\';\r\n$columns = 12;\r\n\r\n\r\n\r\n?>\r\n\r\n\r\n\r\n
      \r\n

      \r\n Teachings\r\n

      \r\n
      \r\n\r\n\r\n\r\n
      \r\n\r\n page->books;\r\n echo $this->page->teachers;\r\n echo $this->page->series;\r\n $oddeven = \'\';\r\n $class1 = \'#d3d3d3\';\r\n $class2 = \'\';?>\r\n
      \r\nitems as $study)\r\n{\r\n\r\n $oddeven = ($oddeven == $class1) ? $class2 : $class1;\r\n ?>\r\n
      \r\n
      \r\n study_thumbnail) {echo \'\'.$study->study_thumbnail .\'\'; echo \'
      \';} ?>\r\n studytitle;?>
      \r\n scripture1;?> | studydate;?>
      \r\n
      teachername;?>

      \r\n media; ?>\r\n
      \r\n\r\n\r\n
      \r\n\r\n
      \r\n pagination->getPageslinks();?>\r\n
      \r\n'); + +-- Dump of table #__bsms_templates +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_templates` (`id`, `type`, `tmpl`, `published`, `params`, `title`, `text`, `pdf`, `asset_id`, `access`) +VALUES +(1, 'tmplList', '', 1, + '{\"useterms\":\"0\",\"terms\":\"\",\"css\":\"biblestudy.css\",\"studieslisttemplateid\":\"1\",\"sermonstemplate\":\"0\",\"detailstemplateid\":\"1\",\"sermontemplate\":\"0\",\"teachertemplateid\":\"1\",\"teachertemplate\":\"0\",\"teacherstemplate\":\"0\",\"serieslisttemplateid\":\"1\",\"seriesdisplaystemplate\":\"0\",\"seriesdetailtemplateid\":\"1\",\"seriesdisplaytemplate\":\"0\",\"offset\":\"false\",\"teacher_id\":[\"-1\"],\"series_id\":[\"-1\"],\"booknumber\":[\"-1\"],\"topic_id\":[\"-1\"],\"messagetype\":[\"-1\"],\"locations\":[\"-1\"],\"show_verses\":\"0\",\"stylesheet\":\"\",\"date_format\":\"2\",\"custom_date_format\":\"\",\"duration_type\":\"2\",\"protocol\":\"http:\\/\\/\",\"player\":\"0\",\"popuptype\":\"window\",\"internal_popup\":\"1\",\"special\":\"_blank\",\"autostart\":\"1\",\"playerresposive\":\"1\",\"player_width\":\"400\",\"player_height\":\"300\",\"embedshare\":\"TRUE\",\"backcolor\":\"0x287585\",\"frontcolor\":\"0xFFFFFF\",\"lightcolor\":\"0x000000\",\"screencolor\":\"0x000000\",\"popuptitle\":\"{{title}}\",\"popupfooter\":\"{{filename}}\",\"popupmargin\":\"50\",\"popupbackground\":\"black\",\"popupimage\":\"media\\/com_biblestudy\\/images\\/speaker24.png\",\"show_filesize\":\"1\",\"playerposition\":\"over\",\"playeridlehide\":\"1\",\"default_order\":\"DESC\",\"default_order_secondary\":\"ASC\",\"show_page_title\":\"1\",\"show_page_image\":\"1\",\"list_page_title\":\"Bible Studies\",\"list_title_align\":\"text-align:center\",\"use_headers_list\":\"1\",\"studies_element\":\"1\",\"list_intro\":\"\",\"intro_show\":\"1\",\"list_teacher_show\":\"1\",\"listteachers\":[],\"teacherlink\":\"1\",\"showpodcastsubscribelist\":\"1\",\"subscribeintro\":\"Our Podcasts\",\"details_text\":\"Study Details\",\"show_book_search\":\"1\",\"ddbooks\":\"1\",\"booklist\":\"1\",\"use_go_button\":\"1\",\"ddgobutton\":\"2\",\"show_teacher_search\":\"1\",\"ddteachers\":\"3\",\"show_series_search\":\"1\",\"ddseries\":\"4\",\"show_type_search\":\"1\",\"ddmessagetype\":\"5\",\"show_year_search\":\"1\",\"ddyears\":\"6\",\"show_order_search\":\"1\",\"ddorder\":\"7\",\"show_topic_search\":\"1\",\"ddtopics\":\"8\",\"show_locations_search\":\"1\",\"ddlocations\":\"9\",\"show_popular\":\"1\",\"ddpopular\":\"10\",\"listlanguage\":\"0\",\"ddlanguage\":\"11\",\"show_pagination\":\"1\",\"listcolor1\":\"#8f8fb2\",\"listcolor2\":\"#ccccff\",\"rowspanitem\":\"1\",\"rowspanitemspan\":\"2\",\"rowspanitemimage\":\"img-polaroid\",\"rowspanitempull\":\"pull-left\",\"scripture1row\":\"0\",\"scripture1col\":\"3\",\"scripture1colspan\":\"2\",\"scripture1element\":\"1\",\"scripture1custom\":\"\",\"scripture1linktype\":\"0\",\"scripture2row\":\"0\",\"scripture2col\":\"1\",\"scripture2colspan\":\"3\",\"scripture2element\":\"1\",\"scripture2custom\":\"\",\"scripture2linktype\":\"0\",\"secondaryrow\":\"0\",\"secondarycol\":\"1\",\"secondarycolspan\":\"1\",\"secondaryelement\":\"1\",\"secondarycustom\":\"\",\"secondarylinktype\":\"0\",\"jbsmediarow\":\"1\",\"jbsmediacol\":\"4\",\"jbsmediacolspan\":\"4\",\"jbsmediaelement\":\"0\",\"jbsmediacustom\":\"\",\"jbsmedialinktype\":\"2\",\"titlerow\":\"1\",\"titlecol\":\"2\",\"titlecolspan\":\"4\",\"titleelement\":\"1\",\"titlecustom\":\"\",\"titlelinktype\":\"0\",\"daterow\":\"1\",\"datecol\":\"1\",\"datecolspan\":\"2\",\"dateelement\":\"1\",\"datecustom\":\"\",\"datelinktype\":\"0\",\"teacherrow\":\"0\",\"teachercol\":\"1\",\"teachercolspan\":\"1\",\"teacherelement\":\"1\",\"teachercustom\":\"\",\"teacherlinktype\":\"0\",\"teacherimagerrow\":\"0\",\"teacherimagecol\":\"1\",\"teacherimagecolspan\":\"1\",\"teacherimageelement\":\"1\",\"teacherimagecustom\":\"\",\"teacher-titlerow\":\"0\",\"teacher-titlecol\":\"1\",\"teacher-titlecolspan\":\"1\",\"teacher-titleelement\":\"1\",\"teacher-titlecustom\":\"\",\"teacher-titlelinktype\":\"0\",\"durationrow\":\"0\",\"durationcol\":\"1\",\"durationcolspan\":\"1\",\"durationelement\":\"1\",\"durationcustom\":\"\",\"durationlinktype\":\"0\",\"studyintrorow\":\"0\",\"studyintrocol\":\"1\",\"studyintrocolspan\":\"12\",\"studyintroelement\":\"1\",\"studyintrocustom\":\"\",\"studyintrolinktype\":\"0\",\"seriesrow\":\"0\",\"seriescol\":\"1\",\"seriescolspan\":\"1\",\"serieselement\":\"1\",\"seriescustom\":\"\",\"serieslinktype\":\"0\",\"seriesthumbnailrow\":\"0\",\"seriesthumbnailcol\":\"1\",\"seriesthumbnailcolspan\":\"1\",\"seriesthumbnailelement\":\"1\",\"seriesthumbnailcustom\":\"\",\"seriesthumbnaillinktype\":\"0\",\"seriesdescriptionrow\":\"0\",\"seriesdescriptioncol\":\"1\",\"seriesdescriptioncolspan\":\"1\",\"seriesdescriptionelement\":\"1\",\"seriesdescriptioncustom\":\"\",\"seriesdescriptionlinktype\":\"0\",\"submittedrow\":\"0\",\"submittedcol\":\"1\",\"submittedcolspan\":\"1\",\"submittedelement\":\"1\",\"submittedcustom\":\"\",\"submittedlinktype\":\"0\",\"hitsrow\":\"0\",\"hitscol\":\"1\",\"hitscolspan\":\"6\",\"hitselement\":\"1\",\"hitscustom\":\"\",\"hitslinktype\":\"0\",\"downloadsrow\":\"0\",\"downloadscol\":\"1\",\"downloadscolspan\":\"1\",\"downloadselement\":\"1\",\"downloadscustom\":\"\",\"downloadslinktype\":\"0\",\"studynumberrow\":\"0\",\"studynumbercol\":\"1\",\"studynumbercolspan\":\"1\",\"studynumberelement\":\"1\",\"studynumbercustom\":\"\",\"studynumberlinktype\":\"0\",\"topicrow\":\"0\",\"topiccol\":\"1\",\"topiccolspan\":\"6\",\"topicelement\":\"1\",\"topiccustom\":\"\",\"topiclinktype\":\"0\",\"locationsrow\":\"0\",\"locationscol\":\"1\",\"locationscolspan\":\"1\",\"locationselement\":\"1\",\"locationscustom\":\"\",\"locationslinktype\":\"0\",\"messagetyperow\":\"0\",\"messagetypecol\":\"1\",\"messagetypecolspan\":\"6\",\"messagetypeelement\":\"1\",\"messagetypecustom\":\"\",\"messagetypelinktype\":\"0\",\"thumbnailrow\":\"0\",\"thumbnailcol\":\"1\",\"thumbnailcolspan\":\"1\",\"thumbnailelement\":\"1\",\"thumbnailcustom\":\"\",\"thumbnaillinktype\":\"0\",\"customrow\":\"0\",\"customcol\":\"1\",\"customcolspan\":\"1\",\"customelement\":\"1\",\"customcustom\":\"\",\"customtext\":\"\",\"show_print_view\":\"1\",\"link_text\":\"Return to Studies List\",\"showrelated\":\"1\",\"showpodcastsubscribedetails\":\"1\",\"show_scripture_link\":\"0\",\"show_passage_view\":\"1\",\"bible_version\":\"51\",\"socialnetworking\":\"1\",\"sharetype\":\"1\",\"sharelabel\":\"Share This\",\"comments_type\":\"0\",\"show_comments\":\"1\",\"link_comments\":\"0\",\"comment_access\":\"1\",\"comment_publish\":\"0\",\"use_captcha\":\"1\",\"public_key\":\"\",\"private_key\":\"\",\"email_comments\":\"1\",\"recipient\":\"\",\"subject\":\"Comments on studies\",\"body\":\"Comments entered.\",\"study_detailtemplate\":\"\",\"teacher_title\":\"Our Teachers\",\"teachers_element\":\"1\",\"tsrowspanitem\":\"0\",\"tsrowspanitemspan\":\"4\",\"tsrowspanitemimage\":\"img-polaroid\",\"tsrowspanitempull\":\"pull-left\",\"use_headers_teacher_list\":\"1\",\"tslistcolor1\":\"\",\"tslistcolor2\":\"\",\"tsteacherrow\":\"1\",\"tsteachercol\":\"1\",\"tsteachercolspan\":\"2\",\"tsteacherelement\":\"1\",\"tsteachercustom\":\"\",\"tsteacherlinktype\":\"0\",\"tsteacherimagerrow\":\"0\",\"tsteacherimagecol\":\"1\",\"tsteacherimagecolspan\":\"1\",\"tsteacherimageelement\":\"1\",\"tsteacherimagecustom\":\"\",\"tsteacher-titlerow\":\"0\",\"tsteacher-titlecol\":\"1\",\"tsteacher-titlecolspan\":\"1\",\"tsteacher-titleelement\":\"1\",\"tsteacher-titlecustom\":\"\",\"tsteacher-titlelinktype\":\"0\",\"tsteacheremailrow\":\"0\",\"tsteacheremailcol\":\"1\",\"tsteacheremailcolspan\":\"1\",\"tsteacheremailelement\":\"1\",\"tsteacheremailcustom\":\"\",\"tsteacherwebrow\":\"0\",\"tsteacherwebcol\":\"1\",\"tsteacherwebcolspan\":\"1\",\"tsteacherwebelement\":\"1\",\"tsteacherphonerow\":\"0\",\"tsteacherphonecol\":\"1\",\"tsteacherphonecolspan\":\"1\",\"tsteacherphoneelement\":\"1\",\"tsteacherphonecustom\":\"\",\"tsteacherfbrow\":\"0\",\"tsteacherfbcol\":\"1\",\"tsteacherfbcolspan\":\"1\",\"tsteacherfbelement\":\"1\",\"tsteacherfbcustom\":\"\",\"tsteachertwrow\":\"0\",\"tsteachertwcol\":\"1\",\"tsteachertwcolspan\":\"1\",\"tsteachertwelement\":\"1\",\"tsteachertwcustom\":\"\",\"tsteacherblogrow\":\"0\",\"tsteacherblogcol\":\"1\",\"tsteacherblogcolspan\":\"1\",\"tsteacherblogelement\":\"1\",\"tsteacherblogcustom\":\"\",\"tsteachershortrow\":\"0\",\"tsteachershortcol\":\"1\",\"tsteachershortcolspan\":\"1\",\"tsteachershortelement\":\"1\",\"tsteachershortcustom\":\"\",\"tsteachershortlinktype\":\"0\",\"tscustomrow\":\"\",\"tscustomcol\":\"1\",\"tscustomcolspan\":\"1\",\"tscustomelement\":\"1\",\"tscustomcustom\":\"\",\"tscustomtext\":\"\",\"tsteacherallinonerow\":\"0\",\"tsteacherallinonecol\":\"1\",\"tsteacherallinonecolspan\":\"1\",\"tsteacherallinoneelement\":\"1\",\"tsteacherallinonecustom\":\"\",\"teacher_headercode\":\"\",\"teacher_templatecode\":\" {{teacher}} {{title}} {{teacher}} {{short}} {{information}} \",\"teacher_wrapcode\":\"0\",\"show_teacher_studies\":\"0\",\"studies\":\"\",\"label_teacher\":\"Latest Messages\",\"teacherlinkstudies\":\"1\",\"tdrowspanitem\":\"0\",\"tdrowspanitemspan\":\"4\",\"tdrowspanitemimage\":\"img-polaroid\",\"tdrowspanitempull\":\"pull-left\",\"use_headers_teacher_details\":\"1\",\"teacherdisplay_color\":\"\",\"tdteacherrow\":\"1\",\"tdteachercol\":\"1\",\"tdteachercolspan\":\"2\",\"tdteacherelement\":\"1\",\"tdteachercustom\":\"\",\"tdteacherimagerrow\":\"0\",\"tdteacherimagecol\":\"1\",\"tdteacherimagecolspan\":\"1\",\"tdteacherimageelement\":\"1\",\"tdteacherimagecustom\":\"\",\"tdteacher-titlerow\":\"0\",\"tdteacher-titlecol\":\"1\",\"tdteacher-titlecolspan\":\"1\",\"tdteacher-titleelement\":\"1\",\"tdteacher-titlecustom\":\"\",\"tdteacheremailrow\":\"0\",\"tdteacheremailcol\":\"1\",\"tdteacheremailcolspan\":\"1\",\"tdteacheremailelement\":\"1\",\"tdteacheremailcustom\":\"\",\"tdteacherwebrow\":\"0\",\"tdteacherwebcol\":\"1\",\"tdteacherwebcolspan\":\"1\",\"tdteacherwebelement\":\"1\",\"tdteacherphonerow\":\"0\",\"tdteacherphonecol\":\"1\",\"tdteacherphonecolspan\":\"1\",\"tdteacherphoneelement\":\"1\",\"tdteacherphonecustom\":\"\",\"tdteacherfbrow\":\"0\",\"tdteacherfbcol\":\"1\",\"tdteacherfbcolspan\":\"1\",\"tdteacherfbelement\":\"1\",\"tdteacherfbcustom\":\"\",\"tdteachertwrow\":\"0\",\"tdteachertwcol\":\"1\",\"tdteachertwcolspan\":\"1\",\"tdteachertwelement\":\"1\",\"tdteachertwcustom\":\"\",\"tdteacherblogrow\":\"0\",\"tdteacherblogcol\":\"1\",\"tdteacherblogcolspan\":\"1\",\"tdteacherblogelement\":\"1\",\"tdteacherblogcustom\":\"\",\"tdteachershortrow\":\"0\",\"tdteachershortcol\":\"1\",\"tdteachershortcolspan\":\"1\",\"tdteachershortelement\":\"1\",\"tdteachershortcustom\":\"\",\"tdteacherlongrow\":\"0\",\"tdteacherlongcol\":\"1\",\"tdteacherlongcolspan\":\"1\",\"tdteacherlongelement\":\"1\",\"tdteacherlongcustom\":\"\",\"tdteacheraddressrow\":\"0\",\"tdteacheraddresscol\":\"1\",\"tdteacheraddresscolspan\":\"1\",\"tdteacheraddresselement\":\"1\",\"tdteacheraddresscustom\":\"\",\"tdteacherlink1row\":\"0\",\"tdteacherlink1col\":\"1\",\"tdteacherlink1colspan\":\"1\",\"tdteacherlink1element\":\"1\",\"tdteacherlink1custom\":\"\",\"tdteacherlink2row\":\"0\",\"tdteacherlink2col\":\"1\",\"tdteacherlink2colspan\":\"1\",\"tdteacherlink2element\":\"1\",\"tdteacherlink2custom\":\"\",\"tdteacherlink3row\":\"0\",\"tdteacherlink3col\":\"1\",\"tdteacherlink3colspan\":\"1\",\"tdteacherlink3element\":\"1\",\"tdteacherlink3custom\":\"\",\"tdteacherlargeimagerow\":\"0\",\"tdteacherlargeimagecol\":\"1\",\"tdteacherlargeimagecolspan\":\"1\",\"tdteacherlargeimageelement\":\"1\",\"tdteacherlargeimagecustom\":\"\",\"tdcustomrow\":\"\",\"tdcustomcol\":\"1\",\"tdcustomcolspan\":\"1\",\"tdcustomelement\":\"1\",\"tdcustomcustom\":\"\",\"tdcustomtext\":\"\",\"tdteacherallinonerow\":\"0\",\"tdteacherallinonecol\":\"1\",\"tdteacherallinonecolspan\":\"1\",\"tdteacherallinoneelement\":\"1\",\"tdteacherallinonecustom\":\"\",\"series_title\":\"Our Series\",\"show_series_title\":\"1\",\"show_page_image_series\":\"1\",\"series_element\":\"1\",\"use_headers_series\":\"1\",\"series_show_description\":\"1\",\"series_characters\":\"\",\"search_series\":\"1\",\"series_list_teachers\":\"1\",\"series_list_years\":\"1\",\"series_list_show_pagination\":\"1\",\"series_list_order\":\"ASC\",\"series_order_field\":\"series_text\",\"srowspanitem\":\"0\",\"srowspanitemspan\":\"4\",\"srowspanitemimage\":\"img-polaroid\",\"srowspanitempull\":\"pull-left\",\"sseriesrow\":\"2\",\"sseriescol\":\"1\",\"sseriescolspan\":\"6\",\"sserieselement\":\"1\",\"sseriescustom\":\"\",\"sserieslinktype\":\"0\",\"sseriesthumbnailrow\":\"1\",\"sseriesthumbnailcol\":\"2\",\"sseriesthumbnailcolspan\":\"1\",\"sseriesthumbnailelement\":\"1\",\"sseriesthumbnailcustom\":\"\",\"sseriesthumbnaillinktype\":\"0\",\"steacherrow\":\"0\",\"steachercol\":\"1\",\"steachercolspan\":\"1\",\"steacherelement\":\"1\",\"steachercustom\":\"\",\"steacherlinktype\":\"0\",\"steacherimagerow\":\"0\",\"steacherimagecol\":\"1\",\"steacherimagecolspan\":\"1\",\"steacherimageelement\":\"1\",\"steacherimagecustom\":\"\",\"steacher-titlerow\":\"0\",\"steacher-titlecol\":\"1\",\"steacher-titlecolspan\":\"1\",\"steacher-titleelement\":\"1\",\"steacher-titlecustom\":\"\",\"steacher-titlelinktype\":\"0\",\"sdescriptionrow\":\"0\",\"sdescriptioncol\":\"1\",\"sdescriptioncolspan\":\"1\",\"sdescriptionelement\":\"1\",\"sdescriptioncustom\":\"\",\"sdescriptionlinktype\":\"0\",\"sdcustomrow\":\"0\",\"sdcustomcol\":\"1\",\"sdcustomcolspan\":\"1\",\"sdcustomelement\":\"1\",\"sdcustomcustom\":\"\",\"sdcustomtext\":\"\",\"series_detail_sort\":\"studydate\",\"series_detail_order\":\"DESC\",\"series_detail_limit\":\"\",\"series_list_return\":\"1\",\"sdrowspanitem\":\"0\",\"sdrowspanitemspan\":\"4\",\"sdrowspanitemimage\":\"img-polaroid\",\"sdrowspanitempull\":\"pull-left\",\"seriesdisplay_color\":\"\",\"use_header_seriesdisplay\":\"0\",\"sdseriesrow\":\"2\",\"sdseriescol\":\"1\",\"sdseriescolspan\":\"6\",\"sdserieselement\":\"1\",\"sdseriescustom\":\"\",\"sdserieslinktype\":\"0\",\"sdseriesthumbnailrow\":\"1\",\"sdseriesthumbnailcol\":\"2\",\"sdseriesthumbnailcolspan\":\"1\",\"sdseriesthumbnailelement\":\"1\",\"sdseriesthumbnailcustom\":\"\",\"sdseriesthumbnaillinktype\":\"0\",\"sdteacherrow\":\"0\",\"sdteachercol\":\"1\",\"sdteachercolspan\":\"1\",\"sdteacherelement\":\"1\",\"sdteachercustom\":\"\",\"sdteacherlinktype\":\"0\",\"sdteacherimagerow\":\"0\",\"sdteacherimagecol\":\"1\",\"sdteacherimagecolspan\":\"1\",\"sdteacherimageelement\":\"1\",\"sdteacherimagecustom\":\"\",\"sdteacher-titlerow\":\"0\",\"sdteacher-titlecol\":\"1\",\"sdteacher-titlecolspan\":\"1\",\"sdteacher-titleelement\":\"1\",\"sdteacher-titlecustom\":\"\",\"sdteacher-titlelinktype\":\"0\",\"sddescriptionrow\":\"0\",\"sddescriptioncol\":\"1\",\"sddescriptioncolspan\":\"1\",\"sddescriptionelement\":\"1\",\"sddescriptioncustom\":\"\",\"sddescriptionlinktype\":\"0\",\"tip_title\":\"Sermon Information\",\"tooltip\":\"1\",\"tip_item1_title\":\"Title\",\"tip_item1\":\"title\",\"tip_item2_title\":\"Details\",\"tip_item2\":\"title\",\"tip_item3_title\":\"Teacher\",\"tip_item3\":\"title\",\"tip_item4_title\":\"Reference\",\"tip_item4\":\"title\",\"tip_item5_title\":\"Date\",\"tip_item5\":\"title\",\"drowspanitem\":\"0\",\"drowspanitemspan\":\"4\",\"drowspanitemimage\":\"img-polaroid\",\"drowspanitempull\":\"pull-left\",\"dscripture1row\":\"1\",\"dscripture1col\":\"1\",\"dscripture1colspan\":\"1\",\"dscripture1element\":\"1\",\"dscripture1custom\":\"\",\"dscripture1linktype\":\"0\",\"dscripture2row\":\"0\",\"dscripture2col\":\"1\",\"dscripture2colspan\":\"1\",\"dscripture2element\":\"1\",\"dscripture2custom\":\"\",\"dscripture2linktype\":\"0\",\"dsecondaryrow\":\"0\",\"dsecondarycol\":\"1\",\"dsecondarycolspan\":\"1\",\"dsecondaryelement\":\"1\",\"dsecondarycustom\":\"\",\"dsecondarylinktype\":\"0\",\"djbsmediarow\":\"1\",\"djbsmediacol\":\"3\",\"djbsmediacolspan\":\"1\",\"djbsmediaelement\":\"1\",\"djbsmediacustom\":\"\",\"djbsmedialinktype\":\"0\",\"dcustomrow\":\"0\",\"dcustomcol\":\"1\",\"dcustomcolspan\":\"1\",\"dcustomelement\":\"1\",\"dcustomcustom\":\"\",\"dcustomtext\":\"\",\"dtitlerow\":\"1\",\"dtitlecol\":\"2\",\"dtitlecolspan\":\"3\",\"dtitleelement\":\"1\",\"dtitlecustom\":\"\",\"dtitlelinktype\":\"0\",\"ddaterow\":\"0\",\"ddatecol\":\"1\",\"ddatecolspan\":\"1\",\"ddateelement\":\"1\",\"ddatecustom\":\"\",\"ddatelinktype\":\"0\",\"dteacherrow\":\"0\",\"dteachercol\":\"1\",\"dteachercolspan\":\"1\",\"dteacherelement\":\"1\",\"dteachercustom\":\"\",\"dteacherlinktype\":\"0\",\"dteacherimagerrow\":\"0\",\"dteacherimagecol\":\"1\",\"dteacherimagecolspan\":\"1\",\"dteacherimageelement\":\"1\",\"dteacherimagecustom\":\"\",\"dteacher-titlerow\":\"0\",\"dteacher-titlecol\":\"1\",\"dteacher-titlecolspan\":\"1\",\"dteacher-titleelement\":\"1\",\"dteacher-titlecustom\":\"\",\"dteacher-titlelinktype\":\"0\",\"ddurationrow\":\"0\",\"ddurationcol\":\"1\",\"ddurationcolspan\":\"1\",\"ddurationelement\":\"1\",\"ddurationcustom\":\"\",\"ddurationlinktype\":\"0\",\"dstudyintrorow\":\"0\",\"dstudyintrocol\":\"1\",\"dstudyintrocolspan\":\"6\",\"dstudyintroelement\":\"1\",\"dstudyintrocustom\":\"\",\"dstudyintrolinktype\":\"0\",\"dseriesrow\":\"0\",\"dseriescol\":\"1\",\"dseriescolspan\":\"1\",\"dserieselement\":\"1\",\"dseriescustom\":\"\",\"dserieslinktype\":\"0\",\"dseriesthumbnailrow\":\"0\",\"dseriesthumbnailcol\":\"1\",\"dseriesthumbnailcolspan\":\"1\",\"dseriesthumbnailelement\":\"1\",\"dseriesthumbnailcustom\":\"\",\"dseriesthumbnaillinktype\":\"0\",\"dseriesdescriptionrow\":\"0\",\"dseriesdescriptioncol\":\"1\",\"dseriesdescriptioncolspan\":\"1\",\"dseriesdescriptionelement\":\"1\",\"dseriesdescriptioncustom\":\"\",\"dseriesdescriptionlinktype\":\"0\",\"dsubmittedrow\":\"0\",\"dsubmittedcol\":\"1\",\"dsubmittedcolspan\":\"1\",\"dsubmittedelement\":\"1\",\"dsubmittedcustom\":\"\",\"dsubmittedlinktype\":\"0\",\"dhitsrow\":\"0\",\"dhitscol\":\"1\",\"dhitscolspan\":\"6\",\"dhitselement\":\"1\",\"dhitscustom\":\"\",\"dhitslinktype\":\"0\",\"ddownloadsrow\":\"0\",\"ddownloadscol\":\"1\",\"ddownloadscolspan\":\"1\",\"ddownloadselement\":\"1\",\"ddownloadscustom\":\"\",\"ddownloadslinktype\":\"0\",\"dstudynumberrow\":\"0\",\"dstudynumbercol\":\"1\",\"dstudynumbercolspan\":\"1\",\"dstudynumberelement\":\"1\",\"dstudynumbercustom\":\"\",\"dstudynumberlinktype\":\"0\",\"dtopicrow\":\"0\",\"dtopiccol\":\"1\",\"dtopiccolspan\":\"6\",\"dtopicelement\":\"1\",\"dtopiccustom\":\"\",\"dtopiclinktype\":\"0\",\"dlocationsrow\":\"0\",\"dlocationscol\":\"1\",\"dlocationscolspan\":\"1\",\"dlocationselement\":\"1\",\"dlocationscustom\":\"\",\"dlocationslinktype\":\"0\",\"dmessagetyperow\":\"0\",\"dmessagetypecol\":\"1\",\"dmessagetypecolspan\":\"6\",\"dmessagetypeelement\":\"1\",\"dmessagetypecustom\":\"\",\"dmessagetypelinktype\":\"0\",\"dthumbnailrow\":\"0\",\"dthumbnailcol\":\"1\",\"dthumbnailcolspan\":\"1\",\"dthumbnailelement\":\"1\",\"dthumbnailcustom\":\"\",\"dthumbnaillinktype\":\"0\",\"landing_hide\":\"0\",\"landing_default_order\":\"ASC\",\"landing_hidelabel\":\"Show\\/Hide All\",\"headingorder_1\":\"teachers\",\"headingorder_2\":\"series\",\"headingorder_3\":\"books\",\"headingorder_4\":\"topics\",\"headingorder_5\":\"locations\",\"headingorder_6\":\"messagetypes\",\"headingorder_7\":\"years\",\"showteachers\":\"1\",\"landingteachersuselimit\":\"0\",\"landingteacherslimit\":\"\",\"teacherslabel\":\"Speakers\",\"linkto\":\"1\",\"showseries\":\"1\",\"landingseriesuselimit\":\"0\",\"landingserieslimit\":\"\",\"serieslabel\":\"Series\",\"series_linkto\":\"0\",\"showbooks\":\"1\",\"landingbookslimit\":\"\",\"bookslabel\":\"Books\",\"showtopics\":\"1\",\"landingtopicslimit\":\"\",\"topicslabel\":\"Topics\",\"showlocations\":\"1\",\"landinglocationsuselimit\":\"0\",\"landinglocationslimit\":\"\",\"locationslabel\":\"Locations\",\"showmessagetypes\":\"1\",\"landingmessagetypeuselimit\":\"0\",\"landingmessagetypeslimit\":\"\",\"messagetypeslabel\":\"Message Types\",\"showyears\":\"1\",\"landingyearslimit\":\"\",\"yearslabel\":\"Years\",\"series_order\":\"2\",\"books_order\":\"2\",\"teachers_order\":\"2\",\"years_order\":\"1\",\"topics_order\":\"2\",\"locations_order\":\"2\",\"messagetypes_order\":\"2\"}', + 'Default', 'textfile24.png', 'pdf24.png', 7490, 1); + +-- Dump of table #__bsms_timeset +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_timeset` (`timeset`, `backup`) +VALUES +('1281646339', '1281646339'); + +-- Dump of table #__bsms_topics +-- ------------------------------------------------------------ + +INSERT IGNORE INTO `#__bsms_topics` (`id`, `topic_text`, `published`, `params`, `asset_id`, `language`, `access`) +VALUES +(1, 'JBS_TOP_ABORTION', 1, NULL, 7491, '*', 1), +(2, 'JBS_TOP_GODS_ACTIVITY', 1, NULL, 7492, '*', 1), +(3, 'JBS_TOP_ADDICTION', 1, NULL, 7493, '*', 1), +(4, 'JBS_TOP_AFTERLIFE', 1, NULL, 7494, '*', 1), +(5, 'JBS_TOP_APOLOGETICS', 1, NULL, 7495, '*', 1), +(6, 'JBS_TOP_GODS_ATTRIBUTES', 1, NULL, 7496, '*', 1), +(7, 'JBS_TOP_BAPTISM', 1, NULL, 7497, '*', 1), +(8, 'JBS_TOP_BASICS_OF_CHRISTIANITY', 1, NULL, 7498, '*', 1), +(9, 'JBS_TOP_BECOMING_A_CHRISTIAN', 1, NULL, 7499, '*', 1), +(10, 'JBS_TOP_BIBLE', 1, NULL, 7500, '*', 1), +(11, 'JBS_TOP_JESUS_BIRTH', 1, NULL, 7501, '*', 1), +(12, 'JBS_TOP_CHILDREN', 1, NULL, 7502, '*', 1), +(13, 'JBS_TOP_CHRIST', 1, NULL, 7503, '*', 1), +(14, 'JBS_TOP_CHRISTIAN_CHARACTER_FRUITS', 1, NULL, 7504, '*', 1), +(15, 'JBS_TOP_CHRISTIAN_VALUES', 1, NULL, 7505, '*', 1), +(16, 'JBS_TOP_CHRISTMAS_SEASON', 1, NULL, 7506, '*', 1), +(17, 'JBS_TOP_CHURCH', 1, NULL, 7507, '*', 1), +(18, 'JBS_TOP_COMMUNICATION', 1, NULL, 7508, '*', 1), +(19, 'JBS_TOP_COMMUNION___LORDS_SUPPER', 1, NULL, 7509, '*', 1), +(21, 'JBS_TOP_CREATION', 1, NULL, 7510, '*', 1), +(22, 'JBS_TOP_JESUS_CROSS_FINAL_WEEK', 1, NULL, 7511, '*', 1), +(23, 'JBS_TOP_CULTS', 1, NULL, 7512, '*', 1), +(24, 'JBS_TOP_DEATH', 1, NULL, 7513, '*', 1), +(26, 'JBS_TOP_DESCRIPTIONS_OF_GOD', 1, NULL, 7514, '*', 1), +(27, 'JBS_TOP_DISCIPLES', 1, NULL, 7515, '*', 1), +(28, 'JBS_TOP_DISCIPLESHIP', 1, NULL, 7516, '*', 1), +(29, 'JBS_TOP_JESUS_DIVINITY', 1, NULL, 7517, '*', 1), +(30, 'JBS_TOP_DIVORCE', 1, NULL, 7518, '*', 1), +(32, 'JBS_TOP_EASTER_SEASON', 1, NULL, 7519, '*', 1), +(33, 'JBS_TOP_EMOTIONS', 1, NULL, 7520, '*', 1), +(34, 'JBS_TOP_ENTERTAINMENT', 1, NULL, 7521, '*', 1), +(35, 'JBS_TOP_EVANGELISM', 1, NULL, 7522, '*', 1), +(36, 'JBS_TOP_FAITH', 1, NULL, 7523, '*', 1), +(37, 'JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS', 1, NULL, 7524, '*', 1), +(39, 'JBS_TOP_FORGIVING_OTHERS', 1, NULL, 7525, '*', 1), +(40, 'JBS_TOP_GODS_FORGIVENESS', 1, NULL, 7526, '*', 1), +(41, 'JBS_TOP_FRIENDSHIP', 1, NULL, 7527, '*', 1), +(42, 'JBS_TOP_FULFILLMENT_IN_LIFE', 1, NULL, 7528, '*', 1), +(43, 'JBS_TOP_FUND_RAISING_RALLY', 1, NULL, 7529, '*', 1), +(44, 'JBS_TOP_FUNERALS', 1, NULL, 7530, '*', 1), +(45, 'JBS_TOP_GIVING', 1, NULL, 7531, '*', 1), +(46, 'JBS_TOP_GODS_WILL', 1, NULL, 7532, '*', 1), +(47, 'JBS_TOP_HARDSHIP_OF_LIFE', 1, NULL, 7533, '*', 1), +(48, 'JBS_TOP_HOLY_SPIRIT', 1, NULL, 7534, '*', 1), +(50, 'JBS_TOP_JESUS_HUMANITY', 1, NULL, 7535, '*', 1), +(52, 'JBS_TOP_KINGDOM_OF_GOD', 1, NULL, 7536, '*', 1), +(55, 'JBS_TOP_LEADERSHIP_ESSENTIALS', 1, NULL, 7537, '*', 1), +(56, 'JBS_TOP_JESUS_LIFE', 1, NULL, 7538, '*', 1), +(57, 'JBS_TOP_LOVE', 1, NULL, 7539, '*', 1), +(58, 'JBS_TOP_GODS_LOVE', 1, NULL, 7540, '*', 1), +(59, 'JBS_TOP_MARRIAGE', 1, NULL, 7541, '*', 1), +(61, 'JBS_TOP_JESUS_MIRACLES', 1, NULL, 7542, '*', 1), +(62, 'JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY', 1, NULL, 7543, '*', 1), +(63, 'JBS_TOP_MONEY', 1, NULL, 7544, '*', 1), +(65, 'JBS_TOP_GODS_NATURE', 1, NULL, 7545, '*', 1), +(66, 'JBS_TOP_OUR_NEED_FOR_GOD', 1, NULL, 7546, '*', 1), +(69, 'JBS_TOP_PARABLES', 1, NULL, 7547, '*', 1), +(70, 'JBS_TOP_PARANORMAL', 1, NULL, 7548, '*', 1), +(71, 'JBS_TOP_PARENTING', 1, NULL, 7549, '*', 1), +(73, 'JBS_TOP_POVERTY', 1, NULL, 7550, '*', 1), +(74, 'JBS_TOP_PRAYER', 1, NULL, 7551, '*', 1), +(76, 'JBS_TOP_PROMINENT_N_T__MEN', 1, NULL, 7552, '*', 1), +(77, 'JBS_TOP_PROMINENT_N_T__WOMEN', 1, NULL, 7553, '*', 1), +(78, 'JBS_TOP_PROMINENT_O_T__MEN', 1, NULL, 7554, '*', 1), +(79, 'JBS_TOP_PROMINENT_O_T__WOMEN', 1, NULL, 7555, '*', 1), +(82, 'JBS_TOP_MESSIANIC_PROPHECIES', 1, NULL, 7556, '*', 1), +(83, 'JBS_TOP_RACISM', 1, NULL, 7557, '*', 1), +(84, 'JBS_TOP_JESUS_RESURRECTION', 1, NULL, 7558, '*', 1), +(85, 'JBS_TOP_SECOND_COMING', 1, NULL, 7559, '*', 1), +(86, 'JBS_TOP_SEXUALITY', 1, NULL, 7560, '*', 1), +(87, 'JBS_TOP_SIN', 1, NULL, 7561, '*', 1), +(88, 'JBS_TOP_SINGLENESS', 1, NULL, 7562, '*', 1), +(89, 'JBS_TOP_SMALL_GROUPS', 1, NULL, 7563, '*', 1), +(90, 'JBS_TOP_SPIRITUAL_DISCIPLINES', 1, NULL, 7564, '*', 1), +(91, 'JBS_TOP_SPIRITUAL_GIFTS', 1, NULL, 7565, '*', 1), +(92, 'JBS_TOP_SUPERNATURAL', 1, NULL, 7566, '*', 1), +(93, 'JBS_TOP_JESUS_TEACHING', 1, NULL, 7567, '*', 1), +(94, 'JBS_TOP_TEMPTATION', 1, NULL, 7568, '*', 1), +(95, 'JBS_TOP_TEN_COMMANDMENTS', 1, NULL, 7569, '*', 1), +(97, 'JBS_TOP_TRUTH', 1, NULL, 7570, '*', 1), +(98, 'JBS_TOP_TWELVE_APOSTLES', 1, NULL, 7571, '*', 1), +(100, 'JBS_TOP_WEDDINGS', 1, NULL, 7572, '*', 1), +(101, 'JBS_TOP_WORKPLACE_ISSUES', 1, NULL, 7573, '*', 1), +(102, 'JBS_TOP_WORLD_RELIGIONS', 1, NULL, 7574, '*', 1), +(103, 'JBS_TOP_FAMILY', 1, NULL, 7575, '*', 1), +(104, 'JBS_TOP_FREEDOM', 1, NULL, 7576, '*', 1), +(105, 'JBS_TOP_STEWARDSHIP', 1, NULL, 7577, '*', 1), +(106, 'JBS_TOP_WORSHIP', 1, NULL, 7578, '*', 1), +(107, 'JBS_TOP_HOLIDAYS', 1, NULL, 7579, '*', 1), +(108, 'JBS_TOP_SPECIAL_SERVICES', 1, NULL, 7580, '*', 1), +(109, 'JBS_TOP_MEN', 1, NULL, 7581, '*', 1), +(110, 'JBS_TOP_WOMEN', 1, NULL, 7582, '*', 1), +(111, 'JBS_TOP_HOT_TOPICS', 1, NULL, 7583, '*', 1), +(112, 'JBS_TOP_NARNIA', 1, NULL, 7584, '*', 1), +(113, 'JBS_TOP_DA_VINCI_CODE', 1, NULL, 7585, '*', 1), +(114, 'JBS_TOP_RAIN', 1, NULL, 7590, '*', 1); + +-- -------------------------------------------------------- diff --git a/build/com_proclaim-9.2.1/admin/install/sql/uninstall-dbtables.sql b/build/com_proclaim-9.2.1/admin/install/sql/uninstall-dbtables.sql new file mode 100644 index 0000000000..b9528631a1 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/uninstall-dbtables.sql @@ -0,0 +1,27 @@ +DROP TABLE IF EXISTS `#__bsms_studies`; +DROP TABLE IF EXISTS `#__bsms_teachers`; +DROP TABLE IF EXISTS `#__bsms_topics`; +DROP TABLE IF EXISTS `#__bsms_servers`; +DROP TABLE IF EXISTS `#__bsms_series`; +DROP TABLE IF EXISTS `#__bsms_message_type`; +DROP TABLE IF EXISTS `#__bsms_folders`; +DROP TABLE IF EXISTS `#__bsms_media`; +DROP TABLE IF EXISTS `#__bsms_books`; +DROP TABLE IF EXISTS `#__bsms_order`; +DROP TABLE IF EXISTS `#__bsms_podcast`; +DROP TABLE IF EXISTS `#__bsms_mimetype`; +DROP TABLE IF EXISTS `#__bsms_mediafiles`; +DROP TABLE IF EXISTS `#__bsms_templates`; +DROP TABLE IF EXISTS `#__bsms_templatecode`; +DROP TABLE IF EXISTS `#__bsms_comments`; +DROP TABLE IF EXISTS `#__bsms_admin`; +DROP TABLE IF EXISTS `#__bsms_studytopics`; +DROP TABLE IF EXISTS `#__bsms_version`; +DROP TABLE IF EXISTS `#__bsms_locations`; +DROP TABLE IF EXISTS `#__bsms_timeset`; +DROP TABLE IF EXISTS `#__bsms_install`; +DROP TABLE IF EXISTS `#__bsms_search`; +DROP TABLE IF EXISTS `#__bsms_update`; +DROP TABLE IF EXISTS `#__bsms_share`; +DROP TABLE IF EXISTS `#__bsms_storage`; +DROP TABLE IF EXISTS `#__bsms_styles`; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/uninstall.sql b/build/com_proclaim-9.2.1/admin/install/sql/uninstall.sql new file mode 100644 index 0000000000..03789f47c7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/uninstall.sql @@ -0,0 +1,3 @@ +DROP TABLE IF EXISTS `#__bsms_install`; +DROP TABLE IF EXISTS `#__bsms_update`; +DROP TABLE IF EXISTS `#__bsms_storage`; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.1.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.1.sql new file mode 100644 index 0000000000..9ccde4fe89 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.1.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (1, '6.1.1') +ON DUPLICATE KEY UPDATE version= '6.1.1'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.2.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.2.sql new file mode 100644 index 0000000000..2ee8073550 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.2.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (2, '6.1.2') +ON DUPLICATE KEY UPDATE version= '6.1.2'; + diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.3.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.3.sql new file mode 100644 index 0000000000..1405d99795 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.3.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (3, '6.1.3') +ON DUPLICATE KEY UPDATE version= '6.1.3'; + diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.4.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.4.sql new file mode 100644 index 0000000000..ba2b69cbf5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.1.4.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (4, '6.1.4') +ON DUPLICATE KEY UPDATE version= '6.1.4'; + diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.2.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.2.sql new file mode 100644 index 0000000000..1498c14c69 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.2.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (5, '6.2.2') +ON DUPLICATE KEY UPDATE version= '6.2.2'; + diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.3.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.3.sql new file mode 100644 index 0000000000..bfeaea9466 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/6.2.3.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (6, '6.2.3') +ON DUPLICATE KEY UPDATE version= '6.2.3'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.0.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.0.sql new file mode 100644 index 0000000000..f934242ea3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.0.sql @@ -0,0 +1,9 @@ +-- This is don in upgrade biblestudy.700.upgrade.php +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (7, '7.0.0') +ON DUPLICATE KEY UPDATE version= '7.0.0'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.1.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.1.sql new file mode 100644 index 0000000000..6006a199a4 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.1.sql @@ -0,0 +1,10 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (8, '7.0.1.1') +ON DUPLICATE KEY UPDATE version= '7.0.1.1'; + +-- 7.0.1.1 diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.sql new file mode 100644 index 0000000000..2d4dcc417c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.1.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (9, '7.0.1') +ON DUPLICATE KEY UPDATE version = '7.0.1'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.2.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.2.sql new file mode 100644 index 0000000000..fd99872cac --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.2.sql @@ -0,0 +1,301 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) + DEFAULT CHARSET = utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (10, '7.0.2') +ON DUPLICATE KEY UPDATE version = '7.0.2'; +-- +-- Old Tales No longer used. +-- +DROP TABLE IF EXISTS `#__bsms_install`; +DROP TABLE IF EXISTS `#__bsms_version`; + +-- +-- Menu Icon Corrections +-- +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-biblemenu.png' +WHERE `#__menu`.`alias` = 'jbscmncombiblestudy'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-biblemenu.png' +WHERE `#__menu`.`alias` = 'jbsmnucontrolpanel'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-mediaimages.png' +WHERE `#__menu`.`alias` = 'jbsmnumediaimages'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-templates.png' +WHERE `#__menu`.`alias` = 'jbsmnutemplatedisplay'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-social.png' +WHERE `#__menu`.`alias` = 'jbsmnusocialnetworklinks'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-podcast.png' +WHERE `#__menu`.`alias` = 'jbsmnupodcasts'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-folder.png' +WHERE `#__menu`.`alias` = 'jbsmnuserverfolders'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-servers.png' +WHERE `#__menu`.`alias` = 'jbsmnuservers'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-comments.png' +WHERE `#__menu`.`alias` = 'jbsmnustudycomments'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-topics.png' +WHERE `#__menu`.`alias` = 'jbsmnutopics'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-locations.png' +WHERE `#__menu`.`alias` = 'jbsmnulocations'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-messagetype.png' +WHERE `#__menu`.`alias` = 'jbsmnumessagetypes'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-series.png' +WHERE `#__menu`.`alias` = 'jbsmnuseries'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-teachers.png' +WHERE `#__menu`.`alias` = 'jbsmnuteachers'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-mp3.png' +WHERE `#__menu`.`alias` = 'jbsmnumediafiles'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-studies.png' +WHERE `#__menu`.`alias` = 'jbsmnustudies'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-administration.png' +WHERE `#__menu`.`alias` = 'jbsmnuadministration'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-css.png' +WHERE `#__menu`.`alias` = 'jbsmnucssedit'; +UPDATE `#__menu` +SET `img` = '../media/com_biblestudy/images/menu/icon-16-mimetype.png' +WHERE `#__menu`.`alias` = 'jbsmnumimetypes'; + +-- +-- Table Index Additions +-- +-- +-- Admin +-- +ALTER TABLE `#__bsms_admin` + ADD INDEX `idx_access` (`access`), + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Books +-- +ALTER TABLE `#__bsms_books` + ADD INDEX `idx_state` (`published`), + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Comments +-- +ALTER TABLE `#__bsms_comments` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_comments` + ADD INDEX `idx_access` (`access`), + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '0', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Folders +-- +-- Moved to PHP builder + +-- +-- Locations +-- +ALTER TABLE `#__bsms_locations` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_locations` + ADD INDEX `idx_access` (`access`); +ALTER TABLE `#__bsms_locations` + ADD COLUMN `ordering` INT(11) NOT NULL DEFAULT '0', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Media +-- +-- Moved to PHP Builder + + +-- +-- Mediafiles +-- +ALTER TABLE `#__bsms_mediafiles` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_mediafiles` + ADD INDEX `idx_access` (`access`), + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Message Type +-- +ALTER TABLE `#__bsms_message_type` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_message_type` + ADD INDEX `idx_access` (`access`); +ALTER TABLE `#__bsms_message_type` + ADD COLUMN `ordering` INT(11) NOT NULL DEFAULT '0', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.'; +ALTER TABLE `#__bsms_message_type` + ADD COLUMN `alias` VARCHAR(255) CHARACTER SET utf8 +COLLATE utf8_bin NOT NULL DEFAULT '' + AFTER `message_type`, + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- MIME Type +-- +-- Moved to PHP Builder + + +-- +-- +-- +-- Podcast +-- +ALTER TABLE `#__bsms_podcast` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_podcast` + ADD INDEX `idx_access` (`access`), + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- +-- Series +-- +ALTER TABLE `#__bsms_series` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_series` + ADD INDEX `idx_access` (`access`); +ALTER TABLE `#__bsms_series` + ADD COLUMN `alias` VARCHAR(255) CHARACTER SET utf8 +COLLATE utf8_bin NOT NULL DEFAULT '' + AFTER `series_text`; +ALTER TABLE `#__bsms_series` + ADD COLUMN `ordering` INT(11) NOT NULL DEFAULT '0', + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Servers +-- +ALTER TABLE `#__bsms_servers` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_servers` + ADD INDEX `idx_access` (`access`), + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Studies +-- +ALTER TABLE `#__bsms_studies` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_studies` + ADD INDEX `idx_access` (`access`); +ALTER TABLE `#__bsms_studies` + ADD COLUMN `ordering` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_studies` + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_studies` + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets +table.'; +ALTER TABLE `#__bsms_studies` + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_studies` + ADD COLUMN `alias` VARCHAR(255) CHARACTER SET utf8 +COLLATE utf8_bin NOT NULL DEFAULT + '' + AFTER `studytitle`; +ALTER TABLE `#__bsms_studies` + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Studytopics +-- +ALTER TABLE `#__bsms_studytopics` + ADD INDEX `idx_access` (`access`); +ALTER TABLE `#__bsms_studytopics` + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the + #__assets table.'; +ALTER TABLE `#__bsms_studytopics` + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_studytopics` + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; + +-- +-- Teachers +-- +ALTER TABLE `#__bsms_teachers` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_teachers` + ADD INDEX `idx_access` (`access`); +ALTER TABLE `#__bsms_teachers` + MODIFY `ordering` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_teachers` + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_teachers` + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.'; +ALTER TABLE `#__bsms_teachers` + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1'; +ALTER TABLE `#__bsms_teachers` + ADD COLUMN `alias` VARCHAR(255) NOT NULL DEFAULT '' + AFTER `teachername`; +ALTER TABLE `#__bsms_teachers` + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +ALTER TABLE `#__bsms_teachers` + CHARACTER SET utf8 + COLLATE utf8_general_ci; +-- +-- Templates +-- +ALTER TABLE `#__bsms_templates` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_templates` + ADD INDEX `idx_access` (`access`), + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Topics +-- +ALTER TABLE `#__bsms_topics` + ADD INDEX `idx_state` (`published`); +ALTER TABLE `#__bsms_topics` + ADD INDEX `idx_access` (`access`), + MODIFY `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + MODIFY `access` INT(10) UNSIGNED NOT NULL DEFAULT '0', + MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1', + MODIFY `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- Drop `#__bsms_version` +-- +DROP TABLE IF EXISTS `#__bsms_version`; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.3.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.3.sql new file mode 100644 index 0000000000..ad4bdcf61e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.3.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (11, '7.0.3') +ON DUPLICATE KEY UPDATE version= '7.0.3'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.4.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.4.sql new file mode 100644 index 0000000000..46d36223d0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.0.4.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (12, '7.0.4') +ON DUPLICATE KEY UPDATE version= '7.0.4'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.0.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.0.sql new file mode 100644 index 0000000000..36e2c9d4b3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.0.sql @@ -0,0 +1,138 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (13, '7.1.0') +ON DUPLICATE KEY UPDATE version= '7.1.0'; +-- +-- Admin Table +-- +ALTER TABLE `#__bsms_admin` ADD COLUMN `installstate` TEXT; +ALTER TABLE `#__bsms_admin` ADD COLUMN `debug` TINYINT(3) NOT NULL DEFAULT '0'; +-- +-- Books +-- +ALTER TABLE `#__bsms_books` MODIFY `published` TINYINT(3) NOT NULL DEFAULT '1'; +-- +-- Comments Table +-- +ALTER TABLE `#__bsms_comments` ADD COLUMN `language` CHAR(3) NOT NULL DEFAULT ''; +UPDATE `#__bsms_comments` SET `language` = '*' WHERE `#__bsms_comments`.`language` = ''; +-- +-- Folders Table +-- +-- +-- Locations Table +-- +ALTER TABLE `#__bsms_locations` ADD COLUMN `landing_show` INT(3) DEFAULT '1'; +-- +-- Media Table +-- + +-- +-- MediaFiles Table +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `language` CHAR(3) NOT NULL DEFAULT ''; +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `created_by` INT(10) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `created_by_alias` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ''; +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'; +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `modified_by` INT(10) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_mediafiles` ADD INDEX `idx_study_id` (`study_id`); +UPDATE `#__bsms_mediafiles` SET `language` = '*' WHERE `#__bsms_mediafiles`.`language` = ''; +-- +-- Message Type Table +-- +ALTER TABLE `#__bsms_message_type` ADD COLUMN `landing_show` INT(3) DEFAULT '1'; + +-- +-- Podcast Table +-- +ALTER TABLE `#__bsms_podcast` ADD COLUMN `alternatelink` VARCHAR(300) COMMENT 'replaces podcast file link on subscription'; +ALTER TABLE `#__bsms_podcast` ADD COLUMN `alternateimage` VARCHAR(150) COMMENT 'alternate image path for podcast'; +ALTER TABLE `#__bsms_podcast` ADD COLUMN `podcast_subscribe_show` INT(3); +ALTER TABLE `#__bsms_podcast` ADD COLUMN `podcast_image_subscribe` VARCHAR(150) COMMENT 'The image to use for the podcast subscription image'; +ALTER TABLE `#__bsms_podcast` ADD COLUMN `podcast_subscribe_desc` VARCHAR(150) COMMENT 'Words to go below podcast subscribe image'; +ALTER TABLE `#__bsms_podcast` ADD COLUMN `alternatewords` VARCHAR(20); + +-- +-- Search Table +-- + +-- +-- Series Table +-- + +ALTER TABLE `#__bsms_series` ADD COLUMN `language` CHAR(3) NOT NULL DEFAULT ''; + +UPDATE `#__bsms_series` SET `language` = '*' WHERE `#__bsms_series`.`language` = ''; + +ALTER TABLE `#__bsms_series` ADD COLUMN `landing_show` INT(3) DEFAULT '1'; + +-- +-- Servers Table +-- +-- Moved to PHP Builder + +-- +-- Studies Table +-- +ALTER TABLE `#__bsms_studies` ADD COLUMN `language` CHAR(3) NOT NULL DEFAULT ''; +ALTER TABLE `#__bsms_studies` ADD INDEX `idx_seriesid` (`series_id`); +ALTER TABLE `#__bsms_studies` ADD INDEX `idx_user` (`user_id`); +UPDATE `#__bsms_studies` SET `language` = '*' WHERE `#__bsms_studies`.`language` = ''; + +-- +-- StudyTopics Table +-- +ALTER TABLE `#__bsms_studytopics` ADD INDEX `idx_study` (`study_id`); +ALTER TABLE `#__bsms_studytopics` ADD INDEX `idx_topic` (`topic_id`); + +-- +-- Teachers Table +-- + +ALTER TABLE `#__bsms_teachers` ADD COLUMN `language` CHAR(3) NOT NULL DEFAULT ''; +ALTER TABLE `#__bsms_teachers` ADD COLUMN `facebooklink` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `twitterlink` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `bloglink` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `link1` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `linklabel1` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `link2` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `linklabel2` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `link3` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `linklabel3` VARCHAR(150); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `contact` INT(11); +ALTER TABLE `#__bsms_teachers` ADD COLUMN `address` MEDIUMTEXT NOT NULL; +ALTER TABLE `#__bsms_teachers` ADD COLUMN `landing_show` INT(3) DEFAULT '1'; +ALTER TABLE `#__bsms_teachers` ADD COLUMN `address1` MEDIUMTEXT NOT NULL; +UPDATE `#__bsms_teachers` SET `language` = '*' WHERE `#__bsms_teachers`.`language` = ''; + +-- +-- TemplateCode Table +-- +-- new table for TemplateCode +DROP TABLE IF EXISTS `#__bsms_templatecode`; +CREATE TABLE IF NOT EXISTS `#__bsms_templatecode` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `published` TINYINT(3) NOT NULL DEFAULT '1', + `type` TINYINT(3) NOT NULL, + `filename` TEXT NOT NULL, + `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' + COMMENT 'FK to the #__assets table.', + `templatecode` MEDIUMTEXT NOT NULL, + PRIMARY KEY (`id`) +) + DEFAULT CHARSET =utf8; + +-- +-- Templates Table +-- + +-- +-- Time set Table +-- + +-- +-- Topics Table +-- diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.1.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.1.sql new file mode 100644 index 0000000000..3f3a292f83 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.1.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (14, '7.1.1') +ON DUPLICATE KEY UPDATE version = '7.1.1'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.2.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.2.sql new file mode 100644 index 0000000000..df724e327f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.2.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (15, '7.1.2') +ON DUPLICATE KEY UPDATE version= '7.1.2'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.3.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.3.sql new file mode 100644 index 0000000000..c7d0d4eaca --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/7.1.3.sql @@ -0,0 +1,10 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (16, '7.1.3') +ON DUPLICATE KEY UPDATE version= '7.1.3'; + +-- need to make a update media table where auto start params where 0 need to be empty diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.0.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.0.sql new file mode 100644 index 0000000000..b387d01230 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.0.sql @@ -0,0 +1,38 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (17, '8.0.0') +ON DUPLICATE KEY UPDATE version= '8.0.0'; + +-- Moving DB to InnoDB +ALTER TABLE `#__bsms_studies` ENGINE = INNODB; +ALTER TABLE `#__bsms_teachers` ENGINE = INNODB; +ALTER TABLE `#__bsms_topics` ENGINE = INNODB; +ALTER TABLE `#__bsms_servers` ENGINE = INNODB; +ALTER TABLE `#__bsms_series` ENGINE = INNODB; +ALTER TABLE `#__bsms_message_type` ENGINE = INNODB; +ALTER TABLE `#__bsms_folders` ENGINE = INNODB; +ALTER TABLE `#__bsms_media` ENGINE = INNODB; +ALTER TABLE `#__bsms_books` ENGINE = INNODB; +ALTER TABLE `#__bsms_podcast` ENGINE = INNODB; +ALTER TABLE `#__bsms_mimetype` ENGINE = INNODB; +ALTER TABLE `#__bsms_mediafiles` ENGINE = INNODB; +ALTER TABLE `#__bsms_templates` ENGINE = INNODB; +ALTER TABLE `#__bsms_templatecode` ENGINE = INNODB; +ALTER TABLE `#__bsms_comments` ENGINE = INNODB; +ALTER TABLE `#__bsms_admin` ENGINE = INNODB; +ALTER TABLE `#__bsms_studytopics` ENGINE = INNODB; +ALTER TABLE `#__bsms_locations` ENGINE = INNODB; +ALTER TABLE `#__bsms_timeset` ENGINE = INNODB; +ALTER TABLE `#__bsms_update` ENGINE = INNODB; + +ALTER TABLE `#__bsms_podcast` ADD COLUMN `episodesubtitle` INT(11) DEFAULT NULL; +ALTER TABLE `#__bsms_podcast` ADD COLUMN `customsubtitle` VARCHAR(200) DEFAULT NULL; +ALTER TABLE `#__bsms_topics` ADD COLUMN `language` CHAR(7) DEFAULT '*'; + +ALTER TABLE `#__bsms_studies` DROP `topics_id` ; + +ALTER TABLE `#__bsms_studies` ADD COLUMN `download_id` INT(10) NOT NULL DEFAULT '0' COMMENT 'Used for link to download of mediafile'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.8.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.8.sql new file mode 100644 index 0000000000..76a9f63949 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/8.0.8.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (18, '8.0.8') +ON DUPLICATE KEY UPDATE version = '8.0.8'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.0.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.0.sql new file mode 100644 index 0000000000..3381d1d7d0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.0.sql @@ -0,0 +1,80 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES (19, '9.0.0') +ON DUPLICATE KEY UPDATE version = '9.0.0'; + +-- Servers +ALTER TABLE `#__bsms_servers` ADD COLUMN `params` TEXT NOT NULL; +ALTER TABLE `#__bsms_servers` ADD COLUMN `media` TEXT NOT NULL; + +-- -- MediaFiles +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `server_id` INT(5) NULL AFTER `study_id`; +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `metadata` TEXT NOT NULL AFTER `podcast_id`; +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `checked_out` INT(11) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `#__bsms_mediafiles` ADD COLUMN `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'; +ALTER TABLE `#__bsms_mediafiles` ADD INDEX `idx_checkout` (`checked_out`); +ALTER TABLE `#__bsms_mediafiles` ADD INDEX `idx_createdby` (`created_by`); + +-- -- Remove Bad topic_text save +DELETE FROM `#__bsms_topics` WHERE `topic_text` = 'A'; + +-- -- Remove Old tables +DROP TABLE IF EXISTS `#__bsms_order`; +DROP TABLE IF EXISTS `#__bsms_search`; +DROP TABLE IF EXISTS `#__bsms_styles`; +DROP TABLE IF EXISTS `#__bsms_share`; + +-- -- Locations +ALTER TABLE `#__bsms_locations` ADD COLUMN `contact_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Used to link to com_contact' AFTER `location_text`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `address` TEXT AFTER `contact_id`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `suburb` VARCHAR(100) DEFAULT NULL AFTER `address`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `state` VARCHAR(100) DEFAULT NULL AFTER `suburb`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `country` VARCHAR(100) DEFAULT NULL AFTER `state`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `postcode` VARCHAR(100) DEFAULT NULL AFTER `country`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `telephone` VARCHAR(255) DEFAULT NULL AFTER `postcode`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `fax` VARCHAR(255) DEFAULT NULL AFTER `telephone`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `misc` MEDIUMTEXT AFTER `fax`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `image` VARCHAR(255) DEFAULT NULL AFTER `misc`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `email_to` VARCHAR(255) DEFAULT NULL AFTER `image`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `default_con` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `email_to`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `checked_out` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `default_con`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `checked_out`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `params` TEXT NOT NULL AFTER `checked_out_time`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `user_id` INT(11) NOT NULL DEFAULT '0' AFTER `params`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `mobile` VARCHAR(255) NOT NULL DEFAULT '' AFTER `user_id`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `webpage` VARCHAR(255) NOT NULL DEFAULT '' AFTER `mobile`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `sortname1` VARCHAR(255) NOT NULL AFTER `webpage`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `sortname2` VARCHAR(255) NOT NULL AFTER `sortname1`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `sortname3` VARCHAR(255) NOT NULL AFTER `sortname2`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `language` CHAR(7) NOT NULL AFTER `sortname3`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `language`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `created_by` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `created`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `created_by_alias` VARCHAR(255) NOT NULL DEFAULT '' AFTER `created_by`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `created_by_alias`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `modified_by` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `modified`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `metakey` TEXT NOT NULL AFTER `modified_by`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `metadesc` TEXT NOT NULL AFTER `metakey`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `metadata` TEXT NOT NULL AFTER `metadesc`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `featured` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Set if article is featured.' AFTER `metadata`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `xreference` VARCHAR(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.' AFTER `featured`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `version` INT(10) UNSIGNED NOT NULL DEFAULT '1' AFTER `xreference`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `hits` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `version`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `publish_up` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `hits`; +ALTER TABLE `#__bsms_locations` ADD COLUMN `publish_down` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `publish_up`; + +-- -- Studies +ALTER TABLE `#__bsms_studies` ADD COLUMN `checked_out` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `params`; +ALTER TABLE `#__bsms_studies` ADD COLUMN `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `checked_out`; +ALTER TABLE `#__bsms_studies` ADD COLUMN `publish_up` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `published`; +ALTER TABLE `#__bsms_studies` ADD COLUMN `publish_down` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `publish_up`; +ALTER TABLE `#__bsms_studies` ADD COLUMN `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `publish_down`; +ALTER TABLE `#__bsms_studies` ADD COLUMN `modified_by` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `modified`; +ALTER TABLE `#__bsms_studies` ADD INDEX `idx_createdby` (`user_id`); +ALTER TABLE `#__bsms_studies` ADD INDEX `idx_checkout` (`checked_out`); + +ALTER TABLE `#__bsms_podcast` ADD COLUMN `linktype` INT(10) NOT NULL DEFAULT '0' AFTER `customsubtitle`; +-- drop all asset ides in php referring to folder media and memtype; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.1.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.1.sql new file mode 100644 index 0000000000..2a55873058 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.1.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('20', '9.0.1') +ON DUPLICATE KEY UPDATE version = '9.0.1'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.10.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.10.sql new file mode 100644 index 0000000000..5c3990c8e4 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.10.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('23', '9.0.10') +ON DUPLICATE KEY UPDATE version = '9.0.10'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.11.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.11.sql new file mode 100644 index 0000000000..3f5c733966 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.11.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('24', '9.0.11') +ON DUPLICATE KEY UPDATE version = '9.0.11'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.12.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.12.sql new file mode 100644 index 0000000000..1ca530fc59 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.12.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('25', '9.0.12') +ON DUPLICATE KEY UPDATE version = '9.0.12'; + + +ALTER TABLE `#__bsms_series` ADD COLUMN `pc_show` INT(3) NOT NULL DEFAULT '1' COMMENT 'For displaying on podcasts page' AFTER `landing_show`; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.13.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.13.sql new file mode 100644 index 0000000000..d591a04209 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.13.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('26', '9.0.13') +ON DUPLICATE KEY UPDATE version = '9.0.13'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.14.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.14.sql new file mode 100644 index 0000000000..5a810c9b78 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.14.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('27', '9.0.14') +ON DUPLICATE KEY UPDATE version = '9.0.14'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.15.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.15.sql new file mode 100644 index 0000000000..ed684e57ff --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.15.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('28', '9.0.15') +ON DUPLICATE KEY UPDATE version = '9.0.15'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.17.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.17.sql new file mode 100644 index 0000000000..7f24915923 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.17.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('29', '9.0.17') +ON DUPLICATE KEY UPDATE version = '9.0.17'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.2.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.2.sql new file mode 100644 index 0000000000..10ecd2f898 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.2.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('20', '9.0.2') +ON DUPLICATE KEY UPDATE version = '9.0.2'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.8.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.8.sql new file mode 100644 index 0000000000..4b5b51e51b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.8.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('21', '9.0.8') +ON DUPLICATE KEY UPDATE version = '9.0.8'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.9.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.9.sql new file mode 100644 index 0000000000..468b724876 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.0.9.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('22', '9.0.9') +ON DUPLICATE KEY UPDATE version = '9.0.9'; diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.0.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.0.sql new file mode 100644 index 0000000000..13a9b2fd9d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.0.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('29', '9.1.0') +ON DUPLICATE KEY UPDATE version = '9.1.0'; \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.1.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.1.sql new file mode 100644 index 0000000000..89e2eb4399 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.1.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('30', '9.1.1') +ON DUPLICATE KEY UPDATE version = '9.1.1'; \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.2.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.2.sql new file mode 100644 index 0000000000..b9425880c5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.2.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('31', '9.1.2') +ON DUPLICATE KEY UPDATE version = '9.1.2'; \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.3.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.3.sql new file mode 100644 index 0000000000..2b8fed2d06 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.3.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('32', '9.1.3') +ON DUPLICATE KEY UPDATE version = '9.1.3'; \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.4.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.4.sql new file mode 100644 index 0000000000..2498e23d82 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.4.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('32', '9.1.4') +ON DUPLICATE KEY UPDATE version = '9.1.4'; \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.5.sql b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.5.sql new file mode 100644 index 0000000000..11e5138483 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/sql/updates/mysql/9.1.5.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `#__bsms_update` ( + id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + version VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (id) +) DEFAULT CHARSET=utf8; + +INSERT INTO `#__bsms_update` (id, version) VALUES ('33', '9.1.5') +ON DUPLICATE KEY UPDATE version = '9.1.5'; \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/install/updates/6.1.1.php b/build/com_proclaim-9.2.1/admin/install/updates/6.1.1.php new file mode 100644 index 0000000000..9648527e94 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/6.1.1.php @@ -0,0 +1,81 @@ +getQuery(true); + $query + ->update('#__bsms_mediafiles') + ->set('params = ' . $query->q('player=2') . ', internal_viewer = ' . (int) $query->q('0')) + ->where('internal_view = ' . (int) $query->q('1')) + ->where('params IS NULL'); + + if (!JBSMDbHelper::performDB($query, "Build 612: ")) + { + return false; + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/6.1.3.php b/build/com_proclaim-9.2.1/admin/install/updates/6.1.3.php new file mode 100644 index 0000000000..5bd682c7a2 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/6.1.3.php @@ -0,0 +1,287 @@ +getQuery(true); + $query->insert('#__bsms_timeset')->set('timeset = ' . 1281646339); + + if (!JBSMDbHelper::performDB($query, "Build 614: ")) + { + return false; + } + + // This updates the mediafiles table to reflect the new way of associating files to podcasts + $query = $db->getQuery(true); + $query->select('id, params, podcast_id')->from('#__bsms_mediafiles')->where('podcast_id > ' . 0); + $db->setQuery($query); + $db->execute(); /* Need this do to the getNumRows dos not execute the Query */ + $num_rows = $db->getNumRows(); + + if ($num_rows > 0) + { + $results = $db->loadObjectList(); + + foreach ($results as $result) + { + // Added the \n + $podcast = 'podcasts=' . $result->podcast_id . '\n'; + $params = $result->params; + $update = $podcast . ' ' . $params; + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles')->set('params = ' . $db->q($update) . ', podcast_id = ' . 0)->where('id = ' . (int) $result->id); + + if (!JBSMDbHelper::performDB($query, "Build 614: ")) + { + return false; + } + } + } + + $query = "CREATE TABLE IF NOT EXISTS `#__bsms_version` + (`id` INTEGER NOT NULL AUTO_INCREMENT, + `version` VARCHAR(20) NOT NULL, + `versiondate` DATE NOT NULL, + `installdate` DATE NOT NULL, + `build` VARCHAR(20) NOT NULL, + `versionname` VARCHAR(40) NULL, + PRIMARY KEY(`id`)) DEFAULT CHARSET=utf8;"; + + if (!JBSMDbHelper::performDB($query, "Build 614: ")) + { + return false; + } + + $query = "INSERT INTO `#__bsms_version` SET `version` = '6.2.0', `installdate`='2010-09-06', " . + "`build`='614', `versionname`='Deuteronomy', `versiondate`='2010-09-06'"; + + if (!JBSMDbHelper::performDB($query, "Build 614: ")) + { + return false; + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/6.2.2.php b/build/com_proclaim-9.2.1/admin/install/updates/6.2.2.php new file mode 100644 index 0000000000..37091a6789 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/6.2.2.php @@ -0,0 +1,76 @@ +setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + foreach ($results AS $result) + { + $old_params = $result->params; + $new_params = str_replace('podcast1', 'podcasts', $old_params); + $query = "UPDATE `#__bsms_mediafiles` SET `params` = " . $db->quote($new_params) . " WHERE `id` = " . + (int) $db->quote($result->id); + + if (!JBSMDbHelper::performDB($query, "Build 622: ")) + { + return false; + } + } + } + + $query = "CREATE TABLE IF NOT EXISTS `#__bsms_version` + (`id` INTEGER NOT NULL AUTO_INCREMENT, + `version` VARCHAR(20) NOT NULL, + `versiondate` DATE NOT NULL, + `installdate` DATE NOT NULL, + `build` VARCHAR(20) NOT NULL, + `versionname` VARCHAR(40) NULL, + PRIMARY KEY(`id`)) DEFAULT CHARSET=utf8;"; + + if (!JBSMDbHelper::performDB($query, "Build 622: ")) + { + return false; + } + + $query = "INSERT INTO `#__bsms_version` SET `version` = '6.2.2', `installdate`='2010-10-25', `build`='622', " . + "`versionname`='Judges', `versiondate`='2010-10-25'"; + + if (!JBSMDbHelper::performDB($query, "Build 622: ")) + { + return false; + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/6.2.3.php b/build/com_proclaim-9.2.1/admin/install/updates/6.2.3.php new file mode 100644 index 0000000000..8ce9ee59e3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/6.2.3.php @@ -0,0 +1,95 @@ +getQuery(true); + $query + ->select('id, params') + ->from('#__bsms_mediafiles'); + $db->setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + foreach ($results AS $result) + { + $isplayertype = substr_count($result->params, 'internal_popup=0'); + + if ($isplayertype) + { + $oldparams = $result->params; + $newparams = str_replace('internal_popup=0', 'internal_popup=2', $oldparams); + $query = $db->getQuery(true); + $query + ->update('#__bsms_mediafiles') + ->set($db->qn('params') . ' = ' . $db->q($newparams)) + ->where('id = ' . (int) $db->q($result->id)); + $db->setQuery($query); + + if (!$db->execute()) + { + JFactory::getApplication() + ->enqueueMessage( + "Build 623: " . JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', $db->stderr(true)), 'warning'); + + return false; + } + } + } + } + + $data = new stdClass; + $data->version = '6.2.3'; + $data->installdate = '2010-11-03'; + $data->build = '623'; + $data->versionname = '1Samuel'; + $data->versiondate = '2010-11-03'; + + if (!$db->insertObject('#__bsms_version', $data)) + { + return false; + } + + $data1 = new stdClass; + $data1->version = '6.2.4'; + $data1->installdate = '2010-11-09'; + $data1->build = '623'; + $data1->versionname = '2Samuel'; + $data1->versiondate = '2010-11-09'; + + if (!$db->insertObject('#__bsms_version', $data1)) + { + return false; + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/7.0.0.php b/build/com_proclaim-9.2.1/admin/install/updates/7.0.0.php new file mode 100644 index 0000000000..fa8503f63a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/7.0.0.php @@ -0,0 +1,850 @@ + '#__bsms_admin', 'field' => 'main', 'type' => 'DROP', 'command' => ''], + ['table' => '#__bsms_admin', 'field' => 'podcast', 'type' => 'DROP', 'command' => ''], + ['table' => '#__bsms_admin', 'field' => 'series', 'type' => 'DROP', 'command' => ''], + ['table' => '#__bsms_admin', 'field' => 'study', 'type' => 'DROP', 'command' => ''], + ['table' => '#__bsms_admin', 'field' => 'teacher', 'type' => 'DROP', 'command' => ''], + ['table' => '#__bsms_admin', 'field' => 'media', 'type' => 'DROP', 'command' => ''], + ['table' => '#__bsms_admin', 'field' => 'showhide', 'type' => 'DROP', 'command' => ''], + ['table' => '#__bsms_admin', 'field' => 'download', 'type' => 'DROP', 'command' => ''], [ + 'table' => '#__bsms_admin', 'field' => 'drop_tables', 'type' => 'ADD', + 'command' => 'int(3) NULL default "0"' + ], [ + 'table' => '#__bsms_admin', 'field' => 'id', 'type' => 'MODIFY', + 'command' => 'int(3) UNSIGNED NOT NULL AUTO_INCREMENT' + ], [ + 'table' => '#__bsms_comments', 'field' => 'id', 'type' => 'MODIFY', + 'command' => 'int(3) UNSIGNED NOT NULL AUTO_INCREMENT' + ], [ + 'table' => '#__bsms_folders', 'field' => 'id', 'type' => 'MODIFY', + 'command' => 'int(3) UNSIGNED NOT NULL AUTO_INCREMENT' + ], [ + 'table' => '#__bsms_media', 'field' => 'id', 'type' => 'MODIFY', + 'command' => 'int(3) UNSIGNED NOT NULL AUTO_INCREMENT' + ], [ + 'table' => '#__bsms_mediafiles', 'field' => 'podcast_id', 'type' => 'MODIFY', 'command' => 'varchar(50)' + ], [ + 'table' => '#__bsms_mediafiles', 'field' => 'player', 'type' => 'ADD', + 'command' => 'INT(2) NULL DEFAULT NULL' + ], [ + 'table' => '#__bsms_mediafiles', 'field' => 'popup', 'type' => 'ADD', + 'command' => 'INT(2) NULL DEFAULT NULL' + ], [ + 'table' => '#__bsms_mediafiles', 'field' => 'id', 'type' => 'MODIFY', + 'command' => 'int(3) UNSIGNED NOT NULL AUTO_INCREMENT' + ], [ + 'table' => '#__bsms_series', 'field' => 'id', 'type' => 'MODIFY', + 'command' => 'int(3) UNSIGNED NOT NULL AUTO_INCREMENT' + ], [ + 'table' => '#__bsms_servers', 'field' => 'id', 'type' => 'MODIFY', + 'command' => 'int(3) UNSIGNED NOT NULL AUTO_INCREMENT' + ], [ + 'table' => '#__bsms_servers', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], [ + 'table' => '#__bsms_comments', 'field' => 'study_id', 'type' => 'MODIFY', + 'command' => "int(11) NOT NULL DEFAULT '0'" + ], [ + 'table' => '#__bsms_comments', 'field' => 'user_id', 'type' => 'MODIFY', + 'command' => "int(11) NOT NULL DEFAULT '0'" + ], [ + 'table' => '#__bsms_comments', 'field' => 'full_name', 'type' => 'MODIFY', + 'command' => "varchar(50) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_comments', 'field' => 'user_email', 'type' => 'MODIFY', + 'command' => "varchar(100) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_comments', 'field' => 'comment_date', 'type' => 'MODIFY', + 'command' => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'" + ], [ + 'table' => '#__bsms_folders', 'field' => 'foldername', 'type' => 'MODIFY', + 'command' => "varchar(250) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_folders', 'field' => 'folderpath', 'type' => 'MODIFY', + 'command' => "varchar(250) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_folders', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], [ + 'table' => '#__bsms_locations', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], [ + 'table' => '#__bsms_media', 'field' => 'media_image_name', 'type' => 'MODIFY', + 'command' => "varchar(250) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_media', 'field' => 'media_image_path', 'type' => 'MODIFY', + 'command' => "varchar(250) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_media', 'field' => 'media_alttext', 'type' => 'MODIFY', + 'command' => "varchar(250) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_media', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], ['table' => '#__bsms_mediafiles', 'field' => 'mediacode', 'type' => 'MODIFY', 'command' => "text"], + [ + 'table' => '#__bsms_mediafiles', 'field' => 'link_type', 'type' => 'MODIFY', + 'command' => "char(1) DEFAULT NULL" + ], [ + 'table' => '#__bsms_mediafiles', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], [ + 'table' => '#__bsms_mediafiles', 'field' => 'downloads', 'type' => 'MODIFY', + 'command' => "int(10) DEFAULT '0'" + ], [ + 'table' => '#__bsms_mediafiles', 'field' => 'plays', 'type' => 'MODIFY', + 'command' => "int(10) DEFAULT '0'" + ], [ + 'table' => '#__bsms_message_type', 'field' => 'message_type', 'type' => 'MODIFY', + 'command' => "text NOT NULL" + ], [ + 'table' => '#__bsms_message_type', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], [ + 'table' => '#__bsms_mimetype', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], ['table' => '#__bsms_podcast', 'field' => 'description', 'type' => 'MODIFY', 'command' => "text"], + [ + 'table' => '#__bsms_podcast', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], [ + 'table' => '#__bsms_series', 'field' => 'published', 'type' => 'MODIFY', + 'command' => "tinyint(3) NOT NULL DEFAULT '1'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'chapter_begin', 'type' => 'MODIFY', + 'command' => "int(3) DEFAULT '1'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'verse_begin', 'type' => 'MODIFY', + 'command' => "int(3) DEFAULT '1'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'chapter_end', 'type' => 'MODIFY', + 'command' => "int(3) DEFAULT '1'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'verse_end', 'type' => 'MODIFY', + 'command' => "int(3) DEFAULT '1'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'series_id', 'type' => 'MODIFY', + 'command' => "int(3) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'topics_id', 'type' => 'MODIFY', + 'command' => "int(3) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'show_level', 'type' => 'MODIFY', + 'command' => "varchar(100) NOT NULL DEFAULT '0'" + ], [ + 'table' => '#__bsms_teachers', 'field' => 'teachername', 'type' => 'MODIFY', + 'command' => "varchar(250) NOT NULL DEFAULT ''" + ], ['table' => '#__bsms_teachers', 'field' => 'website', 'type' => 'MODIFY', 'command' => "text"], + [ + 'table' => '#__bsms_timeset', 'field' => 'backup', 'type' => 'ADD', + 'command' => "varchar(14) DEFAULT NULL" + ], [ + 'table' => '#__bsms_timeset', 'field' => 'timeset', 'type' => 'MODIFY', + 'command' => "varchar(14) NOT NULL DEFAULT ''" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media1_id', 'type' => 'DROP', + 'command' => "int(11) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media1_server', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media1_path', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media1_special', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], + ['table' => '#__bsms_studies', 'field' => 'media1_filename ', 'type' => 'DROP', 'command' => "text"], + ['table' => '#__bsms_studies', 'field' => 'media1_size', 'type' => 'DROP', 'command' => "text"], [ + 'table' => '#__bsms_studies', 'field' => 'media1_show', 'type' => 'DROP', + 'command' => "tinyint(1) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media2_id', 'type' => 'DROP', + 'command' => "int(11) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media2_server', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media2_path', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media2_special', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], ['table' => '#__bsms_studies', 'field' => 'media2_filename', 'type' => 'DROP', 'command' => "text"], + ['table' => '#__bsms_studies', 'field' => 'media2_size', 'type' => 'DROP', 'command' => "text"], [ + 'table' => '#__bsms_studies', 'field' => 'media2_show', 'type' => 'DROP', + 'command' => "tinyint(1) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media3_id', 'type' => 'DROP', + 'command' => "int(11) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media3_server', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media3_path', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media3_special', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], ['table' => '#__bsms_studies', 'field' => 'media3_filename', 'type' => 'DROP', 'command' => "text"], + ['table' => '#__bsms_studies', 'field' => 'media3_size', 'type' => 'DROP', 'command' => "text"], [ + 'table' => '#__bsms_studies', 'field' => 'media3_show', 'type' => 'DROP', + 'command' => "media3_show tinyint(1) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media4_id', 'type' => 'DROP', + 'command' => "int(11) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media4_server', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media4_path', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media4_special', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], ['table' => '#__bsms_studies', 'field' => 'media4_filename', 'type' => 'DROP', 'command' => "text"], + ['table' => '#__bsms_studies', 'field' => 'media4_size', 'type' => 'DROP', 'command' => "text"], [ + 'table' => '#__bsms_studies', 'field' => 'media4_show', 'type' => 'DROP', + 'command' => "tinyint(1) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media5_id', 'type' => 'DROP', + 'command' => "int(11) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media5_server', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media5_path', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media5_special', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], ['table' => '#__bsms_studies', 'field' => 'media5_filename', 'type' => 'DROP', 'command' => "text"], + ['table' => '#__bsms_studies', 'field' => 'media5_size', 'type' => 'DROP', 'command' => "text"], [ + 'table' => '#__bsms_studies', 'field' => 'media5_show', 'type' => 'DROP', + 'command' => "tinyint(1) DEFAULT '0'" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media6_id', 'type' => 'DROP', + 'command' => "int(11) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media6_server', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media6_path', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], [ + 'table' => '#__bsms_studies', 'field' => 'media6_special', 'type' => 'DROP', + 'command' => "varchar(250) DEFAULT NULL" + ], ['table' => '#__bsms_studies', 'field' => 'media6_filename', 'type' => 'DROP', 'command' => "text"], + ['table' => '#__bsms_studies', 'field' => 'media6_size', 'type' => 'DROP', 'command' => "text"], [ + 'table' => '#__bsms_studies', 'field' => 'media6_show', 'type' => 'DROP', + 'command' => "tinyint(1) DEFAULT '0'" + ], + ]; + + if (!$dbhelper->alterDB($tables, "Build 700: ")) + { + return false; + } + + /* Start of Adding Assets and Access Columns */ + $table = '#__bsms_admin'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + if ($dbhelper->checkTables($table, 'drop_tables') == 'true') + { + $query = 'UPDATE `#__bsms_admin` SET `drop_tables` = 0 WHERE `id` = 1'; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + + $table = '#__bsms_comments'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_folders'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_locations'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_media'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_mediafiles'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_message_type'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_mimetype'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_podcast'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_series'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_servers'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_studies'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_studytopics'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_teachers'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_templates'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + + $table = '#__bsms_topics'; + + if (!$this->addAssetColumn($table)) + { + return false; + } + /* End of Adding Assets and Access Columns */ + + /* Fix Mimtype Flash from old plyers */ + $query = "UPDATE `#__bsms_mimetype` SET `id` = '15', `mimetype` = 'video/x-flv .flv', " . + "`mimetext` = ' Flash Video FLV', `published` = '1', `asset_id` = '3900', `access` = '1' WHERE `#__bsms_mimetype`.`id` = '15'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + /* Update Show levels */ + $query = "UPDATE `#__bsms_studies` SET `access` = '1' WHERE `show_level` = '0'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "UPDATE `#__bsms_studies` SET `access` = '2' WHERE `show_level` = '18'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "UPDATE `#__bsms_studies` SET `access` = '2' WHERE `show_level` = '19'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "UPDATE `#__bsms_studies` SET `access` = '2' WHERE `show_level` = '20'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "UPDATE `#__bsms_studies` SET `access` = '3' WHERE `show_level` = '22'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "UPDATE `#__bsms_studies` SET `access` = '3' WHERE `show_level` = '23'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "UPDATE `#__bsms_studies` SET `access` = '3' WHERE `show_level` = '24'"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + /* Perform Mediafiles players. */ + $query = 'SELECT `id`, `params` FROM `#__bsms_mediafiles`'; + $db->setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + // Now run through all the results, pull out the media player and the popup type and move them to their respective db fields + foreach ($results AS $result) + { + $registry = new Registry; + + // Fix incorrect params string literal + $params = []; + + foreach (explode('\n', $result->params) as $param) + { + $param = explode('=', str_replace('\n', '', trim($param))); + $params[$param[0]] = $param[1]; + } + + $registry->loadArray($params); + $params = $registry; + $player = $params->get('player'); + + $popup = $params->get('internal_popup'); + $podcasts = $params->get('podcasts'); + + if ($player) + { + if ($player == 2) + { + $player = 3; + } + elseif ($player == 100) + { + $player = 1; + } + + $query = "UPDATE `#__bsms_mediafiles` SET `player` = " . $db->quote($player) . " WHERE `id` = " . + $db->quote($result->id) . " LIMIT 1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + + if ($popup) + { + $query = "UPDATE `#__bsms_mediafiles` SET `popup` = " . $db->quote($popup) . " WHERE `id` = " . + $db->quote($result->id) . " LIMIT 1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + + if ($podcasts) + { + $podcasts = str_replace('|', ',', $podcasts); + $query = "UPDATE `#__bsms_mediafiles` SET `podcast_id` = " . $db->quote($podcasts) . " WHERE `id` = " . + $db->quote($result->id) . " LIMIT 1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + // Update the params to json + $params2 = json_encode($params->toObject()); + + $query = "UPDATE `#__bsms_mediafiles` SET `params` = " . $db->quote($params2) . " WHERE `id` = " . + $db->quote($result->id) . " LIMIT 1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + } + + $query = 'DROP TABLE IF EXISTS `#__bsms_books`'; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "CREATE TABLE IF NOT EXISTS `#__bsms_books` ( + `id` INT(3) NOT NULL AUTO_INCREMENT, + `bookname` VARCHAR(250) DEFAULT NULL, + `booknumber` INT(5) DEFAULT NULL, + `published` TINYINT(1) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "INSERT INTO `#__bsms_books` (`id`, `bookname`, `booknumber`, `published`) VALUES + (1, 'JBS_BBK_GENESIS', 101, 1), + (2, 'JBS_BBK_EXODUS', 102, 1), + (3, 'JBS_BBK_LEVITICUS', 103, 1), + (4, 'JBS_BBK_NUMBERS', 104, 1), + (5, 'JBS_BBK_DEUTERONOMY', 105, 1) , + (6, 'JBS_BBK_JOSHUA', 106, 1) , + (7, 'JBS_BBK_JUDGES', 107, 1) , + (8, 'JBS_BBK_RUTH', 108, 1) , + (9, 'JBS_BBK_1SAMUEL', 109, 1) , + (10, 'JBS_BBK_2SAMUEL', 110, 1) , + (11, 'JBS_BBK_1KINGS', 111, 1) , + (12, 'JBS_BBK_2KINGS', 112, 1) , + (13, 'JBS_BBK_1CHRONICLES', 113, 1) , + (14, 'JBS_BBK_2CHRONICLES', 114, 1) , + (15, 'JBS_BBK_EZRA', 115, 1) , + (16, 'JBS_BBK_NEHEMIAH', 116, 1) , + (17, 'JBS_BBK_ESTHER', 117, 1) , + (18, 'JBS_BBK_JOB', 118, 1) , + (19, 'JBS_BBK_PSALM', 119, 1) , + (20, 'JBS_BBK_PROVERBS', 120, 1) , + (21, 'JBS_BBK_ECCLESIASTES', 121, 1) , + (22, 'JBS_BBK_SONG_OF_SOLOMON', 122, 1) , + (23, 'JBS_BBK_ISAIAH', 123, 1) , + (24, 'JBS_BBK_JEREMIAH', 124, 1) , + (25, 'JBS_BBK_LAMENTATIONS', 125, 1) , + (26, 'JBS_BBK_EZEKIEL', 126, 1) , + (27, 'JBS_BBK_DANIEL', 127, 1) , + (28, 'JBS_BBK_HOSEA', 128, 1) , + (29, 'JBS_BBK_JOEL', 129, 1) , + (30, 'JBS_BBK_AMOS', 130, 1) , + (31, 'JBS_BBK_OBADIAH', 131, 1) , + (32, 'JBS_BBK_JONAH', 132, 1) , + (33, 'JBS_BBK_MICAH', 133, 1) , + (34, 'JBS_BBK_NAHUM', 134, 1) , + (35, 'JBS_BBK_HABAKKUK', 135, 1) , + (36, 'JBS_BBK_ZEPHANIAH', 136, 1), + (37, 'JBS_BBK_HAGGAI', 137, 1), + (38, 'JBS_BBK_ZECHARIAH', 138, 1), + (39, 'JBS_BBK_MALACHI', 139, 1), + (40, 'JBS_BBK_MATTHEW', 140, 1), + (41, 'JBS_BBK_MARK', 141, 1), + (42, 'JBS_BBK_LUKE', 142, 1), + (43, 'JBS_BBK_JOHN', 143, 1), + (44, 'JBS_BBK_ACTS', 144, 1), + (45, 'JBS_BBK_ROMANS', 145, 1), + (46, 'JBS_BBK_1CORINTHIANS', 146, 1), + (47, 'JBS_BBK_2CORINTHIANS', 147, 1), + (48, 'JBS_BBK_GALATIANS', 148, 1), + (49, 'JBS_BBK_EPHESIANS', 149, 1), + (50, 'JBS_BBK_PHILIPPIANS', 150, 1), + (51, 'JBS_BBK_COLOSSIANS', 151, 1), + (52, 'JBS_BBK_1THESSALONIANS', 152, 1), + (53, 'JBS_BBK_2THESSALONIANS', 153, 1), + (54, 'JBS_BBK_1TIMOTHY', 154, 1), + (55, 'JBS_BBK_2TIMOTHY', 155, 1), + (56, 'JBS_BBK_TITUS', 156, 1), + (57, 'JBS_BBK_PHILEMON', 157, 1), + (58, 'JBS_BBK_HEBREWS', 158, 1), + (59, 'JBS_BBK_JAMES', 159, 1), + (60, 'JBS_BBK_1PETER', 160, 1), + (61, 'JBS_BBK_2PETER', 161, 1), + (62, 'JBS_BBK_1JOHN', 162, 1), + (63, 'JBS_BBK_2JOHN', 163, 1), + (64, 'JBS_BBK_3JOHN', 164, 1), + (65, 'JBS_BBK_JUDE', 165, 1), + (66, 'JBS_BBK_REVELATION', 166, 1), + (67, 'JBS_BBK_TOBIT', 167, 1), + (68, 'JBS_BBK_JUDITH', 168, 1), + (69, 'JBS_BBK_1MACCABEES', 169, 1), + (70, 'JBS_BBK_2MACCABEES', 170, 1), + (71, 'JBS_BBK_WISDOM', 171, 1), + (72, 'JBS_BBK_SIRACH', 172, 1), + (73, 'JBS_BBK_BARUCH', 173, 1)"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + + $query = "SHOW INDEX FROM #__bsms_timeset WHERE Key_name = 'idx_state'"; + $db->setQuery($query); + + if ($db->loadResult()) + { + // Fix timeset primary key + $query = "ALTER TABLE `#__bsms_timeset` DROP INDEX `timeset` , ADD PRIMARY KEY ( `timeset` )"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + + // Fix studies params + $query = "SELECT `id`, `params` FROM `#__bsms_studies`"; + $db->setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + foreach ($results AS $result) + { + // Update the params to json + $registry = new Registry; + $registry->loadString($result->params); + + $params2 = $registry->toObject(); + $params2 = json_encode($params2); + $query = "UPDATE `#__bsms_studies` SET `params` = " . $db->quote($params2) . " WHERE `id` = " . + (int) $db->quote($result->id) . " LIMIT 1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + } + + // Fix topics text + $query = "SELECT `id`, `topic_text` FROM `#__bsms_topics`"; + $db->setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + foreach ($results AS $result) + { + $topic = $result->topic_text; + + // Replace all non a-Z 0-9 by '_' + $topic = 'JBS_TOP_' . strtoupper(preg_replace('/[^a-z0-9]/i', '_', $topic)); + $query = "UPDATE `#__bsms_topics` SET `topic_text` = " . $db->quote($topic) . " WHERE `id` = " . + (int) $db->quote($result->id); + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + } + + // Fix template params + $query = "SELECT `id`, `params` FROM `#__bsms_templates`"; + $db->setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + foreach ($results AS $result) + { + // Update the params to json + $registry = new Registry; + + if ($result->params) + { + // Fix incorrect params string literal + $params = []; + + foreach (explode('\n', $result->params) as $param) + { + $param = explode('=', str_replace('\n', '', trim($param))); + $params[$param[0]] = $param[1]; + } + + $registry->loadArray($params); + } + + $params2 = $registry->toObject(); + $params2 = json_encode($params2); + $query = "UPDATE `#__bsms_templates` SET `params` = " . $db->quote($params2) . " WHERE `id` = " . + (int) $db->quote($result->id) . " LIMIT 1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + } + + // Fix Admin params + $query = "SELECT `id`, `params` FROM `#__bsms_admin`"; + $db->setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + foreach ($results AS $result) + { + // Update the params to json + $registry = new Registry; + + if ($result->params) + { + // Fix incorrect params string literal + $params = []; + + foreach (explode('\n', $result->params) as $param) + { + $param = explode('=', str_replace('\n', '', trim($param))); + $params[$param[0]] = $param[1]; + } + + $registry->loadArray($params); + } + + $params2 = $registry->toObject(); + $params2 = json_encode($params2); + $query = "UPDATE `#__bsms_admin` SET `params` = " . $db->quote($params2) . " WHERE `id` = " . + (int) $db->quote($result->id) . " LIMIT 1"; + + if (!JBSMDbHelper::performDB($query, "Build 700: ")) + { + return false; + } + } + } + + return true; + } + + /** + * Add Asset Column + * + * @param string $table Table name to affect + * + * @return boolean + * + * @since 9.0.0 + */ + protected function addAssetColumn($table) + { + $dbhelper = new JBSMDbHelper; + + if (!$table) + { + return false; + } + + if (JBSMDbHelper::checkTables($table, 'asset_id') !== true) + { + $array = [ + [ + 'table' => $table, 'field' => 'asset_id', 'type' => 'ADD', + 'command' => "int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.'" + ] + ]; + + if (!$dbhelper->alterDB($array, "Build 700 : ")) + { + return false; + } + } + + if (JBSMDbHelper::checkTables($table, 'access') !== true) + { + $array = [ + [ + 'table' => $table, 'field' => 'access', 'type' => 'ADD', + 'command' => "int(10) unsigned NOT NULL DEFAULT '1'" + ] + ]; + + if (!$dbhelper->alterDB($array, "Build 700 : ")) + { + return false; + } + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/7.0.1.php b/build/com_proclaim-9.2.1/admin/install/updates/7.0.1.php new file mode 100644 index 0000000000..1aa003db80 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/7.0.1.php @@ -0,0 +1,115 @@ +getTableColumns('#__bsms_topics'); + $languagetag = false; + $paramstag = false; + $dbhelper = new JBSMDbHelper; + + if (is_array($tables)) + { + if (isset($tables['languages'])) + { + $languagetag = true; + $changefield = array(array('table' => '#__bsms_topics', 'field' => 'languages', 'type' => 'CHANGE', 'command' => '`params` varchar(511) NULL')); + + if (!$dbhelper->alterDB($changefield, "Build 701: ")) + { + JFactory::getApplication()->enqueueMessage(JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', $db->stderr(true)), 'error'); + + return false; + } + } + elseif (isset($tables['params'])) + { + $paramstag = true; + } + + if (!$languagetag && !$paramstag) + { + $addfield = array(array( + 'table' => '#__bsms_topics', 'field' => 'params', 'type' => 'ADD', + 'command' => 'varchar(511) NULL' + )); + + if (!$dbhelper->alterDB($addfield, "Build 701: ")) + { + JFactory::getApplication()->enqueueMessage(JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', $db->stderr(true)), 'error'); + + return false; + } + } + } + else + { + JFactory::getApplication()->enqueueMessage(JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', $db->stderr(true)), 'error'); + + return false; + } + + $fixtopics = $this->updatetopics(); + + if (!$fixtopics) + { + return false; + } + + return true; + } + + /** + * Update the Topics + * + * @return boolean + * + * @since 9.0.0 + */ + public function updatetopics() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->insert('#__bsms_studytopics (study_id, topic_id)') + ->select('#__bsms_studies.id, #__bsms_studies.topics_id ') + ->from('#__bsms_studies') + ->where('#__bsms_studies.topics_id > 0'); + $db->setQuery($query); + + if (!$db->execute()) + { + JFactory::getApplication()->enqueueMessage(JText::sprintf('JBS_INS_SQL_UPDATE_ERRORS', $db->stderr(true)), 'error'); + + return false; + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/7.0.2.php b/build/com_proclaim-9.2.1/admin/install/updates/7.0.2.php new file mode 100644 index 0000000000..2d34d8ab98 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/7.0.2.php @@ -0,0 +1,76 @@ + '#__bsms_folders', 'field' => 'idx_state', 'type' => 'INDEX', 'command' => '( `published` )'], + ['table' => '#__bsms_folders', 'field' => 'idx_access', 'type' => 'INDEX', 'command' => '( `access` )'], + ['table' => '#__bsms_folders', 'field' => 'asset_id', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL DEFAULT \'0\''], + ['table' => '#__bsms_folders', 'field' => 'access', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL DEFAULT \'0\''], + ['table' => '#__bsms_folders', 'field' => 'published', 'type' => 'MODIFY', 'command' => 'TINYINT( 3 ) NOT NULL DEFAULT \'1\''], + ['table' => '#__bsms_folders', 'field' => 'id', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT'], + ['table' => '#__bsms_folders', 'field' => 'published', 'type' => 'MODIFY', 'command' => 'TINYINT( 3 ) NOT NULL DEFAULT \'1\''], + ['table' => '#__bsms_folders', 'field' => '', 'type' => 'MODIFY', 'command' => 'TINYINT( 3 ) NOT NULL DEFAULT \'1\''], + ['table' => '#__bsms_folders', 'field' => 'published', 'type' => 'MODIFY', 'command' => 'TINYINT( 3 ) NOT NULL DEFAULT \'1\''], + ['table' => '#__bsms_media', 'field' => 'idx_state', 'type' => 'INDEX', 'command' => '( `published` )'], + ['table' => '#__bsms_media', 'field' => 'idx_access', 'type' => 'INDEX', 'command' => '( `access` )'], + ['table' => '#__bsms_media', 'field' => 'asset_id', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL DEFAULT \'0\'' . + ' COMMENT \'FK to the #__assets table.\''], + ['table' => '#__bsms_media', 'field' => 'ordering', 'type' => 'COLUMN', 'command' => 'INT( 11 ) NOT NULL DEFAULT \'0\''], + ['table' => '#__bsms_media', 'field' => 'access', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL DEFAULT \'0\''], + ['table' => '#__bsms_media', 'field' => 'published', 'type' => 'MODIFY', 'command' => 'TINYINT( 3 ) NOT NULL DEFAULT \'1\''], + ['table' => '#__bsms_media', 'field' => 'id', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT'], + ['table' => '#__bsms_mimetype', 'field' => 'idx_state', 'type' => 'INDEX', 'command' => '( `published` )'], + ['table' => '#__bsms_mimetype', 'field' => 'idx_access', 'type' => 'INDEX', 'command' => '( `access` )'], + ['table' => '#__bsms_mimetype', 'field' => 'ordering', 'type' => 'COLUMN', 'command' => 'INT( 11 ) NOT NULL DEFAULT \'0\''], + ['table' => '#__bsms_mimetype', 'field' => 'asset_id', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL DEFAULT \'0\'' . + ' COMMENT \'FK to the #__assets table.\''], + ['table' => '#__bsms_mimetype', 'field' => 'access', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL DEFAULT \'0\''], + ['table' => '#__bsms_mimetype', 'field' => 'published', 'type' => 'MODIFY', 'command' => 'TINYINT( 3 ) NOT NULL DEFAULT \'1\''], + ['table' => '#__bsms_mimetype', 'field' => 'id', 'type' => 'MODIFY', 'command' => 'INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT'], + ]; + + if (!$dbhelper->alterDB($tables, "Build 700: ")) + { + return false; + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/7.1.0.php b/build/com_proclaim-9.2.1/admin/install/updates/7.1.0.php new file mode 100644 index 0000000000..c7940dee61 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/7.1.0.php @@ -0,0 +1,97 @@ + '#__bsms_servers', 'field' => 'type', 'type' => 'COLUMN', 'command' => 'TINYINT(3) NOT NULL'], + ['table' => '#__bsms_servers', 'field' => 'ftphost', 'type' => 'COLUMN', 'command' => 'VARCHAR(100) NOT NULL'], + ['table' => '#__bsms_servers', 'field' => 'ftpuser', 'type' => 'COLUMN', 'command' => 'VARCHAR(250) NOT NULL'], + ['table' => '#__bsms_servers', 'field' => 'ftppassword', 'type' => 'COLUMN', 'command' => 'VARCHAR(250) NOT NULL'], + ['table' => '#__bsms_servers', 'field' => 'ftpport', 'type' => 'COLUMN', 'command' => 'VARCHAR(10) NOT NULL'], + ['table' => '#__bsms_servers', 'field' => 'aws_key', 'type' => 'COLUMN', 'command' => 'VARCHAR(100) NOT NULL'], + ['table' => '#__bsms_servers', 'field' => 'aws_secret', 'type' => 'COLUMN', 'command' => 'VARCHAR(100) NOT NULL'], + ]; + + if (!$dbhelper->alterDB($tables, "Build 700: ")) + { + return false; + } + + self::setemptytemplates(); + + return true; + } + + /** + * Set Empty templates + * + * @return void + * + * @since 7.0 + */ + public static function setemptytemplates() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_templates'); + $db->setQuery($query); + $results = $db->loadObjectList(); + + foreach ($results as $result) + { + // Store new Record so it can be seen. + JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); + $table = JTable::getInstance('Template', 'Table', array('dbo' => $db)); + + try + { + $table->load($result->id); + + // This is a Joomla bug for currentAssetId being missing in table.php. When fixed in Joomla should be removed + @$table->store(); + } + catch (Exception $e) + { + JLog::add(JText::sprintf('Caught exception: ', $e->getMessage()), JLog::WARNING, 'com_biblestudy'); + } + } + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/8.0.0.php b/build/com_proclaim-9.2.1/admin/install/updates/8.0.0.php new file mode 100644 index 0000000000..f894920155 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/8.0.0.php @@ -0,0 +1,259 @@ +getQuery(true); + $query->select('id, params') + ->from('#__bsms_topics'); + $db->setQuery($query); + $topics = $db->loadObjectList(); + + foreach ($topics as $topic) + { + // Case: Params is null + if (is_null($topic->params)) + { + /** + * Leave record alone, since it would load language from ini file + * + * @deprecated 8.2.0 + **/ + // Case: Params is not null + } + else + { + $registry->loadString($topic->params); + $params = $registry->toArray(); + + // Loop through every param language and create a new rocord + foreach ($params as $key => $value) + { + // Load Topic table + JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_biblestudy/tables/'); + /** @type TableTopic $table */ + $table = JTable::getInstance('Topic', "Table"); + + $new_topic = clone $topic; + $new_topic->id = null; + $new_topic->params = null; + $new_topic->language = $key; + + if ($key == 'en-GB') + { + $new_topic->language = '*'; + } + + $new_topic->topic_text = $value; + $table->save($new_topic); + $this->update_studies($table, $topic->id, $db); + } + + // Delete old topic + $query = $db->getQuery(true); + $query->delete('#__bsms_topics') + ->where('id = ' . $topic->id); + $db->setQuery($query); + + if (!$db->execute()) + { + JFactory::getApplication()->enqueueMessage('Failed to delete old topic id: ' . $topic->id, 'warning'); + + return false; + } + } + } + + return true; + } + + /** + * Update studies to reference newly created topics + * + * @param TableTopic $topic_table Object containing the saved topic record + * @param String $old_topic_id Reference to the old topic id + * @param JDatabaseDriver $db Joomla Data bass driver + * + * @return void + * + * @since 9.0.0 + */ + private function update_studies($topic_table, $old_topic_id, $db) + { + $query = $db->getQuery(true); + $query->select('studytopics.id, studytopics.topic_id, studytopics.study_id, study.language as study_language') + ->from('#__bsms_studytopics AS studytopics') + ->join('LEFT', '#__bsms_topics as topic ON topic.id = studytopics.topic_id') + ->join('LEFT', '#__bsms_studies as study on study.id = studytopics.study_id') + ->where('studytopics.topic_id = ' . $old_topic_id); + + $db->setQuery($query); + $results = $db->loadObjectList(); + + foreach ($results as $result) + { + if ($topic_table->language == $result->study_language) + { + // Change study topic reference + $query = $db->getQuery(true); + $query->update('#__bsms_studytopics as studytopics') + ->set('topic_id = ' . $topic_table->id) + ->where('studytopics.id = ' . $result->id); + $db->setQuery($query); + + if (!$db->execute()) + { + JFactory::getApplication()->enqueueMessage('Update of Studies topics Failed' . $result->id, 'warning'); + + return; + } + } + } + } + + /** + * Fix Media File Player settings + * + * @param JDatabaseDriver $db Joomla Data bass driver + * + * @return mixed + * + * @since 9.0.0 + */ + public function fix_mediafile_params($db) + { + $query = $db->getQuery(true); + $query->select('id, params') + ->from('#__bsms_mediafiles') + ->where('`params` LIKE ' . $db->q('%internal_popup%')); + $db->setQuery($query); + $results = $db->loadObjectList(); + + foreach ($results as $result) + { + $registry = new Registry; + $registry->loadString($result->params); + $old_params = $registry->toObject(); + + $new_params = new stdClass; + + if (isset($old_params->playerwidth)) + { + $new_params->playerwidth = $old_params->playerwidth; + } + else + { + $new_params->playerwidth = ''; + } + + if (isset($new_params->playerheight)) + { + $new_params->playerheight = $old_params->playerheight; + } + else + { + $new_params->playerheight = ''; + } + + if (isset($new_params->itempopuptitle)) + { + $new_params->itempopuptitle = $old_params->itempopuptitle; + } + else + { + $new_params->itempopuptitle = ''; + } + + if (isset($new_params->itempopupfooter)) + { + $new_params->itempopupfooter = $old_params->itempopupfooter; + } + else + { + $new_params->itempopupfooter = ''; + } + + if (isset($new_params->popupmargin)) + { + $new_params->popupmargin = $old_params->popupmargin; + } + else + { + $new_params->popupmargin = 50; + } + + if (isset($new_params->autostart)) + { + $new_params->autostart = $old_params->autostart; + } + else + { + $new_params->autostart = 0; + } + + // Pars thought the records and correct the params for the player upgrade errors. + // Store the combined new and existing values back as a JSON string + $paramsString = json_encode($new_params); + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($paramsString)) + ->where('id = ' . $db->q($result->id)); + $db->setQuery($query); + + if (!$db->execute()) + { + JFactory::getApplication()->enqueueMessage('Update of mediafile params Failed' . $result->id, 'warning'); + + return false; + } + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/9.0.0.php b/build/com_proclaim-9.2.1/admin/install/updates/9.0.0.php new file mode 100644 index 0000000000..3fdecde90b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/9.0.0.php @@ -0,0 +1,1380 @@ +getQuery(true)->select('*')->from('#__bsms_servers'); + $db->setQuery($query); + $servers = $db->loadObjectList(); + $this->servers = array_merge($this->servers, $servers); + + foreach ($servers as $server) + { + // Find media files for server. + $query = $db->getQuery(true)->select('*') + ->from('#__bsms_mediafiles') + ->where('server = ' . $server->id); + $db->setQuery($query); + $mediaFiles = $db->loadObjectList(); + $this->media = array_merge($this->media, $mediaFiles); + } + + // No Server related media files to migrate. + $query = $db->getQuery(true)->select('*') + ->from('#__bsms_mediafiles') + ->where('server <= ' . 0, 'OR') + ->where('server IS NULL'); + $db->setQuery($query); + $mediaFiles2 = $db->loadObjectList(); + + $this->media = array_merge($this->media, $mediaFiles2); + $this->count = count($this->media); + $this->count += count($this->servers); + + $this->query = array_merge(array('servers' => $this->servers), array('media' => $this->media)); + } + + /** + * Update Servers + * + * @param JDatabaseDriver $db Joomla database driver + * @param array $server Server to process + * + * @return boolean + * + * @since 9.0.0 + */ + public function servers($db, $server) + { + JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_biblestudy/tables'); + $server = (object) $server; + + if (!isset($server->id)) + { + return true; + } + + /** @var TableServer $newServer */ + $newServer = JTable::getInstance('Server', 'Table', array('dbo' => $db)); + $newServer->load($server->id); + $params = array(); + + if (!empty($server->ftphost)) + { + // Migrate FTP server type + $newServer->type = "ftp"; + $params['ftphost'] = $server->ftp_username; + $params['ftpuser'] = $server->ftp_password; + $params['ftppassword'] = $server->ftp_password; + $params['ftpport'] = $server->ftp_password; + } + elseif (!empty($server->aws_key)) + { + // Migrate AWS server type + $newServer->type = "aws"; + $params['aws_key'] = $server->aws_key; + $params['aws_secret'] = $server->aws_secret; + } + else + { + // Migrate to a default legacy server type + $newServer->type = "legacy"; + $params['path'] = $server->server_path; + } + + $newServer->params = json_encode($params); + $newServer->id = null; + $newServer->store(); + + // Delete old server + JTable::getInstance('Server', 'Table', array('dbo' => $db))->delete($server->id); + JLog::add('Server on: ' . $server->id . ', New ID: ' . $newServer->id, JLog::INFO, 'com_biblestudy'); + + $this->query = array_merge($this->query, array('old-' . $server->id => $newServer)); + + return true; + } + + /** + * Update Media + * + * @param JDatabaseDriver $db Joomla database driver + * @param array $media Media to process. + * + * @return boolean + * + * @throws string If problem with media save. + * + * @since 9.0.0 + */ + public function media($db, $media) + { + if (!isset($media['id'])) + { + return true; + } + + $mediaFile = (object) $media; + $registry = new Registry; + JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_biblestudy/tables'); + + $query = $db->getQuery(true); + $query->select('*') + ->from($db->qn('#__bsms_servers')) + ->where($db->qn('type') . " = " . $db->q('legacy')) + ->where($db->qn('server_name') . " = " . $db->q('Default')); + $db->setQuery($query); + $newServer = $db->loadObject(); + + if ($newServer === null) + { + /** @var TableServer $newServer This is the new default server for all media */ + $newServer = JTable::getInstance('Server', 'Table', array('dbo' => $db)); + $newServer->server_name = 'Default'; + $newServer->type = 'legacy'; + $newServer->params = '{"path":""}'; + $newServer->id = null; + $newServer->store(); + + // Modify admin table to add thumbnail default parameters + /** @type TableAdmin $admin */ + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_admin') + ->where('id = 1'); + $db->setQuery($query); + $admin = $db->loadObject(); + $registry = new Registry; + $registry->loadString($admin->params); + $registry->set('server', $newServer->id); + $admin->params = $registry->toString(); + $query = $db->getQuery(true); + $query->update('#__bsms_admin')->set('params = ' . $db->q($admin->params))->where('id = 1'); + $db->setQuery($query); + $db->execute(); + } + + JLog::add('Media working on: ' . $mediaFile->id, JLog::INFO, 'com_biblestudy'); + + /** @var TableMediafile $newMediaFile */ + $newMediaFile = JTable::getInstance('Mediafile', 'Table', array('dbo' => $db)); + $newMediaFile->load($mediaFile->id); + $metadata = array(); + + $query = $db->getQuery(true); + $query->select('*')->from('#__bsms_media')->where('id = ' . (int) $mediaFile->media_image); + $db->setQuery($query); + + $mediaImage = $db->loadObject(); + + $query = $db->getQuery(true); + $query->select('*')->from('#__bsms_mimetype')->where('id = ' . (int) $mediaFile->mime_type); + $db->setQuery($query); + + $mimtype = $db->loadObject(); + $mimage = null; + + $folderpath = ''; + + if ($mediaFile->path > 0) + { + $query = $db->getQuery(true); + $query->select('*')->from('#__bsms_folders')->where('id = ' . (int) $mediaFile->path); + $db->setQuery($query); + $path = $db->loadObject(); + $folderpath = $path->folderpath; + } + + // Some people do not have images set to their media so we have this. + if (!$mediaImage) + { + $mediaImage = new stdClass; + $mediaImage->media_alttext = ''; + } + else + { + if ($mediaImage->media_image_path) + { + $mimage = $mediaImage->media_image_path; + } + else + { + $mimage = 'images/biblestudy/' . $mediaImage->path2; + + if (strpos($mediaImage->path2, '/') !== false) + { + $mimage = $mediaImage->path2; + } + } + } + + $registry->loadString(json_encode($mediaFile->params)); + $params = $registry->toObject(); + + $params->media_image = $mimage; + $params->media_text = $mediaImage->media_alttext; + + if (!empty($mimtype)) + { + $params->mime_type = $mimtype->mimetype; + } + + $params->special = $mediaFile->special; + + if (!empty($mediaFile->filename)) + { + $params->filename = $folderpath . $mediaFile->filename; + } + else + { + $params->filename = ''; + } + + if ($mediaFile->player == '100') + { + $mediaFile->player = ''; + } + + $params->player = $mediaFile->player; + $params->size = $mediaFile->size; + $params->mediacode = $mediaFile->mediacode; + $params->link_type = $mediaFile->link_type; + $params->docMan_id = $mediaFile->docMan_id; + $params->article_id = $mediaFile->article_id; + $params->virtueMart_id = $mediaFile->virtueMart_id; + $params->popup = $mediaFile->popup; + + $registry->loadObject($params); + + // Use old server ID to find new server ID. + if (isset($this->query['old-' . $mediaFile->server]) && $mediaFile->server > '0') + { + // Cast server query to be object and not array. + $oldserver = (Object) $this->query['old-' . $mediaFile->server]; + JLog::add('New Server ID status: ' . $oldserver->id, JLog::NOTICE, 'com_biblestudy'); + $newMediaFile->server_id = (int) $oldserver->id; + } + else + { + // Use default server ID. + $newMediaFile->server_id = (int) $newServer->id; + JLog::add('New Lag Server ID status: ' . $newServer->id, JLog::NOTICE, 'com_biblestudy'); + } + + $newMediaFile->params = $registry->toString(); + $newMediaFile->metadata = json_encode($metadata); + $newMediaFile->id = null; + + if (!$newMediaFile->store()) + { + throw new Exception('Bad update of media'); + } + + // Delete old mediaFile + JTable::getInstance('Mediafile', 'Table', array('dbo' => $db))->delete((int) $mediaFile->id); + + return true; + } + + /** + * Call Script for Updates of 9.0.0 + * + * @param JDatabaseDriver $db Joomla Database driver + * + * @return boolean + * + * @since 9.0.0 + */ + public function up($db) + { + // Delete unused columns + $columns = array('media_image', 'special', 'filename', 'size', 'mime_type', 'mediacode', 'link_type', + 'docMan_id', 'article_id', 'virtueMart_id', 'player', 'popup', 'server', 'internal_viewer', 'path'); + $this->deleteColumns('#__bsms_mediafiles', $columns, $db); + + // Delete unused columns + $columns = array('ftphost', 'ftpuser', 'ftppassword', 'ftpport', 'server_path', 'aws_key', 'aws_secret', + 'server_type', 'ftp_username', 'ftp_password'); + $this->deleteColumns('#__bsms_servers', $columns, $db); + + $this->deleteTable('#__bsms_folders', $db); + $this->deleteTable('#__bsms_media', $db); + $this->deleteTable('#__bsms_mimetype', $db); + + $db->setQuery("ALTER TABLE `#__bsms_servers` MODIFY COLUMN `type` CHAR(255) NOT NULL"); + $db->execute(); + $db->setQuery("ALTER TABLE `#__bsms_mediafiles` MODIFY COLUMN `hits` INT (10) DEFAULT '0'"); + $db->execute(); + + $message = new stdClass; + $message->title_key = 'JBS_POSTINSTALL_TITLE_TEMPLATE'; + $message->description_key = 'JBS_POSTINSTALL_BODY_TEMPLATE'; + $message->action_key = 'JBS_POSTINSTALL_ACTION_TEMPLATE'; + $message->language_extension = 'com_biblestudy'; + $message->language_client_id = 1; + $message->type = 'action'; + $message->action_file = 'admin://components/com_biblestudy/postinstall/template.php'; + $message->action = 'admin_postinstall_template_action'; + $message->condition_file = "admin://components/com_biblestudy/postinstall/template.php"; + $message->condition_method = 'admin_postinstall_template_condition'; + $message->version_introduced = '9.0.0'; + $message->enabled = 1; + + // Import filesystem libraries. Perhaps not necessary, but does not hurt + jimport('joomla.filesystem.file'); + + if (!JFile::exists(JPATH_SITE . '/images/biblestudy/logo.png')) + { + // Copy the images to the new folder + JFolder::copy('/media/com_biblestudy/images', 'images/biblestudy/', JPATH_SITE, true); + } + + $script = new BibleStudyModelInstall; + $script->postinstall_messages($message); + + return true; + } + + /** + * Migrate Template Lists + * + * @param JDatabaseDriver $db Joomla Database driver + * + * @return boolean + * + * @since 9.0.0 + */ + public function migrateTemplateLists($db) + { + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_templates'); + $db->setQuery($query); + $data = $db->loadObjectList(); + + foreach ($data as $d) + { + $registry = new Registry; + $registry->loadString($d->params); + + if ($registry->get('row1col1') > 0) + { + $row = 1; + $col = 1; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row1col2') > 0) + { + $row = 1; + $col = 2; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row1col3') > 0) + { + $row = 1; + $col = 3; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row1col4') > 0) + { + $row = 1; + $col = 4; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row2col1') > 0) + { + $row = 2; + $col = 1; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row2col2') > 0) + { + $row = 2; + $col = 2; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row2col3') > 0) + { + $row = 2; + $col = 3; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row2col4') > 0) + { + $row = 2; + $col = 4; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row3col1') > 0) + { + $row = 3; + $col = 1; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row3col2') > 0) + { + $row = 3; + $col = 2; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row3col3') > 0) + { + $row = 3; + $col = 3; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row3col4') > 0) + { + $row = 3; + $col = 4; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row4col1') > 0) + { + $row = 4; + $col = 1; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row4col2') > 0) + { + $row = 4; + $col = 2; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row4col3') > 0) + { + $row = 4; + $col = 3; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('row4col4') > 0) + { + $row = 4; + $col = 4; + $return = $this->changeSetting($row, $col, $registry); + $registry = $return; + } + + if ($registry->get('serieselement1') > 0) + { + $element = $registry->get('serieselement1'); + $elementname = $this->serieselement($element); + $registry->set($elementname . 'row', 1); + $registry->set($elementname . 'col', 1); + $registry->set($elementname . 'colspan', 6); + $registry->set($elementname . 'linktype', $registry->get('serieslink1')); + } + + if ($registry->get('serieselement2') > 0) + { + $element = $registry->get('serieselement2'); + $elementname = $this->serieselement($element); + $registry->set($elementname . 'row', 1); + $registry->set($elementname . 'col', 2); + $registry->set($elementname . 'colspan', 6); + $registry->set($elementname . 'linktype', $registry->get('serieslink2')); + } + + if ($registry->get('serieselement3') > 0) + { + $element = $registry->get('serieselement3'); + $elementname = $this->serieselement($element); + $registry->set($elementname . 'row', 2); + $registry->set($elementname . 'col', 1); + $registry->set($elementname . 'colspan', 6); + $registry->set($elementname . 'linktype', $registry->get('serieslink3')); + } + + if ($registry->get('serieselement4') > 0) + { + $element = $registry->get('serieselement4'); + $elementname = $this->serieselement($element); + $registry->set($elementname . 'row', 2); + $registry->set($elementname . 'col', 2); + $registry->set($elementname . 'colspan', 6); + $registry->set($elementname . 'linktype', $registry->get('serieslink4')); + } + + JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); + $table = JTable::getInstance('template', 'Table'); + $table->load($d->id, false); + $table->bind(array('params' => $registry->toString())); + $table->store(); + } + + return true; + } + + /** + * T Settings Migration + * + * @param int $element ? + * + * @return boolean|string + * + * @since 9.0.0 + */ + public function testingMigration($element) + { + $elementText = $this->element($element); + + return $elementText; + } + + /** + * Elements workings + * + * @param int $elementNumber Number to stirng + * + * @return boolean|string + * + * @since 9.0.0 + */ + private function element($elementNumber) + { + switch ($elementNumber) + { + case 1: + $element = 'scripture1'; + break; + case 2: + $element = 'scripture2'; + break; + case 3: + $element = 'secondary'; + break; + case 4: + $element = 'duration'; + break; + case 5: + $element = 'title'; + break; + case 6: + $element = 'studyintro'; + break; + case 7: + $element = 'teacher'; + break; + case 8: + $element = 'teacher-title'; + break; + case 9: + $element = 'series'; + break; + case 10: + $element = 'date'; + break; + case 11: + $element = 'submitted'; + break; + case 12: + $element = 'hits'; + break; + case 13: + $element = 'studynumber'; + break; + case 14: + $element = 'topic'; + break; + case 15: + $element = 'locations'; + break; + case 16: + $element = 'messagetype'; + break; + case 17: + $element = 'studyintro'; + break; + case 20: + $element = 'jbsmedia'; + break; + case 25: + $element = 'thumbnail'; + break; + case 29: + $element = 'downloads'; + break; + case 24: + $element = 'customtext'; + break; + } + + if (isset($element)) + { + return $element; + } + else + { + return false; + } + } + + /** + * Seriese Elements + * + * @param int $element ID + * + * @return string + * + * @since 9.0.0 + */ + private function serieselement($element) + { + $return = null; + + switch ($element) + { + case 1: + $return = 'sseries'; + break; + case 2: + $return = 'sseriesthumbnail'; + break; + case 3: + $return = 'sseriesthumbnail'; + break; + case 4: + $return = 'steacher'; + break; + case 5: + $return = 'steacherimage'; + break; + case 6: + $return = 'steacher-title'; + break; + case 7: + $return = 'sdescription'; + break; + } + + return $return; + } + + /** + * Change Settings + * + * @param int $row ID + * @param int $col ID + * @param Registry $registry Strings for Registry + * + * @return Registry + * + * @since 9.0.0 + */ + private function changeSetting($row, $col, $registry) + { + $element = $registry->get('row' . $row . 'col' . $col); + $return = $this->testingMigration($element); + $registry->set($return . 'row', $row); + $registry->set($return . 'col', $col); + $registry->set($return . 'colspan', $registry->get('r' . $row . 'c' . $col . 'span')); + $registry->set($return . 'linktype', $registry->get('linkr' . $row . 'c' . $col)); + + return $registry; + } + + /** + * Remove Export function to TemplateFiles + * + * @param JDatabaseDriver $db Joomla Database driver + * + * @return boolean + * + * @since 9.0.0 + */ + public function removeExpert($db) + { + jimport('joomla.client.helper'); + jimport('joomla.filesystem.file'); + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_templates'); + $db->setQuery($query); + $data = $db->loadObjectList(); + $filenumber = 1; + + foreach ($data as $d) + { + $registry = new Registry; + $registry->loadString($d->params); + + if ($registry->get('useexpert_list') > 0) + { + $dataheaderlist = $registry->get('headercode'); + $dataitemlist = $registry->get('templatecode'); + $dataheaderlist = $this->itemReplace($dataheaderlist); + $dataitemlist = $this->itemReplace($dataitemlist); + $filecontent = '' . $dataheaderlist . 'items as $study){ ?>' . + $dataitemlist . ''; + $filename = 'default_listtemplate' . $filenumber; + $file = JPATH_ROOT . '/components/com_biblestudy/views/sermons/tmpl/' . $filename . '.php'; + JFile::write($file, $filecontent); + $profile = new stdClass; + $profile->published = 1; + $profile->type = 1; + $profile->filename = $filename; + $profile->templatecode = $filecontent; + $profile->asset_id = ''; + $db->insertObject('#__bsms_templatecode', $profile); + $registry->set('sermonstemplate', $filename); + } + + if ($registry->get('useexpert_details') > 0) + { + $dataitemlist = $registry->get('study_detailtemplate'); + $dataitemlist = $this->itemReplace($dataitemlist); + $filecontent = 'item; ?>' . $dataitemlist; + $filename = 'default_sermontemplate' . $filenumber; + $file = JPATH_ROOT . '/components/com_biblestudy/views/sermon/tmpl/' . $filename . '.php'; + JFile::write($file, $filecontent); + $profile = new stdClass; + $profile->published = 1; + $profile->type = 2; + $profile->filename = $filename; + $profile->templatecode = $filecontent; + $profile->asset_id = ''; + $db->insertObject('#__bsms_templatecode', $profile); + $registry->set('sermontemplate', $filename); + } + + if ($registry->get('useexpert_teacherlist') > 0) + { + $dataheaderlist = $registry->get('teacher_headercode'); + $dataitemlist = $registry->get('teacher_templatecode'); + $dataheaderlist = $this->itemReplace($dataheaderlist); + $dataitemlist = str_replace('{{title}}', '{{teachertitlelist}}', $dataitemlist); + $dataitemlist = str_replace('{{teacher}}', '{{teachernamelist}}', $dataitemlist); + $dataitemlist = str_replace('{{phone}}', '{{teacherphonelist}}', $dataitemlist); + $dataitemlist = str_replace('{{website}}', '{{teacherwebsitelist}}', $dataitemlist); + $dataitemlist = str_replace('{{information}}', '{{teacherinformationlist}}', $dataitemlist); + $dataitemlist = str_replace('{{image}}', '{{teacherimagelist}}', $dataitemlist); + $dataitemlist = str_replace('{{thumbnail}}', '{{teacherthumbnaillist}}', $dataitemlist); + $dataitemlist = str_replace('{{short}}', '{{teachershortlist}}', $dataitemlist); + $dataitemlist = $this->itemReplace($dataitemlist); + $filecontent = '' . $dataheaderlist . 'items as $teacher){ ?>' . + $dataitemlist . ''; + $filename = 'default_teacherstemplate' . $filenumber; + $file = JPATH_ROOT . '/components/com_biblestudy/views/teachers/tmpl/' . $filename . '.php'; + JFile::write($file, $filecontent); + $profile = new stdClass; + $profile->published = 1; + $profile->type = 3; + $profile->filename = $filename; + $profile->templatecode = $filecontent; + $profile->asset_id = ''; + $db->insertObject('#__bsms_templatecode', $profile); + $registry->set('teacherstemplate', $filename); + } + + if ($registry->get('useexpert_teacherdetail') > 0) + { + $dataitemlist = $registry->get('teacher_detailtemplate'); + $dataitemlist = str_replace('{{title}}', '{{teachertitle}}', $dataitemlist); + $dataitemlist = str_replace('{{teacher}}', '{{teachername}}', $dataitemlist); + $dataitemlist = $this->itemReplace($dataitemlist); + $filecontent = '' . $dataitemlist; + $filename = 'default_teachertemplate' . $filenumber; + $file = JPATH_ROOT . '/components/com_biblestudy/views/teacher/tmpl/' . $filename . '.php'; + JFile::write($file, $filecontent); + $profile = new stdClass; + $profile->published = 1; + $profile->type = 4; + $profile->filename = $filename; + $profile->templatecode = $filecontent; + $profile->asset_id = ''; + $db->insertObject('#__bsms_templatecode', $profile); + $registry->set('teachertemplate', $filename); + } + + JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); + $table = JTable::getInstance('template', 'Table'); + $table->load($d->id, false); + $table->bind(array('params' => $registry->toString())); + $table->store(); + $filenumber++; + } + + return true; + } + + /** + * Replace Strings to actual code + * + * @param string $item String to replace + * + * @return mixed + * + * @since 9.0.0 + */ + private function itemReplace($item) + { + $item = str_replace('{{teacher}}', 'teachername; ?>', $item); + $item = str_replace('{{teachertitle}}', 'item->title; ?>', $item); + $item = str_replace('{{teachername}}', 'item->teachername; ?>', $item); + $item = str_replace('{{teachertitlelist}}', 'title; ?>', $item); + $item = str_replace('{{teachernamelist}}', 'teachername; ?>', $item); + $item = str_replace('{{title}}', 'studytitle; ?>', $item); + $item = str_replace('{{date}}', 'studydate; ?>', $item); + $item = str_replace('{{studyintro}}', 'studyintro; ?>', $item); + $item = str_replace('{{scripture}}', 'scripture1; ?>', $item); + $item = str_replace('{{topics}}', 'topics; ?>', $item); + $item = str_replace('{{scripture}}', 'scripture1; ?>', $item); + $item = str_replace('{{url}}', 'detailslink; ?>', $item); + $item = str_replace('{{mediatime}}', 'duration; ?>', $item); + $item = str_replace('{{thumbnail}}', 'study_thumbnail; ?>', $item); + $item = str_replace('{{seriestext}}', '', $item); + $item = str_replace('{{bookname}}', 'scripture1; ?>', $item); + $item = str_replace('{{hits}}', 'hits;', $item); + $item = str_replace('{{location}}', 'location_text; ?>', $item); + $item = str_replace('{{plays}}', 'totaplays; ?>', $item); + $item = str_replace('{{downloads}}', 'totaldownloads; ?>', $item); + $item = str_replace('{{media}}', 'media; ?>', $item); + $item = str_replace('{{messagetype}}', 'messagetypes; ?>', $item); + $item = str_replace('{{studytext}}', 'item->studytext; ?>', $item); + $item = str_replace('{{scipturelink}}', 'passage; ?>', $item); + $item = str_replace('{{share}}', 'page->social; ?>', $item); + $item = str_replace('{{printview}}', 'page->print; ?>', $item); + $item = str_replace('{{pdfview}}', '', $item); + $item = str_replace('{{phone}}', 'item->phone; ?>', $item); + $item = str_replace('{{teacherphonelist}}', 'phone; ?>', $item); + $item = str_replace('{{website}}', 'item->website; ?>', $item); + $item = str_replace('{{teacherwebsitelist}}', 'website; ?>', $item); + $item = str_replace('{{information}}', 'item->information; ?>', $item); + $item = str_replace('{{teacherinformationlist}}', 'information; ?>', $item); + $item = str_replace('{{image}}', 'item->largeimage; ?>', $item); + $item = str_replace('{{teacherimagelist}}', 'largeimage; ?>', $item); + $item = str_replace('{{thumbnail}}', 'item->image; ?>', $item); + $item = str_replace('{{teacherthumbnaillist}}', 'image; ?>', $item); + $item = str_replace('{{short}}', 'item->short; ?>', $item); + $item = str_replace('{{teachershortlist}}', 'short; ?>', $item); + + return $item; + } + + /** + * Set del columns + * + * @param string $table Table + * @param array $columns Column to drop + * @param JDatabaseDriver $db Data bass driver + * + * @return void + * + * @since 9.0.0 + */ + private function deleteColumns($table, $columns, $db) + { + $columns2 = $db->getTableColumns($table); + + foreach ($columns as $column) + { + if (isset($columns2[$column])) + { + $db->setQuery('ALTER TABLE ' . $db->qn($table) . ' DROP COLUMN ' . $db->qn($column)); + $db->execute(); + } + } + } + + /** + * Delete Table + * + * @param string $table Table + * @param JDatabaseDriver $db Joomla Database driver + * + * @return void + * + * @since 9.0.0 + */ + private function deleteTable($table, $db) + { + $db->setQuery('DROP TABLE IF EXISTS ' . $db->qn($table)); + $db->execute(); + } + + /** + * Update Templates to work with 9.0.0 that cannot be don doing normal sql file. + * + * @param JDatabaseDriver $db Joomla Database driver + * + * @return void + * + * @since 9.0.0 + */ + public function updateTemplates($db) + { + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_templates'); + $db->setQuery($query); + $data = $db->loadObjectList(); + + foreach ($data as $d) + { + $registry = new Registry; + $registry->loadString($d->params); + $registry->def('player', $registry->get('media_player')); + JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); + $table = JTable::getInstance('template', 'Table'); + $table->load($d->id, false); + $table->bind(array('params' => $registry->toString())); + $table->store(); + } + + return; + } + + /** + * Remove Old Files and Folders + * + * @since 9.0.1 + * + * @return void + */ + public function deleteUnexactingFiles() + { + // Import filesystem libraries. Perhaps not necessary, but does not hurt + jimport('joomla.filesystem.file'); + jimport('joomla.filesystem.folder'); + + $files = array( + '/media/com_biblestudy/css/biblestudy.css.dist', + '/images/textfile24.png', + '/components/com_biblestudy/biblestudy.css', + '/components/com_biblestudy/class.biblestudydownload.php', + '/components/language/en-GB/en-GB.com_biblestudy.ini', + '/administrator/language/en-GB/en-GB.com_biblestudy.ini', + '/administrator/language/en-GB/en-GB.com_biblestudy.sys.ini', + '/administrator/components/com_biblestudy/Snoopy.class.php', + '/administrator/components/com_biblestudy/admin.biblestudy.php', + '/components/com_biblestudy/helpers/updatesef.php', + '/components/com_biblestudy/helpers/image.php', + '/components/com_biblestudy/helpers/helper.php', + '/components/com_biblestudy/views/messages/tmpl/modal16.php', + '/components/com_biblestudy/controllers/teacherlist.php', + '/components/com_biblestudy/controllers/teacherdisplay.php', + '/components/com_biblestudy/controllers/studydetails.php', + '/components/com_biblestudy/controllers/studieslist.php', + '/components/com_biblestudy/controllers/serieslist.php', + '/components/com_biblestudy/controllers/seriesdetail.php', + '/components/com_biblestudy/models/teacherlist.php', + '/components/com_biblestudy/models/teacherdisplay.php', + '/components/com_biblestudy/models/studydetails.php', + '/components/com_biblestudy/models/studieslist.php', + '/components/com_biblestudy/models/seriesdetail.php', + '/components/com_biblestudy/models/serieslist.php', + '/components/com_biblestudy/views/mediafile/tmpl/form.php', + '/components/com_biblestudy/views/mediafile/tmpl/form.xml', + '/language/en-GB/en-GB.com_biblestudy.ini', + '/language/cs-CZ/cs-CZ.com_biblestudy.ini', + '/language/de-DE/de-DE.com_biblestudy.ini', + '/language/es-ES/es-ES.com_biblestudy.ini', + '/language/hu-HU/hu-HU.com_biblestudy.ini', + '/language/nl-NL/nl-NL.com_biblestudy.ini', + '/language/no-NO/no-NO.com_biblestudy.ini', + '/language/en-GB/en-GB.mod_biblestudy.ini', + '/language/en-GB/en-GB.mod_biblestudy.sys.ini', + '/administrator/components/com_biblestudy/install/biblestudy.assets.php', + '/administrator/components/com_biblestudy/install/sql/jbs7.0.0.sql', + '/administrator/components/com_biblestudy/install/sql/updates/mysql/20100101.sql', + '/administrator/components/com_biblestudy/lib/biblestudy.podcast.class.php', + '/administrator/components/com_biblestudy/controllers/commentsedit.php', + '/administrator/components/com_biblestudy/controllers/commentslist.php', + '/administrator/components/com_biblestudy/controllers/cssedit.php', + '/administrator/components/com_biblestudy/controllers/folderslist.php', + '/administrator/components/com_biblestudy/controllers/foldersedit.php', + '/administrator/components/com_biblestudy/controllers/folder.php', + '/administrator/components/com_biblestudy/controllers/folders.php', + '/administrator/components/com_biblestudy/controllers/locationslist.php', + '/administrator/components/com_biblestudy/controllers/locationsedit.php', + '/administrator/components/com_biblestudy/controllers/mediaedit.php', + '/administrator/components/com_biblestudy/controllers/mediafilesedit.php', + '/administrator/components/com_biblestudy/controllers/mediafileslist.php', + '/administrator/components/com_biblestudy/controllers/mediaimage.php', + '/administrator/components/com_biblestudy/controllers/mediaimages.php', + '/administrator/components/com_biblestudy/controllers/medialist.php', + '/administrator/components/com_biblestudy/controllers/messagetypelist.php', + '/administrator/components/com_biblestudy/controllers/messagetypeedit.php', + '/administrator/components/com_biblestudy/controllers/mimetypelist.php', + '/administrator/components/com_biblestudy/controllers/mimetypeedit.php', + '/administrator/components/com_biblestudy/controllers/mimetype.php', + '/administrator/components/com_biblestudy/controllers/mimetypes.php', + '/administrator/components/com_biblestudy/controllers/podcastlist.php', + '/administrator/components/com_biblestudy/controllers/podcastedit.php', + '/administrator/components/com_biblestudy/controllers/serieslist.php', + '/administrator/components/com_biblestudy/controllers/seriesedit.php', + '/administrator/components/com_biblestudy/controllers/serverslist.php', + '/administrator/components/com_biblestudy/controllers/serversedit.php', + '/administrator/components/com_biblestudy/controllers/sharelist.php', + '/administrator/components/com_biblestudy/controllers/shareedit.php', + '/administrator/components/com_biblestudy/controllers/studieslist.php', + '/administrator/components/com_biblestudy/controllers/studiesedit.php', + '/administrator/components/com_biblestudy/controllers/teacherlist.php', + '/administrator/components/com_biblestudy/controllers/teacheredit.php', + '/administrator/components/com_biblestudy/controllers/templateedit.php', + '/administrator/components/com_biblestudy/controllers/templateslist.php', + '/administrator/components/com_biblestudy/controllers/topicslist.php', + '/administrator/components/com_biblestudy/controllers/topicsedit.php', + '/administrator/components/com_biblestudy/models/forms/commentsedit.xml', + '/administrator/components/com_biblestudy/models/forms/foldersedit.xml', + '/administrator/components/com_biblestudy/models/forms/folder.xml', + '/administrator/components/com_biblestudy/models/forms/locationsedit.xml', + '/administrator/components/com_biblestudy/models/forms/mediaedit.xml', + '/administrator/components/com_biblestudy/models/forms/mediafilesedit.xml', + '/administrator/components/com_biblestudy/models/forms/mediaimage.xml', + '/administrator/components/com_biblestudy/models/forms/messagetypeedit.xml', + '/administrator/components/com_biblestudy/models/forms/mimetypeedit.xml', + '/administrator/components/com_biblestudy/models/forms/mimetype.xml', + '/administrator/components/com_biblestudy/models/forms/podcastedit.xml', + '/administrator/components/com_biblestudy/models/forms/seriesedit.xml', + '/administrator/components/com_biblestudy/models/forms/serversedit.xml', + '/administrator/components/com_biblestudy/models/forms/shareedit.xml', + '/administrator/components/com_biblestudy/models/forms/studiesedit.xml', + '/administrator/components/com_biblestudy/models/forms/teacheredit.xml', + '/administrator/components/com_biblestudy/models/forms/templateedit.xml', + '/administrator/components/com_biblestudy/models/forms/topicsedit.xml', + '/administrator/components/com_biblestudy/models/episodelist.php', + '/administrator/components/com_biblestudy/models/commentsedit.php', + '/administrator/components/com_biblestudy/models/commentslist.php', + '/administrator/components/com_biblestudy/models/cssedit.php', + '/administrator/components/com_biblestudy/models/folderslist.php', + '/administrator/components/com_biblestudy/models/foldersedit.php', + '/administrator/components/com_biblestudy/models/folder.php', + '/administrator/components/com_biblestudy/models/folders.php', + '/administrator/components/com_biblestudy/models/locationslist.php', + '/administrator/components/com_biblestudy/models/locationsedit.php', + '/administrator/components/com_biblestudy/models/mediaedit.php', + '/administrator/components/com_biblestudy/models/mediafilesedit.php', + '/administrator/components/com_biblestudy/models/mediafileslist.php', + '/administrator/components/com_biblestudy/models/mediaimage.php', + '/administrator/components/com_biblestudy/models/mediaimages.php', + '/administrator/components/com_biblestudy/models/medialist.php', + '/administrator/components/com_biblestudy/models/messagetypelist.php', + '/administrator/components/com_biblestudy/models/messagetypeedit.php', + '/administrator/components/com_biblestudy/models/mimetypelist.php', + '/administrator/components/com_biblestudy/models/mimetypeedit.php', + '/administrator/components/com_biblestudy/models/mimetype.php', + '/administrator/components/com_biblestudy/models/mimetypes.php', + '/administrator/components/com_biblestudy/models/podcastlist.php', + '/administrator/components/com_biblestudy/models/podcastedit.php', + '/administrator/components/com_biblestudy/models/serieslist.php', + '/administrator/components/com_biblestudy/models/seriesedit.php', + '/administrator/components/com_biblestudy/models/serverslist.php', + '/administrator/components/com_biblestudy/models/serversedit.php', + '/administrator/components/com_biblestudy/models/sharelist.php', + '/administrator/components/com_biblestudy/models/shareedit.php', + '/administrator/components/com_biblestudy/models/studieslist.php', + '/administrator/components/com_biblestudy/models/studiesedit.php', + '/administrator/components/com_biblestudy/models/teacherlist.php', + '/administrator/components/com_biblestudy/models/teacheredit.php', + '/administrator/components/com_biblestudy/models/templateedit.php', + '/administrator/components/com_biblestudy/models/templateslist.php', + '/administrator/components/com_biblestudy/models/topicslist.php', + '/administrator/components/com_biblestudy/models/topicsedit.php', + '/administrator/components/com_biblestudy/tables/biblestudy.php', + '/administrator/components/com_biblestudy/tables/booksedit.php', + '/administrator/components/com_biblestudy/tables/commentsedit.php', + '/administrator/components/com_biblestudy/tables/foldersedit.php', + '/administrator/components/com_biblestudy/tables/locationsedit.php', + '/administrator/components/com_biblestudy/tables/mediaedit.php', + '/administrator/components/com_biblestudy/tables/mediafilesedit.php', + '/administrator/components/com_biblestudy/tables/messagetypeedit.php', + '/administrator/components/com_biblestudy/tables/mimetypeedit.php', + '/administrator/components/com_biblestudy/tables/podcastedit.php', + '/administrator/components/com_biblestudy/tables/seriesedit.php', + '/administrator/components/com_biblestudy/tables/serversedit.php', + '/administrator/components/com_biblestudy/tables/shareedit.php', + '/administrator/components/com_biblestudy/tables/studiesedit.php', + '/administrator/components/com_biblestudy/tables/teacheredit.php', + '/administrator/components/com_biblestudy/tables/topicsedit.php', + '/administrator/components/com_biblestudy/tables/templateedit.php', + '/administrator/components/com_biblestudy/helpers/version.php', + '/administrator/language/en-GB/en-GB.com_biblestudy.ini', + '/administrator/language/en-GB/en-GB.com_biblestudy.sys.ini', + '/administrator/language/cs-CZ/cs-CZ.com_biblestudy.ini', + '/administrator/language/cs-CZ/cs-CZ.com_biblestudy.sys.ini', + '/administrator/language/de-DE/de-DE.com_biblestudy.ini', + '/administrator/language/de-DE/de-DE.com_biblestudy.sys.ini', + '/administrator/language/es-ES/es-ES.com_biblestudy.ini', + '/administrator/language/es-ES/es-ES.com_biblestudy.sys.ini', + '/administrator/language/hu-HU/hu-HU.com_biblestudy.ini', + '/administrator/language/hu-HU/hu-HU.com_biblestudy.sys.ini', + '/administrator/language/nl-NL/nl-NL.com_biblestudy.ini', + '/administrator/language/nl-NL/no-NO.com_biblestudy.ini', + '/administrator/language/no-NO/no-NO.com_biblestudy.sys.ini', + // JBSM 8.0.0 + // Site: + '/components/com_biblestudy/controllers/commentsedit.php', + '/components/com_biblestudy/controllers/commentslist.php', + '/components/com_biblestudy/controllers/mediafile.php', + '/components/com_biblestudy/controllers/mediafiles.php', + '/components/com_biblestudy/controllers/message.php', + '/components/com_biblestudy/controllers/messages.php', + '/components/com_biblestudy/helpers/book.php', + '/components/com_biblestudy/helpers/date.php', + '/components/com_biblestudy/helpers/duration.php', + '/components/com_biblestudy/helpers/editlink.php', + '/components/com_biblestudy/helpers/editlisting.php', + '/components/com_biblestudy/helpers/filepath.php', + '/components/com_biblestudy/helpers/filesize.php', + '/components/com_biblestudy/helpers/header.php', + '/components/com_biblestudy/helpers/listing.php', + '/components/com_biblestudy/helpers/location.php', + '/components/com_biblestudy/helpers/mediatable.php', + '/components/com_biblestudy/helpers/messagetype.php', + '/components/com_biblestudy/helpers/params.php', + '/components/com_biblestudy/helpers/passage.php', + '/components/com_biblestudy/helpers/scripture.php', + '/components/com_biblestudy/helpers/share.php', + '/components/com_biblestudy/helpers/store.php', + '/components/com_biblestudy/helpers/textlink.php', + '/components/com_biblestudy/helpers/title.php', + '/components/com_biblestudy/helpers/toolbar.php', + '/components/com_biblestudy/helpers/topics.php', + '/components/com_biblestudy/helpers/year.php', + '/components/com_biblestudy/lib/biblestudy.admin.class.php', + '/components/com_biblestudy/lib/biblestudy.defines.php', + '/components/com_biblestudy/lib/biblestudy.stats.class.php', + '/components/com_biblestudy/models/forms/commentsedit.xml', + '/components/com_biblestudy/models/commentsedit.php', + '/components/com_biblestudy/models/commentslist.php', + '/components/com_biblestudy/models/mediafile.php', + '/components/com_biblestudy/models/mediafiles.php', + '/components/com_biblestudy/models/message.php', + '/components/com_biblestudy/models/messages.php', + // Admin: + '/administrator/components/com_biblestudy/controllers/ajax.php', + '/administrator/components/com_biblestudy/helpers/cleanurl.php', + '/administrator/components/com_biblestudy/helpers/toolbar.php', + '/administrator/components/com_biblestudy/lib/biblestudy.admin.class.php', + '/administrator/components/com_biblestudy/lib/biblestudy.migrate.php', + '/administrator/components/com_biblestudy/migration/biblestudy.611.upgrade.php', + '/administrator/components/com_biblestudy/migration/biblestudy.612.upgrade.php', + '/administrator/components/com_biblestudy/migration/biblestudy.613.upgrade.php', + '/administrator/components/com_biblestudy/migration/biblestudy.614.upgrade.php', + '/administrator/components/com_biblestudy/migration/biblestudy.622.upgrade.php', + '/administrator/components/com_biblestudy/migration/biblestudy.623.upgrade.php', + '/administrator/components/com_biblestudy/migration/biblestudy.700.upgrade.php', + '/administrator/components/com_biblestudy/migration/update701.php', + '/administrator/components/com_biblestudy/models/fields/locationordering.php', + '/administrator/components/com_biblestudy/models/fields/mediaordering.php', + '/administrator/components/com_biblestudy/models/fields/messagetypeordering.php', + '/administrator/components/com_biblestudy/models/fields/shareordering.php', + '/administrator/components/com_biblestudy/models/fields/teacherordering.php', + '/administrator/components/com_biblestudy/views/admin/tmpl/form.php', + '/administrator/components/com_biblestudy/views/admin/tmpl/form_assets.php', + '/administrator/components/com_biblestudy/views/admin/tmpl/form_backup.php', + '/administrator/components/com_biblestudy/views/admin/tmpl/form_database.php', + '/administrator/components/com_biblestudy/views/admin/tmpl/form_migrate.php', + '/administrator/components/com_biblestudy/views/comment/tmpl/form.php', + '/administrator/components/com_biblestudy/views/folder/tmpl/form.php', + '/administrator/components/com_biblestudy/views/folders/tmpl/index.html', + '/administrator/components/com_biblestudy/views/location/tmpl/form.php', + '/administrator/components/com_biblestudy/views/mediaimage/tmpl/form.php', + '/administrator/components/com_biblestudy/views/message/tmpl/form.php', + '/administrator/components/com_biblestudy/views/messagetype/tmpl/form.php', + '/administrator/components/com_biblestudy/views/mimetype/tmpl/form.php', + '/administrator/components/com_biblestudy/views/podcast/tmpl/form.php', + '/administrator/components/com_biblestudy/views/serie/tmpl/form.php', + '/administrator/components/com_biblestudy/views/server/tmpl/form.php', + '/administrator/components/com_biblestudy/views/server/tmpl/index.html', + '/administrator/components/com_biblestudy/views/share/tmpl/form.php', + '/administrator/components/com_biblestudy/views/teacher/tmpl/form.php', + '/administrator/components/com_biblestudy/views/template/tmpl/form.php', + '/administrator/components/com_biblestudy/views/templatecode/tmpl/form.php', + '/administrator/components/com_biblestudy/views/topic/tmpl/form.php', + BIBLESTUDY_PATH_ADMIN . '/models/style.php', + BIBLESTUDY_PATH_ADMIN . '/models/styles.php', + BIBLESTUDY_PATH_ADMIN . '/tables/style.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/style.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/styles.php', + BIBLESTUDY_PATH_ADMIN . '/views/style/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/style/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/style/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/style/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/style/tmpl/edit.php', + BIBLESTUDY_PATH_ADMIN . '/views/styles/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/styles/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/styles/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/styles/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/styles/tmpl/default.php', + BIBLESTUDY_PATH_ADMIN . '/models/share.php', + BIBLESTUDY_PATH_ADMIN . '/models/shares.php', + BIBLESTUDY_PATH_ADMIN . '/tables/share.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/share.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/shares.php', + BIBLESTUDY_PATH_ADMIN . '/views/share/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/share/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/share/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/share/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/share/tmpl/edit.php', + BIBLESTUDY_PATH_ADMIN . '/views/shares/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/shares/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/shares/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/shares/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/shares/tmpl/default.php', + BIBLESTUDY_PATH_ADMIN . '/moduels/migration.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/migration.php', + BIBLESTUDY_PATH . '/views/sermons/tmpl/default_custom.php', + BIBLESTUDY_PATH . '/views/sermon/tmpl/default_custom.php', + BIBLESTUDY_PATH . '/views/teachers/tmpl/default_custom.php', + BIBLESTUDY_PATH . '/views/teacher/tmpl/default_custom.php' + ); + + $folders = array( + '/components/com_biblestudy/assets', + '/components/com_biblestudy/images', + '/components/com_biblestudy/views/teacherlist', + '/components/com_biblestudy/views/teacherdisplay', + '/components/com_biblestudy/views/studieslist', + '/components/com_biblestudy/views/studydetails', + '/components/com_biblestudy/views/serieslist', + '/components/com_biblestudy/views/seriesdetail', + '/administrator/media', + '/administrator/components/com_biblestudy/migration', + '/administrator/components/com_biblestudy/assets', + '/administrator/components/com_biblestudy/images', + '/administrator/components/com_biblestudy/css', + '/administrator/components/com_biblestudy/js', + '/administrator/components/com_biblestudy/views/commentsedit', + '/administrator/components/com_biblestudy/views/commentslist', + '/administrator/components/com_biblestudy/views/cssedit', + '/administrator/components/com_biblestudy/views/folderslist', + '/administrator/components/com_biblestudy/views/foldersedit', + '/administrator/components/com_biblestudy/views/folder', + '/administrator/components/com_biblestudy/views/folders', + '/administrator/components/com_biblestudy/views/locationslist', + '/administrator/components/com_biblestudy/views/locationsedit', + '/administrator/components/com_biblestudy/views/mediaedit', + '/administrator/components/com_biblestudy/views/mediafilesedit', + '/administrator/components/com_biblestudy/views/mediafileslist', + '/administrator/components/com_biblestudy/views/mediaimage', + '/administrator/components/com_biblestudy/views/mediaimages', + '/administrator/components/com_biblestudy/views/medialist', + '/administrator/components/com_biblestudy/views/messagetypelist', + '/administrator/components/com_biblestudy/views/messagetypeedit', + '/administrator/components/com_biblestudy/views/mimetypelist', + '/administrator/components/com_biblestudy/views/mimetypeedit', + '/administrator/components/com_biblestudy/views/mimetype', + '/administrator/components/com_biblestudy/views/mimetypes', + '/administrator/components/com_biblestudy/views/podcastlist', + '/administrator/components/com_biblestudy/views/podcastedit', + '/administrator/components/com_biblestudy/views/serieslist', + '/administrator/components/com_biblestudy/views/seriesedit', + '/administrator/components/com_biblestudy/views/serverslist', + '/administrator/components/com_biblestudy/views/serversedit', + '/administrator/components/com_biblestudy/views/sharelist', + '/administrator/components/com_biblestudy/views/shareedit', + '/administrator/components/com_biblestudy/views/studieslist', + '/administrator/components/com_biblestudy/views/studiesedit', + '/administrator/components/com_biblestudy/views/teacherlist', + '/administrator/components/com_biblestudy/views/teacheredit', + '/administrator/components/com_biblestudy/views/templateedit', + '/administrator/components/com_biblestudy/views/templateslist', + '/administrator/components/com_biblestudy/views/topicslist', + '/administrator/components/com_biblestudy/views/topicsedit', + // JBSM 8.0.0 + '/components/com_biblestudy/views/messages', + '/components/com_biblestudy/views/message', + '/components/com_biblestudy/views/mediafiles', + '/components/com_biblestudy/views/mediafile', + '/components/com_biblestudy/views/commentslist', + '/components/com_biblestudy/views/commentsedit', + BIBLESTUDY_PATH_ADMIN . '/views/styles', + BIBLESTUDY_PATH_ADMIN . '/views/style', + BIBLESTUDY_PATH_ADMIN . '/views/shares', + BIBLESTUDY_PATH_ADMIN . '/views/share', + BIBLESTUDY_PATH_ADMIN . '/views/migration' + ); + + foreach ($files as $file) + { + if (JFile::exists(JPATH_ROOT . $file) && !JFile::delete(JPATH_ROOT . $file)) + { + echo JText::sprintf('FILES_JOOMLA_ERROR_FILE_FOLDER', $file) . '
      '; + } + } + + foreach ($folders as $folder) + { + if (JFolder::exists(JPATH_ROOT . $folder) && !JFolder::delete(JPATH_ROOT . $folder)) + { + echo JText::sprintf('FILES_JOOMLA_ERROR_FILE_FOLDER', $folder) . '
      '; + } + } + + return; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/9.0.1.php b/build/com_proclaim-9.2.1/admin/install/updates/9.0.1.php new file mode 100644 index 0000000000..66075e6747 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/9.0.1.php @@ -0,0 +1,146 @@ +deleteUnexistingFiles(); + + return true; + } + + /** + * Remove Old Files and Folders + * + * @since 9.0.1 + * + * @return void + */ + protected function deleteUnexistingFiles() + { + // Import filesystem libraries. Perhaps not necessary, but does not hurt + jimport('joomla.filesystem.file'); + jimport('joomla.filesystem.folder'); + + $path = array( + BIBLESTUDY_PATH_ADMIN . '/models/style.php', + BIBLESTUDY_PATH_ADMIN . '/models/styles.php', + BIBLESTUDY_PATH_ADMIN . '/tables/style.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/style.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/styles.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/folder.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/folders.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/mediaimage.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/mediaimages.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/mimetype.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/mimetypes.php', + BIBLESTUDY_PATH_ADMIN . '/views/style/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/style/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/style/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/style/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/style/tmpl/edit.php', + BIBLESTUDY_PATH_ADMIN . '/views/styles/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/styles/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/styles/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/styles/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/styles/tmpl/default.php', + BIBLESTUDY_PATH_ADMIN . '/models/share.php', + BIBLESTUDY_PATH_ADMIN . '/models/shares.php', + BIBLESTUDY_PATH_ADMIN . '/models/forms/share.xml', + BIBLESTUDY_PATH_ADMIN . '/tables/share.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/share.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/shares.php', + BIBLESTUDY_PATH_ADMIN . '/views/share/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/share/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/share/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/share/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/share/tmpl/edit.php', + BIBLESTUDY_PATH_ADMIN . '/views/shares/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/shares/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/shares/tmpl/index.html', + BIBLESTUDY_PATH_ADMIN . '/views/shares/view.html.php', + BIBLESTUDY_PATH_ADMIN . '/views/shares/tmpl/default.php', + BIBLESTUDY_PATH_ADMIN . '/moduels/migration.php', + BIBLESTUDY_PATH_ADMIN . '/controllers/migration.php', + BIBLESTUDY_PATH_ADMIN . '/helpers/templates.helper.php', + BIBLESTUDY_PATH_ADMIN . '/helpers/html/sortablelist.php', + BIBLESTUDY_PATH_ADMIN . '/helpers/html/jquery.php', + BIBLESTUDY_PATH_ADMIN . '/install/updates/update701.php', + BIBLESTUDY_PATH_ADMIN . '/install/updates/update702.php', + BIBLESTUDY_PATH_ADMIN . '/install/updates/update710.php', + BIBLESTUDY_PATH_ADMIN . '/install/updates/updateAll.php', + BIBLESTUDY_PATH_ADMIN . '/install/biblestudy.install.special.php', + BIBLESTUDY_MEDIA_PATH . '/player/jwplayer.html5.js', + BIBLESTUDY_MEDIA_PATH . '/player/key.js', + BIBLESTUDY_MEDIA_PATH . '/js/tooltip.js', + BIBLESTUDY_MEDIA_PATH . '/css/biblestudy-j2.5.css', + BIBLESTUDY_MEDIA_PATH . '/css/cpanel.css', + BIBLESTUDY_MEDIA_PATH . '/css/mediafilesedit.css', + BIBLESTUDY_MEDIA_PATH . '/css/studieslist.css', + BIBLESTUDY_PATH_HELPERS . '/biblegateway.php', + BIBLESTUDY_PATH_HELPERS . '/elements.php', + BIBLESTUDY_PATH_HELPERS . '/icon.php', + BIBLESTUDY_PATH_HELPERS . '/related.php', + BIBLESTUDY_PATH_HELPERS . '/studiesedit.php', + BIBLESTUDY_PATH_HELPERS . '/writexml.php', + BIBLESTUDY_PATH_LIB . '/biblestudy.debug.php', + BIBLESTUDY_PATH_LIB . '/biblestudy.download.class.php', + BIBLESTUDY_PATH_LIB . '/biblestudy.images.class.php', + BIBLESTUDY_PATH_LIB . '/biblestudy.listing.class.php', + BIBLESTUDY_PATH_LIB . '/biblestudy.media.class.php', + BIBLESTUDY_PATH_LIB . '/biblestudy.pagebuilder.class.php', + BIBLESTUDY_PATH_LIB . '/biblestudy.podcast.class.php', + BIBLESTUDY_PATH_MOD . '/tmpl/default_custom.php' + ); + + foreach ($path as $file) + { + if (JFile::exists($file)) + { + JFile::delete($file); + } + } + + $folders = array( + BIBLESTUDY_PATH_ADMIN . '/views/styles', + BIBLESTUDY_PATH_ADMIN . '/views/style', + BIBLESTUDY_PATH_ADMIN . '/views/shares', + BIBLESTUDY_PATH_ADMIN . '/views/share', + BIBLESTUDY_MEDIA_PATH . '/jui', + BIBLESTUDY_MEDIA_PATH . '/Legacyplayer', + BIBLESTUDY_MEDIA_PATH . '/captcha', + BIBLESTUDY_PATH_ADMIN . '/views/migration', + BIBLESTUDY_PATH . '/language', + BIBLESTUDY_PATH_MODELS . '/fields'); + + foreach ($folders as $folder) + { + if (JFolder::exists($folder)) + { + JFolder::delete($folder); + } + } + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/9.1.4.php b/build/com_proclaim-9.2.1/admin/install/updates/9.1.4.php new file mode 100644 index 0000000000..c48c627afd --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/9.1.4.php @@ -0,0 +1,120 @@ +deleteUnexistingFiles(); + + $this->updateFA(); + + $message = new stdClass; + $message->title_key = 'JBS_POSTINSTALL_TITLE_FONTAWESOME'; + $message->description_key = 'JBS_POSTINSTALL_BODY_FONTAWESOME'; + $message->action_key = ''; + $message->language_extension = 'com_biblestudy'; + $message->language_client_id = 1; + $message->type = 'message'; + $message->action_file = ''; + $message->action = ''; + $message->condition_file = ''; + $message->condition_method = ''; + $message->version_introduced = '9.1.3'; + $message->enabled = 1; + + $script = new BibleStudyModelInstall; + $script->postinstall_messages($message); + + return true; + } + + /** + * Remove Old Files and Folders + * + * @since 9.0.1 + * + * @return void + */ + protected function deleteUnexistingFiles() + { + // Import filesystem libraries. Perhaps not necessary, but does not hurt + jimport('joomla.filesystem.file'); + + $path = array( + BIBLESTUDY_PATH_ADMIN . '/addons/servers/legacy/fields/filesize.php', + BIBLESTUDY_PATH_ADMIN . '/addons/servers/local/fields/filesize.php', + BIBLESTUDY_PATH_ADMIN . '/models/upload.php', + BIBLESTUDY_PATH_ADMIN . '/convert1.htm', + BIBLESTUDY_PATH . '/convert1.htm', + ); + + foreach ($path as $file) + { + if (JFile::exists($file)) + { + JFile::delete($file); + } + } + } + + /** + * Convert v4 to v5 of Font Awesome + * + * @since 9.1.3 + * + * @return void + * + * @todo Need to do this for Admin and Media; + */ + protected function updateFA() + { + // Convert Font Awesome deceleration in the DB to new version. + + return; + } +} diff --git a/build/com_proclaim-9.2.1/admin/install/updates/9.1.5.php b/build/com_proclaim-9.2.1/admin/install/updates/9.1.5.php new file mode 100644 index 0000000000..52d21b4cbd --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/install/updates/9.1.5.php @@ -0,0 +1,65 @@ +newCompParams(); + + return true; + } + + /** + * Update Component Params + * + * @since 9.1.5 + * + * @return void; + */ + protected function newCompParams() + { + JBSMParams::setCompParams( + [ + 'upload_extensions' => 'key,pps,pptx,docx,aac,m4a,f4a,mp3,ogg,oga,mp4,m4v,f4v,mov,flv,webm,m3u8,mpd,DVR,' . + 'bmp,csv,doc,gif,ico,jpg,jpeg,odg,odp,ods,odt,pdf,png,ppt,txt,xcf,xls,BMP,CSV,DOC,GIF,ICO,JPG,JPEG,ODG,ODP,ODS,ODT,PDF,PNG,PPT,TXT,XCF,XLS', + 'upload_maxsize' => '10', + 'restrict_uploads' => '1', + 'check_mime' => '1', + 'image_extensions' => 'mp3,mp4,m4v,mov,bmp,gif,jpg,png', + 'ignore_extensions' => '', + 'upload_mime' => 'application/x-iwork-keynote-sffkey,application/vnd.openxmlformats-officedocument.presentationml.presentation,' . + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,audio/aac,audio/mp4,audio/ogg,audio/mpeg,' . + 'audio/x-wav,application/annodex,application/mp4,application/ogg,application/vnd.rn-realmedia,application/x-matroska,' . + 'video/3gpp,video/3gpp2,video/annodex,video/divx,video/flv,video/h264,video/mp4,video/mp4v-es,video/mpeg,video/mpeg-2,' . + 'video/mpeg4,video/ogg,video/ogm,video/quicktime,video/ty,video/vdo,video/vivo,video/vnd.rn-realvideo,video/vnd.vivo,' . + 'video/webm,video/x-bin,video/x-cdg,video/x-divx,video/x-dv,video/x-flv,video/x-la-asf,video/x-m4v,video/x-matroska,' . + 'video/x-motion-jpeg,video/x-ms-asf,video/x-ms-dvr,video/x-ms-wm,video/x-ms-wmv,video/x-msvideo,video/x-sgi-movie,video/x-tivo,' . + 'video/avi,video/x-ms-asx,video/x-ms-wvx,video/x-ms-wmx,,image/jpeg,image/gif,image/png,image/bmp,application/x-shockwave-flash,' . + 'application/msword,application/excel,application/pdf,application/powerpoint,text/plain,application/x-zip', + 'upload_mime_illegal' => 'text/html' + ] + ); + } +} diff --git a/build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.ini b/build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.ini new file mode 100644 index 0000000000..ab2d7acef2 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.ini @@ -0,0 +1,242 @@ +; $Id: cs-CZ.com_biblestudy.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +JBS_CMN_ASCENDING="Vzestupně" +JBS_CMN_BOOK="Kniha" +JBS_CMN_CREATE_DATE="Datum vytvoření" +JBS_CMN_DESCENDING="Sestupně" +JBS_CMN_DESCRIPTION="Popis" +JBS_CMN_DETAILS="Podrobnosti" +JBS_CMN_DURATION="Délka" +JBS_CMN_EDIT_MEDIA_FILE="Upravit záznam mediálního souboru " +JBS_CMN_FILESIZE="Velikost souboru" +JBS_CMN_HOURS="Hodiny" +JBS_CMN_ID="ID" +JBS_CMN_MEDIA="Média" +JBS_CMN_MESSAGETYPE="Typ příspěvku" +JBS_CMN_MINUTES="Minuty" +JBS_CMN_NO="Ne" +JBS_CMN_PODCASTS="Podcasts" +JBS_CMN_PRINT="Tisknout" +JBS_CMN_PUBLISHED="Zveřejněno" +JBS_CMN_SCRIPTURE2=" Bible 2" +JBS_CMN_SCRIPTURE="Bible" +JBS_CMN_SECONDARY_REFERENCES="Sekundární reference" +JBS_CMN_SECONDS="Sekundy" +JBS_CMN_SELECT_BOOK="Vyber biblickou knihu" +JBS_CMN_SELECT_ITEM_UNPUBLISH="Zvol položku ke zneveřejnění" +JBS_CMN_SELECT_MESSAGETYPE="Vyber typ příspěvku" +JBS_CMN_SELECT_SERIES="Vyber řadu" +JBS_CMN_SELECT_TEACHER="Vyber autora" +JBS_CMN_SELECT_TOPIC="Vyber téma" +JBS_CMN_SELECT_YEAR="Vyber rok" +JBS_CMN_SERIES="Řada" +JBS_CMN_SERVER="Server" +JBS_CMN_STUDYNUMBER="Číslo příspěvku" +JBS_CMN_STUDY_DATE="Datum příspěvku" +JBS_CMN_STUDY_TITLE="Název příspěvku" +JBS_CMN_TEACHER="Autor" +JBS_CMN_TITLE="Název" +JBS_CMN_TOPIC="Téma" +JBS_CMN_TOPICS="Témata" +JBS_CMN_YES="Ano" + +JBS_BBK_GENESIS="1. Mojžíšova" +JBS_BBK_EXODUS="2. Mojžíšova" +JBS_BBK_LEVITICUS="3. Mojžíšova" +JBS_BBK_NUMBERS="4. Mojžíšova" +JBS_BBK_DEUTERONOMY="5. Mojžíšova" +JBS_BBK_JOSHUA="Jozue" +JBS_BBK_JUDGES="Soudců" +JBS_BBK_RUTH="Rút" +JBS_BBK_1SAMUEL="1. Samuelova" +JBS_BBK_2SAMUEL="2. Samuelova" +JBS_BBK_1KINGS="1. Královská" +JBS_BBK_2KINGS="2. Královská" +JBS_BBK_1CHRONICLES="1. Paralipomenon" +JBS_BBK_2CHRONICLES="2. Paralipomenon" +JBS_BBK_EZRA="Ezdráš" +JBS_BBK_NAHUM="Nahum" +JBS_BBK_ESTHER="Ester" +JBS_BBK_JOB="Jób" +JBS_BBK_PSALM="Žalmy" +JBS_BBK_PROVERBS="Přísloví" +JBS_BBK_ECCLESIASTES="Kazatel" +JBS_BBK_SONG_OF_SOLOMON="Píseň Písní" +JBS_BBK_ISAIAH="Izajáš" +JBS_BBK_JEREMIAH="Jeremiáš" +JBS_BBK_LAMENTATIONS="Pláč" +JBS_BBK_EZEKIEL="Ezechiel" +JBS_BBK_DANIEL="Daniel" +JBS_BBK_HOSEA="Ozeáš" +JBS_BBK_JOEL="Jóel" +JBS_BBK_AMOS="Ámos" +JBS_BBK_OBADIAH="Abdijáš" +JBS_BBK_JONAH="Jonáš" +JBS_BBK_MICAH="Micheáš" +JBS_BBK_NEHEMIAH="Nehemiáš" +JBS_BBK_HABAKKUK="Abakuk" +JBS_BBK_ZEPHANIAH="Sofonjáš" +JBS_BBK_HAGGAI="Ageus" +JBS_BBK_ZECHARIAH="Zacharjáš" +JBS_BBK_MALACHI="Malachiáš" +JBS_BBK_MATTHEW="Matouš" +JBS_BBK_MARK="Marek" +JBS_BBK_LUKE="Lukáš" +JBS_BBK_JOHN="Jan" +JBS_BBK_ACTS="Skutky" +JBS_BBK_ROMANS="Římanům" +JBS_BBK_1CORINTHIANS="1. Korintským" +JBS_BBK_2CORINTHIANS="2. Korintským" +JBS_BBK_GALATIANS="Galatským" +JBS_BBK_EPHESIANS="Efezským" +JBS_BBK_PHILIPPIANS="Filipským" +JBS_BBK_COLOSSIANS="Koloským" +JBS_BBK_1THESSALONIANS="1. Tesalonickým" +JBS_BBK_2THESSALONIANS="2. Tesalonickým" +JBS_BBK_1TIMOTHY="1. Timoteovi" +JBS_BBK_2TIMOTHY="2. Timoteovi" +JBS_BBK_TITUS="Titovi" +JBS_BBK_PHILEMON="Filemonovi" +JBS_BBK_HEBREWS="Židům" +JBS_BBK_JAMES="Jakub" +JBS_BBK_1PETER="1. Petra" +JBS_BBK_2PETER="2. Petra" +JBS_BBK_1JOHN="1. Jana" +JBS_BBK_2JOHN="2. Jana" +JBS_BBK_3JOHN="3. Jana" +JBS_BBK_JUDE="Judův" +JBS_BBK_REVELATION="Zjevení" + + +JBS_CPL_DATE="Datum" + + +JBS_MED_AVRELOADED_DESC="Vlož počáteční a koncové tagy pro AVReloaded jako např. {mp3remote}-{/mp3remote}. Mezi tagy vložte pomlčku (-). Pokud zvolíte parametr pro všechny soubory k přehrání s použitím AVReloaded, komponenta se pokusí vložit správný kód i když nevložíte nic. Mezi {} a {} můžete vložit také název souboru. Pokud tak učiníte, komponenta předá tento kód komponentě AVReloaded.
      Pro více informaci viz Dokumentaci k AVReloaded .
      Pokud chcete, můžete před pomlčku nebo za ni vložit text. Např.: {mp3remote}http://-{/mp3remote} vloží tento text před vaši cestu a název souboru(systém odstraní -)" +JBS_MED_FILENAME=" Název souboru" +JBS_MED_MEDIA_TYPE="Typ média" +JBS_MED_PATH_OR_FOLDER="Cesta nebo složka:" +JBS_MED_USE_FILENAME_AS_PATH="Použijte název souboru jako celou cestu, pokud chcete. Pak ale nezvolte server nebo cestu." + + +JBS_SER_RETURN_SERIES_LIST=" Zpět na přehled příspěvků" + +JBS_STY_BOOK2="Kniha 2" +JBS_STY_CHAPTER_BEGIN2=" Začátek kap. 2" +JBS_STY_CHAPTER_BEGIN="Začátek kap." +JBS_STY_CHAPTER_END2=" Konec kap. 2" +JBS_STY_CHAPTER_END="Konec kap." +JBS_STY_COMMENT_NOT_PUBLISHED="Tato poznámka nebyla zveřejněna." +JBS_STY_COMMENT_PUBLISHED="Tato poznámka byla zveřejněna." +JBS_STY_HAS_ENTERED_COMMENT="vložil(a) poznámku k příspěvku:" +JBS_STY_ON="Na téma:" +JBS_STY_REVIEW_COMMENTS_LOGIN="Poznámky můžete zkontrolovat, když se přihlásíte na stránky:" +JBS_STY_VERSE_BEGIN2=" Začátek v. 2" +JBS_STY_VERSE_BEGIN="Začátek v." +JBS_STY_VERSE_END2=" Konec v. 2" +JBS_STY_VERSE_END="Konec v." + +JBS_SVR_SERVER_NAME="Název serveru" +JBS_TCH_PHONE="Telefon" +JBS_TCH_SHORT_DESCRIPTION_LIST_PAGE="Krátký popis pro stránku s přehledem" +JBS_TCH_WEBSITE="Stránky" + +JBS_TOP_ABORTION="Potraty" +JBS_TOP_ADDICTION="Závislosti" +JBS_TOP_AFTERLIFE="Život po smrti" +JBS_TOP_APOLOGETICS="Apologetika" +JBS_TOP_BAPTISM="Křest" +JBS_TOP_BASICS_OF_CHRISTIANITY="Základy křesťanství" +JBS_TOP_BECOMING_A_CHRISTIAN="Jak se stát křesťanem" +JBS_TOP_BIBLE="Bible" +JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS="Problémy v rodině" +JBS_TOP_CHILDREN="Děti" +JBS_TOP_CHRIST="Kristus" +JBS_TOP_CHRISTIAN_CHARACTER_FRUITS="Křesťanský charakter/ovoce" +JBS_TOP_CHRISTIAN_VALUES="Křesťanské hodnoty" +JBS_TOP_CHRISTMAS_SEASON="Vánoční období" +JBS_TOP_CHURCH="Církev" +JBS_TOP_COMMUNICATION="Komunikace" +JBS_TOP_COMMUNION___LORDS_SUPPER="Večeře Páně" +JBS_TOP_CREATION="Stvoření" +JBS_TOP_CULTS="Sekty" +JBS_TOP_DA_VINCI_CODE="Da Vinciho kód " +JBS_TOP_DEATH="Smrt" +JBS_TOP_DESCRIPTIONS_OF_GOD="Charakteristika Boha" +JBS_TOP_DISCIPLES="Učedníci" +JBS_TOP_DISCIPLESHIP="Učednictví" +JBS_TOP_DIVORCE="Rozvod" +JBS_TOP_EASTER_SEASON="Velikonoční období" +JBS_TOP_EMOTIONS="Emoce" +JBS_TOP_ENTERTAINMENT="Zábava" +JBS_TOP_EVANGELISM="Evangelizace" +JBS_TOP_FAITH="Víra" +JBS_TOP_FAMILY="Rodina" +JBS_TOP_FORGIVING_OTHERS="Odpuštění" +JBS_TOP_FREEDOM="Svoboda" +JBS_TOP_FRIENDSHIP="Přátelství" +JBS_TOP_FULFILLMENT_IN_LIFE="Naplněný život" +JBS_TOP_FUND_RAISING_RALLY="Fund-raising" +JBS_TOP_FUNERALS="Pohřby" +JBS_TOP_GIVING="Dávání" +JBS_TOP_GODS_ACTIVITY="Boží působení" +JBS_TOP_GODS_ATTRIBUTES="Boží vlastnosti" +JBS_TOP_GODS_FORGIVENESS="Boží odpuštění" +JBS_TOP_GODS_LOVE="Boží láska" +JBS_TOP_GODS_NATURE="Boží podstata" +JBS_TOP_GODS_WILL="Boží vůle" +JBS_TOP_HARDSHIP_OF_LIFE="Životní problémy" +JBS_TOP_HOLIDAYS="Svátky" +JBS_TOP_HOLY_SPIRIT="Duch svatý" +JBS_TOP_HOT_TOPICS="Ožehavá témata" +JBS_TOP_JESUS_BIRTH="Narození Ježíše" +JBS_TOP_JESUS_CROSS_FINAL_WEEK="Ježíšův kříž (Velký týden)" +JBS_TOP_JESUS_DIVINITY="Ježíšovo božství" +JBS_TOP_JESUS_HUMANITY="Ježíšovo lidství" +JBS_TOP_JESUS_LIFE="Život Ježíše" +JBS_TOP_JESUS_MIRACLES="Ježíšovy zázraky" +JBS_TOP_JESUS_RESURRECTION="Ježíšovo vzkříšení" +JBS_TOP_JESUS_TEACHING="Ježíšovo učení" +JBS_TOP_KINGDOM_OF_GOD="Království Boží" +JBS_TOP_LEADERSHIP_ESSENTIALS="Základy vedení" +JBS_TOP_LOVE="Láska" +JBS_TOP_MARRIAGE="Manželství" +JBS_TOP_MEN="Muži" +JBS_TOP_MESSIANIC_PROPHECIES="Mesiášská proroctví" +JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY="Mýty o křesťanství" +JBS_TOP_MONEY="Peníze" +JBS_TOP_NARNIA="Narnia" +JBS_TOP_OUR_NEED_FOR_GOD="Potřebujeme Boha" +JBS_TOP_PARABLES="Podobenství" +JBS_TOP_PARANORMAL="Paranormální jevy" +JBS_TOP_PARENTING="Rodičovství" +JBS_TOP_POVERTY="Chudoba" +JBS_TOP_PRAYER="Modlitba" +JBS_TOP_PROMINENT_N_T__MEN="Muži Nového zákona" +JBS_TOP_PROMINENT_N_T__WOMEN="Ženy Nového zákona" +JBS_TOP_PROMINENT_O_T__MEN="Muži Starého zákona" +JBS_TOP_PROMINENT_O_T__WOMEN="Ženy Starého zákona" +JBS_TOP_RACISM="Rasismus" +JBS_TOP_SECOND_COMING="Druhý příchod" +JBS_TOP_SEXUALITY="Sexualita" +JBS_TOP_SIN="Hřích" +JBS_TOP_SINGLENESS="Pro svobodné" +JBS_TOP_SMALL_GROUPS="Pro skupinky" +JBS_TOP_SPECIAL_SERVICES="Zvláštní bohoslužby" +JBS_TOP_SPIRITUAL_DISCIPLINES="Duchovní cvičení" +JBS_TOP_SPIRITUAL_GIFTS="Dary Ducha svatého" +JBS_TOP_STEWARDSHIP="Doprovázení" +JBS_TOP_SUPERNATURAL="Nadpřirozené" +JBS_TOP_TEMPTATION="Pokušení" +JBS_TOP_TEN_COMMANDMENTS="Deset přikázání" +JBS_TOP_TRUTH="Pravda" +JBS_TOP_TWELVE_APOSTLES="Dvanáct apoštolů" +JBS_TOP_WEDDINGS="Svatby" +JBS_TOP_WOMEN="Ženy" +JBS_TOP_WORKPLACE_ISSUES="Problémy v práci" +JBS_TOP_WORLD_RELIGIONS="Světová náboženství" +JBS_TOP_WORSHIP="Chvály" + diff --git a/build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.sys.ini b/build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.sys.ini new file mode 100644 index 0000000000..fd526c3f8f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/cs-CZ/cs-CZ.com_biblestudy.sys.ini @@ -0,0 +1,31 @@ +; $Id: cs-CZ.com_biblestudy.sys.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +; Identify the component as extension +COM_BIBLESTUDY="Biblická studia a kázání" + +; Name of the component +JBS_CMN_COM_BIBLESTUDY="Biblická studia a kázání" + +; Menue entries +JBS_MNU_ADMINISTRATION="Administration" +JBS_MNU_CONTROL_PANEL="Control Panel" +JBS_MNU_LOCATIONS="Locations" +JBS_MNU_MEDIA_FILES="Audio/video soubory" +JBS_MNU_MEDIA_IMAGES="Obrázky médií" +JBS_MNU_MESSAGETYPES="Typy příspěvků" +JBS_MNU_MIMETYPES="Mime Types" +JBS_MNU_PODCASTS="Podcasty" +JBS_MNU_SERIES="Řady" +JBS_MNU_SERVERS="Servery" +JBS_MNU_SERVER_FOLDERS="Složky serverů" +JBS_MNU_SOCIAL_NETWORK_LINKS="Social Network Links" +JBS_MNU_STUDIES="Příspěvky" +JBS_MNU_STUDY_COMMENTS="Study Comments" +JBS_MNU_STYLES="CSS Edit" +JBS_MNU_TEACHERS="Autoři" +JBS_MNU_TEMPLATE_DISPLAY="Template Display Settings" +JBS_MNU_TOPICS="Témata" diff --git a/build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.ini b/build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.ini new file mode 100644 index 0000000000..dac75b51ab --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.ini @@ -0,0 +1,1543 @@ +; $Id: de-DE.com_biblestudy.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller, translated by santon +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + +; Note: This is the common language file for all Bible Study components, plugins and modules. +; It is used for both frontend and backend. +; Plugins and modules use some additional .sys.ini files for core definitions. +; In backend settings page they use xml field loadlanguagefile in the path +; /administrator/components/com_biblestudy/models/fields to load this language file. +; During execution, they load this file using +; $language = JFactory::getLanguage(); +; $language->load('com_biblestudy', JPATH_COMPONENT_ADMINISTRATOR, 'en-GB', true); // default english phrases +; $language->load('com_biblestudy', JPATH_COMPONENT_ADMINISTRATOR, null, true); // target language + +COM_BIBLESTUDY="Proclaim" + +;; Permission entry and Joomla common handling +COM_BIBLESTUDY_CONFIGURATION="Bibelstudien Konfiguration" +COM_BIBLESTUDY_N_ITEMS_ARCHIVED="%d Einträge wurden archiviert" +COM_BIBLESTUDY_N_ITEMS_DELETED="%d Einträge wurden gelöscht" +COM_BIBLESTUDY_N_ITEMS_PUBLISHED="%d Einträge wurden veröffentlicht" +COM_BIBLESTUDY_N_ITEMS_TRASHED="%d Einträge wurden in den Papierkorb verschoben" +COM_BIBLESTUDY_N_ITEMS_UNPUBLISHED="%d Einträge wurden gesperrt" +COM_BIBLESTUDY_N_ITEMS_CHECKED_IN="%d Einträge wurden freigegeben" + +;; Content Articles +COM_CONTENT_CHANGE_ARTICLE="Beitrag auswählen oder wechseln" +COM_CONTENT_CHANGE_ARTICLE_BUTTON="Auswählen / Wechseln" +COM_CONTENT_SELECT_AN_ARTICLE="Einen Beitrag auswählen" + +;; Extra global phrases +;; Phrases from Joomla system calls ; need to be reviewed +COM_BIBLESTUDY_FILE_SIZE_EMPTY="Dateigröße nicht angegeben. Bitte nehmen Sie Kontakt mit den Webmaster auf." +;JFIELD_RULES_LABEL="Zugriffsberechtigungen" +JGRID_CHECKBOX_ROW_N="Auswahl für Reihe %d" + +;; CMN Common phrases used in several sections +;JBS_COM_EDIT_ITEM="Edit Item" +;JBS_SELECT_LANGUAGE="Select Language" ; replaced by JOPTION_SELECT_LANGUAGE +JBS_CMN_ACCESS_FORBIDDEN="Zugriff nicht erlaubt" +JBS_CMN_ADMINISTRATION="Administration" +JBS_CMN_ASCENDING="Aufsteigend" +JBS_CMN_AUTOCLOSE_IN_3S="Dieses Fenster schließt sich automatisch in 3 Sekunden." +JBS_CMN_AVPLUGIN="All Videos Plugin" +JBS_CMN_AVR="AllVideos Reloaded, JPlayer oder eingebetteter Code" +JBS_CMN_BATCH_LABLE="Batch" +JBS_CMN_BATCH_OPTIONS="Batch Optionen" +JBS_CMN_BATCH_TIP="Ändern" +JBS_CMN_BATCH_TIP_MEDIAFILES="Wenn eine Mediendatei kopiert werden soll, dann werden die Optionen an der kopierten Mediendatei angewandt. Andernfalls werden sie am Original angewandt." +JBS_CMN_BOOK="Buch" +JBS_CMN_BOOKS="Bücher" +JBS_CMN_BOOKS_ORDERING="Sortierung der Bücher" +JBS_CMN_BOTTOM="unten" +JBS_CMN_BROWSE="Durchsuchen" +JBS_CMN_CLEAR="Löschen" +JBS_CMN_COMMENT="Predigt Kommentar" +JBS_CMN_COMMENTS="Predigt Kommentare" +JBS_CMN_CONTINUE_TO_DOWNLOAD="Anklicken zum Download" +JBS_CMN_CONTROL_PANEL="Kontrollzentrum" +JBS_CMN_CREATE_DATE="Predigt Datum" +JBS_CMN_CUSTOM="Benutzerdefiniert" +JBS_CMN_DATE="Datum" +JBS_CMN_DATABASE_NOT_COPIED="Datenbasis wurde nicht kopiert." +JBS_CMN_DATABASE_NOT_MIGRATED="Datenbasis wurde nicht migriert." +JBS_CMN_DEFAULT_IMAGE="Standardbild" +JBS_CMN_DEFAULT_IMAGES="Standardbilder" +JBS_CMN_DEFAULT_IMAGES_SIZES="Größe des Vorschaltbildes" +JBS_CMN_DESCENDING="Absteigend" +JBS_CMN_DESCRIPTION="Beschreibung" +JBS_CMN_DETAILS="Details" +JBS_CMN_DIRECT_LINK="Direkter Link auf die Datei" +JBS_CMN_DOCMAN_NOT_INSTALLED="DocMan ist nicht installiert" +JBS_CMN_DONT_USE="Nicht benutzen" +JBS_CMN_DOWNLOADS="Downloads" +JBS_CMN_DURATION="Dauer" +JBS_CMN_EDIT="Bearbeiten" +JBS_CMN_EDIT_MEDIA_FILE="Bearbeite Mediendatei" +JBS_CMN_EMBED_CODE="Eingebetteter Code" +JBS_CMN_ERROR_ADDON_LANGUAGE_NOT_LOADED="Sprachdatei der Server-Erweiterung (/components/com_biblestudy/addons/servers/) konnte nicht geladen werden" +JBS_CMN_ERROR_RESETTING_DOWNLOADS="Ein Fehler ist beim Zurücksetzen des Downloadzählers aufgetreten:" +JBS_CMN_ERROR_RESETTING_HITS="Ein Fehler ist beim Zurücksetzen des Treffer-Zählers aufgetreten:" +JBS_CMN_ERROR_RESETTING_PLAYS="Ein Fehler ist beim Zurücksetzen des Abspiel-Zählers aufgetreten:" +JBS_CMN_EXPORT="Export" +JBS_CMN_FIELDSET_PUBLISHING="Freigeben" +JBS_CMN_FIELDSET_RULES="Zugriffsberechtigungen" +JBS_CMN_FIELD_LANGUAGE_DESC="Dieser Text wird angezeigt, wenn die entsprechende Sprache ausgewählt wurde. Wird hier nichts angegeben, wird der Text in der Sprachdatei verwendet. Nicht genutzte Sprachen brauchen nicht ausgefüllt zu werden." +JBS_CMN_FILESIZE="Dateigröße" +JBS_CMN_FILTERS_BOOKS="Wähle ein oder mehrere Bibelbücher" +JBS_CMN_FILTERS_DESC="Benutze STRG-Klick, um mehr als einen Eintrag zu wählen. Benutze 'Zeige alle', um alle Einträge anzuzeigen" +JBS_CMN_FILTERS_LOCATIONS="Wähle einen oder mehrere Veranstaltungsorte" +JBS_CMN_FILTERS_MESSAGETYPES="Wähle einen oder mehrere Predigttypen" +JBS_CMN_FILTERS_SERIES="Wähle eine oder mehrere Predigtreihen" +JBS_CMN_FILTERS_TEACHER="Wähle einen oder mehrere Prediger" +JBS_CMN_FILTERS_TOPICS="Wähle ein oder mehrere Themen" +JBS_CMN_FILTERS_YEARS="Wähle ein oder mehrere Jahre" +JBS_CMN_FILTER_SEARCH_DESC="Suche Titel oder Alias. Prefix mit ID: zum suchen nach einer Beitrags-ID." +JBS_CMN_GENERAL="Allgemeine Einstellungen" +JBS_CMN_GLOBAL_SETTINGS="Globale Einstellung" +JBS_CMN_HIDE="Verbergen" +JBS_CMN_HITS="Treffer" +JBS_CMN_HOURS="Stunden" +JBS_CMN_ID="ID" +JBS_CMN_IMAGE="Bild" +JBS_CMN_IMPORT="Import" +JBS_CMN_INFO="Information des Eintrags" +JBS_CMN_INLINE="Inline" +JBS_CMN_INSTALL="Installieren" +JBS_CMN_INTERNAL_PLAYER="Interner Player" +JBS_CMN_ITEM_NOT_PUBLISHED="Nicht freígegeben" +JBS_CMN_ITEM_PUBLISHED="Freigegeben" +JBS_CMN_JOOMLA_BIBLE_STUDY="Joomla Bibelstudien (Proclaim)" +JBS_CMN_LANDING_SHOW="Zeige auf der Landing-Page" +JBS_CMN_LANDING_SHOW_DESC="Soll dieser Eintrag auf der Landing-Page über oder unter dem 'WEITERE' Knopf angezeigt werden? Weitere Einstellungen im Template unter 'Landing-Page'" +JBS_CMN_LEGACY_PLAYER="Internal Audio Player" +JBS_CMN_LOCATION="Veranstaltungsort" +JBS_CMN_LOCATIONS="Veranstaltungsorte" +JBS_CMN_LOCATIONS_ORDERING="Sortierung der Veranstaltungsorte" +JBS_CMN_MEDIA="Medien" +JBS_CMN_MEDIA_AUTOSTART="Autostart" +JBS_CMN_MEDIA_AUTOSTART_DESC="Soll das Medium automatisch abgespielt werden?" +JBS_CMN_MEDIA_CREATE_DATE="Medium Datum" +JBS_CMN_MEDIA_FILES="Mediendateien" +JBS_CMN_MESSAGES_LIST="Predigtliste" +JBS_CMN_MESSAGETYPE="Predigttyp" +JBS_CMN_MESSAGETYPES="Predigttypen" +JBS_CMN_MESSAGETYPE_ORDERING="Sortierung der Predigttypen" +JBS_CMN_MESSAGE_TITLE="Message" ; translate +JBS_CMN_MIMETYPE="Mime-Type" +JBS_CMN_MINUTES="Minuten" +JBS_CMN_MODIFIED="Verändert" +JBS_CMN_NEW="Neu" +JBS_CMN_NO="Nein" +JBS_CMN_NONE="keine/r" +JBS_CMN_NOTHING="- Leer -" +JBS_CMN_NOT_FOUND="Nicht gefunden" +JBS_CMN_NO_FILES_TO_DISPLAY="Keine Datei vorhanden" +JBS_CMN_NO_FILE_SELECTED="Keine Datei ausgewählt" +JBS_CMN_NO_ITEM_SELECTED="Kein Eintrag ausgewählt" +JBS_CMN_NO_KEY="Öffentlicher Captcha Schlüssel fehlt. Bitte wenden Sie sich an den Webmaster." +JBS_CMN_NO_MEDIA_FILES="Kann keine Mediendatei für diesen Podcast finden" +JBS_CMN_NO_OPTION_TREATED_GLOBAL="Keine Option gesetzt - wird wie globale Einstellungen behandelt" +JBS_CMN_NO_PLAYER_TREATED_DIRECT="Kein Player - wird wie direkter Link auf die Datei behandelt" +JBS_CMN_NO_SHOW_LANDING="Nicht auf der Landing-Page anzeigen" +JBS_CMN_OPERATION_FAILED="Aktion schlug fehl. Fehlermeldungen:" +JBS_CMN_OPERATION_SUCCESSFUL="Aktion erfolgreich. Kein Fehler gemeldet." +JBS_CMN_ORDERING="Sortierung" +JBS_CMN_ORDERING_DESC="An welcher Stelle der Liste soll dieser Eintrag angezeigt werden?" +JBS_CMN_OVER="über" +JBS_CMN_PARAMETERS="Parameter" +JBS_CMN_PHP_ERROR="Joomla! Bibelstudien benötigt PHP %s oder höher auf dem Host" +JBS_CMN_PLAYS="abgespielt" +JBS_CMN_PODCAST="Podcast" +JBS_CMN_PODCASTS="Podcasts" +JBS_CMN_POPUP="Popup" +JBS_CMN_POPUP_NEW_WINDOW="Popup oder in neuem Fenster" +JBS_CMN_PRINT="Drucken" +JBS_CMN_PUBLISHED="Freigegeben" +JBS_CMN_PUBLISHED_DESC="Wähle, ob dieser Eintrag sichtbar sein soll" +JBS_CMN_PUBLISHING_OPTIONS="Freigabeoptionen" +JBS_CMN_READ_MORE="Weiterlesen" +JBS_CMN_RESET_SUCCESSFUL="Reset erfolgreich. Kein Fehler aufgetreten." +JBS_CMN_ROWS_RESET="Eintrag / Einträge zurückgesetzt." +JBS_CMN_SCORE="Zugriffe" +JBS_CMN_SCRIPTURE2="Bibelstelle 2" +JBS_CMN_SCRIPTURE="Bibelstelle" +JBS_CMN_SEARCHING="Suche..." +JBS_CMN_SECONDARY_REFERENCES="Sekundäre Referenzen (z.B. URL, Literatur ect.)" +JBS_CMN_SECONDS="Sekunden" +JBS_CMN_SELECT_BOOK="- Wähle ein Buch -" +JBS_CMN_SELECT_BY="Auswählen nach" +JBS_CMN_SELECT_ITEM_UNPUBLISH="- Wähle einen Eintrag zum Sperren -" +JBS_CMN_SELECT_LANGUAGE_DESC="Wähle eine Sprache" +JBS_CMN_SELECT_LOCATION="- Wähle einen Veranstaltungsort -" +JBS_CMN_SELECT_MESSAGETYPE="- Wähle einen Predigttyp -" +JBS_CMN_SELECT_MIMETYPE="- Wähle einen Mime-Type -" +JBS_CMN_SELECT_ORDER="- Wähle eine Reihenfolge -" +JBS_CMN_SELECT_PODCAST="- Wähle einen Podcast -" +JBS_CMN_SELECT_POPULAR_STUDY="- Wähle eine beliebte Predigt - " +JBS_CMN_SELECT_RELATED_STUDY="Wähle eine ähnliche Predigt" +JBS_CMN_SELECT_SERIES="- Wähle eine Predigtreihe -" +JBS_CMN_SELECT_SERVER="- Wähle einen Server -" +JBS_CMN_SELECT_STUDY="- Wähle eine Predigt -" +JBS_CMN_SELECT_TEACHER="- Wähle einen Prediger -" +JBS_CMN_SELECT_TEMPLATE="- Wähle ein Template -" +JBS_CMN_SELECT_TOPIC="- Wähle ein Thema -" +JBS_CMN_SELECT_YEAR="- Wähle ein Jahr -" +JBS_CMN_SERIES="Predigtreihe" +JBS_CMN_SERIES_DESCRIPTION="Predigtreihe Beschreibung" +JBS_CMN_SERIES_NOT_FOUND="Predigtreihe nicht gefunden" +JBS_CMN_SERIES_ORDERING="Sortierung der Predigtreihen" +JBS_CMN_SERIES_THUMBNAIL="Predigtreihen Icon" +JBS_CMN_SERVER="Server" +JBS_CMN_SERVERS="Server" +JBS_CMN_SHOW="Anzeigen" +JBS_CMN_SHOW_ABOVE_LANDING="Über dem WEITERE Knopf" +JBS_CMN_SHOW_ALL="Zeige alle" +JBS_CMN_SHOW_BELOW_LANDING="Unter dem WEITERE Knopf" +JBS_CMN_SHOW_HIDE_ALL="Zeige / verberge alle" +JBS_CMN_SHOW_HIDE_SCRIPTURE="Zeige / verberge Textstelle" +JBS_CMN_SOCIAL_NETWORKING_LINKS="Social Networking Links" +JBS_CMN_SQUEEZEBOX="Squeezbox" +JBS_CMN_STUDIES="Predigten" +JBS_CMN_STUDY="Predigt" +JBS_CMN_STUDYNUMBER="Predigt Nummer" +JBS_CMN_STUDY_CHANGE="Ändern" +JBS_CMN_STUDY_DATE="Predigt Datum" +JBS_CMN_STUDY_INTRO="Einleitungstext" +JBS_CMN_STUDY_NOT_FOUND="Predigt nicht gefunden" +JBS_CMN_STUDY_SELECT="Wähle eine Predigt" +JBS_CMN_STUDY_TITLE="Predigt Titel" +JBS_CMN_STYLES="CSS Formatierung" +JBS_CMN_SUBMIT="Eingabe" +JBS_CMN_SUBMITTED_BY="Eingereicht von" +JBS_CMN_TEACHER="Prediger" +JBS_CMN_TEACHERS="Prediger" +JBS_CMN_TEACHERS_ORDERING="Sortierung der Prediger" +JBS_CMN_TEACHER_IMAGE="Prediger Bild" +JBS_CMN_TEACHER_NAME="Prediger Name" +JBS_CMN_TEACHER_NOT_FOUND="Prediger nicht gefunden" +JBS_CMN_TEACHER_ORDERING_DESC="Sortierung der Prediger erfolgt entsprechend dem Sortiermerkmal, danach nach dem Namen des Predigers" +JBS_CMN_TEACHER_TITLE="Prediger Titel + Name" +JBS_CMN_TEMPLATECODE="Template Code" +JBS_CMN_TEMPLATES="Templates" +JBS_CMN_TERMS="Text für das Popup Fenster vor dem Download" +JBS_CMN_TERMS_DESC="Benutze Text oder HTML" +JBS_CMN_THUMBNAIL="Vorschaubild" +JBS_CMN_TITLE="Titel" +JBS_CMN_TOP="oben" +JBS_CMN_TOPIC="Thema" +JBS_CMN_TOPICS="Themen" +JBS_CMN_TOPICS_ORDERING="Sortierung der Themen" +JBS_CMN_TOPIC_TAG="Thema hinzufügen" +JBS_CMN_TOPIC_TAG_DESC="Gib ein Thema ein" +JBS_CMN_TOTAL_MEDIAFILES="Anzahl Mediendateien" +JBS_CMN_TOTAL_PLAYERS="Anzahl der Player" +JBS_CMN_UPLOADS_NOT_ENABLED="Das Hochladen ist in php nicht aktiviert" +JBS_CMN_USE_AV="Benutze AllVideos oder JPlayer" +JBS_CMN_USE_AVR="Benutze All Videos" +JBS_CMN_USE_BITLY="Benutze bit.ly" +JBS_CMN_USE_DEFAULT="Benutze Standard" +JBS_CMN_USE_EMBED_CODE="Benutze den eingebetteten Code (embed code)" +JBS_CMN_USE_GLOBAL="Benutze globale Einstellung" +JBS_CMN_USE_INTERNAL_PLAYER="Benutze den internen Player" +JBS_CMN_USE_LANGUAGE_LIST="Zeige die Sprachauswahl" +JBS_CMN_USE_LANGUAGE_LIST_DESC="Wenn Predigten in verschiedenen Sprachen vorhanden sind, kann der Besucher nach einzelnen Sprachen filtern" +JBS_CMN_USE_MP3_PLAYER="Benutze Interna Audio Player" +JBS_CMN_USE_TERMS="Zeige ein Popup Fenster vor dem Download" +JBS_CMN_USE_TERMS_DESC="Damit kann ein Popup Fenster mit einem Text und dem Download Link angezeigt werden. Dient zum Beispiel zum Anzeigen von rechtlichen Bedingungen des Downloads." +JBS_CMN_VIEWS="Aufrufe" +JBS_CMN_VIRTUEMART_NOT_INSTALLED="VirtueMart ist nicht installiert" +JBS_CMN_WARN_INSTALL_UPLOAD_ERROR="Fehler beim Hochladen" +JBS_CMN_YEARS="Jahre" +JBS_CMN_YEARS_ORDERING="Sortierung der Jahre" +JBS_CMN_YES="Ja" + +;; ADM Administrator +JBS_ADM_ADDTHIS_SHARE="AddThis.com" +JBS_ADM_ADMIN_CPANL="Administrations Bearbeiten" +JBS_ADM_ADMIN_PARAMS="Administrations Einstellungen" +JBS_ADM_ADMIN_PERMISSIONS="Zugriffskontrolle" +JBS_ADM_AFFECTED_ROWS="Veränderte Einträge" +JBS_ADM_ALIAS_ROWS="Anzahl der geänderten Alias-Einträge: " +JBS_ADM_ASSET_CHECK="Überprüfe die Berechtigungen" +JBS_ADM_ASSET_EXPLANATION="\"Keine\" bedeutet, dass keine Berechtigungen das Löschen von Einträgen einschränken.
      \"Übereinstimmung\" besteht, wenn die Berechtigung gesetzt ist und dem Eintrag der Berechtigungstabelle und mit der Berechtigung der Komponente übereinstimmt.
      \"Keine Übereinstimmung\" besteht, wenn die Berechtigungen nicht übereinstimmen.
      \"Berechtigungen nicht gesetzt\"deutet auf einen Datenbankfehler hin, es sind Berechtigungen nicht gesetzt.
      Wenn irgendwelche Einträge rot markiert sind sollte die Korrektur durchgeführt werden." +JBS_ADM_ASSET_TABLE_NAME="Berechtigungen in JBS Tabellen" +JBS_ADM_AUTO_FILL_MEDIA_REC="Automatisches Ausfüllen des Mediendateieintrages" +JBS_ADM_AUTO_FILL_STUDY_REC="Automatisches Ausfüllen des Predigteintrages" +JBS_ADM_BACKUP_RESTORE="Sicherung / Wiederherstellung" +JBS_ADM_CHANGE_PLAYERS="Verwende andere Player" +JBS_ADM_CHANGE_POPUP="Popup Optionen ändern" +JBS_ADM_CHARACTER_FILTER="Filtere die Zeichen im Dateinamen" +JBS_ADM_CHARACTER_FILTER_DESC="'Filter' ersetzt Zeichen im Dateinamen, die in Internet-Dateinamen nicht zulässig sind, z.B. Leerzeichen werden durch '_' ersetzt. 'Kein Filter' schaltet diese Funktion ab." +JBS_ADM_CHECK_ASSETS="Überprüfe die Berechtigungen" +JBS_ADM_COMPONENT_SETTINGS="Globale Einstellungen" +JBS_ADM_DB_FIX="Datenbasis Reparatur" +JBS_ADM_DEBUG_DESC="Zeige Felder an, die Debug Infos beinhalten" +JBS_ADM_DEBUG_LABEL="Zeige Debug Info" +JBS_ADM_DEFAULT_MAIN_IMAGE="Bild Titelzeile" +JBS_ADM_DEFAULT_MAIN_IMAGE_DESC="Standard-Icon in der Titelzeile der Seiten" +JBS_ADM_DEFAULT_SERIES_IMAGE="Standardbild Predigtreihe" +JBS_ADM_DEFAULT_SERIES_IMAGE_DESC="Standardbild wenn eine neue Predigtreihe erstellt wird" +JBS_ADM_DEFAULT_SHOWHIDE_IMAGE_LANDING_PAGE="Zeige / verberge Icon Landing-Page" +JBS_ADM_DEFAULT_SHOWHIDE_IMAGE_LANDING_PAGE_DESC="Icon für 'zeige / verberge' in der Landing-Page" +JBS_ADM_DEFAULT_TEACHER_IMAGE="Standardbild Prediger" +JBS_ADM_DEFAULT_TEACHER_IMAGE_DESC="Standard-Vorschaubild wenn ein neuer Prediger erstellt wird" +JBS_ADM_DOWNLOAD_IMAGE="Download Icon" +JBS_ADM_DOWNLOAD_IMAGE_DESC="Standard für Download-Icon. Muss download.png heißen" +JBS_ADM_DROP_TABLES="Database Tabellen beim Deinstallieren löschen" +JBS_ADM_DROP_TABLES_DESC="Bibelstudien Database Tabellen beim Deinstallieren löschen? Standard ist 'nicht löschen'." +JBS_ADM_ERROR_OCCURED="Folgender Fehler ist aufgetreten" +JBS_ADM_FILLIN_MEDIAFILE_DESC="Wähle einen Standard Eintrag für die Eingabe einer neuen Mediendatei" +JBS_ADM_FILLIN_MEDIAFILE_DOWNLOAD="Download Knopf als Standard anzeigen?" +JBS_ADM_FILLIN_MEDIAFILE_DOWNLOAD_DESC="'Ja' generiert für Mediendateien automatisch einen Download Knopf. Kann für ein einzelnes Medium überschrieben werden." +JBS_ADM_FILLIN_MEDIAFILE_PODCAST_DESC="Wähle einen oder mehrere Standard Podcasts für die Eingabe einer neuen Mediendatei. Benutze STRG-Klick, um mehr als einen Eintrag zu wählen." +JBS_ADM_FILLIN_MEDIAFILE_TARGET="Standard Fenster" +JBS_ADM_FILLIN_MEDIAFILE_TARGET_DESC="Wähle ein Ziel-Fenster als Standard." +JBS_ADM_FILLIN_STUDY_DESC="Wähle einen Standard Eintrag für die Eingabe einer neuen Predigt" +JBS_ADM_FILLIN_STUDY_IMAGE="Standardbild Predigt" +JBS_ADM_FILTER="Filter" +JBS_ADM_FIX="Korrigiere Probleme der Berechtigungen in der Datenbasis" +JBS_ADM_FORMAT_POPULAR="Zählmethode der Zugriffe" +JBS_ADM_FORMAT_POPULAR_DESC="Welche Zugriffe sollen bei der Berechnung der beliebtesten Predigten einbezogen werden?" +JBS_ADM_FULL_WINDOW="Vollbild" +JBS_ADM_HITS_PLAYS_DOWNLOAD="Treffer + abgespielt + Downloads" +JBS_ADM_INTERNAL_SHARE="BibleStudy interne Social Network Funktion" +JBS_ADM_JWPLAYER="JW Player" +JBS_ADM_JWPLAYER_KEY_LABEL="Player Lizenzschlüssel (auf dem eigenen Server)" +JBS_ADM_MATCHROWS="Übereinstimmung" +JBS_ADM_MEDIA_COMPAT_MODE="Kompatibilitätsmodus" +JBS_ADM_MEDIA_COMPAT_MODE_DESC="Benutze die JoomlaOregon Internetseite als Router für den Medien Download. Bitte nur aktivieren, wenn es Probleme mit dem Download gibt." +JBS_ADM_MEDIA_PLAYER_POPUP_STAT="Statistik für Popup des Media Players:" +JBS_ADM_MEDIA_PLAYER_STAT="Statistik des Medien Players:" +JBS_ADM_MIGRATE="Migration" +JBS_ADM_NEW_WINDOW="Neues Fenster" +JBS_ADM_NOMATCHROWS="Keine Übereinstimmung" +JBS_ADM_NO_DEFAULT="Kein Standard" +JBS_ADM_NO_FILTER="Kein Filter" +JBS_ADM_NO_OPTION_LISTED="Keine der aufgeführten Optionen" +JBS_ADM_NO_PODCAST="Kein Podcast" +JBS_ADM_NULLROWS="Keine" +JBS_ADM_OPTION_BLACK_LIST="Negativliste (Black List) (Standard)" +JBS_ADM_OPTION_NO_FILTER="HTML nicht filtern" +JBS_ADM_OPTION_NO_HTML="Kein HTML" +JBS_ADM_OPTION_WHITE_LIST="Positivliste (White List)" +JBS_ADM_PARENT_WINDOW="Übergeordnetes Fenster" +JBS_ADM_PERMISSIONS="Berechtigungen/Filter" +JBS_ADM_PERMISSION_SETTINGS="Einstellungen Zugriffskontrolle" +JBS_ADM_PLAYER_ADMIN_DESC="JW Player allgemeine Einstellungen" +JBS_ADM_PLAYER_ADMIN_LABLE="JW Player allgemeine Einstellungen" +JBS_ADM_PLAYER_SETTINGS="Player Einstellungen" +JBS_ADM_PLAYS_DOWNLOAD="Abgespielt + Downloads" +JBS_ADM_POPULAR_LIMIT="Maximale Anzahl der beliebtesten Predigten" +JBS_ADM_POPULAR_LIMIT_DESC="Begrenzt die Anzahl der beliebtesten Predigten im Dropdown Menü der Predigt-Listenansicht. Hinweis: Das Dropdown Menü wird im Template Manager eingeschaltet." +JBS_ADM_POPUP_OPTIONS="Popup Optionen" +JBS_ADM_RESET_ALIAS="Hier klicken, um Alias-Einträge zu generieren für alle Einträge ohne Alias" +JBS_ADM_RESET_ALL_DOWNLOAD_HITS="Alle Download Zähler zurücksetzen" +JBS_ADM_RESET_ALL_HITS="Alle Trefferzähler zurücksetzen" +JBS_ADM_RESET_ALL_PLAYS="Alle Abspiel-Zähler zurücksetzen" +JBS_ADM_ROWCOUNT="Einträge" +JBS_ADM_SAME_WINDOW="Gleiches Fenster" +JBS_ADM_SELECT_EXISTING_OPTION="Wähle eine aktuelle Option" +JBS_ADM_SELECT_EXISTING_PLAYER="Wähle einen aktuellen Player" +JBS_ADM_SELECT_NEW_OPTION="Wähle eine neue Option" +JBS_ADM_SELECT_NEW_PLAYER="Wähle einen neuen Player" +JBS_ADM_SHARETYPE="Art des Social Networks" +JBS_ADM_SHARETYPE_DESC="Es kann die interne Social Network Funktion verwendet werden oder 'addthis.com'. Für addthis.com ist keine Konfiguration nötig." +JBS_ADM_SHOW_LOCATION_MEDIA="Zeige den Veranstaltungsort mit der Predigt im Dropdown Menü" +JBS_ADM_SHOW_LOCATION_MEDIA_DESC="Im Backend Medien Manager kann zusätzlich zum Predigtthema und Datum auch der Veranstaltungsort im Dropdown Menü angezeigt werden" +JBS_ADM_SOCIALNETWORKING="Benutze Social Networking Links" +JBS_ADM_SOCIALNETWORKING_DESC="Zeige oder verstecke Links, um Benutzern das Erstellen von Links auf Predigten in Social Networking Seiten zu erlauben. Hinweis: Weitere Konfiguration im Social Network Manager" +JBS_ADM_STUDYLISTLIMIT="Predigt Limit in Medien Manager" +JBS_ADM_STUDYLISTLIMIT_DESC="Maximale Anzahl der Predigten auf der Medien Seite im Backend - Leerlassen zeigt alle an." +JBS_ADM_SYSTEM_DEFAULTS="Standardwerte" +JBS_ADM_TABLENAMES="Tabellenname" +JBS_ADM_TEXT_FILTERS_DESC="Einstellungen zum Filtern der HTML Texteingaben" +JBS_ADM_TEXT_FILTERS_LABEL="Filter Texteingaben" +JBS_ADM_ARULESROWS="Berechtigungen nicht gesetzt" + +;; BAT Batch process +JBS_BAT_DOWNLOAD_NOCHANGE="- Download Type nicht ändern -" +JBS_BAT_MEDIATYPE_NOCHANGE="- Medientyp-Icon nicht ändern -" +JBS_BAT_MESSAGETYPE_DESC="Wähle einen neuen Predigttyp für den Batch Prozess" +JBS_BAT_MESSAGETYPE_NOCHANGE="- Predigttyp nicht ändern -" +JBS_BAT_MIMETYPE_DESC="Wähle eine Mime-Type für den Batch Prozess" +JBS_BAT_MIMETYPE_NOCHANGE="- Mime-Type nicht ändern -" +JBS_BAT_PLAYER_NOCHANGE="- Predigttyp nicht ändern -" +JBS_BAT_POPUP_NOCHANGE="- Popup Type nicht ändern -" +JBS_BAT_SERIES_DESC="Wähle eine neue Predigtreihe" +JBS_BAT_SERIES_NOCHANGE="- Predigtreihe nicht ändern -" +JBS_BAT_TEACHER_DESC="Wähle einen Prediger für den Batch Prozess" +JBS_BAT_TEACHER_NOCHANGE="- Prediger nicht ändern -" + +;; BBK Book of the Bibles Translations +;;; Old Testament +JBS_BBK_GENESIS="1. Mose (Genesis)" +JBS_BBK_EXODUS="2. Mose (Exodus)" +JBS_BBK_LEVITICUS="3. Mose (Levitikus)" +JBS_BBK_NUMBERS="4. Mose (Numeri)" +JBS_BBK_DEUTERONOMY="5. Mose (Deuteronomium)" +JBS_BBK_JOSHUA="Josua" +JBS_BBK_JUDGES="Richter" +JBS_BBK_RUTH="Ruth" +JBS_BBK_1SAMUEL="1. Samuel" +JBS_BBK_2SAMUEL="2. Samuel" +JBS_BBK_1KINGS="1. Könige" +JBS_BBK_2KINGS="2. Könige" +JBS_BBK_1CHRONICLES="1. Chronik" +JBS_BBK_2CHRONICLES="2. Chronik" +JBS_BBK_EZRA="Esra" +JBS_BBK_NAHUM="Nahum" +JBS_BBK_ESTHER="Esther" +JBS_BBK_JOB="Hiob" +JBS_BBK_PSALM="Psalmen" +JBS_BBK_PROVERBS="Sprüche" +JBS_BBK_ECCLESIASTES="Prediger" +JBS_BBK_SONG_OF_SOLOMON="Hohelied" +JBS_BBK_ISAIAH="Jesaja" +JBS_BBK_JEREMIAH="Jeremia" +JBS_BBK_LAMENTATIONS="Klagelieder" +JBS_BBK_EZEKIEL="Hesekiel" +JBS_BBK_DANIEL="Daniel" +JBS_BBK_HOSEA="Hosea" +JBS_BBK_JOEL="Joel" +JBS_BBK_AMOS="Amos" +JBS_BBK_OBADIAH="Obadja" +JBS_BBK_JONAH="Jona" +JBS_BBK_MICAH="Micha" +JBS_BBK_NEHEMIAH="Nehemia" +JBS_BBK_HABAKKUK="Habakuk" +JBS_BBK_ZEPHANIAH="Zefanja" +JBS_BBK_HAGGAI="Haggai" +JBS_BBK_ZECHARIAH="Sacharja" +JBS_BBK_MALACHI="Maleachi" + +;;; New Testament +JBS_BBK_MATTHEW="Matthäus" +JBS_BBK_MARK="Markus" +JBS_BBK_LUKE="Lukas" +JBS_BBK_JOHN="Johannes" +JBS_BBK_ACTS="Apostelgeschichte" +JBS_BBK_ROMANS="Römer" +JBS_BBK_1CORINTHIANS="1. Korinther" +JBS_BBK_2CORINTHIANS="2. Korinther" +JBS_BBK_GALATIANS="Galater" +JBS_BBK_EPHESIANS="Epheser" +JBS_BBK_PHILIPPIANS="Philipper" +JBS_BBK_COLOSSIANS="Kolosser" +JBS_BBK_1THESSALONIANS="1. Thessalonicher" +JBS_BBK_2THESSALONIANS="2. Thessalonicher" +JBS_BBK_1TIMOTHY="1. Timotheus" +JBS_BBK_2TIMOTHY="2. Timotheus" +JBS_BBK_TITUS="Titus" +JBS_BBK_PHILEMON="Philemon" +JBS_BBK_HEBREWS="Hebräer" +JBS_BBK_JAMES="Jakobus" +JBS_BBK_1PETER="1. Petrus" +JBS_BBK_2PETER="2. Petrus" +JBS_BBK_1JOHN="1. Johannes" +JBS_BBK_2JOHN="2. Johannes" +JBS_BBK_3JOHN="3. Johannes" +JBS_BBK_JUDE="Judas" +JBS_BBK_REVELATION="Offenbarung" + +;;; Apocrypha +JBS_BBK_TOBIT="Tobit" +JBS_BBK_JUDITH="Judith" +JBS_BBK_1MACCABEES="1 Makkabäer" +JBS_BBK_2MACCABEES="2 Makkabäer" +JBS_BBK_WISDOM="Weisheit" +JBS_BBK_SIRACH="Jesus Sirach" +JBS_BBK_BARUCH="Baruch" + +;; CMT Comments +JBS_CMT_CHOOSE_STUDY_DESC="Wähle eine Predigt für diesen Kommentar" +JBS_CMT_CREATE_DATE="Kommentar Datum" +JBS_CMT_CREATE_DATE_DESC="Erstellungsdatum des Kommentars" +JBS_CMT_EMAIL="Email" +JBS_CMT_FULL_NAME="Vor- und Nachname" +JBS_CMT_POST_COMMENT="Kommentar eingeben" +JBS_CMT_REGISTER_TO_POST_COMMENTS="Bitte anmelden, um Kommentare einzugeben" +JBS_CMT_SHOW_HIDE_COMMENTS="Zeige / verberge Kommentare" +JBS_CMT_TEXT="Beispieltext" + +;; CPL Control Panel +JBS_CPL_CURRENT_VERSION="Installierte Version" +JBS_CPL_DATE="Datum" +JBS_CPL_GENERAL_STAT="Allgemeine Statistik" +JBS_CPL_INTRO="Hier können alle Ansichten geändert werden und Aufgaben wie Erstellen und Ändern von Predigten und Mediendateien durchgeführt werden. Hier ist auch die Gesamtstatistik zu den Predigten auf einer Seite zusammengefasst." +JBS_CPL_MENUE_LINKS="Menü Links" +JBS_CPL_NO_INFORMATION="Keine Information verfügbar" +JBS_CPL_ONLINE_DOCUMENTATION="Online Dokumentation" +JBS_CPL_STATISTIC="Statistik" +JBS_CPL_TOP5_DOWNLOADS="Top 5 Downloads" +JBS_CPL_TOP5_DOWNLOADS_LAST_90DAYS="Häufigste Downloads der letzten 90 Tage" +JBS_CPL_TOP5_STUDIES_HITS="Top 5 der Predigt Treffer" +JBS_CPL_TOP5_STUDIES_HITS_90DAYS="Top 5 der Predigt Treffer der letzten 90 Tage" +JBS_CPL_TOP_STUDIES_HITS_PLAYS_DOWNLOADS="Beliebteste Predigten (Treffer, abgespielt, Downloads)" +JBS_CPL_TOTAL_COMMENTS="Gesamtzahl Kommentare" +JBS_CPL_TOTAL_DOWNLOADS="Gesamtzahl Downloads" +JBS_CPL_TOTAL_MEDIA_FILES="Gesamtzahl Mediendateien" +JBS_CPL_TOTAL_MESSAGES="Gesamtzahl Predigten" +JBS_CPL_TOTAL_TOPICS="Gesamtzahl Themen" +JBS_CPL_VALUE="Wert" +JBS_CPL_VERSION_INFORMATION="Versions-Information:" +JBS_CPL_VISIT_FAQ="Besuche unser Forum mit Fragen und Antworten" + +;;IBM Install, Backup, Migrate +JBS_IBM_CONVERT="JBS Import" +JBS_IBM_CONVERT_PREACH_IT="Importiere von PreachIt nach Joomla! Bibelstudien" +JBS_IBM_CONVERT_SERMON_SPEAKER="Importiere von Sermon Speaker nach Joomla! Bibelstudien" +JBS_IBM_CURRENT_JOOMLA_VERSION="Aktuelle Joomla Version" +JBS_IBM_ERROR_OCCURED_CREATING_TEACHERS="Fehler aufgetreten beim Anlegen eines Prediger-Eintrags" +JBS_IBM_ERROR_OCCURED_SERVER="Fehler aufgetreten beim Anlegen eines Server-Eintrags" +JBS_IBM_ERROR_OCCURED_SS_SERIES="Fehler aufgetreten beim Anlegen eines Predigtreihen-Eintrags" +JBS_IBM_IMPORT_FROM_BACKUP_FOLDER="Importiere Datenbasis vom backup Ordner" +JBS_IBM_IMPORT_FROM_FILE="Von einer Datei importieren" +JBS_IBM_IMPORT_FROM_TMP_FOLDER="Importiere Datenbasis vom tmp Ordner" +JBS_IBM_IMPORT_MIGRATE_FROM_SERVER_FOLDER="Von einem Server-Ordner importieren" +JBS_IBM_IMPORT_ONLY="Importiere Datenbasis" +JBS_IBM_INSTALLDB_ERRORS="Installation der Datenbasis fehlgeschlagen" +JBS_IBM_MAX_EXECUTION_TIME="Maximale Ausführungszeit in Sekunden in der php.ini Datei (max_execution_time) ist (große Datenbasen können beim Hochladen fehlschlagen)" +JBS_IBM_MAX_UPLOAD="Maximale Dateigröße zum Hochladen in der php.ini Datei (post_max_size) ist" +JBS_IBM_MEDIAFILES_CREATED="Mediendateien importiert für" +JBS_IBM_MIGRATE_NOT_OLD_DB="Diese Sicherungsdatei wurde mit der aktuellen Version erstellt. Bitte benutze den Import." +JBS_IBM_NOTE_ERRORS="Bitte evtl. aufgeführte Fehlermeldungen beachten" +JBS_IBM_NOT_CONVERTED="Nicht importiert: " +JBS_IBM_NOT_CURENT_DB="Diese Sicherungsdatei wurde nicht mit der aktuellen Version erstellt. Bitte benutze die Migration" +JBS_IBM_NOT_DB="Keine Bibelstudien SQL Datei. Hier können nur Bibelstudien SQL Dateien eingegeben werden." +JBS_IBM_NO_MINISTRIES="Keine Gottesdienste gefunden zum Importieren" +JBS_IBM_NO_PODCASTS="Keine Podcasts gefunden zum Importieren" +JBS_IBM_NO_PREACHIT_FOUND="Keine Version von PreachIt gefunden" +JBS_IBM_NO_SERIES="Keine Predigtreihe gefunden zum Importieren" +JBS_IBM_NO_SERIES_FOUND_SS="Keine Predigtreihen in Sermon Speaker gefunden" +JBS_IBM_NO_SERMON_SPEAKER_FOUND="Keine Version von Sermon Speaker gefunden" +JBS_IBM_NO_STUDIES="Keine Predigten gefunden zum Importieren" +JBS_IBM_NO_TEACHERS_FOUND_SS="Keine Prediger in Sermon Speaker gefunden" +JBS_IBM_OLDPREFIX="Kopiere und migriere Tabellen" +JBS_IBM_OLDPREFIXDESC1="Gib den Präfix der alten Datenbasis ein (mit Unterstrich, z.B. jos_)." +JBS_IBM_OLDPREFIXDESC2="Die alte und neue Seite müssen die selbe Datenbank benutzen. Starte die Migration mit 'Eingabe'." +JBS_IBM_OLDPREFIXDESC3="Neue Tabellen - falls vorhanden - werden gelöscht und durch die alten Tabellen überschrieben." +JBS_IBM_OLD_DB="Diese Datenbasis ist von einer alten Programmversion. Bitte Migration durchführen." +JBS_IBM_PI_COMMENTS="Predigt Kommentare importiert: " +JBS_IBM_PI_FOLDERS="Server Ordner importiert: " +JBS_IBM_PI_MEDIA="Mediendateien importiert: " +JBS_IBM_PI_PODCAST="Podcasts importiert: " +JBS_IBM_PI_SERIES="Predigtreihen importiert: " +JBS_IBM_PI_SERVERS="Server importiert: " +JBS_IBM_PI_STUDIES="Predigten importiert: " +JBS_IBM_PI_TEACHERS="Prediger importiert: " +JBS_IBM_PREACHIT_RESULTS="PreachIt Import Ergebnisse" +JBS_IBM_REVIEW_ADMIN_TEMPLATE="Bitte Einstellungen in Administration und Template überprüfen, denn einige Einstellungen können nicht übernommen werden." +JBS_IBM_SAVE_DB="Sichere die JBS Datenbasis nach /media/com_biblestudy/backup" +JBS_IBM_SELECT_DB="Wähle eine Datenbasis Sicherungsdatei zum Wiederherstellen" +JBS_IBM_SERIES_CONVERTED="Predigtreihen importiert" +JBS_IBM_SERMONS_CREATED_FOR="Predigten importiert für" +JBS_IBM_SERVER_RECORD_ADDED="Server importiert" +JBS_IBM_SHOW_JBSMIGRATION_LABEL="Zeige den Migrations Tab" +JBS_IBM_SHOW_JBSMIGRATION_LABEL_DESC="Soll der Tab gezeigt werden, mit dem von Bibelstudien für Joomla! 1.5 migriert werden kann? Diese Funktion wird nur einmal benötigt." +JBS_IBM_TEACHERS_CREATED="Prediger importiert" +JBS_IBM_VERSION_TOO_OLD="Die JBS Version zur Migration muss mindestens 6.0.8 sein. Bitte wende dich an den Support bei www.joomlabiblestudy.org" + +;; INS Install -> moved to xx-XX.com_biblestudy.sys.ini +; Install strings + +; Preflight and postflight strings + +; PostInstall Messages + +; Uninstall strings (used when the extension is uninstalled) + +;Migration +JBS_MIG_FINISHED="Beendet" +JBS_MIG_MIGRATION_DONE="Bibelstudien Migration beendet" +JBS_MIG_PROCESSING="Bearbeitung:" +JBS_MIG_TITLE="Bibelstudien Migration" +JBS_MIG_STARTING="Starte..." +JBS_MIG_WORKING="Bibelstudien Migration läuft..." + +;; LOC Locations +JBS_LOC_LOCATION_NAME="Name des Veranstaltungsorts" + +;; MDL Module specific strings +JBS_MDL_AND="Und" +JBS_MDL_AND_OR="Und / Oder" +JBS_MDL_AND_OR_DESC="Wähle, ob die Felder UND oder ODER verknüpft werden sollen" +JBS_MDL_EXPERT_MODE="Module Template für Fortgeschrittene" +JBS_MDL_FILTERS="Filter" +JBS_MDL_HEADER_TEXT="Überschrift" +JBS_MDL_HEADER_TEXT_DESC="Überschrift für den Modulkopf; html oder Text; kann leer bleiben" +JBS_MDL_LINK_TEXT="Text für den Link" +JBS_MDL_LINK_TEXT_DESC="Gib einen Text ein, der als Link in der Fußzeile des Moduls erscheint" +JBS_MDL_MEDIA="Medien Einstellungen" ; duplicate: JBS_SVR_MEDIA_SETTINGS +JBS_MDL_MORE_SETTINGS="Weitere Einstellungen" +JBS_MDL_OR="oder" +JBS_MDL_SELECT_TEMPLATE="Wähle ein Template" +JBS_MDL_SELECT_TEMPLATE_DESC="Wähle ein Template für dieses Modul; das dazugehörige CSS wird für die Listenansicht verwendet" +JBS_MDL_SHOW_COMPONENT="Zeige / verberge Link auf die Komponente" +JBS_MDL_SHOW_COMPONENT_DESC="Zeige oder verberge den Link auf die Bibelstudien Komponente in der Fußzeile des Moduls" + +;; MED Media File Info and selections +JBS_MED_ACCESS="Access" +JBS_MED_APPEARS_UNDER_FILE_OR_TOOLTIP="Erscheint unter Datei oder als Kurzinfo (Tooltip) - entsprechend der Einstellung des Templates" +JBS_MED_AVRELOADED_DESC="Eingebetteter Code: Füge den eingebetteten Code ein für die Internetseite ein, der das Medium streamt.
      AllVideos oder JPlayer: Gebe die Codes für das Öffnen und Schließen ein, wie z.B. {mp3remote}-{/mp3remote}. Zwischen den Codes muss ein Strich (-) sein!
      Wenn du den Parameter so auswählst, dass die AllVideos Reloaded-Kompenente alle Dateien abspielen soll, wird automatisch versucht, den richtigen Code auszufüllen, auch wenn man nichts eingibt. Man kann auch einen Dateinamen zwischen {} und {/} eingeben, dann wird dieser einfach an AllVideos Reloaded weitergegeben.
      Schaue auf AllVideos Reloaded Documentation für mehr Informationen zu den Codes.
      Du kannst auch einen Text vor oder nach dem Strich eingeben, wenn du willst, z.B. {mp3remote}http://-{/mp3remote} fügt den Text vor dem Pfad und Dateinamen ein (das System entfernt den -). Der Player für dieses Medium muss auf 'Benutze AllVideos Reloaded' gesetzt sein!" +JBS_MED_CHOOSE_MIMETYPE="Wähle eine Mime-Type" +JBS_MED_CHOOSE_MIMETYPE_DESC="Wenn die Mime-Type nicht vorhanden ist, bitte bei W3C nachschauen" +JBS_MED_CHOOSE_PODCAST="Wähle einen Podcast" +JBS_MED_CHOOSE_PODCAST_DESC="Benutze STRG-Klick, um mehr als einen Eintrag zu wählen." +JBS_MED_CHOOSE_STUDY_DESC="Wähle eine Predigt für dieses Medium" +JBS_MED_CREATE_DATE="Datum" +JBS_MED_CREATE_DATE_DESC="Erstellungsdatum und -zeit des Mediums; z.B. Zeitpunkt der Predigt" +JBS_MED_DOCMAN_ITEM="DocMan Element" +JBS_MED_DOCMAN_ITEM_DESC="JBS_MED_DOCMAN_ITEM_DESC" +JBS_MED_DOCMAN_SELECT="Wähle ein Docman Dokument" +JBS_MED_DOWNLOAD="Download" +JBS_MED_DOWNLOADS_DESC="Anzahl der Downloads für dieses Medium" +JBS_MED_ERROR_MOVING_FILE="Fehler: Datei kann nicht verschoben werden" +JBS_MED_ERROR_NO_FILE="Fehler: Keine Datei gefunden" +JBS_MED_ERROR_PARTIAL_UPLOAD="Fehler: Nur teilweise hochgeladen" +JBS_MED_FILENAME="Dateiname" +JBS_MED_FILESIZE_CONVERTER="Dateigrößen Konverter" +JBS_MED_FILESIZE_DESC="Dateigröße in Bytes" +JBS_MED_FILE_BIGGER_THAN="Fehler: Datei ist größer als " +JBS_MED_FILE_NO_UPLOADED="Fehler: Datei wurde nicht hochgeladen" +JBS_MED_FILE_NO_UPLOADED_FTP="Fehler: Datei kann nicht mittels ftp hochgeladen werden" +JBS_MED_FILE_TOO_LARGE_THAN_PHP_INI_ALLOWS="Fehler: Datei ist größer als in php.ini definiert" +JBS_MED_FILE_TO_LARGE_THAN_HTML_FORM_ALLOWS="Fehler: Datei ist größer als HTML erlaubt" +JBS_MED_FILE_UPLOADED="Datei wurde hochgeladen" +JBS_MED_FILTER_DOWNLOAD="- Wähle eine Download Type -" +JBS_MED_FTP_NO_CHMOD="Fehler: Die Zugriffsrechte der Datei können nicht geändert werden (CHMOD)" +JBS_MED_FTP_NO_CONNECT="Fehler: Verbindung mittels ftp kann nicht hergestellt werden" +JBS_MED_FTP_NO_LOGIN="Fehler: Login zum ftp nicht erfolgreich" +JBS_MED_FTP_NO_UPLOAD="Fehler: Hochladen mittels ftp ist nicht möglich" +JBS_MED_IMAGE_DESC="Wähle ein Bild, das für dieses Medium angezeigt wird" +JBS_MED_INTERNAL_POPUP="Interner Player als Popup / in neuem Fenster oder Inline" +JBS_MED_INTERNAL_POPUP_DESC="Soll der interne Player oder direkte Link als Popup oder Inline (interner Player) oder neues Fenster (direkter Link) angezeigt werden? Beeinflusst nur dieses Medium, überschreibt die globale Einstellung." +JBS_MED_LINK_TARGET="Ziel" +JBS_MED_LINK_TARGET_DESC="Ziel für Link (z.B.: _self, _blank etc)" +JBS_MED_LINK_TARGET_BLANK="_blank" +JBS_MED_LINK_TARGET_SELF="_self" +JBS_MED_LINK_TARGET_PARENT="_parent" +JBS_MED_LINK_TARGET_TOP="_top" +JBS_MED_MEDIA_FILES="Medien Datei" +JBS_MED_MEDIA_FILES_DETAILS="Mediendatei Details" +JBS_MED_MEDIA_FILES_LINKER="Link Type" +JBS_MED_MEDIA_FILES_SETTINGS="Mediendatei Parameter" +JBS_MED_MEDIA_FILES_STATS="Statistik" +JBS_MED_MEDIA_POPUPFOOTER="Popup Fußzeilen Elemente" +JBS_MED_MEDIA_POPUPMARGIN="Abstand für Popup" +JBS_MED_MEDIA_POPUPMARGIN_DESC="Setze den Abstand zwischen Popup und Kopzeile bzw. Fußzeile. Beeinflusst nur dieses Medium." +JBS_MED_MEDIA_POPUPTITLE="Popup Kopfzeilen Elemente" +JBS_MED_MEDIA_POPUPTITLE_FOOTER_DESC="Überschreibt die globale Einstellung. Codes: {{title}}, {{studydate}}, {{teacher}}, {{filename}}, {{description}}, {{length}}" +JBS_MED_MEDIA_TYPE="Medien Type" +JBS_MED_NO_DOWNLOAD_ICON="Kein Download icon" +JBS_MED_PATH="Server URL Pfad" +JBS_MED_PATH_DESC="Server URL Pfad ohne http oder https" +JBS_MED_PATH_OR_FOLDER="Pfad oder Ordner" +JBS_MED_PATH_OR_FOLDER_DESC="Ordner, in dem die Medien Datei abgelegt ist" +JBS_MED_PDF="PDF" +JBS_MED_PLAYER="Player für dieses Medium" +JBS_MED_PLAYERHIGHT="Benutzerdefinierte Höhe des internen Players oder Fensters" +JBS_MED_PLAYERHIGHT_DESC="Setze die Höhe des Players oder direkten Links für das neue Fenster mit Player. 400 ist der Standardwert, wenn nichts eingetragen ist. Beeinflusst nur dieses Medium." +JBS_MED_PLAYERWIDTH="Benutzerdefinierte Breite des internen Players oder Fensters" +JBS_MED_PLAYERWIDTH_DESC="Setze die Breite des Players oder direkten Links für das neue Fenster mit Player. 300 ist der Standardwert, wenn nichts eingetragen ist. Beeinflusst nur dieses Medium." +JBS_MED_PLAYER_DESC="Wähle den Player für dieses Medium; überschreibt die globale Einstellung nur für dieses Medium." +JBS_MED_PLAYS_DESC="Anzahl, wie oft dieses Medium abgespielt worden ist" +JBS_MED_POPUP="Popup Type für dieses Medium" +JBS_MED_SELECT_ARTICLE="Wähle einen Beitrag" +JBS_MED_SELECT_DOCMAN="Wähle ein DocMan Element" +JBS_MED_SELECT_FOLDER="Wähle einen Server Ordner zum Hochladen" +JBS_MED_SELECT_MEDIA_TYPE="- Wähle einen Medientyp -" +JBS_MED_SELECT_SERVER="Wähle einen Server zum Hochladen" +JBS_MED_SELECT_VM_ITEM="Wähle ein VirtueMart Element" +JBS_MED_SERVER_DESC="Server, auf dem die Medien Datei abgelegt ist" +JBS_MED_SHOW_DOWNLOAD_ICON="Zeige Download Icon" +JBS_MED_SHOW_DOWNLOAD_ICON_DESC="Das Download Icon kann verborgen, angezeigt oder gemeinsam mit dem Medium angezeigt werden" +JBS_MED_SHOW_ONLY_DOWNLOAD_ICON="Zeige nur Download Icon" +JBS_MED_UPLOAD="Hochladen" ; double +JBS_MED_UPLOAD_EXISTS="Fehler: Datei existiert bereits" +JBS_MED_UPLOAD_FAILED_CHECK_PATH="Fehler: Die Überprüfung des Pfades schlug fehl" +JBS_MED_UPLOAD_FAILED_NOT_UPLOAD_THIS_FOLDER="Fehler: Datei kann nicht in diesen Ordner hochgeladen werden" +JBS_MED_UPLOAD_FAILED_NO_FOLDER="Fehler: Ordner existiert nicht auf diesem Server" +JBS_MED_USE_ARTICLE="Benutze Beitrag" +JBS_MED_USE_DOCMAN="Benutze DOCman" +JBS_MED_USE_DOCMAN_DESC="Wenn DocMan installiert ist, werden die Elemente in absteigender Reihenfolge der Produkt-ID ausgegeben. Daraus wird der Link von der Mediendatei zum Download aus DocMan erzeugt." +JBS_MED_USE_FILENAME_AS_PATH="Wenn gewünscht, kann der Dateiname als vollständiger Pfad verwendet werden. Dann keinen Server oder Pfad angeben! (Diese Option nicht beim Hochladen verwenden!)" +JBS_MED_VIRTUEMART_ITEM="Wähle ein VirtueMart Element" +JBS_MED_VIRTUEMART_ITEM_DESC="Wenn VirtueMart installiert ist, werden die Elemente in absteigender Reihenfolge der Produkt-ID gemeinsam mit der SKU Nummer ausgegeben. Daraus wird der Link von der Mediendatei zum VirtueMart Element erzeugt." + +;; MNU Menu --> moved to xx-XX.com_biblestudy.sys.ini + +;; MST Message Type +JBS_MST_MESSAGETYPE_DESC="Gib eine Beschreibung dieses Predigttypen oder Predigtanlasses ein, z.B. Gottesdienst, Hauskreis, Lehrvortrag" +JBS_MST_MESSAGETYPE_TEXT="Predigttyp Text" + +;; PDC Podcast Section +JBS_PDC_BOOK_CHAPTER="Buch und Kapitel" +JBS_PDC_EDITORS_EMAIL="Email Adresse des Editors" +JBS_PDC_EDITORS_NAME="Name des Editors" +JBS_PDC_EPISODES_CUSTOM_DESC="Benutze Codes und Text.

      Codes:

      {scripture1} - Bibelbuchstelle
      {duration} - Dauer
      {studytitle} - Predigt Titel
      {teachername} - Prediger Name
      {date} - Datum" +JBS_PDC_EPISODE_DATE_SCRIPTURE_TITLE="Datum + Bibelstelle + Titel" +JBS_PDC_EPISODE_SCRIPTURE_ONLY="Nur Bibelstelle" +JBS_PDC_EPISODE_SCRIPTURE_TITLE="Bibelstelle + Titel" +JBS_PDC_EPISODE_SUBTITLE="Episoden Untertitel" +JBS_PDC_EPISODE_TEACHER_SCRIPTURE="Prediger + Bibelstelle" +JBS_PDC_EPISODE_TITLE="Episoden Titel" +JBS_PDC_EPISODE_TITLE_ONLY="Nur Titel" +JBS_PDC_EPISODE_TITLE_SCRIPTURE="Titel + Bibelstelle" +JBS_PDC_IMAGE="Podcast Bild" +JBS_PDC_IMAGE_DESC="Wird für den Abschnitt 'image' in der Podcast XML Datei verwendet." +JBS_PDC_NUM_RECORDS_INCLUDE="Anzahl der Einträge / Medien" +JBS_PDC_NUM_RECORDS_INCLUDE_DESC="Maximale Anzahl der Medien, die in den Podcast aufgenommen werden sollen. Leer lassen oder '0' zeigt alle." +JBS_PDC_PODCAST_AUTHOR="Podcast Autor" +JBS_PDC_PODCAST_DESCRIPTION="Beschreibung des Podcast (max 500 Zeichen)" +JBS_PDC_PODCAST_IMAGES="Podcast Icons" +JBS_PDC_PODCAST_LANGUAGE="Podcast Sprache" +JBS_PDC_PODCAST_LOGO="Podcast Logo" +JBS_PDC_PODCAST_LOGO_DESC="Wird für den Abschnitt 'itunes:image' in der Podcast XML Datei verwendet." +JBS_PDC_PODCAST_NAME="Podcast Name" +JBS_PDC_PODCAST_NAME_DESC="Alias Name zur Beschreibung des Podcast" +JBS_PDC_PODCAST_SEARCH_WORDS="Podcast Suchbegriffe (mit Komma getrennt)" +JBS_PDC_PODCAST_XML_FILENAME="Podcast XML Dateiname" +JBS_PDC_PODCAST_XML_FILENAME_DESC="Podcast XML Dateiname ohne Pfad z.B. 'biblestudies.xml'; wird immer im root Verzeichnis abgelegt" +JBS_PDC_SUBSCRIBE_IMAGE="Podcast Abonnement Bild" +JBS_PDC_SUBSCRIBE_IMAGE_DESC="Wähle ein Bild, das im Abonnement Modul benutzt wird" +JBS_PDC_SUBSCRIBE_WORDS="Beschriftung für das Podcast Abonnement" +JBS_PDC_SUBSCRIBE_WORDS_DESC="Dieser kurze Text wird unter dem Bild für das Podcast Abonnement angezeigt. Kann leer bleiben" +JBS_PDC_TEMPLATE_FOR_DETAILS_VIEW_LINK="Template für Link auf Einzelansicht" +JBS_PDC_WEBSITE_URL="Website URL (ohne http://)" +JBS_PDC_WRITE_XML_FILES="Schreibe XML Dateien" +JBS_PDC_XML_FILES_ERROR="Fehler beim Schreiben einer oder mehrerer Podcast XML Dateien" +JBS_PDC_XML_FILES_WRITTEN="Podcast XML Dateien erzeugt" + +;; PLG Plugin specific strings (all plugins) +JBS_PLG_BACKUP_EMAIL_MSG_ERROR="Fehler beim Erstellen der Sicherungskopie" +JBS_PLG_BACKUP_EMAIL_MSG_SUCCESS="Sicherungskopie erfolgreich abgespeichert" +JBS_PLG_BACKUP_FILES="Anzahl der aufbewahrten Sicherungsdateien" +JBS_PLG_BACKUP_FILES_DESC="Wenn mehr Sicherungsdateien als diese Anzahl angelegt wurden, wird die älteste gelöscht" +JBS_PLG_BACKUP_INCLUDEDB="Datenbasis anhängen" +JBS_PLG_BACKUP_INCLUDEDB_DESC="Soll die Datenbasis als Zip-Datei an die Email angehängt werden?" +JBS_PLG_PODCASTBACKUP_CHOOSE_DAY="Wähle einen Tag zur Generierung" +JBS_PLG_PODCASTBACKUP_CHOOSE_HOUR="Wähle eine Zeit zur Generierung" +JBS_PLG_PODCASTBACKUP_DAY10="Tag 10" +JBS_PLG_PODCASTBACKUP_DAY1="Tag 1" +JBS_PLG_PODCASTBACKUP_DAY2="Tag 2" +JBS_PLG_PODCASTBACKUP_DAY3="Tag 3" +JBS_PLG_PODCASTBACKUP_DAY4="Tag 4" +JBS_PLG_PODCASTBACKUP_DAY5="Tag 5" +JBS_PLG_PODCASTBACKUP_DAY6="Tag 6" +JBS_PLG_PODCASTBACKUP_DAY7="Tag 7" +JBS_PLG_PODCASTBACKUP_DAY8="Tag 8" +JBS_PLG_PODCASTBACKUP_DAY9="Tag 9" +JBS_PLG_PODCASTBACKUP_EMAIL_BODY="Inhalt" +JBS_PLG_PODCASTBACKUP_EMAIL_SEND="Sende eine Email Benachrichtigung" +JBS_PLG_PODCASTBACKUP_EMAIL_SEND_DESC="Sende eine Email, wenn eine Generierung gestartet wurde." +JBS_PLG_PODCASTBACKUP_EMAIL_SUBJECT="Betreff" +JBS_PLG_PODCASTBACKUP_EMAIL_TO="an Email Adresse(n)" +JBS_PLG_PODCASTBACKUP_EMAIL_TO_DESC="Ziel-Emailadresse(n). Wenn das Feld leer ist, wird die System Standard-Emailadresse verwendet. Trenne mehrere Adressen mit Kommas." +JBS_PLG_PODCASTBACKUP_GENERATE_EVERY="Generierung alle x Stunden" +JBS_PLG_PODCASTBACKUP_GENERATE_EVERY_DESC="Generierung neu starten x Stunden nach der letzten Generierung. ('24' generiert einmal pro Tag)" +JBS_PLG_PODCASTBACKUP_GENERATE_METHOD="Wähle die Generierungsmethode" +JBS_PLG_PODCASTBACKUP_GENERATE_METHOD_DESC="Soll die Generierung im (Mehr-)Stundenrhythmus oder zu einer bestimmten Tag / Uhrzeit erfolgen?" +JBS_PLG_PODCASTBACKUP_HOURS="Stundenrhythmus" +JBS_PLG_PODCASTBACKUP_HOUR_DAY10="Uhrzeit am Tag 10" +JBS_PLG_PODCASTBACKUP_HOUR_DAY1="Uhrzeit am Tag 1" +JBS_PLG_PODCASTBACKUP_HOUR_DAY2="Uhrzeit am Tag 2" +JBS_PLG_PODCASTBACKUP_HOUR_DAY3="Uhrzeit am Tag 3" +JBS_PLG_PODCASTBACKUP_HOUR_DAY4="Uhrzeit am Tag 4" +JBS_PLG_PODCASTBACKUP_HOUR_DAY5="Uhrzeit am Tag 5" +JBS_PLG_PODCASTBACKUP_HOUR_DAY6="Uhrzeit am Tag 6" +JBS_PLG_PODCASTBACKUP_HOUR_DAY7="Uhrzeit am Tag 7" +JBS_PLG_PODCASTBACKUP_HOUR_DAY8="Uhrzeit am Tag 8" +JBS_PLG_PODCASTBACKUP_HOUR_DAY9="Uhrzeit am Tag 9" +JBS_PLG_PODCASTBACKUP_SCHEDULE="Zeitplan" +JBS_PLG_PODCASTBACKUP_SERVER_NO_OFFSET="Kein Offset" +JBS_PLG_PODCASTBACKUP_SERVER_OFFSET="Zeit Offset des Servers" +JBS_PLG_PODCASTBACKUP_SERVER_OFFSET_DESC="Hier kann eine Zeitverschiebung des Servers kompensiert werden" +JBS_PLG_PODCASTBACKUP_SERVER_USE_OFFSET="Benutze Offset" +JBS_PLG_PODCAST_EMAIL_BODY_RUN="Aktualisiert am: " +JBS_PLG_PODCAST_ONLY_EMAIL_ERRORS="Sende eine Email nur bei Fehlern" +JBS_PLG_SEARCH_LIMIT="Anzahl der Ergebnisse" +JBS_PLG_SEARCH_LIMIT_DESC="Anzahl der Suchergebnisse" +JBS_PLG_SEARCH_DESCRIPTION="Beschreibung anzeigen / verbergen" +JBS_PLG_SEARCH_DESCRIPTION_DESC="Soll die Beschreibung auf der Ergebnisseite angezeigt werden?" +JBS_PLG_SEARCH_HIDE="Verbergen" +JBS_PLG_SEARCH_SHOW="Anzeigen" +JBS_PLG_SEARCH_TITLE="Überschrift" +JBS_PLG_SEARCH_TITLE_DESC="Soll zuerst das Biblebuch oder der Predigttitel angezeigt werden?" +JBS_PLG_SEARCH_BOOK_FIRST="Bücher zuerst" +JBS_PLG_SEARCH_STUDY_FIRST="Predigttitel zuerst" +JBS_PLG_SEARCH_FIELD_CONTENT="Predigten" +JBS_PLG_SEARCH_FIELD_CONTENT_DESC="Zeige die veröffentlichten Predigten" +JBS_PLG_SEARCH_FIELD_ARCHIVED="Archiviert" +JBS_PLG_SEARCH_FIELD_ARCHIVED_DESC="Zeige die archivierten Predigten" + + +;; SER Series +JBS_SER_RETURN_SERIES_LIST="Zurück zur Predigtreihen-Liste" +JBS_SER_SERIES_NAME="Predigtreihe Name" +JBS_SER_STUDIES_FROM_THIS_SERIES="Predigten aus dieser Predigtreihe" + +;; SHR Sharing Networks +JBS_SHR_ALTTEXT="Alternativer Text" +JBS_SHR_ALTTEXT_DESC="Bezeichnung der Seite, Alternativer Text (Alttext) oder Hover Text" +JBS_SHR_API="bit.ly API Schlüssel" +JBS_SHR_API_DESC="Nicht benötigt. Wenn der eigene bit.ly Benutzer verwendet wird, trage den API Schlüssel hier ein." +JBS_SHR_ITEM1CUSTOM="Benutzerdefinierter Eintrag 1" +JBS_SHR_ITEM1PREFIX="Prefix für den Eintrag 1" +JBS_SHR_ITEM2CUSTOM="Benutzerdefinierter Eintrag 2" +JBS_SHR_ITEM2PREFIX="Prefix für den Eintrag 2" +JBS_SHR_ITEM3CUSTOM="Benutzerdefinierter Eintrag 3" +JBS_SHR_ITEM3PREFIX="Prefix für den Eintrag 3" +JBS_SHR_ITEM4CUSTOM="Benutzerdefinierter Eintrag 4" +JBS_SHR_ITEM4PREFIX="Prefix für den Eintrag 4" +JBS_SHR_ITEM="Wähle einen Eintrag zur Anzeige" +JBS_SHR_ITEMCUSTOM_DESC="Benutzerdefinierter Text und Code; Code wird in {Klammern} angegeben. Codes siehe Dropdown Menü" +JBS_SHR_ITEMPREFIX_DESC="Prefix für diesen Eintrag, Beispiel: u=" +JBS_SHR_ITEM_DESC="Wähle einen Eintrag aus dem Dropdown Menü zur Anzeige" +JBS_SHR_LINK_STUDY="Link auf die Predigt" +JBS_SHR_MAINLINK="Hauptlink URL" +JBS_SHR_MAINLINK_DESC="Vollständige URL auf die Social Network Seite" +JBS_SHR_NAME="Name" +JBS_SHR_SHAREIMAGE="Icon für das Social Network" +JBS_SHR_SHAREIMAGEH="Höhe des Bildes" +JBS_SHR_SHAREIMAGEHW_DESC="Kann nur eine Zahl oder eine Zahl mit px sein" +JBS_SHR_SHAREIMAGEW="Breite des Bildes" +JBS_SHR_SOCIAL_NETWORK="Social Network" +JBS_SHR_TOTALCHARACTERS="Gesamtzahl Zeichen" +JBS_SHR_TOTALCHARACTERS_DESC="Gesamtzahl der Zeichen für den Link ohne den Pfad auf die Seite" +JBS_SHR_USERNAME="Gebe deinen bit.ly Benutzername ein, wenn du einen hast" +JBS_SHR_USERNAME_DESC="Nicht unbedingt nötig. Wenn diese Angabe leer bleibt, wird der Benutzername des Joomla Bibelstudien Moduls verwendet." +JBS_SHR_USE_BITLY="Benutze bit.ly für kurze Link-Adressen" +JBS_SHR_USE_BITLY_DESC="Erzeugt einen kurzen Link. Hilfreich insbesonders für Twitter, die nur eine beschränkte Anzahl an Zeichen erlauben." + +;; STY Study List and Edit +JBS_STY_ADD_MEDIA_FILE="Mediendatei hinzufügen" +JBS_STY_BOOK2="Buch 2" +JBS_STY_CHAPTER_BEGIN2="Kp Anfang 2" +JBS_STY_CHAPTER_BEGIN="Kp Anfang" +JBS_STY_CHAPTER_END2="Kp Ende 2" +JBS_STY_CHAPTER_END="Kp Ende" +JBS_STY_CLICK_TO_OPEN_PASSAGE="Link zur Textstelle" +JBS_STY_COMMENTS_DESC="Erlaube Kommentare für diese Predigt? -Nein- überschreibt die globale Einstellung nur für diese Predigt. Nur relevant, wenn Kommentare in globaler Einstellung erlaubt." +JBS_STY_COMMENT_NOT_PUBLISHED="Der Kommentar wurde gesperrt." +JBS_STY_COMMENT_PUBLISHED="Der Kommentar wurde freigegeben." +JBS_STY_COMMENT_SUBMITTED="Kommentar eingereicht!" +JBS_STY_COMMENT_UNPUBLISHED="Der Kommentar wurde zur Prüfung eingereicht." +JBS_STY_CREATE_DATE_DESC="Datum und Zeit der Predigt" +JBS_STY_DETAILS="Predigt Details" +JBS_STY_DOWNLOAD_LINK="Mediendatei zum Download Link" +JBS_STY_DOWNLOAD_LINK_DESC="Wenn ein Eintrag der Predigtliste verlinkt wird, kann diese Mediendatei nur zum Download verwendet werden" +JBS_STY_ERROR_SUBMITTING_COMMENT="Fehler beim Einreichen des Kommentars" +JBS_STY_FROM_CHAPTER="Von Kapitel:" +JBS_STY_GO_BUTTON="Filter" +JBS_STY_HAS_ENTERED_COMMENT="hat einen Kommentar geschrieben für die Predigt:" +JBS_STY_HITS="Treffer" +JBS_STY_INCORRECT_KEY="Ungültige Eingabe" ; duplicate +JBS_STY_MEDIA_THIS_STUDY="Mediendateien für diese Predigt" +JBS_STY_MESSAGETYPE_DESC="Art der Veranstaltung" +JBS_STY_METADATA="Metadaten" +JBS_STY_METADESCRIPTION="Metadaten Beschreibung" +JBS_STY_METADESCRIPTION_DESC="Gib eine Beschreibung ein. Wenn leer gelassen, wird die Predigtbeschreibung verwendet" +JBS_STY_METAKEYWORDS="Schlüsselwörter" +JBS_STY_METAKEYWORDS_DESC="Gib die Schlüsselwörter ein, durch Kommas getrennt" +JBS_STY_NO_COMMENT="Kein Kommentar vorhanden" +JBS_STY_NO_MEDIAFILES="Keine Mediendatei" +JBS_STY_NO_PASSAGE_INCLUDED="Keine Textstelle in dieser Predigt gefunden" +JBS_STY_ON="am" +JBS_STY_PUBLISH="Publishing" ; duplicate +JBS_STY_RESET_HITS="Treffer zurücksetzen" +JBS_STY_RETURN_STUDIES_LIST="Zurück zur Predigtliste" +JBS_STY_REVIEW_COMMENTS_LOGIN="Sie können Ihren Kommentar überarbeiten, wenn Sie sich als registrierter Benutzer auf der Seite anmelden" +JBS_STY_SAVE_FIRST="Die Predigt muss zuerst gespeichert werden" +JBS_STY_SCRIPTURE_DESC="Gib Kapitel und Vers von Anfang und Ende der Textstelle ein. Eine oder mehrere Angaben können leer gelassen werden." +JBS_STY_SECONDARY_REFERENCES_DESC="Sekundäre Referenzen wie z.B. Literatur, Internetseiten, Filme oder andere Quellen" +JBS_STY_SELECT_DOWNLOAD_LINK="- Wähle eine Mediendatei -" +JBS_STY_STUDY_IMAGE="Predigt Bild" +JBS_STY_STUDY_TEXT="Predigt Text" +JBS_STY_UPLOAD="Mediendatei hochladen" ; duplicate +JBS_STY_UPLOAD_BUTTON="Hochladen" +JBS_STY_VERSE_BEGIN2="Vs Anfang 2" +JBS_STY_VERSE_BEGIN="Vs Anfang" +JBS_STY_VERSE_END2="Vs Ende 2" +JBS_STY_VERSE_END="Vs Ende" +JGLOBAL_ACTION_PERMISSIONS_LABEL="Zugriffsrechte" +JGLOBAL_PERMISSIONS_ANCHOR="Setze die Zugriffsrechte" + +;;Styles +JBS_STYLE_CANNOT_DELETE_DEFAULT="Die Standard CSS Datei biblestudy.css kann nicht gelöscht werden" +JBS_STYLE_CHOOSE_CSS_FILE="Wähle eine CSS Formatierung" +JBS_STYLE_CHOOSE_CSS_FILE_DESC="Wähle eine CSS Formatierung für dieses Template. CSS Formatierungen können unter CSS bearbeiten erstellt oder geändert werden" +JBS_STYLE_CODE="CSS Formatierung Code" +JBS_STYLE_CODE_DESC="CSS Code bearbeiten. Der Code muss aus gültigem css Syntax bestehen" +JBS_STYLE_CSS_FIX="CSS korrigieren" +JBS_STYLE_CSS_FIX_COMPLETE="CSS Korrektur abgeschlossen" +JBS_STYLE_FILENAME="CSS Dateiname (ohne .css)" +JBS_STYLE_FILENAME_DESC="Eindeutigen CSS Dateiname eingeben ohne .css - das wird automatisch beim Speichern angehängt" +JBS_STYLE_FILENAME_NOT_DELETED="Datei wurde nicht glöscht. Prüfe die Zugriffsberechtigungen des Ordners /media/com_biblestudy/css/site" +JBS_STYLE_FILENAME_NOT_UNIQUE="Dateiname muss eindeutig sein" +JBS_STYLE_RESTRICED_FILE_NAME="Die Datei kann nicht 'main' oder 'custom' benannt werden" + +;; SVR Server +JBS_SVR_MEDIA_SETTINGS="Medien Einstellungen" +JBS_SVR_SERVER_NAME="Server Name" +JBS_SVR_SERVER_NAME_DESC="Alias Name zur Beschreibung des Servers" + +;; TCH Teacher +COM_CONTACT_CHANGE_CONTACT_BUTTON="Wähle Benutzer" +COM_CONTACT_SELECT_A_CONTACT="Wähle Benutzer" +JBS_TCH_ABOVE="Über dem Knopf" +JBS_TCH_ADDRESS="Adresse" +JBS_TCH_ADDRESS_DESC="Gib die Adresse des Predigers ein" +JBS_TCH_ALLINONE="All links together";translate +JBS_TCH_ALLINONE_DESC="Show all email and web links together in one cell";translate +JBS_TCH_BELOW="Unter dem Knopf" +JBS_TCH_BLOG="Blog url" +JBS_TCH_BLOG_DESC="Gib den Link auf den Blog des Predigers ein" +JBS_TCH_CAN_NOT_DELETE="Prediger kann nicht entfernt werden, solange er noch in Predigten eingetragen ist." +JBS_TCH_EDIT_THIS_CONTACT="Bearbeite diesen Benutzer" +JBS_TCH_EMAIL="Email Adresse" +JBS_TCH_EMAIL_DESC="Gib die Email Adresse des Predigers ein" +JBS_TCH_FACEBOOK="FaceBook Seite" +JBS_TCH_FACEBOOK_DESC="Gib den Link auf die FaceBook Seite des Predigers ein" +JBS_TCH_INFO="Prediger Informationen" +JBS_TCH_INFORMATION="Zusätzliche Informationen" +JBS_TCH_LINK1="Link 1" +JBS_TCH_LINK1_DESC="Gib eine url für den Link 1 ein" +JBS_TCH_LINK2="Link 2" +JBS_TCH_LINK2_DESC="Gib eine url für den Link 2 ein" +JBS_TCH_LINK3="Link 3" +JBS_TCH_LINK3_DESC="Gib eine url für den Link 3 ein" +JBS_TCH_LINKS="Links" +JBS_TCH_LINK_LABEL1="Bezeichnung für Link 1" +JBS_TCH_LINK_LABEL1_DESC="Gib eine Bezeichnung für den Link 1 ein" +JBS_TCH_LINK_LABEL2="Bezeichnung für Link 2" +JBS_TCH_LINK_LABEL2_DESC="Gib eine Bezeichnung für den Link 2 ein" +JBS_TCH_LINK_LABEL3="Bezeichnung für Link 3" +JBS_TCH_LINK_LABEL3_DESC="Gib eine Bezeichnung für den Link 3 ein" +JBS_TCH_MORE_FROM_THIS_TEACHER="Mehr Predigten dieses Predigers" +JBS_TCH_OUR_TEACHERS="Unsere Prediger" +JBS_TCH_PHONE="Telefon" +JBS_TCH_RETURN_TEACHER_LIST="Zurück zur Predigerliste" +JBS_TCH_SELECT_CONTACT_DESC="Verwende einen Benutzer aus der Liste anstatt die Informationen hier einzugeben. Die Eingaben aus diesem Formular werden dann nicht verwendet." +JBS_TCH_SELECT_CONTACT_LABEL="Benutzer" +JBS_TCH_SHORT_DESCRIPTION_LIST_PAGE="Kurzbeschreibung für die Listenansicht" +JBS_TCH_SHORT_LIST="Description";translate +JBS_TCH_SHOW_LANDING_PAGE="Zeige die Landing-Page" +JBS_TCH_SHOW_LIST="Zeige die Liste der Prediger" +JBS_TCH_SHOW_LIST_VIEW="Zeige in der Listenansicht" +JBS_TCH_SHOW_LIST_VIEW_DESC="Zeige diesen Prediger in der Prediger-Listenansicht" +JBS_TCH_TEACHER_IMAGE="Prediger Bild" +JBS_TCH_TEACHER_IMAGE_LARGE="Großes Prediger Bild" +JBS_TCH_TITLE_DESC="Anrede oder akademische Titel" +JBS_TCH_TWITTER="Twitter Feed" +JBS_TCH_TWITTER_DESC="Gib den Link auf den Twitter Feed des Predigers ein" +JBS_TCH_WEBSITE="Internet-Seite" + +;; Title Block +JBS_TITLE_ADMINISTRATION="Joomla! Bibelstudien: Administration" +JBS_TITLE_COMMENTS="Joomla! Bibelstudien: Predigt Kommentare" +JBS_TITLE_COMMENT_CREATING="Joomla! Bibelstudien: Predigt Kommentar Neu" +JBS_TITLE_COMMENT_EDITING="Joomla! Bibelstudien: Predigt Kommentar Bearbeiten ID#%s" +JBS_TITLE_CONTROL_PANEL="Joomla! Bibelstudien: Kontrollzentrum" +JBS_TITLE_INSTALL="Joomla! Bibelstudien: %s for %s" +JBS_TITLE_LOCATIONS="Joomla! Bibelstudien: Veranstaltungsorte" +JBS_TITLE_LOCATIONS_CREATING="Joomla! Bibelstudien: Veranstaltungsort Neu" +JBS_TITLE_LOCATIONS_EDITING="Joomla! Bibelstudien: Veranstaltungsort Bearbeiten %s" +JBS_TITLE_MEDIA_FILES="Joomla! Bibelstudien: Mediendateien" +JBS_TITLE_MEDIA_FILES_CREATING="Joomla! Bibelstudien: Mediendatei Neu" +JBS_TITLE_MEDIA_FILES_EDITING="Joomla! Bibelstudien: Mediendatei Bearbeiten %s" +JBS_TITLE_MESSAGETYPES="Joomla! Bibelstudien: Predigttypen" +JBS_TITLE_MESSAGETYPES_CREATING="Joomla! Bibelstudien: Predigttyp Neu" +JBS_TITLE_MESSAGETYPES_EDITING="Joomla! Bibelstudien: Predigttyp Bearbeiten %s" +JBS_TITLE_PODCASTS="Joomla! Bibelstudien: Podcasts" +JBS_TITLE_PODCAST_CREATING="Joomla! Bibelstudien: Podcast Neu" +JBS_TITLE_PODCAST_EDITING="Joomla! Bibelstudien: Podcast Bearbeiten %s" +JBS_TITLE_SERIES="Joomla! Bibelstudien: Predigtreihen" +JBS_TITLE_SERIES_CREATING="Joomla! Bibelstudien: Predigtreihe Neu" +JBS_TITLE_SERIES_EDITING="Joomla! Bibelstudien: Predigtreihe Bearbeiten %s" +JBS_TITLE_SERVERS="Joomla! Bibelstudien: Server" +JBS_TITLE_SERVERS_CREATING="Joomla! Bibelstudien: Server Neu" +JBS_TITLE_SERVERS_EDITING="Joomla! Bibelstudien: Server Bearbeiten %s" +JBS_TITLE_SOCIAL_NETWORKING_LINKS="Joomla! Bibelstudien: Social Networking Links" +JBS_TITLE_SOCIAL_NETWORKING_LINKS_CREATING="Joomla! Bibelstudien: Social Networking Link Neu" +JBS_TITLE_SOCIAL_NETWORKING_LINKS_EDITING="Joomla! Bibelstudien: Social Networking Link Bearbeiten %s" +JBS_TITLE_STUDIES="Joomla! Bibelstudien: Predigten" +JBS_TITLE_STUDIES_CREATING="Joomla! Bibelstudien: Predigt Neu" +JBS_TITLE_STUDIES_EDITING="Joomla! Bibelstudien: Predigt Bearbeiten %s" +JBS_TITLE_STYLES="Joomla! Bibelstudien: CSS Formatierungen" +JBS_TITLE_STYLES_CREATING="Joomla! Bibelstudien: CSS Formatierung Neu" +JBS_TITLE_STYLES_EDITING="Joomla! Bibelstudien: CSS Formatierung Bearbeiten File: %s" +JBS_TITLE_TEACHERS="Joomla! Bibelstudien: Prediger" +JBS_TITLE_TEACHER_CREATING="Joomla! Bibelstudien: Prediger Neu" +JBS_TITLE_TEACHER_EDITING="Joomla! Bibelstudien: Prediger Bearbeiten %s" +JBS_TITLE_TEMPLATECODES="Joomla! Bibelstudien: Template Codes" +JBS_TITLE_TEMPLATECODES_CREATING="Joomla! Bibelstudien: Template Code Neu" +JBS_TITLE_TEMPLATECODES_EDITING="Joomla! Bibelstudien: Template Code Bearbeiten %s" +JBS_TITLE_TEMPLATES="Joomla! Bibelstudien: Templates" +JBS_TITLE_TEMPLATES_CREATING="Joomla! Bibelstudien: Template Neu" +JBS_TITLE_TEMPLATES_EDITING="Joomla! Bibelstudien: Template Bearbeiten %s" +JBS_TITLE_TOPICS="Joomla! Bibelstudien: Themen" +JBS_TITLE_TOPICS_CREATING="Joomla! Bibelstudien: Thema Neu" +JBS_TITLE_TOPICS_EDITING="Joomla! Bibelstudien: Thema Bearbeiten %s" +JBS_TITLE_UPLOAD_FORM="Joomla! Bibelstudien: Media File hochladen" + +;; Topic Items +JBS_TOP_ABORTION="Abtreibung" +JBS_TOP_ADDICTION="Sucht" +JBS_TOP_AFTERLIFE="Leben nach dem Tode" +JBS_TOP_APOLOGETICS="Apologetik" +JBS_TOP_BAPTISM="Taufe" +JBS_TOP_BASICS_OF_CHRISTIANITY="Christliche Grundlagen" +JBS_TOP_BECOMING_A_CHRISTIAN="Christ werden" +JBS_TOP_BIBLE="Bibel" +JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS="Vermischte Familienbeziehungen" +JBS_TOP_CHILDREN="Kinder" +JBS_TOP_CHRIST="Christus" +JBS_TOP_CHRISTIAN_CHARACTER_FRUITS="Christlicher Charakter/Früchte" +JBS_TOP_CHRISTIAN_VALUES="Christliche Werte" +JBS_TOP_CHRISTMAS_SEASON="Weihnachtszeit" +JBS_TOP_CHURCH="Kirche" +JBS_TOP_COMMUNICATION="Kommunikation" +JBS_TOP_COMMUNION___LORDS_SUPPER="Abendmahl" +JBS_TOP_CREATION="Schöpfung" +JBS_TOP_CULTS="Sekten" +JBS_TOP_DA_VINCI_CODE="Da Vinci Code" +JBS_TOP_DEATH="Tod" +JBS_TOP_DESCRIPTIONS_OF_GOD="Namen von Gott" +JBS_TOP_DISCIPLES="Jünger" +JBS_TOP_DISCIPLESHIP="Jüngerschaft" +JBS_TOP_DIVORCE="Scheidung" +JBS_TOP_EASTER_SEASON="Osterzeit" +JBS_TOP_EMOTIONS="Emotionen" +JBS_TOP_ENTERTAINMENT="Unterhaltung" +JBS_TOP_EVANGELISM="Evangelismus" +JBS_TOP_FAITH="Glaube" +JBS_TOP_FAMILY="Familie" +JBS_TOP_FORGIVING_OTHERS="Anderen vergeben" +JBS_TOP_FREEDOM="Freiheit" +JBS_TOP_FRIENDSHIP="Freundschaft" +JBS_TOP_FULFILLMENT_IN_LIFE="Erfülltes Leben" +JBS_TOP_FUND_RAISING_RALLY="Spendenveranstaltung" +JBS_TOP_FUNERALS="Beerdigungen" +JBS_TOP_GIVING="Geben" +JBS_TOP_GODS_ACTIVITY="Gottes Aktivitäten" +JBS_TOP_GODS_ATTRIBUTES="Gottes Eigenschaften" +JBS_TOP_GODS_FORGIVENESS="Gottes Vergebung" +JBS_TOP_GODS_LOVE="Gottes Liebe" +JBS_TOP_GODS_NATURE="Gottes Natur" +JBS_TOP_GODS_WILL="Gottes Wille" +JBS_TOP_HARDSHIP_OF_LIFE="Bedrängnis des Lebens" +JBS_TOP_HOLIDAYS="Feiertage" +JBS_TOP_HOLY_SPIRIT="Heiliger Geist" +JBS_TOP_HOT_TOPICS="Aktuelle Themen" +JBS_TOP_JESUS_BIRTH="Jesus Geburt" +JBS_TOP_JESUS_CROSS_FINAL_WEEK="Jesus Kreuz/Letzte Woche" +JBS_TOP_JESUS_DIVINITY="Jesus Göttlichkeit" +JBS_TOP_JESUS_HUMANITY="Jesus Menschlichkeit" +JBS_TOP_JESUS_LIFE="Jesus Leben" +JBS_TOP_JESUS_MIRACLES="Jesus Wunder" +JBS_TOP_JESUS_RESURRECTION="Jesus Auferstehung" +JBS_TOP_JESUS_TEACHING="Jesus Lehren" +JBS_TOP_KINGDOM_OF_GOD="Königreich von Gott" +JBS_TOP_LEADERSHIP_ESSENTIALS="Führungsgrundlagen" +JBS_TOP_LOVE="Liebe" +JBS_TOP_MARRIAGE="Ehe" +JBS_TOP_MEN="Männer" +JBS_TOP_MESSIANIC_PROPHECIES="messianische Verheißungen" +JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY="Falsche Vorstellungen des Christentums" +JBS_TOP_MONEY="Geld" +JBS_TOP_NARNIA="Narnia" +JBS_TOP_OUR_NEED_FOR_GOD="Unser Bedürfnis nach Gott" +JBS_TOP_PARABLES="Gleichnisse" +JBS_TOP_PARANORMAL="Übersinnlich" +JBS_TOP_PARENTING="Kindererziehung" +JBS_TOP_POVERTY="Armut" +JBS_TOP_PRAYER="Gebet" +JBS_TOP_PROMINENT_N_T__MEN="Bedeutende NT Männer" +JBS_TOP_PROMINENT_N_T__WOMEN="Bedeutende NT Frauen" +JBS_TOP_PROMINENT_O_T__MEN="Bedeutende AT Männer" +JBS_TOP_PROMINENT_O_T__WOMEN="Bedeutende AT Frauen" +JBS_TOP_RACISM="Rassismus" +JBS_TOP_SECOND_COMING="Wiederkunft" +JBS_TOP_SEXUALITY="Sexualität" +JBS_TOP_SIN="Sünde" +JBS_TOP_SINGLENESS="Ehelosigkeit" +JBS_TOP_SMALL_GROUPS="Kleingruppen" +JBS_TOP_SPECIAL_SERVICES="Spezielle Dienste" +JBS_TOP_SPIRITUAL_DISCIPLINES="Geistliche Richtungen" +JBS_TOP_SPIRITUAL_GIFTS="Geistliche Gaben" +JBS_TOP_STEWARDSHIP="Verwaltung" +JBS_TOP_SUPERNATURAL="Übernatürlich" +JBS_TOP_TEMPTATION="Versuchung" +JBS_TOP_TEN_COMMANDMENTS="Zehn Gebote" +JBS_TOP_TRUTH="Wahrheit" +JBS_TOP_TWELVE_APOSTLES="Zwölf Apostel" +JBS_TOP_WEDDINGS="Hochzeiten" +JBS_TOP_WOMEN="Frauen" +JBS_TOP_WORKPLACE_ISSUES="Arbeitsplatzangelegenheiten" +JBS_TOP_WORLD_RELIGIONS="Weltreligionen" +JBS_TOP_WORSHIP="Lobpreis" + +;; TPC Topics Manager +JBS_TPC_TOPIC_ALIAS="Alias des Themas" +JBS_TPC_TOPIC_ALIAS_DESC="Alias des Themas wird als Referenz in der Datenbank verwendet und muss eindeutig sein. Es kann automatisch generiert oder hier eingegeben werden. Format: 'JBS_TOP_topic'; topic erlaubt nur Großbuchstaben ohne Umlaute; Leerzeichen ect. müssen durch '_' ersetzt werden.
      Der zugehörige Klartext muss zusätzlich in die Sprachdatei eingetragen werden." + +;; TPL Templates +;JBS_TPL_ITEMSLIMIT="Anzahl Predigten auf einer Seite" +JBS_SERIES_LIST_THUMBNAIL="Series Thumbnail";translate +JBS_SERIES_LIST_THUMBNAIL_DESC="Choose whether to use the series thumbnail image";translate +JBS_TPL_ALL_PLUGINS="Benutze alle Plugins" +JBS_TPL_APPROVAL_BACKEND="Freischaltung im Backend" +JBS_TPL_BLOCKQUOTE="Block Quote" ; translate +JBS_TPL_BOTH_COMMENTS="Sowohl JComments als auch Bibelstudien Kommentare" +JBS_TPL_BUTTON_LABEL="Knopf und Link" +JBS_TPL_BUTTON_ONLY="Nur Knopf" +JBS_TPL_CAPTCHA_PRIVATE_KEY="Privater Schlüssel von reCaptcha" +JBS_TPL_CAPTCHA_PRIVATE_KEY_DESC="Die privaten und öffentlichen Schlüssel sind nach der Registrierung unter https://www.google.com/recaptcha/admin/create erhältlich. Bitte hier den privaten Schlüssel eingeben." +JBS_TPL_CAPTCHA_PUBLIC_KEY="Öffentlicher Schlüssel von reCaptcha" +JBS_TPL_CAPTCHA_PUBLIC_KEY_DESC="Die privaten und öffentlichen Schlüssel sind nach der Registrierung unter https://www.google.com/recaptcha/admin/create erhältlich. Bitte hier den öffentlichen Schlüssel eingeben." +JBS_TPL_CAPTCHA_USE="Benutze reCaptcha" +JBS_TPL_CHOOSE_BIBLE_VERSION="Wähle die Bibel-Übersetzung" +JBS_TPL_CHOOSE_BIBLE_VERSION_DESC="Diese Bibel-Übersetzung wird zur Anzeige der Textstelle verwendet" +JBS_TPL_COLSPAN="Width" ; translate +JBS_TPL_COLSPAN_DESC="How wide should the item be. Taking up the entire row would be 12. Taking up 1/12 would be 1 and so forth. Follows Bootstrap 12 column grid" ; translate +JBS_TPL_COLUMN="Order" ; translate +JBS_TPL_COLUMN_DESC="Choose what order to show this item in its row" ; translate +JBS_TPL_COMMENT_TYPE="Kommentar-Type" +JBS_TPL_COMMENT_TYPE_DESC="Wähle die Methode der Kommentare, falls Kommentare erlaubt sind. Bibelstudien Kommentare nutzt die bisherige interne Funktion. JComments ist eine externe Komponente. Es können auch beide verwendet werden." +JBS_TPL_CUSTOM="Custom" ; translate +JBS_TPL_CUSTOMCLASS="Custom Class" ; translate +JBS_TPL_CUSTOMCLASS_DESC="If you put in style= you can put in any styling for the element. Or you can add a valid existing class" ; translate +JBS_TPL_CUSTOM_TEXT="Custom Code" ; translate +JBS_TPL_CUSTOM_TEXT_DESC="Place custom code here. Surround elements with single braces. Codes are: scripture1, scripture2, secondary, duration, title, studyintro, studynumber, teacher, teacher-title-image, series_text, series_thumbnail, series_description, submitted, teacherimage, teachername, jbsmedia, studytitle, thumbnail, topics, messagetype, location_text, date, hits" ; translate +JBS_TPL_CUSTOM_VIEW="Benutzerdefiniertes Layout" +JBS_TPL_CUSTOM_VIEW_DESC="Soll dieses Layout für die Ansicht benutzt werden?" +JBS_TPL_CUSTOM_VIEW_TEACHERDETAIL="Benutzerdefiniertes Layout für die Prediger-Einzelansicht" +JBS_TPL_CUSTOM_VIEW_TEACHERLIST="Benutzerdefiniertes Layout für die Prediger-Listenansicht" +JBS_TPL_DATE_BRACE="Datum {date}" +JBS_TPL_DATE_FORMAT_D_MMMM_YYYY="1 September 2010" +JBS_TPL_DATE_FORMAT_D_M_YYYY="1/9/2010" +JBS_TPL_DATE_FORMAT_MMMM_D_YYYY="September 1, 2010" +JBS_TPL_DATE_FORMAT_MMM_D="Sep 1" +JBS_TPL_DATE_FORMAT_MMM_D_YYYY="Sep 1, 2010" +JBS_TPL_DATE_FORMAT_M_D="9/1" +JBS_TPL_DATE_FORMAT_M_D_YYYY="9/1/2010" +JBS_TPL_DATE_FORMAT_USE_GLOBAL="Benutze globales System-Datumformat" +JBS_TPL_DATE_FORMAT_WD_MMMM_D_YYYY="Saturday, September 1, 2010" +JBS_TPL_DATE_FORMAT_YYYY_MM_DD="2010/09/01" +JBS_TPL_DETAILS_BODY="Inhalt der Email" +JBS_TPL_DETAILS_COMMENT_ACCESS="Zugriffsberechtigung für Kommentare einreichen" +JBS_TPL_DETAILS_COMMENT_ACCESS_DESC="Welcher Benutzer-Status ist erforderlich für das Einreichen von Kommentaren" +JBS_TPL_DETAILS_COMMENT_PUBLISH="Kommentare freigeben" +JBS_TPL_DETAILS_COMMENT_PUBLISH_DESC="Sollen die Eingaben automatisch freigegeben werden oder müssen sie erst durch die Admins im Backend bestätigt werden?" +JBS_TPL_DETAILS_EMAIL_COMMENTS="Email senden beim Einreichen von Kommentaren" +JBS_TPL_DETAILS_EMAIL_COMMENTS_DESC="Soll für jede Kommentareingabe eine Email versandt werden?" +JBS_TPL_DETAILS_LINK_COMMENTS="Link auf Kommentare" +JBS_TPL_DETAILS_LINK_COMMENTS_DESC="Soll ein Link zum Zeigen oder Verbergen der Kommentare angezeigt werden, oder sollen die Kommentare immer angezeigt werden?" +JBS_TPL_DETAILS_LINK_IMAGE="Icon für Link auf Details" +JBS_TPL_DETAILS_LINK_IMAGE_DESC="Zeige dieses Icon als Link zu den Details einer Predigt. Links können ausgewählt werden in den Templateeinstellungen zur Predigt-Listenansicht und Predigt-Einzelansicht." +JBS_TPL_DETAILS_LINK_TEXT="Text in der Fußzeile als Link zurück zur Listenansicht" +JBS_TPL_DETAILS_LINK_TEXT_DESC="Text in der Fußzeile der Predigt-Einzelansicht. Ist gleichzeitig der Link zurück zur Predigt-Listenansicht." +JBS_TPL_DETAILS_PDF="Details PDF" +JBS_TPL_DETAILS_RECIPIENT="An Emailadresse" +JBS_TPL_DETAILS_RECIPIENT_DESC="Email Adresse zur Benachrichtigung. Mehrere Adressen mit Komma trennen. Bei leerem Feld wird die System Standard Email Adresse verwendet." +JBS_TPL_DETAILS_SHOW_COMMENTS="Zugriffsberechtigung für Kommentare anzeigen" +JBS_TPL_DETAILS_SHOW_COMMENTS_DESC="Welcher Benutzer-Status ist erforderlich für die Anzeige von Kommentaren?" +JBS_TPL_DETAILS_SHOW_PASSAGE_VIEW="Anzeige der Bibel-Textstelle" +JBS_TPL_DETAILS_SHOW_PASSAGE_VIEW_DESC="Zeige die Bibel-Textstelle zu dieser Predigt. Wähle die Bibel-Übersetzuzng und den Anzeigemodus. Benutzt BibleGateway.com al Quelle. In einem benutzerdefiniertes Template trage '$this->passage' ein." +JBS_TPL_DETAILS_SHOW_PRINT_VIEW="Zeige / verberge das Icon 'Drucken'" +JBS_TPL_DETAILS_SHOW_SCRIPTURE_LINK="Benutze Plugins" +JBS_TPL_DETAILS_SHOW_SCRIPTURE_LINK_DESC="Sollen inhaltspezifische Plugins auf den Predigttext angewandt werden? Z.B. kann das 'Scripture Links Content Plugin' auf alle Referenzen im Predigttext angewandt werden." +JBS_TPL_DETAILS_STUDY_DETAILTEMPLATE="Code für die Ansicht" +JBS_TPL_DETAILS_SUBJECT="Betreff" +JBS_TPL_DETAILS_TEMPLATECODE_DESC="Benutze normalen HTML Code für das Layout.

      Codes:

      {{title}} - Predigt Titel
      {{teacher}} - Prediger Name
      {{date}} - Datum
      {{studyintro}} - Einleitungstext
      {{scripture}} - Bibelbuchstelle
      {{topics}} - Themen
      {{mediatime}} - Zeit
      {{thumbnail}} - Bild
      {{seriestext}} - Predigtreihe
      {{bookname}} - Bibelbuch
      {{studytext}} - Predigttext
      {{scripturelink}} - Link auf Bibelstelle
      {{media}} - Medien (Tabelle)
      {{share}} - Social Networking Links
      {{hits}} - Treffer
      {{location}} - Veranstaltungsort
      {{messagetype}} - Predigttyp" +JBS_TPL_DETAILS_TEXT_BRACE="Details Text {details-text}" +JBS_TPL_DETAILS_TEXT_PDF="Details Text + PDF" +JBS_TPL_DETAILS_USE_CAPTCHA="Benutze reCaptcha plugin für Kommentare" +JBS_TPL_DETAILS_USE_CAPTCHA_DESC="Soll ein Captcha (Bild mit verzerrtem Text) benutzt werden, wenn Benutzer einen Kommentar eingeben? Die Verwendung von reCaptcha muss auf https://www.google.com/recaptcha/admin/create registriert werden." +JBS_TPL_DETAILS_VIEW="Predigt-Einzelansicht" +JBS_TPL_DISPLAY_ITEMS1="Display Items List 1" ; translate +JBS_TPL_DISPLAY_ITEMS2="Display Items List 2" ; translate +JBS_TPL_DISPLAY_ITEMS3="Display Items List 3" ; translate +JBS_TPL_DISPLAY_ITEMS4="Display Items List 4" ; translate +JBS_TPL_DISPLAY_ITEMS5="Display Items List 5" ; translate +JBS_TPL_DISPLAY_ITEMS6="Display Items List 6" ; translate +JBS_TPL_DIV="DIV" +JBS_TPL_DURATION_BRACE="Dauer {duration}" +JBS_TPL_ELEMENT="HTML Element" ; translate +JBS_TPL_ELEMENT_DESC="Choose the type of element to use such as Paragraph or Header" ; translate +JBS_TPL_EMAIL_SENT="Email senden" +JBS_TPL_EXPORT_SUCCESS="Template erfolgreich exportiert, beachte evtl. vorhandene Fehlermeldungen" +JBS_TPL_FILESIZE_BRACE="Dateigröße der ersten mp3 Datei {filesize}" +JBS_TPL_FILTERS="Filter" +JBS_TPL_FILTERS_DEFAULTORDER="Standard Datum aufsteigend/absteigend" +JBS_TPL_FILTERS_DEFAULTORDER_DESC="Predigten mit aufsteigendem oder absteigendem Datum sortieren?" +JBS_TPL_FP_IMAGES_TOOLTIP="Zeige / verberge Kurzinfo (Tooltip)" +JBS_TPL_FP_IMAGES_TOOLTIP_DESC="Zeige / verberge Kurzinfo (Tooltip) mit Predigtdetails, wenn die Maus über den Link 'Predigtdetails' steht" +JBS_TPL_FP_SHOW_PAGE_IMAGE="Zeige / verberge Bild in der Titelzeile" +JBS_TPL_HEADER1="Header 1" ; translate +JBS_TPL_HEADER2="Header 2" ; translate +JBS_TPL_HEADER3="Header 3" ; translate +JBS_TPL_HEADER4="Header 4" ; translate +JBS_TPL_HEADER5="Header 5" ; translate +JBS_TPL_HEADERCODE="Code für Kopfbereich" +JBS_TPL_HEADERCODE_DESC="Benutze normalen HTML Code für den Kopfbereich." +JBS_TPL_HIDE_LINK="Verberge Link" +JBS_TPL_HIDE_STUDY="Keine Predigten" +JBS_TPL_HITS_BRACE="Treffer {hits}" +JBS_TPL_HOURS_MIN_SEC_COLON="H:M:S" +JBS_TPL_HOURS_MIN_SEC_SLASH="H/M/S" +JBS_TPL_IMPORT_EXPORT_TEMPLATE="Importiere/Exportiere Template" +JBS_TPL_IMPORT_SUCCESS="Template Import abgeschlossen, beachte evtl. vorhandene Fehlermeldungen" +JBS_TPL_JBS_COMMENTS="Bibelstudien Kommentare" +JBS_TPL_JCOMMENTS="JComments - muss installiert sein" +JBS_TPL_LABEL_ONLY="Nur Link" +JBS_TPL_LANDINGPAGE_BOOKSLABEL="Bücher Überschrift" +JBS_TPL_LANDINGPAGE_HEADINGORDER_1="Rubrik 1" +JBS_TPL_LANDINGPAGE_HEADINGORDER_2="Rubrik 2" +JBS_TPL_LANDINGPAGE_HEADINGORDER_3="Rubrik 3" +JBS_TPL_LANDINGPAGE_HEADINGORDER_4="Rubrik 4" +JBS_TPL_LANDINGPAGE_HEADINGORDER_5="Rubrik 5" +JBS_TPL_LANDINGPAGE_HEADINGORDER_6="Rubrik 6" +JBS_TPL_LANDINGPAGE_HEADINGORDER_7="Rubrik 7" +JBS_TPL_LANDINGPAGE_HEADINGORDER_DESC="Bestimme die Reihenfolge der Einträge in der Landing-Page. Ob der Eintrag gezeigt wird oder nicht, wird weiter unten festgelegt." +JBS_TPL_LANDINGPAGE_LANDINGBOOKSLIMIT="# Bücher" +JBS_TPL_LANDINGPAGE_LANDINGLOCATIONSLIMIT="# Veranstaltungsorte" +JBS_TPL_LANDINGPAGE_LANDINGMESSAGETYPESLIMIT="# Predigttypen" +JBS_TPL_LANDINGPAGE_LANDINGSERIESLIMIT="# Predigtreihen" +JBS_TPL_LANDINGPAGE_LANDINGTEACHERSLIMIT="# Prediger" +JBS_TPL_LANDINGPAGE_LANDINGTOPICSLIMIT="# Themen" +JBS_TPL_LANDINGPAGE_LANDINGYEARSLIMIT="# Jahre" +JBS_TPL_LANDINGPAGE_LANDING_HIDE="Wähle Art des zeige / verberge Elements" +JBS_TPL_LANDINGPAGE_LANDING_HIDELABEL="Text für den 'zeige / verberge Link'" +JBS_TPL_LANDINGPAGE_LANDING_HIDELABEL_DESC="Wenn ein Link angezeigt werden soll, gib den Text für den Link hier an" +JBS_TPL_LANDINGPAGE_LANDING_HIDE_DESC="Wähle, ob ein Knopf, ein Link oder beides angezeigt werden soll, wenn die Anzahl der Elemente größer ist als das jeweilige Limit der Rubrik." +JBS_TPL_LANDINGPAGE_LANDING_LIMIT_DESC="Anzahl der Einträge; wenn mehr Einträge vorhanden sind, wird zusätzlich ein Link 'Zeige/verberge alles' angezeigt. Leerlassen zeigt alle an." +JBS_TPL_LANDINGPAGE_LINKTO="Link zur Anzeige" +JBS_TPL_LANDINGPAGE_LOCATIONSLABEL="Veranstaltungsorte Überschrift" +JBS_TPL_LANDINGPAGE_MESSAGETYPESLABEL="Predigttypen Überschrift" +JBS_TPL_LANDINGPAGE_SERIESLABEL="Predigtreihen Überschrift" +JBS_TPL_LANDINGPAGE_SHOWBOOKS="Zeige Bibelbücher" +JBS_TPL_LANDINGPAGE_SHOWLOCATIONS="Zeige Veranstaltungsorte" +JBS_TPL_LANDINGPAGE_SHOWMESSAGETYPES="Zeige Predigttypen" +JBS_TPL_LANDINGPAGE_SHOWSERIES="Zeige Predigtreihen" +JBS_TPL_LANDINGPAGE_SHOWTEACHERS="Zeige Prediger" +JBS_TPL_LANDINGPAGE_SHOWTOPICS="Zeige Themen" +JBS_TPL_LANDINGPAGE_SHOWYEARS="Zeige Jahre" +JBS_TPL_LANDINGPAGE_TEACHERSLABEL="Prediger Überschrift" +JBS_TPL_LANDINGPAGE_TOPICSLABEL="Themen Überschrift" +JBS_TPL_LANDINGPAGE_YEARSLABEL="Jahr Überschrift" +JBS_TPL_LANDING_PAGE="Landing-Page" +JBS_TPL_LIGHTBOX="Lightbox" +JBS_TPL_LINK_SERIES_DETAILS="Link zu Predigtreihen-Einzelansicht" +JBS_TPL_LINK_STUDIES_LIST="Link zur Predigt-Listenansicht" +JBS_TPL_LINK_TEACHER_DETAILS="Link zur Prediger-Einzelansicht" +JBS_TPL_LINK_TO_DETAILS="Link zu den Details" +JBS_TPL_LINK_TO_DETAILS_TOOLTIP="Link zu den Details mit Kurzinfo (ToolTip)" +JBS_TPL_LINK_TO_DOCMAN="Link zum ersten DocMan Eintrag" +JBS_TPL_LINK_TO_DOWNLOAD="Link zum Herunterladen einer Mediendatei" +JBS_TPL_LINK_TO_FIRST_ARTICLE="Link zum ersten Artikel Eintrag" +JBS_TPL_LINK_TO_MEDIA="Link zur ersten Mediendatei" +JBS_TPL_LINK_TO_MEDIA_TOOLTIP="Link zur ersten Mediendatei mit Kurzinfo (ToolTip)" +JBS_TPL_LINK_TO_TEACHERS_PROFILE="Link zum Prediger" +JBS_TPL_LINK_TO_VIRTUEMART="Link zum ersten VirtueMart Eintrag" +JBS_TPL_LISTCOLOR1="Table Background Color 1" ; translate +JBS_TPL_LISTCOLOR2="Table Background Color 2" ; translate +JBS_TPL_LISTCOLOR_DESC="These colors are for alternating background colors on the list of studies. Enter nothing for no striping. Can be either a name like grey or a hex value like #EEEEEE" ; translate +JBS_TPL_LISTITEMS_BOOKLIST="Bücher anzeigen" +JBS_TPL_LISTITEMS_BOOKLIST_DESC="Zeige alle Bibelbücher im Dropdown Menü als Filter aufgeführt werden oder nur Bibelbücher, über die eine Predigt existiert?" +JBS_TPL_LISTITEMS_DETAILS_TEXT="Alternativer Text für Details" +JBS_TPL_LISTITEMS_DETAILS_TEXT_DESC="Alternativen Text statt Kurzinfo (Tooltip) anzeigen, wenn man mit der Maus über das Bild für den Link auf die Einzelansicht zieht" +JBS_TPL_LISTITEMS_INTRO_SHOW="Zeige / verberge Einführungstext" +JBS_TPL_LISTITEMS_INTRO_SHOW_DESC="Einführungstext der Predigt-Listenansicht neben oder unter den Predigern anzeigen oder ganz verbergen?" +JBS_TPL_LISTITEMS_LISTTEACHERS="Prediger Ids für die Predigt-Listenansicht" +JBS_TPL_LISTITEMS_LISTTEACHERS_DESC="Liste der Prediger IDs (mit Komma getrennt), die im Kopf der Predigt-Listenansicht angezeigt wird" +JBS_TPL_LISTITEMS_LIST_INTRO="Einleitungstext" +JBS_TPL_LISTITEMS_LIST_TEACHER_SHOW="Zeige / verberge Prediger" +JBS_TPL_LISTITEMS_LIST_TEACHER_SHOW_DESC="Sollen Prediger im Kopf der Predigt-Listenansicht angezeigt werden? Auswahl der Prediger im nächsten Eintrag." +JBS_TPL_LISTITEMS_SHOW_BOOK_SEARCH="Zeige / verberge 'Filter nach Buch'" +JBS_TPL_LISTITEMS_SHOW_BOOK_SEARCH_DESC="Zeige / verberge Dropdown Menü für Bücher" +JBS_TPL_LISTITEMS_SHOW_BOTTOM="Unter der Liste" +JBS_TPL_LISTITEMS_SHOW_LOCATIONS_SEARCH="Zeige / verberge 'Filter nach Veranstaltungsorten'" +JBS_TPL_LISTITEMS_SHOW_LOCATIONS_SEARCH_DESC="Zeige / verberge Dropdown Menü für Veranstaltungsorte" +JBS_TPL_LISTITEMS_SHOW_ORDER_SEARCH="Zeige / verberge aufsteigend / absteigendes Datum" +JBS_TPL_LISTITEMS_SHOW_ORDER_SEARCH_DESC="Zeige / verberge Dropdown Menü für aufsteigende / absteigende Sortierung nach Datum" +JBS_TPL_LISTITEMS_SHOW_PAGE_TITLE="Zeige / verberge Titelzeile der Seite" +JBS_TPL_LISTITEMS_SHOW_PAGINATION="Seitenzahlen" +JBS_TPL_LISTITEMS_SHOW_PAGINATION_DESC="Soll das Auswahlmenü für die Anzahl der Ergebnisse über oder unter der Liste angezeigt werden?" +JBS_TPL_LISTITEMS_SHOW_POPULAR="Zeige / verberge Link auf beliebteste Predigten" +JBS_TPL_LISTITEMS_SHOW_POPULAR_DESC="Zeige / verberge Dropdown Menü mit Links auf die beliebtesten Predigten. Limit wird im Administrations-Menü gesetzt." +JBS_TPL_LISTITEMS_SHOW_SERIES_SEARCH="Zeige / verberge 'Filter nach Predigtreihen'" +JBS_TPL_LISTITEMS_SHOW_SERIES_SEARCH_DESC="Zeige / verberge Dropdown Menü für Predigtreihen" +JBS_TPL_LISTITEMS_SHOW_TEACHER_SEARCH="Zeige / verberge 'Filter nach Prediger'" +JBS_TPL_LISTITEMS_SHOW_TEACHER_SEARCH_DESC="Zeige / verberge Dropdown Menü für Prediger" +JBS_TPL_LISTITEMS_SHOW_TOP="Über der Liste" +JBS_TPL_LISTITEMS_SHOW_TOPIC_SEARCH="Zeige / verberge 'Filter nach Thema'" +JBS_TPL_LISTITEMS_SHOW_TOPIC_SEARCH_DESC="Zeige / verberge Dropdown Menü für Themen" +JBS_TPL_LISTITEMS_SHOW_TYPE_SEARCH="Zeige / verberge 'Filter nach Predigttyp'" +JBS_TPL_LISTITEMS_SHOW_TYPE_SEARCH_DESC="Zeige / verberge Dropdown Menü für Predigttypen" +JBS_TPL_LISTITEMS_SHOW_YEAR_SEARCH="Zeige / verberge 'Filter nach Jahr'" +JBS_TPL_LISTITEMS_SHOW_YEAR_SEARCH_DESC="Zeige / verberge Dropdown Menü für Jahr" +JBS_TPL_LISTITEMS_TEACHERLINK="Zeige Link zur Prediger-Einzelansicht" +JBS_TPL_LISTITEMS_TEACHERLINK_DESC="Erstellt einen Link aus dem Predigernamen zu seiner Einzelansicht" +JBS_TPL_LISTITEMS_USE_GO_BUTTON="Benutze den 'Filter'-Knopf" +JBS_TPL_LISTITEMS_USE_GO_BUTTON_DESC="Benutze den 'Filter'-Knopf zum Aktivieren der Filterkriterien oder das JavaScript" +JBS_TPL_LISTITEMS_USE_HEADERS_LIST="Tabellenkopf der Predigt-Listenansicht" +JBS_TPL_LISTITEMS_USE_HEADERS_LIST_DESC="Soll ein Tabellenkopf über der Tabelle der Predigten angezeigt werden?" +JBS_TPL_LIST_ITEMS="Predigt-Listenansicht" +JBS_TPL_LOCATION_BRACE="Veranstaltungsort {location text}" +JBS_TPL_MEDIA_BACKCOLOR="Popup Hintergundfarbe" +JBS_TPL_MEDIA_BACKCOLOR_DESC="Benutze Hex-Codes z.B. 0x287585" +JBS_TPL_MEDIA_BRACE="Medium {media}" +JBS_TPL_MEDIA_DOWNLOADS="Medium downloads (Gesamtzahl für diese Predigt)" +JBS_TPL_MEDIA_EMBEDSHARE="Verknüpfe Social Networks im Medien Player" +JBS_TPL_MEDIA_EMBEDSHARE_DESC="Zeigt ein Menü im internen Medien Player an, das sharing und embedding des Mediums mit Social Networks erlaubt" +JBS_TPL_MEDIA_FRONTCOLOR="Popup Vordergrundfarbe" +JBS_TPL_MEDIA_FRONTCOLOR_DESC="Benutze Hex-Codes z.B. 0xFFFFFF" +JBS_TPL_MEDIA_INTERNAL_POPUP="Interner Player oder direkter Link als Popup" +JBS_TPL_MEDIA_INTERNAL_POPUP_DESC="Soll der interne Player oder direkte Link als Popup oder Inline (interner Player) oder neues Fenster (direkter Link) angezeigt werden?" +JBS_TPL_MEDIA_LIGHTCOLOR="Popup Helle Farbe" +JBS_TPL_MEDIA_LIGHTCOLOR_DESC="Benutze Hex-Codes z.B. 0x000000" +JBS_TPL_MEDIA_MEDIA_PLAYER="Standard Player für alle Medien" +JBS_TPL_MEDIA_MEDIA_PLAYER_DESC="Wähle den Standard Medienplayer für alle Medien. Kann für jedes einzelne Medium überschrieben werden." +JBS_TPL_MEDIA_PLAYERIDLEHIDE="Inaktiven Player verbergen" +JBS_TPL_MEDIA_PLAYERIDLEHIDE_DESC="PLayer verbergen, wenn nichts abgespielt wird" +JBS_TPL_MEDIA_PLAYERPOSITION="Player Position" +JBS_TPL_MEDIA_PLAYERPOSITION_DESC="Position des Fortschrittsbalkens" +JBS_TPL_MEDIA_PLAYER_HEIGHT="Höhe des internen Medien Players" +JBS_TPL_MEDIA_PLAYER_HEIGHT_DESC="Höhe in Pixel für den internen Audio/Video Player. Kann bei der Mediendatei überschrieben werden. Tipp: 23 Pixel ist ein guter Wert für Audiodateien." +JBS_TPL_MEDIA_PLAYER_WIDTH="Breite des internen Medien Players" +JBS_TPL_MEDIA_PLAYER_WIDTH_DESC="Breite in Pixel des internen Audio/Video Players. Kann bei der Mediendatei überschrieben werden." +JBS_TPL_MEDIA_PLAYS="Medium abgespielt (Gesamtzahl für diese Predigt)" +JBS_TPL_MEDIA_POPUPBACKGROUND="Hintergrundfarbe des Popup Fensters" +JBS_TPL_MEDIA_POPUPBACKGROUND_DESC="Setze die Hintergrundfarbe des Popup Fensters." +JBS_TPL_MEDIA_POPUPIMAGE="Pfad auf das Bild für Popup" +JBS_TPL_MEDIA_POPUPIMAGE_DESC="Setze den Pfad und Dateinamen auf das Bild für ein Popup Fenster, in dem Audio abgespielt wird" +JBS_TPL_MEDIA_POPUPMARGIN_DESC="Setze den Abstand zwischen Popup und Kopzeile bzw. Fußzeile." +JBS_TPL_MEDIA_POPUPTITLE_FOOTER_DESC="Benutze Text und/oder Codes.

      Codes:
      {{scripture}} - Bibelbuchstelle
      {{title}} - Predigt Titel
      {{studydate}} - Datum
      {{teacher}} - Prediger Name
      {{filename}} - Medium Dateiname
      {{description}} - Beschreibung
      {{length}} - Länge" +JBS_TPL_MEDIA_POPUPTYPE="Fenster oder Lightbox (inline) für AllVideos Reloaded Player" +JBS_TPL_MEDIA_POPUPTYPE_DESC="Zeige den Player AllVideos Reloaded, wenn er installiert ist, in einem neuen Fenster oder als Lightbox Effekt an" +JBS_TPL_MEDIA_PROTOCOL="Internet Protokoll" +JBS_TPL_MEDIA_PROTOCOL_DESC="http:// ist Standard. Andere Protokolle sind möglich wie ftp:// sftp:// https://. Wird dem Medienpfad und -dateinamen vorangestellt." +JBS_TPL_MEDIA_SCREENCOLOR="Farbe der Oberfläche" +JBS_TPL_MEDIA_SCREENCOLOR_DESC="Benutze Hex-Codes z.B. 0x000000" +JBS_TPL_MEDIA_SHOW_FILESIZE="Text für das Medium" +JBS_TPL_MEDIA_SHOW_FILESIZE_DESC="Wähle einen Text unter der Mediendatei" +JBS_TPL_MESSAGETYPE_BRACE="Predigttyp {message type}" +JBS_TPL_NO_APPROVAL="Keine Bestätigung notwendig" +JBS_TPL_NO_CAPTCHA="Kein Captcha" +JBS_TPL_NO_EMAIL="Keine Email bei Kommentareingaben" +JBS_TPL_NO_FILE_SELECTED="Keine Datei ausgewählt" +JBS_TPL_NO_HEADER_ROW="Kein Tabellenkopf" +JBS_TPL_NO_ITEM="None" ; translate +JBS_TPL_NO_LINK="Kein Link" +JBS_TPL_NO_PLUGINS="Keine Plugins" +JBS_TPL_NO_SHARE="Kein Share Menü" +JBS_TPL_ORDER_BOOK="Books Dropdown Order" ; translate +JBS_TPL_ORDER_DESC="Choose an order for this item to appear in the drop down lists on the study list view. If hidden it will not show." ; translate +JBS_TPL_ORDER_GO="Go Button Dropdown Order" ; translate +JBS_TPL_ORDER_LANGUAGE="Language Drop Down Order" ; translate +JBS_TPL_ORDER_LOCATIONS="Locations Dropdown Order" ; translate +JBS_TPL_ORDER_MESSAGETYPE="Message Type Dropdown Order" ; translate +JBS_TPL_ORDER_ORDER="Order Dropdown Order" ; translate +JBS_TPL_ORDER_POPULAR="Popular Studies Dropdown Order" ; translate +JBS_TPL_ORDER_SERIES="Series Dropdown Order" ; translate +JBS_TPL_ORDER_TEACHER="Teachers Dropdown Order" ; translate +JBS_TPL_ORDER_TOPICS="Topics Dropdown Order" ; translate +JBS_TPL_ORDER_YEARS="Years Dropdown Order" ; translate +JBS_TPL_PAGE_TITLE="Text für die Kopfzeile" +JBS_TPL_PARAGRAPH="Paragraph" ; translate +JBS_TPL_PODCAST_SHOW="Podcast Abonnement Links" +JBS_TPL_PODCAST_SHOW_DESC="Wo soll eine Tabelle mit Links zum Abonnieren der Podcasts angezeigt werden? In benutzerdefinierten Templates wird stattdessen '$this->subscribe' benutzt" +JBS_TPL_PULLLEFT="Pull Left" ; translate +JBS_TPL_PULLRIGHT="Pull Right" ; translate +JBS_TPL_RELATED_BOTTOM="Zeige in der Fußzeile" +JBS_TPL_RELATED_TOP="Zeige in der Kopfzeile" +JBS_TPL_ROW1="Zeile 1" +JBS_TPL_ROW2="Zeile 2" +JBS_TPL_ROW3="Zeile 3" +JBS_TPL_ROW4="Zeile 4" +JBS_TPL_ROW5="Zeile 5" +JBS_TPL_ROW6="Zeile 6" +JBS_TPL_SCRIPTURE1_BRACE="Bibelstelle {scripture1}" +JBS_TPL_SCRIPTURE2_BRACE="Bibelstelle 2 {scripture2}" +JBS_TPL_SECONDARY_REFERENCES_BRACE="Sekundäre Referenzen {secondary}" +JBS_TPL_SELECT_TMPL_TYPE="- Wähle Template Typ -" +JBS_TPL_SERIESDETAILS="Predigtreihen-Einzelansicht" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_LIMIT="Anzahl Predigten auf einer Seite" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_LIMIT_DESC="Wähle eine Anzahl von Predigten zum Anzeigen in der Liste. Leerlassen zeigt alle an. Es gibt einen Link zum Rest der Predigten wenn ein Limit gesetzt ist." +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_ORDER="Aufsteigend / absteigend" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_ORDER_DESC="Predigten in aufsteigender oder absteigender Reihenfolge sortieren?" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_SORT="Predigt Sortierspalte" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_SORT_DESC="Wähle ein Predigtelement, um die Predigt Liste innerhalb der Predigtreihe zu sortieren" +JBS_TPL_SERIESDETAIL_SERIES_LIST_RETURN="Zeige / verberge Links auf Predigtreihen-Listenansicht und Predigten dieser Reihe" +JBS_TPL_SERIESDETAIL_SERIES_LIST_RETURN_DESC="Zeige / verberge Links in der Fußzeile zurück zur Predigtreihen-Listenansicht und auf alle Predigten aus dieser Predigtreihe?" +JBS_TPL_SERIESLIST="Series List" +JBS_TPL_SERIES_BRACE="Predigtreihen {series_text}" +JBS_TPL_SERIES_DESCRIPTION_BRACE="Predigtreihe Beschreibung {series_description}" +JBS_TPL_SERIES_LIST_TEMPLATE="Template Datei für Predigtreihen-Listenansicht" +JBS_TPL_SERIES_SEARCH_SERIES="Zeige / verberge Predigtreihen Dropdown Menü" +JBS_TPL_SERIES_SEARCH_SERIES_DESC="Zeige oder verberge ein Dropdown Menü mit allen freigegebenen Predigtreihen als Filter" +JBS_TPL_SERIES_SEARCH_TEACHERS_DESC="Choose whether the list of teachers who have series are displayed." ; translate +JBS_TPL_SERIES_SEARCH_YEARS_DESC="Choose whether to show a drop down of years where there are studies associated with a series" ; translate +JBS_TPL_SERIES_SERIES_CHARACTERS="Zeichenbeschränkung der Beschreibung auf der Listenansicht" +JBS_TPL_SERIES_SERIES_CHARACTERS_DESC="Anzahl der Zeichen für die Beschreibung in der Listenansicht. Alle Beschreibungen werden im Link auf die Details angezeigt. Leerlassen zeigt vollständigen Text an." +JBS_TPL_SERIES_SERIES_LIST_ORDER="Aufsteigende oder absteigende Reihenfolge" +JBS_TPL_SERIES_SERIES_LIST_ORDER_DESC="Liste in aufsteigender oder absteigender Reihenfolge sortieren?" +JBS_TPL_SERIES_SERIES_ORDER_FIELD="Element zur Sortierung" +JBS_TPL_SERIES_SERIES_ORDER_FIELD_DESC="Wähle ein Element zur Sortierung der Predigtreihen-Listenansicht" +JBS_TPL_SERIES_SERIES_SHOW_DESCRIPTION="Zeige / verberge Beschreibung der Predigtreihe" +JBS_TPL_SERIES_SERIES_SHOW_DESCRIPTION_DESC="Selektieren, um die Beschreibung der einzelnen Predigtreihe in einer Zeile über alle 4 Spalten anzuzeigen" +JBS_TPL_SERIES_SHOW_PAGE_IMAGE_SERIES="Zeige / verberge Bild in der Titelzeile" +JBS_TPL_SERIES_SHOW_PAGE_IMAGE_SERIES_DESC="Zeige oder verberge das Titelbild der Predigtreihen-Listenansicht. Das selbe Bild wie in der Predigt-Listenansicht wird verwendet." +JBS_TPL_SERIES_SHOW_SERIES_TITLE="Zeige / verberge Titelzeile" +JBS_TPL_SERIES_SHOW_SERIES_TITLE_DESC="Zeige oder verberge den Text der Titelzeile der Predigtreihen-Listenansicht." +JBS_TPL_SERIES_TEMPLATE="Template Datei für Predigtreihen-Einzelansicht" +JBS_TPL_SERIES_THUMBNAIL_BRACE="Predigtreihe Icon {series_thumbnail}" +JBS_TPL_SERIES_TITLE_TEXT="Predigtreihe Titel" +JBS_TPL_SERMONS_TEMPLATE="Template Datei für Predigt-Listenansicht" +JBS_TPL_SERMONS_TEMPLATE_DESC="Wenn eine Template Datei erstellt wurde, kann sie hier ausgewählt werden. Anderenfalls benutze das Standard-Template." +JBS_TPL_SERMON_TEMPLATE="Template Datei für Predigt-Einzelansicht" +JBS_TPL_SHOW_ALL_BOOKS="Zeige alle Bibelbücher" +JBS_TPL_SHOW_ALWAYS="Immer zeigen" +JBS_TPL_SHOW_ALWAYS_NO_HIDE_SHOW_LINK="Immer zeigen (kein zeige / verberge Link)" +JBS_TPL_SHOW_AS_POPUP="Zeige als Link auf Popup Fenster" +JBS_TPL_SHOW_BOOKS_W_STUDIES="Zeige nur Bibelbücher, für die eine Predigt existiert" +JBS_TPL_SHOW_COMMENT="Zeige nur Kommentar" +JBS_TPL_SHOW_COMMENT_OR_FILESIZE="Kommentar anzeigen (wenn vorhanden) oder Dateigröße (wenn Kommentar nicht vorhanden)" +JBS_TPL_SHOW_FILESIZE="Zeige nur Dateigröße" +JBS_TPL_SHOW_LINK="Zeige Link" +JBS_TPL_SHOW_ONLY_BOOKS="Zeige nur den Buch-Namen" +JBS_TPL_SHOW_ONLY_CHAPTERS="Zeige nur Kapitel" +JBS_TPL_SHOW_PASSAGE_WITH_HIDE_SHOW="Zeigen mit zeige / verberge Link" +JBS_TPL_SHOW_PODCAST_SUBSCRIBE_BOTTOM="Zeige in der Fußzeile" +JBS_TPL_SHOW_PODCAST_SUBSCRIBE_TOP="Zeige in der Kopfzeile" +JBS_TPL_SHOW_RELATED="Zeige einen Link auf eine ähnliche Predigt" +JBS_TPL_SHOW_RELATED_DESC="Zeigt eine Auswahlliste mit Links auf ähnliche Predigten. Ähnlich Predigten werden durch Meta Schlüsselwürder on / oder Themen bestimmt" +JBS_TPL_SHOW_SHARE="Zeige Share Menü" +JBS_TPL_SHOW_STUDIES_STUDIESLIST="Zeige Predigten in der Predigt-Listenansicht" +JBS_TPL_SHOW_UNLESS_FILTERED="Zeige, solange nicht gefiltert" +JBS_TPL_SHOW_VERSES_AND_CHAPTERS="Zeige Kapitel und Verse" +JBS_TPL_STORE_BRACE="Speichern {store}" +JBS_TPL_STUDIESVIEW_TEMPLATECODE_DESC="Benutze normalen HTML Code für das Layout.

      Codes:
      {{title}} - Predigt Titel
      {{teacher}} - Prediger Name
      {{date}} - Datum
      {{studyintro}} - Einleitungstext
      {{scripture}} - Bibelbuchstelle
      {{topics}} - Themen
      {{mediatime}} - Zeit
      {{thumbnail}} - Bild
      {{seriestext}} - Predigtreihe
      {{bookname}} - Bibelbuch
      {{studytext}} - Predigttext
      {{scripturelink}} - Link auf Bibelstelle
      {{media}} - Medien (Tabelle)
      {{share}} - Social Networking Links
      {{printview}} - Drucken Icon
      {{pdfview}} - PDF Icon
      {{comments}} - Kommentare
      {{hits}} - Treffer
      {{location}} - Veranstaltungsort
      {{messagetype}} - Predigttyp" +JBS_TPL_STUDYIMAGE="Study Image" ; translate ; duplicate +JBS_TPL_STUDYNUMBER_BRACE="Predigt Nummer {studynumber}" +JBS_TPL_STUDY_DETAILS_VIEW="Predigt-Einzelansicht" +JBS_TPL_STUDY_INTRO_BRACE="Einleitungstext {studyintro}" +JBS_TPL_STUDY_LIST_CUSTOM="Predigtliste benutzerdefinierte Ansicht" +JBS_TPL_STUDY_LIST_VIEW="Predigt-Listenansicht" +JBS_TPL_SUBMITTED_BRACE="Eingereicht von {submitted}" +JBS_TPL_SUBSCRIBE_INTRO="Abonnement Überschrift" +JBS_TPL_SUBSCRIBE_INTRO_DESC="Überschrift zur Tabelle mit Links zum Abonnieren der Podcasts" +JBS_TPL_TABLE="TABLE" +JBS_TPL_TABLE_OR_DIV="Soll der Code in TABLE oder DIV Codes eingebettet werden?" +JBS_TPL_TEACHERDETAIL_TEMPLATECODE="Code für die Prediger-Einzelansicht" +JBS_TPL_TEACHERLIST_TEMPLATECODE="Code für die Prediger-Listenansicht" +JBS_TPL_TEACHER_BRACE="Prediger {teachername}" +JBS_TPL_TEACHER_LABEL_TEACHER="Text für die Zeile 'letzte Predigten'" +JBS_TPL_TEACHER_LABEL_TEACHER_DESC="Einleitungstext für die letzten Predigten eines Predigers" +JBS_TPL_TEACHER_LIST_TEMPLATE="Template Datei für Prediger-Listenansicht" +JBS_TPL_TEACHER_SHOW_TEACHER_STUDIES="Zeige / verberge Predigten des Predigers" +JBS_TPL_TEACHER_SHOW_TEACHER_STUDIES_DESC="Die Liste der letzten Predigten eines Predigers in der Prediger-Ansicht anzeigen oder verbergen" +JBS_TPL_TEACHER_STUDIES="Anzahl der Predigten in der Prediger-Ansicht" +JBS_TPL_TEACHER_STUDIES_DESC="Anzahl der Predigten für jeden Prediger in der Prediger-Ansicht. Leerlassen zeigt alle." +JBS_TPL_TEACHER_TEACHERLINK="Zeige / verberge Link auf weitere Predigten" +JBS_TPL_TEACHER_TEACHERLINK_DESC="Soll ein Link auf weitere Predigten angezeigt werden?" +JBS_TPL_TEACHER_TEACHER_TITLE="Titel für Listenansicht" +JBS_TPL_TEACHER_TEACHER_TITLE_DESC="Text der Titelzeile der Prediger-Listenansicht" +JBS_TPL_TEACHER_TEMPLATE="Template Datei für Prediger-Einzelansicht" +JBS_TPL_TEACHER_TEMPLATECODE_DESC="Benutze normalen HTML Code für das Layout.

      Codes:
      {{title}} - Prediger Title
      {{teacher}} - Prediger Name
      {{phone}} - Telefon
      {{website}} - Internet-Seite
      {{information}} - Zusätzliche Informationen
      {{image}} - Großes Bild
      {{thumbnail}} - Kleines Bild
      {{short}} Kurzbeschreibung" +JBS_TPL_TEACHER_VIEW="Prediger-Ansicht" +JBS_TPL_TEMPLATECODE="Code für Liste" +JBS_TPL_TEMPLATE_ID="Template ID" +JBS_TPL_TEMPLATE_NAME="Template Name" +JBS_TPL_TEMPLATE_SERIES_DETAIL="Template für Predigtreihen-Einzelansicht" +JBS_TPL_TEMPLATE_SERIES_DETAIL_DESC="Wähle welches Template für die Predigtreihen-Einzelansicht benutzt werden soll, wenn aus diesem Template heraus ein Link dorthin angesprungen wurde." +JBS_TPL_TEMPLATE_SERIES_LIST="Template für Predigtreihen-Listenansicht" +JBS_TPL_TEMPLATE_SERIES_LIST_DESC="Wähle welches Template für die Predigtreihen-Listenansicht benutzt werden soll, wenn aus diesem Template heraus ein Link dorthin angesprungen wurde." +JBS_TPL_TEMPLATE_STUDIES_LIST="Template für Predigt-Listenansicht" +JBS_TPL_TEMPLATE_STUDIES_LIST_DESC="Wähle welches Template für die Predigt-Listenansicht benutzt werden soll, wenn aus diesem Template heraus ein Link dorthin angesprungen wurde." +JBS_TPL_TEMPLATE_STUDY_DETAIL="Template für Predigt-Einzelansicht" +JBS_TPL_TEMPLATE_STUDY_DETAIL_DESC="Wähle welches Template für die Predigt-Einzelansicht benutzt werden soll, wenn aus diesem Template heraus ein Link dorthin angesprungen wurde." +JBS_TPL_TEMPLATE_TEACHER="Template für Prediger-Ansicht" +JBS_TPL_TEMPLATE_TEACHER_DESC="Wähle welches Template für die Prediger-Einzelansicht benutzt werden soll, wenn aus diesem Template heraus ein Link dorthin angesprungen wurde." +JBS_TPL_THUMBNAIL_BRACE="Vorschaubild {thumbnail}" +JBS_TPL_TIME_OFFSET="Zeit Offset" +JBS_TPL_TIME_OFFSET_DESC="Time zone to be used for the date. Special cases: boolean true for user setting, boolean false for server setting. JBSM prefers false to use the server time frame.";translate +JBS_TPL_TITLE_BRACE="Predigt Titel {studytitle}" +JBS_TPL_TITLE_TEACHER_BRACE="Titel + Prediger {teacher-title-name}" +JBS_TPL_TITLE_TEACHER_THUMBNAIL="Prediger Icon" +JBS_TPL_TOOLTIP_ITEMS="Kurzinfo (Tooltip) Eintrag" +JBS_TPL_TOOLTIP_TIP_ITEM1="Kurzinfo Eintrag 1" +JBS_TPL_TOOLTIP_TIP_ITEM1_TITLE="Kurzinfo Name 1" +JBS_TPL_TOOLTIP_TIP_ITEM2="Kurzinfo Eintrag 2" +JBS_TPL_TOOLTIP_TIP_ITEM2_TITLE="Kurzinfo Name 2" +JBS_TPL_TOOLTIP_TIP_ITEM3="Kurzinfo Eintrag 3" +JBS_TPL_TOOLTIP_TIP_ITEM3_TITLE="Kurzinfo Name 3" +JBS_TPL_TOOLTIP_TIP_ITEM4="Kurzinfo Eintrag 4" +JBS_TPL_TOOLTIP_TIP_ITEM4_TITLE="Kurzinfo Name 4" +JBS_TPL_TOOLTIP_TIP_ITEM5="Kurzinfo Eintrag 5" +JBS_TPL_TOOLTIP_TIP_ITEM5_TITLE="Kurzinfo Name 5" +JBS_TPL_TOOLTIP_TIP_ITEM_DESC="Wähle einen Eintrag für diese Kurzinfo" +JBS_TPL_TOOLTIP_TIP_ITEM_TITLE_DESC="Gib eine Beschreibung dieses Kurzinfo Eintrags an" +JBS_TPL_TOOLTIP_TIP_TITLE="Kurzinfo Titelzeile" +JBS_TPL_TOOLTIP_TIP_TITLE_DESC="Type in a title for the ToolTip" +JBS_TPL_TOPIC_BRACE="Thema {topics}" +JBS_TPL_TYPE_OF_LINK="Link auf" +JBS_TPL_TYPE_OF_LINK_DESC="Wohin soll der Link dieses Elements zeigen - wenn überhaupt" +JBS_TPL_USE_CUSTOM_VIEW="Benutze dieses Layout" +JBS_TPL_USE_HEADER_ROW="Zeige Tabellenkopf" +JBS_TPL_USE_HIDE_SHOW_LINK="Benutze Zeige / verberge Link" +JBS_TPL_USE_LIMIT="Benutze die Anzahl aus der Landing-Page Einstellung" +JBS_TPL_USE_LIMIT_DESC="Soll die Anzahl durch die Einstellung hier darunter berenzt werden oder durch die Einstellung der jeweiligen Liste (Prediger, Veranstaltungsorte ect.)?" +JBS_TPL_USE_LOCATIONS_LIMIT="Anzahl der Veranstaltungsorte" +JBS_TPL_USE_MESSAGETYPE_LIMIT="Anzahl der Predigttypen" +JBS_TPL_USE_RECORD_SETTING="Benutze die Anzahl aus der Liste" +JBS_TPL_USE_SERIES_LIMIT="Anzahl der Predigtreihen" +JBS_TPL_USE_TEACHERS_LIMIT="Anzahl der Prediger" +JBS_TPL_VERSES_CUSTOM_DATE_FORMAT="Setze ein benutzerdefiniertes PHP Datumsformat" +JBS_TPL_VERSES_CUSTOM_DATE_FORMAT_DESC="Benutze eine Formatierung für die Standard PHP date() Funktion. Überschreibt die Auswahl oberhalb." +JBS_TPL_VERSES_DATES_CSS="Kapitel, Datum, CSS" +JBS_TPL_VERSES_DATE_FORMAT="Datumsformat" +JBS_TPL_VERSES_DATE_FORMAT_DESC="Wähle das Anzeigeformat für Datum" +JBS_TPL_VERSES_DURATION_TYPE="Wähle std:min:sek oder std/min/sek" +JBS_TPL_VERSES_DURATION_TYPE_DESC="Wähle ein Trennzeichen für die Dauer, entweder std:min:sek oder std/min/sek" +JBS_TPL_VERSES_SHOW_VERSES="Kapitel/Verse" +JBS_TPL_VERSES_SHOW_VERSES_DESC="Nur die Kapitel der Bibelbücher anzeigen oder auch die Verse?" +JBS_TPL_VERSES_STYLESHEET="Pfad zur CSS Formatierung" +JBS_TPL_VERSES_STYLESHEET_DESC="Pfad von Joomla root zu einem alternativen stylesheet (nur für erfahrene Benutzer). Setzt CSS außer Kraft." +JBS_TPL_WINDOW="Fenster" + +; Template Code +JBS_TPLCODE_CODE="Template php/html code" +JBS_TPLCODE_CODE_DESC="php and html code mit css Tags hier eingeben" +JBS_TPLCODE_DESC="Setzt Template Dateien für jeweilige Ansicht" +JBS_TPLCODE_FILENAME="Template Dateiname (ohne .php)" +JBS_TPLCODE_FILENAME_DESC="Erzeugt eine Datei für diesen Template Typen im Template Ordner. Dateiname muss eindeutig sein" +JBS_TPLCODE_MODULE="Modul" +JBS_TPLCODE_SERIESDISPLAY="Predigtreihen-Einzelansicht" +JBS_TPLCODE_SERIESDISPLAYS="Predigtreihen-Listenansicht" +JBS_TPLCODE_SERMON="'Predigt-Einzelansicht" +JBS_TPLCODE_SERMONLIST="Predigt-Listenansicht" +JBS_TPLCODE_TEACHER="Prediger-Einzelansicht" +JBS_TPLCODE_TEACHERS="Prediger-Listenansicht" +JBS_TPLCODE_TPLCODES="Template Codes" +JBS_TPLCODE_TYPE="Template Types anzeigen" + +;; Uploader +JBS_UPLOADER_ADD_FILES="Dateien hinzufügen" +JBS_UPLOADER_ADD_FILES_TO_QUEUE="Dateien zur Queue hinzufügen" +JBS_UPLOADER_DRAG_FILES="Dateien verschieben (drag and drop)" +JBS_UPLOADER_ERROR_RUNTIME_NOT_SUPORTED="Der Browser unterstützt weder Flash, Silverlight noch HTML5." +JBS_UPLOADER_FILENAME="Dateiname" +JBS_UPLOADER_LOG_BTN="Log" +JBS_UPLOADER_REFRESH_UPLOADER="Aktualisieren" +JBS_UPLOADER_SELECT_FILES="Dateien auswählen" +JBS_UPLOADER_SIZE="Größe" +JBS_UPLOADER_START_UPLOAD="Hochladen starten" +JBS_UPLOADER_START_UPLOADING_QUEUE="Queue hochladen starten" +JBS_UPLOADER_STATUS="Status" +JBS_UPLOADER_STOP_CURRENT_UPLOAD="Hochladen stoppen" +JBS_UPLOADER_STOP_UPLOAD="Hochladen stoppen" diff --git a/build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.sys.ini b/build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.sys.ini new file mode 100644 index 0000000000..3ee2f4638a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/de-DE/de-DE.com_biblestudy.sys.ini @@ -0,0 +1,78 @@ +; $Id: de-DE.com_biblestudy.sys.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller, translated by santon +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +; Identify the component as extension +COM_BIBLESTUDY="Bibelstudien" + +; Name of the component +JBS_CMN_COM_BIBLESTUDY="Bibelstudien" + +; Install strings +JBS_INS_ERROR_SQL_READBUFFER="SQL Dateien können nicht gelesen werden" +JBS_INS_XML_DESCRIPTION="Bibelstudien" +JBS_INS_INSTALLATION_RESULTS="Bibelstudien Ergebnisse - %s" +JBS_INS_FAILURE="Datenbasis konnte nicht erstellt werden" + +; Preflight and postflight strings +JBS_INS_GET_MORE_HELP="Hilfe und Dokumentation auf JoomlaBibleStudy.org" +JBS_INS_VISIT_DOCUMENTATION="Besuche unsere Dokumentationsseite" +JBS_INS_VISIT_FORUM="Schaue in unser Forum, wenn du Fragen hast" +JBS_INS_CLICK_TO_FINISH="Hier klicken zum Abschließen" +JBS_INS_TITLE="Joomla! Bibelstudien (Bible Study)" + +; Uninstall strings (used when the extension is uninstalled) +JBS_INS_UNINSTALLED="Bibelstudien deinstalliert; stelle sicher, dass auch die Plugins und Module deinstalliert werden" +JBS_INS_NO_DATABASE_REMOVED="Deinstallation: Die Tabellen in der Datenbasis wurden nicht gelöscht. Entferne auch die Tabellen, die mit *_bsms beginnen." + +; Menue entries +JBS_MNU_ADMINISTRATION="Administration" +JBS_MNU_CONTROL_PANEL="Kontrollzentrum" +JBS_MNU_LOCATIONS="Veranstaltungsorte" +JBS_MNU_MEDIA_FILES="Mediendateien" +JBS_MNU_MEDIA_IMAGES="Medientyp-Icons" +JBS_MNU_MESSAGETYPES="Predigttypen" +JBS_MNU_MIMETYPES="Mime-Typen" +JBS_MNU_PODCASTS="Podcasts" +JBS_MNU_SERIES="Predigtreihen" +JBS_MNU_SERVERS="Server" +JBS_MNU_SERVER_FOLDERS="Serverordner" +JBS_MNU_SOCIAL_NETWORK_LINKS="Social Networking Links" +JBS_MNU_STUDIES="Predigten" +JBS_MNU_STUDY_COMMENTS="Predigt Kommentare" +JBS_MNU_STYLES="CSS Formatierung" +JBS_MNU_TEACHERS="Prediger" +JBS_MNU_TEMPLATE_CODE_DISPLAY="Template Dateien" +JBS_MNU_TEMPLATE_DISPLAY="Template" +JBS_MNU_TOPICS="Themen" + +JBS_MNU_COMMENTS_LIST_EDIT_LAYOUT="Administration Kommentare" +JBS_MNU_COMMENTS_LIST_EDIT_LAYOUT_DESC="Erzeugt einen Menüpunkt zur Administration der Kommentare" +JBS_MNU_LANDING_PAGE_LAYOUT="Landing-Page Layout" +JBS_MNU_LANDING_PAGE_LAYOUT_DESC="Erzeugt einen Menüpunkt mit der Bibelstudien Landing-Page Ansicht" +JBS_MNU_LATEST_STUDY_LAYOUT="Link zur letzten Predigt" +JBS_MNU_LATEST_STUDY_LAYOUT_DESC="Erzeugt automatisch einen Link auf die Predigt-Einzelansicht der letzten Predigt" +JBS_MNU_MEDIAFILES_LIST_LAYOUT="Administration Mediendateien" +JBS_MNU_MEDIAFILES_LIST_LAYOUT_DESC="Erzeugt einen Menüpunkt zur Administration der Mediendateien " +JBS_MNU_SERIES_LIST_LAYOUT="Predigtreihen-Listenansicht Layout" +JBS_MNU_SERIES_LIST_LAYOUT_DESC="Erzeugt einen Menüpunkt mit der Predigtreihen-Listenansicht" +JBS_MNU_SINGLE_SERIES_LAYOUT="Predigtreihen-Einzelansicht Layout" +JBS_MNU_SINGLE_SERIES_LAYOUT_DESC="Erzeugt einen Menüpunkt mit Predigtreihen-Einzelansicht" +JBS_MNU_SINGLE_STUDY_LAYOUT="Predigt-Einzelansicht Layout" +JBS_MNU_SINGLE_STUDY_LAYOUT_DESC="Erzeugt einen Menüpunkt mit Predigt-Einzelansicht" +JBS_MNU_SINGLE_TEACHER_LAYOUT="Prediger-Einzelansicht Layout" +JBS_MNU_SINGLE_TEACHER_LAYOUT_DESC="Erzeugt einen Menüpunkt mit Prediger-Einzelansicht" +JBS_MNU_STUDIES_LIST_EDIT_LAYOUT="Administration Predigten" +JBS_MNU_STUDIES_LIST_EDIT_LAYOUT_DESC="Erzeugt einen Menüpunkt zur Administration der Predigten" +JBS_MNU_STUDIES_LIST_LAYOUT="Predigt-Listenansicht Layout" +JBS_MNU_STUDIES_LIST_LAYOUT_DESC="Erzeugt einen Menüpunkt mit der Predigt-Listenansicht" +JBS_MNU_TEACHERS_LIST_LAYOUT="Prediger-Listenansicht Layout" +JBS_MNU_TEACHERS_LIST_LAYOUT_DESC="Erzeugt einen Menüpunkt mit der Prediger-Listenansicht" + +JBS_MNU_SELECT_SERIES_DESC="Wähle eine einzelne Predigtreihe, die in diesem Menüpunkt angezeigt wird" +JBS_MNU_SELECT_STUDY_DESC="Wähle eine einzelne Predigt, die in diesem Menüpunkt angezeigt wird" +JBS_MNU_SELECT_TEACHER_DESC="Wähle einen einzelnen Prediger, der in diesem Menüpunkt angezeigt wird" +JBS_MNU_SELECT_TEMPLATE="Template für diese Seite" +JBS_MNU_SELECT_TEMPLATE_DESC="Wähle ein Template für diese Seite" diff --git a/build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.ini b/build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.ini new file mode 100644 index 0000000000..9a32517601 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.ini @@ -0,0 +1,1838 @@ +; $Id: en-GB.com_biblestudy.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 CWM Team +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM +; Used only for Post Install Language Translations. +COM_BIBLESTUDY="CWM-Proclaim" + +; Simple Mode message +SIMPLEMODEMESSAGE_TITLE="Simple Mode" +SIMPLEMODEMESSAGE_BODY="This version of CWM-Proclaim! introduces Simple Mode. Simple mode provides an easier interface to enter and display messages. It is ON by default. Turn it OFF and ON in the Administration tab." +SIMPLEMODEMESSAGE_ACTION="Go to the Administration tab and toggle Simple Mode OFF for the full featured CWM-Proclaim!" + +;; Permission entry and Joomla common handling +COM_BIBLESTUDY_CONFIGURATION="CWM-Proclaim CONFIGURATION" +COM_BIBLESTUDY_N_ITEMS_ARCHIVED="%d Item(s) Archived" +COM_BIBLESTUDY_N_ITEMS_DELETED="%d Item(s) Deleted" +COM_BIBLESTUDY_N_ITEMS_PUBLISHED="%d item(s) published" +COM_BIBLESTUDY_N_ITEMS_TRASHED="%d Item(s) Trashed" +COM_BIBLESTUDY_N_ITEMS_UNPUBLISHED="%d items(s) unpublished" +COM_BIBLESTUDY_N_ITEMS_CHECKED_IN="%d items(s) checked in" + +;; Content Articles +COM_CONTENT_CHANGE_ARTICLE="Select or Change article" +COM_CONTENT_CHANGE_ARTICLE_BUTTON="Select / Change" +COM_CONTENT_SELECT_AN_ARTICLE="Select an Article" + +;; Extra global phrases +;; Phrases from Joomla system calls ; need to be reviewed +COM_BIBLESTUDY_FILE_SIZE_EMPTY="File Size Not Set. Please contact site administrator for help" +;JFIELD_RULES_LABEL="Rules" +JGRID_CHECKBOX_ROW_N="Checkbox for row %d" + +;; CMN Common phrases used in several sections +;JBS_COM_EDIT_ITEM="Edit Item" +;JBS_SELECT_LANGUAGE="Select Language" ; replaced by JOPTION_SELECT_LANGUAGE +JBS_PLG_SEARCH_BIBLESTUDYSEARCH="Sermons" +JBS_CPANEL_SIMPLE_MODE_ON="CWM-Proclaim! is set to Simple Mode" +JBS_CPANEL_SIMPLE_MODE_LINK="Turn off Simple Mode under Administrative Parameters" +JBS_CPANEL_SIMPLE_MODE_DESC="Simple mode provides an easier way to administer CWM-Proclaim! by restricting editing display choices" +JBS_USERS="Users for Simple View" +JBS_USERS_DESC="Choose one or more users for the simple view on the administrative side" +JBS_CMN_SELECT_USER="Select user(s)" +JBS_SHOW_DOWNLOAD_BUTTON="Global Show Download" +JBS_SHOW_DOWNLOAD_BUTTON_DESC="Set to yes if you want the download icon to show by default in media files. Individual media file record will override this setting" +PLG_SEARCH_BIBLESTUDYSEARCH_BIBLESTUDYSEARCH="Bible Studies" +JBS_CPANEL_DESC_WELCOME="Welcome to CWM-Proclaim" +JBS_CMN_CENTER="Center" +JBS_CMN_LEFT="Left" +JBS_CMN_RIGHT="Right" +JBS_CMN_ACCESS_FORBIDDEN="Access Forbidden" +JBS_CMN_ADMINISTRATION="Administration" +JBS_CMN_ASCENDING="Ascending" +JBS_CMN_AUTOCLOSE_IN_3S="This window will close automatically in 3 seconds." +JBS_CMN_AVPLUGIN="All Videos or JPlayer Plugin" +JBS_CMN_AVR="All Videos, JPlayer or Embed Code" +JBS_CMN_BATCH_LABLE="BATCH" +JBS_CMN_BATCH_OPTIONS="Batch Options" +JBS_CMN_BATCH_TIP="PLEASE CHANGE" +JBS_CMN_BATCH_TIP_MEDIAFILES="If choosing to copy an MediaFile, any other actions selected will be applied to the copied MediaFile. Otherwise, all actions are applied to the selected MediaFile." +JBS_CMN_BOOK="Book" +JBS_CMN_BOOKS="Books" +JBS_CMN_BOOKS_ORDERING="Books Ordering" +JBS_CMN_BOTTOM="Bottom" +JBS_CMN_BROWSE="Browse" +JBS_CMN_CLEAR="Clear" +JBS_CMN_COMMENT="Comment" +JBS_CMN_COMMENTS="Comments" +JBS_CMN_CONTINUE_TO_DOWNLOAD="Click to Download" +JBS_CMN_CONTROL_PANEL="Control Panel" +JBS_CMN_CREATE_DATE="Create Date" +JBS_CMN_CUSTOM="Custom" +JBS_CMN_DATE="Date" +JBS_CMN_DATABASE_NOT_COPIED="Database not copied." +JBS_CMN_DATABASE_NOT_MIGRATED="Database not migrated." +JBS_CMN_DEFAULT_IMAGE="Default Image" +JBS_CMN_DEFAULT_IMAGES="Default Images" +JBS_CMN_DEFAULT_IMAGES_SIZES="Thumbnail sizes" +JBS_CMN_DEFAULT_DOWNLOAD="Use Default Image" +JBS_CMN_DESCENDING="Descending" +JBS_CMN_DESCRIPTION="Description" +JBS_CMN_DETAILS="Details" +JBS_CMN_DIRECT_LINK="Direct Link" +JBS_CMN_DOCMAN_NOT_INSTALLED="DocMan not installed" +JBS_CMN_DONT_USE="Don't use" +JBS_CMN_DOWNLOADS="Downloads" +JBS_CMN_DURATION="Duration" +JBS_CMN_EDIT="Edit" +JBS_CMN_EDIT_MEDIA_FILE="Edit Media File" +JBS_CMN_EMBED_CODE="Embed Code" +JBS_CMN_ERROR_ADDON_LANGUAGE_NOT_LOADED="Addon language could not be loaded or Default Server Not Set" +JBS_CMN_ERROR_RESETTING_DOWNLOADS="An error occured while resetting the downloads:" +JBS_CMN_ERROR_RESETTING_HITS="An error occured while resetting the hits:" +JBS_CMN_ERROR_RESETTING_PLAYS="An error occured while resetting the plays:" +JBS_CMN_EXPORT="Export" +JBS_CMN_FIELDSET_PUBLISHING="Publishing" +JBS_CMN_FIELDSET_RULES="Template Access Rules" +JBS_CMN_FIELD_LANGUAGE_DESC="This record is shown, if the respective language is selected. If this field is empty, the apropriate string in the language file ist used. Unused languages do not need to be filled in." +JBS_CMN_FILESIZE="Filesize" +JBS_CMN_FILTERS_BOOKS="Select one or more books" +JBS_CMN_FILTERS_DESC="Use Ctrl-click to select more than one item. Select Show All to show all items" +JBS_CMN_FILTERS_LOCATIONS="Select one or more locations" +JBS_CMN_FILTERS_MESSAGETYPES="Select one or more message types" +JBS_CMN_FILTERS_SERIES="Select one or more series" +JBS_CMN_FILTERS_TEACHER="Select one or more teachers" +JBS_CMN_FILTERS_TOPICS="Select one or more topics" +JBS_CMN_FILTERS_YEARS="Select one or more years" +JBS_CMN_FILTER_SEARCH_DESC="Search using a keyword." +JBS_CMN_GENERAL="General Items" +JBS_CMN_GLOBAL_SETTINGS="Global Settings" +JBS_CMN_HIDE="Hide" +JBS_CMN_HITS="Hits" +JBS_CMN_HOURS="Hours" +JBS_CMN_ID="ID" +JBS_CMN_IMAGE="Image" +JBS_CMN_IMPORT="Import" +JBS_CMN_INFO="Item Information" +JBS_CMN_INLINE="Inline" +JBS_CMN_INSTALL="Install" +JBS_CMN_INTERNAL_PLAYER="Internal Player" +JBS_CMN_ITEM_NOT_PUBLISHED="Item not published" +JBS_CMN_ITEM_PUBLISHED="Published" +JBS_CMN_JOOMLA_BIBLE_STUDY="CWM-Proclaim" +JBS_CMN_LANDING_SHOW="Show on Landing Page" +JBS_CMN_LANDING_SHOW_DESC="Choose whether to hide this item on the Landing Page, or wether to show it above or below the "_QQ_"more"_QQ_" button. Must also set this under Templates/Landing Page" +JBS_CMN_LEGACY_PLAYER="Internal Audio Player" +JBS_CMN_LOCATION="Location" +JBS_CMN_LOCATIONS="Locations" +JBS_CMN_LOCATIONS_ORDERING="Locations Ordering" +JBS_CMN_MEDIA="Media" +JBS_CMN_MEDIA_AUTOSTART="Autostart" +JBS_CMN_MEDIA_AUTOSTART_DESC="Set if the media will start playing automatically" +JBS_CMN_MEDIA_CREATE_DATE="Media Create Date" +JBS_CMN_MEDIA_FILES="Media Files" +JBS_CMN_MESSAGES_LIST="Messages List" +JBS_CMN_MESSAGETYPE="Message Type" +JBS_CMN_MESSAGETYPES="Message Types" +JBS_CMN_MESSAGETYPE_ORDERING="Message Type Ordering" +JBS_CMN_MESSAGE_TITLE="Message" +JBS_CMN_MIMETYPE="Mime Type" +JBS_CMN_MINUTES="Minutes" +JBS_CMN_MODIFIED="Modified" +JBS_CMN_NEW="New" +JBS_CMN_NO="No" +JBS_CMN_NONE="None" +JBS_CMN_NOTHING="Nothing" +JBS_CMN_NOT_FOUND="Not found" +JBS_CMN_NO_FILES_TO_DISPLAY="No files to display" +JBS_CMN_NO_FILE_SELECTED="No File Selected" +JBS_CMN_NO_ITEM_SELECTED="No Item Selected" +JBS_CMN_NO_KEY="Captcha Public Key not present. Please contact administrator" +JBS_CMN_NO_MEDIA_FILES="No media files found associated with podcast" +JBS_CMN_NO_OPTION_TREATED_GLOBAL="No Option Set - treated as global" +JBS_CMN_NO_PLAYER_TREATED_DIRECT="No Player - treated as direct" +JBS_CMN_NO_SHOW_LANDING="Do not show on Landing Page" +JBS_CMN_OPERATION_FAILED="Operation Failed. Error message(s):" +JBS_CMN_OPERATION_SUCCESSFUL="Operation Successful. No Errors Reported." +JBS_CMN_ORDERING="Ordering" +JBS_CMN_ORDERING_DESC="Choose an order for this item on the displayed list" +JBS_CMN_OVER="Over" +JBS_CMN_PARAMETERS="Parameters" +JBS_CMN_PHP_ERROR="Your host needs to use PHP %s or higher to run CWM-Proclaim" +JBS_CMN_PLAYS="Plays" +JBS_CMN_PODCAST="Podcast" +JBS_CMN_PODCASTS="Podcasts" +JBS_CMN_POPUP="Popup" +JBS_CMN_POPUP_NEW_WINDOW="Popup/New Window" +JBS_CMN_PRINT="Print" +JBS_CMN_PUBLISHED="Published" +JBS_CMN_PUBLISHED_DESC="Choose whether this item should be visible or not" +JBS_CMN_PUBLISHING_OPTIONS="Publishing Options" +JBS_CMN_READ_MORE="Read More" +JBS_CMN_RESET_SUCCESSFUL="Reset successful. No error messages generated." +JBS_CMN_ROWS_RESET="row(s) reset." +JBS_CMN_SCORE="Score" +JBS_CMN_SCRIPTURE2="Scripture 2" +JBS_CMN_SCRIPTURE="Scripture" +JBS_CMN_SEARCHING="Searching..." +JBS_CMN_SECONDARY_REFERENCES="Secondary References" +JBS_CMN_SECONDS="Seconds" +JBS_CMN_SELECT_BOOK="- Select a Book -" +JBS_CMN_SELECT_BY="Select By" +JBS_CMN_SELECT_ITEM_UNPUBLISH="- Select an item to unpublish -" +JBS_CMN_SELECT_LANGUAGE_DESC="Choose a language for this entry" +JBS_CMN_SELECT_LOCATION="- Select a Location -" +JBS_CMN_SELECT_MESSAGETYPE="- Select a Message Type -" +JBS_CMN_SELECT_MIMETYPE="- Select a Mime Type -" +JBS_CMN_SELECT_ORDER="- Select an Order -" +JBS_CMN_SELECT_PODCAST="- Select a Podcast -" +JBS_CMN_SELECT_POPULAR_STUDY="Popular" +JBS_CMN_SELECT_RELATED_STUDY="Choose a Related Study" +JBS_CMN_SELECT_SERIES="- Select a Series -" +JBS_CMN_SELECT_SERVER="- Select a Server -" +JBS_CMN_SELECT_STUDY="- Select a Study -" +JBS_CMN_SELECT_TEACHER="- Select a Teacher -" +JBS_CMN_SELECT_TEMPLATE="- Select a Template -" +JBS_CMN_SELECT_TOPIC="- Select a Topic -" +JBS_CMN_SELECT_YEAR="- Select a Year -" +JBS_CMN_SELECT_DIRECTION="- Select a Direction -" +JBS_CMN_SERIES="Series" +JBS_CMN_SERIES_DESCRIPTION="Series Description" +JBS_CMN_SERIES_NOT_FOUND="Series not found" +JBS_CMN_SERIES_ORDERING="Series Ordering" +JBS_CMN_SERIES_THUMBNAIL="Series Thumbnail" +JBS_CMN_SERVER="Server" +JBS_CMN_SERVERS="Servers" +JBS_CMN_SHOW="Show" +JBS_CMN_SHOW_ABOVE_LANDING="Show above MORE button" +JBS_CMN_SHOW_ALL="Show All" +JBS_CMN_SHOW_BELOW_LANDING="Show below MORE button" +JBS_CMN_SHOW_HIDE_ALL="Show/Hide All" +JBS_CMN_SHOW_HIDE_SCRIPTURE="Show/Hide Scripture Passage" +JBS_CMN_SOCIAL_NETWORKING_LINKS="Social Networking Links" +JBS_CMN_SQUEEZEBOX="Squeezbox" +JBS_CMN_STUDIES="Studies" +JBS_CMN_STUDY="Study" +JBS_CMN_STUDYNUMBER="Study Number" +JBS_CMN_STUDY_CHANGE="Change" +JBS_CMN_STUDY_DATE="Study Date" +JBS_CMN_STUDY_INTRO="Study Introduction" +JBS_CMN_STUDY_NOT_FOUND="Study not found" +JBS_CMN_STUDY_SELECT="Select a Study" +JBS_CMN_STUDY_TITLE="Study Title" +JBS_CMN_STYLES="CSS Styles" +JBS_CMN_SUBMIT="Submit" +JBS_CMN_SUBMITTED_BY="Submitted by" +JBS_CMN_TEACHER="Teacher" +JBS_CMN_TEACHERS="Teachers" +JBS_CMN_TEACHERS_ORDERING="Teachers Ordering" +JBS_CMN_TEACHER_IMAGE="Teacher Image" +JBS_CMN_TEACHER_NAME="Teacher Name" +JBS_CMN_TEACHER_NOT_FOUND="Teacher not found" +JBS_CMN_TEACHER_ORDERING_DESC="Teacher ordering will be the ordering field, followed by teachername" +JBS_CMN_TEACHER_TITLE="Teacher Title + Name" +JBS_CMN_TEMPLATECODE="Template Files" +JBS_CMN_TEMPLATES="Templates" +JBS_CMN_TERMS="Text for Download Popup" +JBS_CMN_TERMS_DESC="Use any text or html" +JBS_CMN_THUMBNAIL="Thumbnail" +JBS_CMN_TITLE="Title" +JBS_CMN_TOP="Top" +JBS_CMN_TOPIC="Topic" +JBS_CMN_TOPICS="Topics" +JBS_CMN_TOPICS_ORDERING="Topics Ordering" +JBS_CMN_TOPIC_TAG="Add Topic" +JBS_CMN_TOPIC_TAG_DESC="Type a topic in the box" +JBS_CMN_TOTAL_MEDIAFILES="Total Media Files" +JBS_CMN_TOTAL_PLAYERS="Total Players" +JBS_CMN_UPLOADS_NOT_ENABLED="Uploads not enabled in PHP" +JBS_CMN_USE_AV="Use All Videos or JPlayer" +JBS_CMN_USE_AVR="Use All Videos" +JBS_CMN_USE_BITLY="Use bit.ly" +JBS_CMN_USE_DEFAULT="Use Default" +JBS_CMN_USE_EMBED_CODE="Use embed code" +JBS_CMN_USE_GLOBAL="Use Global Settings" +JBS_CMN_USE_INTERNAL_PLAYER="Use Internal Player" +JBS_CMN_USE_LANGUAGE_LIST="Show language Drop Down" +JBS_CMN_USE_LANGUAGE_LIST_DESC="If you have multiple languages the visitor can filter for a particular language" +JBS_CMN_USE_MP3_PLAYER="Use Internal Audio Player" +JBS_CMN_USE_TERMS="Use pop up message before download" +JBS_CMN_USE_TERMS_DESC="If set to yes, a modal window will popup with your optional message and a link to the download. Could be terms and conditions of donation information" +JBS_CMN_VIEWS="Views" +JBS_CMN_VIRTUEMART_NOT_INSTALLED="VirtueMart not installed" +JBS_CMN_WARN_INSTALL_UPLOAD_ERROR="Upload Error" +JBS_CMN_YEARS="Years" +JBS_CMN_MONTHS="Months" +JBS_CMN_DAYS="Days" +JBS_CMN_YEARS_ORDERING="Years Ordering" +JBS_CMN_YES="Yes" +JBS_CMN_POPOUT="Pop Out" +JBS_CMN_PODCASTS_LIST="Podcast List" +JBS_CMN_NO_PODCASTS="No Podcasts" +JBS_CMN_MEDIA_RESPONSIVE="Responsive" +JBS_CMN_LISTEN="Listen" +JBS_CMN_CANT_ADDON_CLASS_NAME="Cannont find addon class neme %s" +JBS_CMN_CANT_ADDON_LOAD_CLASS_NAME="Cannot load addon class name %s" +JBS_CMN_COULD_NOT_LOAD_ADDON_CONFIGURATION="Could not load addon configuration" + +;; Grid Sort filter +JBSM_GRID_SORT_BY="Sort By" +JBSM_GRID_DATE_ASC="Date ascending" +JBSM_GRID_DATE_DESC="Date descending" +JBSM_GRID_TITLE_ASC="Title ascending" +JBSM_GRID_TITLE_DESC="Title descending" + +;; ADM Administrator +JBS_ADM_ADDTHIS_SHARE="AddThis Sharing" +JBS_ADM_ADMIN_CPANL="Administrations Tools" +JBS_ADM_ADMIN_PARAMS="Administrative Parameters" +JBS_ADM_ADMIN_PERMISSIONS="Access Control" +JBS_ADM_AFFECTED_ROWS="Affected Rows" +JBS_ADM_ALIAS_ROWS="Number of alias rows added: " +JBS_ADM_ASSET_CHECK="Check Assets" +JBS_ADM_ASSET_EXPLANATION="\"None\" means there is no asset set which can stop you from deleting rows.
      \"Match\" is where the asset is present and matches the entry in the assets table and the parent of the component.
      \"Mismatch\" means there is an asset but the parent id does not match.
      \"Rules Not Set\" means there is errors in the DB and no rule is associated with your record.
      *If there are any red you should run the fix" +JBS_ADM_ASSET_TABLE_NAME="Assets in JBS tables" +JBS_ADM_ASSET_FIXED="Fix assets successful" +JBS_ADM_ASSET_FIX_ERROR="Fix Asset Function not successful" +JBS_ADM_AUTO_FILL_MEDIA_REC="Auto Fill Media File Record" +JBS_ADM_AUTO_FILL_STUDY_REC="Auto Fill Study Record" +JBS_ADM_BACKUP_RESTORE="Backup / Restore" +JBS_ADM_CHANGE_PLAYERS="Change Players" +JBS_ADM_CHANGE_POPUP="Change Popup" +JBS_ADM_CHARACTER_FILTER="Filter characters in filename" +JBS_ADM_CHARACTER_FILTER_DESC="Set to Filter if you want characters that are not acceptable in a web filename filtered. Set to No to turn off this function" +JBS_ADM_CHECK_ASSETS="Check " +JBS_ADM_COMPONENT_SETTINGS="Component Wide Settings" +JBS_ADM_DB_FIX="Database Fix" +JBS_ADM_DEBUG_DESC="Show Fields that have Debug info for them" +JBS_ADM_DEBUG_LABEL="Show Debug Info" +JBS_ADM_DEFAULT_MAIN_IMAGE="New Main List Page Image" +JBS_ADM_DEFAULT_MAIN_IMAGE_DESC="Leave this blank to use the default image or choose your own" +JBS_ADM_DEFAULT_SERIES_IMAGE="Default Series Image" +JBS_ADM_DEFAULT_SERIES_IMAGE_DESC="Default for series thumbnail" +JBS_ADM_DEFAULT_SHOWHIDE_IMAGE_LANDING_PAGE="New Show/Hide Image for Landing Page" +JBS_ADM_DEFAULT_SHOWHIDE_IMAGE_LANDING_PAGE_DESC="Choose a new image for the Show/hide in the Landing Page. Leave blank for default." +JBS_ADM_DEFAULT_TEACHER_IMAGE="Default Teacher Image" +JBS_ADM_DEFAULT_TEACHER_IMAGE_DESC="Default for teacher thumbnail" +JBS_ADM_DOWNLOAD_IMAGE="Choose Download Image" +JBS_ADM_DOWNLOAD_IMAGE_DESC="Image for download icon." +JBS_DOWNLOAD_1="Download Icon 1" +JBS_DOWNLOAD_2="Download Icon 2" +JBS_DOWNLOAD_3="Download Icon 3" +JBS_DOWNLOAD_4="Download Icon 4" +JBS_ADM_DROP_TABLES="Drop Tables on Uninstall" +JBS_ADM_DROP_TABLES_DESC="Drop com_biblestudy database tables on uninstall? Default does NOT drop tables." +JBS_ADM_ERROR_OCCURED="The following error occured" +JBS_ADM_FILLIN_MEDIAFILE_DESC="Choose a default entry to fill in the form when adding an new media." +JBS_ADM_FILLIN_MEDIAFILE_DOWNLOAD="Default Show Download Button" +JBS_ADM_FILLIN_MEDIAFILE_DOWNLOAD_DESC="Set to Yes if you wish all mediafile records to automatically have the Show Download button selected." +JBS_ADM_FILLIN_MEDIAFILE_PODCAST_DESC="Choose a default podcast to fill in the form when adding an new media. Use Ctrl-click to select more than one item." +JBS_ADM_FILLIN_MEDIAFILE_TARGET="Default target type" +JBS_ADM_FILLIN_MEDIAFILE_TARGET_DESC="Set to a particular target type as default." +JBS_ADM_FILLIN_STUDY_DESC="Choose a default entry to fill in the form when adding an new study." +JBS_ADM_FILLIN_STUDY_IMAGE="Default Study Image" +JBS_ADM_FILTER="Filter" +JBS_ADM_FIX="Fix " +JBS_ADM_FORMAT_POPULAR="Set Items to include in score" +JBS_ADM_FORMAT_POPULAR_DESC="Decide what items will determine the score of a popular study" +JBS_ADM_FULL_WINDOW="Full Body of the Window" +JBS_ADM_HITS_PLAYS_DOWNLOAD="Hits + Plays + Downloads" +JBS_ADM_INTERNAL_SHARE="CWM-Proclaim internal Sharing" +JBS_ADM_JWPLAYER="JW Player" +JBS_ADM_JWPLAYER_ADOBE_SITECATALYST="Adobe SiteCatalyst" +JBS_ADM_JWPLAYER_ADOBE_SITECATALYST_DESC="Configures the Adobe SiteCatalyst connection for the Premium and Ads editions." +JBS_ADM_JWPLAYER_ADVERTISING="Advertising" +JBS_ADM_JWPLAYER_ADVERTISING_DESC="Configures the VAST or IMA Advertising options for the Ads edition." +JBS_ADM_JWPLAYER_AUTOSTART_DESC="Automatically start playing the video on page load. Can be true or false (default). Autostart does not work on mobile devices like iOS and Android." +JBS_ADM_JWPLAYER_CAPTIONS="Captions" +JBS_ADM_JWPLAYER_CAPTIONS_DESC="Configures the layout of the closed captions rendering area (load captions using a playlist)." +JBS_ADM_JWPLAYER_CDN_LABEL="JWPlayer CDN URL" +JBS_ADM_JWPLAYER_CONTROL="Controls" +JBS_ADM_JWPLAYER_FALLBACK="FallBack" +JBS_ADM_JWPLAYER_FALLBACK_DESC="Whether to render a nice download link for the video if HTML5 and/or Flash are not supported. Can be true (a fallback is rendered) or false (the original HTML is not touched). Defaults to true." +JBS_ADM_JWPLAYER_GOOGLE_ANALYTICS="Google Analytics" +JBS_ADM_JWPLAYER_GOOGLE_ANALYTICS_DESC="Configures the Google Analytics connection for the Premium and Ads editions." +JBS_ADM_JWPLAYER_IMAGE="Image" +JBS_ADM_JWPLAYER_IMAGE_DESC="URL to a JPG/PNG poster image to display before playback is started. For audio-only media, the poster image stays visible during playback." +JBS_ADM_JWPLAYER_KEY_LABEL="Self-hosted player license key" +JBS_ADM_JWPLAYER_LISTBAR="ListBar" +JBS_ADM_JWPLAYER_LISTBAR_DESC="Configures a sidebar that displays all playlist entries." +JBS_ADM_JWPLAYER_LOGO="Logo" +JBS_ADM_JWPLAYER_LOGO_DESC="Configures an on-screen watermark for the Pro, Premium and Ads editions." +JBS_ADM_JWPLAYER_MUTE="Mute" +JBS_ADM_JWPLAYER_MUTE_DESC="Whether to have the sound muted on startup or not. Can be false (default) or true." +JBS_ADM_JWPLAYER_PLAYLIST="Playlist" +JBS_ADM_JWPLAYER_PLAYLIST_DESC="Config block with playlist data or RSS feed link. Enables all sophisticated media playback options, like multiple quality levels or closed captions." +JBS_ADM_JWPLAYER_PRIMARY="Primary" +JBS_ADM_JWPLAYER_PRIMARY_DESC="Which rendering mode to try first for rendering the player. Can be html5 (default) or flash." +JBS_ADM_JWPLAYER_PRIMARY_FLASH="Flash" +JBS_ADM_JWPLAYER_PRIMARY_HTML5="HTML5" +JBS_ADM_JWPLAYER_PRO="PRO" +JBS_ADM_JWPLAYER_RELATED="Related" +JBS_ADM_JWPLAYER_RELATED_DESC="Configures the Related Videos overlay for the Premium and Ads editions." +JBS_ADM_JWPLAYER_RTMP="RTMP" +JBS_ADM_JWPLAYER_RTMP_DESC="Configures the playback of specific types of RTMP streams." +JBS_ADM_JWPLAYER_SHARING="Sharing" +JBS_ADM_JWPLAYER_SHARING_DESC="Configures the Social Sharing overlay for the Pro, Premium and Ads editions." +JBS_ADM_JWPLAYER_SKIN="Skin" +JBS_ADM_JWPLAYER_SKIN_DESC="Which skin to use for styling the player (we call the default Six). Is set to the URL of that skin on your site. If you have purchased JW Player, you can load one of the 8 premium skins off our CDN by simply inserting the skin name (e.g. skin: ' bekle' ). See Using JW Player Skins for more info." +JBS_ADM_JWPLAYER_STAGE_VIDEO="Stage Video" +JBS_ADM_JWPLAYER_STAGE_VIDEO_DESC="Set this flag to false to disable GPU-accelerated image compositing in the Flash rendering mode. With some combinations of H264 parameters and GPU cards, we see inconsistent issues with rendering of the video image. Disabling Stage Video fixes this issue." +JBS_ADM_MATCHROWS="Match" +JBS_ADM_MEDIA_COMPAT_MODE="Compatibility Mode" +JBS_ADM_MEDIA_COMPAT_MODE_DESC="Use the JoomlaOregon website to route media file downloads. Enable this only if you are experiencing download problems." +JBS_ADM_MEDIA_PLAYER_POPUP_STAT="Media Players Popup Statistics:" +JBS_ADM_MEDIA_PLAYER_STAT="Media Players Statistics:" +JBS_ADM_MIGRATE="Migrate" +JBS_ADM_NEW_WINDOW="New Window" +JBS_ADM_NOMATCHROWS="Mismatch" +JBS_ADM_NO_DEFAULT="No default" +JBS_ADM_NO_FILTER="No Filter" +JBS_ADM_NO_OPTION_LISTED="No Option Listed" +JBS_ADM_NO_PODCAST="No Podcast" +JBS_ADM_NULLROWS="None" +JBS_ADM_OPTION_BLACK_LIST="Black List (Default)" +JBS_ADM_OPTION_NO_FILTER="No Filtering of HTML" +JBS_ADM_OPTION_NO_HTML="No HTML" +JBS_ADM_OPTION_WHITE_LIST="White List" +JBS_ADM_PARENT_WINDOW="Parent Window" +JBS_ADM_PERMISSIONS="Permissions/Filters" +JBS_ADM_PERMISSION_SETTINGS="Permissions Settings" +JBS_ADM_PLAYER_ADMIN_DESC="JW Player Global settings" +JBS_ADM_PLAYER_ADMIN_LABLE="JW Player Global settings" +CONVERSION_NOT_AVAILABLE_IN_900="Conversion tools not available in JBS Version 9.0.0 or 9.0.1" +JBS_ADM_PLAYER_SETTINGS="System Player Tools" +JBS_ADM_PLAYS_DOWNLOAD="Plays + Downloads" +JBS_ADM_POPULAR_LIMIT="Limit number of popular study links" +JBS_ADM_POPULAR_LIMIT_DESC="Set a limit for the number of popular studies to show on the drop down in the studieslist page. Set to show in template" +JBS_ADM_POPUP_OPTIONS="Pop Up Options" +JBS_ADM_RESET_ALIAS="Alias Entries" +JBS_ADM_RESET_ALL_DOWNLOAD_HITS="Reset All Download Hits" +JBS_ADM_RESET_ALL_HITS="Reset All Hits" +JBS_ADM_RESET_ALL_PLAYS="Reset All Plays" +JBS_ADM_ROWCOUNT="Rows" +JBS_ADM_SAME_WINDOW="Same Window" +JBS_ADM_SELECT_EXISTING_OPTION="Select an Existing Option" +JBS_ADM_SELECT_EXISTING_PLAYER="Select an Existing Player" +JBS_ADM_SELECT_NEW_OPTION="Select a New Option" +JBS_ADM_SELECT_NEW_PLAYER="Select a New Player" +JBS_ADM_SHARETYPE="Type of Social Media" +JBS_ADM_SHARETYPE_DESC="Choose whether to use internal Share or addthis.com social media sharing. If using addthis, no configuration needed." +JBS_ADM_SHOW_LOCATION_MEDIA="Show Location with Study on Media drop down" +JBS_ADM_SHOW_LOCATION_MEDIA_DESC="Choose Show if you want the location information to show up with the study and date on the drop down in the mediafile edit view on the backend" +JBS_ADM_SIMPLE_MODE="Simple Mode" +JBS_ADM_SIMPLE_MODE_DESC="This option turns off and on the CWM-Proclaim Simple Mode. Simple mode has fewer options and dedicated site views. This is a good choice for sites where simplicity of administering CWM-Proclaim is key" +JBS_ADM_SOCIALNETWORKING="Use Social Media Links" +JBS_ADM_SOCIALNETWORKING_DESC="Show or Hide links for users to post studydetails link on social media sites (configure on Social Media tab)" +JBS_ADM_STUDYLISTLIMIT="Study Limit in MediaFile" +JBS_ADM_STUDYLISTLIMIT_DESC="Limit for number of studies to show in MediaFile Record drop down on admin side - leave blank for all" +JBS_ADM_SYSTEM_DEFAULTS="System Defaults" +JBS_ADM_TABLENAMES="Table Name" +JBS_ADM_TEXT_FILTERS_DESC="Opt in for setting html filters for studytext" +JBS_ADM_TEXT_FILTERS_LABEL="Filter Text" +JBS_ADM_THUMBNAIL_SERIES_SIZE="Series thumbnail size (px):" +JBS_ADM_THUMBNAIL_SERIES_SIZE_DESC="Size of the thumbnail for series" +JBS_ADM_THUMBNAIL_STUDY_SIZE="Study thumbnail size (px):" +JBS_ADM_THUMBNAIL_STUDY_SIZE_DESC="Size of the thumbnail for study" +JBS_ADM_THUMBNAIL_TEACHER_SIZE="Teacher thumbnail size (px):" +JBS_ADM_THUMBNAIL_TEACHER_SIZE_DESC="Size of the thumbnail for teachers" +JBS_ADM_ARULESROWS="Rules Not Set" +JBS_ADM_MEDIATYPES_OPTIONS="Chaneg player by file type" +JBS_ADM_MEDIATYPES_DESC="Select MimeType or Extension. Then select player that you wan't to use for them." +JBS_ADM_JWPLAYER_RESPONSIVE_DESC="Responsive player like 16:9" +JBS_ADM_DATABASE="DataBase Fix" +JBS_ADM_SERIE_PC_SHOW="Podcast View Show" +JBS_ADM_SERIE_PC_SHOW_DESC="Show this series in the podcast listing page. Only good if you plan on doing MP3's" +JBS_ADM_MSG_DATABASE_SCHEMA_ERROR="Database schema version (%s) does not match JBSM version (%s)." +JBS_ADM_MSG_DATABASE_UPDATEVERSION_ERROR="Database update version (%s) does not match JBSM version (%s)." +JBS_ADM_MSG_DATABASE_UPDATEJBSMVERSION_ERROR="Database update table version (%s) does not match JBSM version (%s)." +JBS_ADM__MSG_DATABASE_UPDATE_VERSION="Update version (in #__bsms_update): %s" +JBS_ADM_UPLOAD_PATH="Upload Path: " +JBS_ADM_UPLOAD_PATH_DESC="Path to where the files will be located from root of host website. like http://www.example.com/path..." +JBS_ADM_FIELD_CHECK_MIME_DESC="Use MIME Magic or Fileinfo to attempt to verify files. Try disabling this if you get invalid mime type errors." +JBS_ADM_FIELD_CHECK_MIME_LABEL="Check MIME Types" +JBS_ADM_FIELD_IGNORED_EXTENSIONS_DESC="Ignored file extensions for MIME type checking and restricted uploads." +JBS_ADM_FIELD_IGNORED_EXTENSIONS_LABEL="Ignored Extensions" +JBS_ADM_FIELD_ILLEGAL_MIME_TYPES_DESC="A comma separated list of illegal MIME types to upload (blacklist)." +JBS_ADM_FIELD_ILLEGAL_MIME_TYPES_LABEL="Illegal MIME Types" +JBS_ADM_FIELD_LEGAL_EXTENSIONS_DESC=" Extensions (file types) you are allowed to upload (comma separated)." +JBS_ADM_FIELD_LEGAL_EXTENSIONS_LABEL="Legal Extensions (File Types)" +JBS_ADM_FIELD_LEGAL_IMAGE_EXTENSIONS_DESC=" Image extensions (file types) you are allowed to upload (comma separated). These are used to check for valid image headers." +JBS_ADM_FIELD_LEGAL_IMAGE_EXTENSIONS_LABEL="Legal Image Extensions (File Types)" +JBS_ADM_FIELD_LEGAL_MIME_TYPES_DESC="A comma separated list of legal MIME types to upload." +JBS_ADM_FIELD_LEGAL_MIME_TYPES_LABEL="Legal MIME Types" +JBS_ADM_FIELD_MAXIMUM_SIZE_DESC="The maximum size for an upload (in megabytes). Use zero for no limit. Note: your server has a maximum limit." +JBS_ADM_FIELD_MAXIMUM_SIZE_LABEL="Maximum Size (in MB)" +JBS_ADM_FIELD_PATH_FILE_FOLDER_DESC="Enter the path to the files folder relative to the root of your webspace. Warning! Changing to another path than the default 'images' may break your links. Note: Do not start the path with a slash!" +JBS_ADM_FIELD_PATH_FILE_FOLDER_LABEL="Path to Files Folder" +JBS_ADM_FIELD_PATH_IMAGE_FOLDER_DESC="Enter the path to the images folder relative to the root of your webspace. This path has to be the same as path to files (default) or to a subfolder of the path to file folder.. Note: Do not start the path with a slash!" +JBS_ADM_FIELD_PATH_IMAGE_FOLDER_LABEL="Path to Images Folder" +JBS_ADM_FIELD_RESTRICT_UPLOADS_DESC="Restrict uploads for lower than manager users to just images if Fileinfo or MIME Magic isn't installed." +JBS_ADM_FIELD_RESTRICT_UPLOADS_LABEL="Restrict Uploads" +JBS_ADM_FIELDSET_OPTIONS_LABEL="Media" +JBS_ADM_FOLDERS_PATH_LABEL="Warning! Path Folder
      Changing the 'Path to files folder' from the default of 'images' may break your links.
      The 'Path to images' folder has to be the same or a subfolder of 'Path to files'." + + +;; Archive +JBS_ADM_ARCHIVE="Archive" +JBS_CMN_ARCHIVE="Archive Studies & Media Files" +JBS_ARCHIVE_DB_CHANGE="We have archive %s Studies and %s Media Files with records older then %s." +JBS_ARCHIVE_TIMEFRAME_LABEL="How far back should we archive." +JBS_ARCHIVE_TIMEFRAME_DESC="From today's date, estemate how fare back you wish to archive. Example if you set 5 years any record back 5 years or older will be arechived" +JBS_ARCHIVE_SWICH_LABEL="How far back should we archive." +JBS_ARCHIVE_SWICH_DESC= "From today's date, estemate how far back you wish to archive. Example if you set 5 years any record back 5 years or older will be archived" + +;; BAT Batch process +JBS_BAT_DOWNLOAD_NOCHANGE="- No Download Change -" +JBS_BAT_MEDIATYPE_NOCHANGE="- No Media Image Change -" +JBS_BAT_MESSAGETYPE_DESC="Choose a new message type for the batch process" +JBS_BAT_MESSAGETYPE_NOCHANGE="- Do Not Change Message Type -" +JBS_BAT_MIMETYPE_DESC="Choose a mimetype for the batch process" +JBS_BAT_MIMETYPE_NOCHANGE="- No Mimetype Change -" +JBS_BAT_PLAYER_NOCHANGE="- No Player Change -" +JBS_BAT_POPUP_NOCHANGE="- No Popup Change -" +JBS_BAT_SERIES_DESC="Choose a new series" +JBS_BAT_SERIES_NOCHANGE="- Do Not Change Series -" +JBS_BAT_TEACHER_DESC="Choose a teacher for the batch process" +JBS_BAT_TEACHER_NOCHANGE="- Do Not Change Teacher -" + + +;; BBK Book of the Bibles Translations +;;; Old Testament +JBS_BBK_GENESIS="Genesis" +JBS_BBK_EXODUS="Exodus" +JBS_BBK_LEVITICUS="Leviticus" +JBS_BBK_NUMBERS="Numbers" +JBS_BBK_DEUTERONOMY="Deuteronomy" +JBS_BBK_JOSHUA="Joshua" +JBS_BBK_JUDGES="Judges" +JBS_BBK_RUTH="Ruth" +JBS_BBK_1SAMUEL="1Samuel" +JBS_BBK_2SAMUEL="2Samuel" +JBS_BBK_1KINGS="1Kings" +JBS_BBK_2KINGS="2Kings" +JBS_BBK_1CHRONICLES="1Chronicles" +JBS_BBK_2CHRONICLES="2Chronicles" +JBS_BBK_EZRA="Ezra" +JBS_BBK_NAHUM="Nahum" +JBS_BBK_ESTHER="Esther" +JBS_BBK_JOB="Job" +JBS_BBK_PSALM="Psalm" +JBS_BBK_PROVERBS="Proverbs" +JBS_BBK_ECCLESIASTES="Ecclesiastes" +JBS_BBK_SONG_OF_SOLOMON="Song of Solomon" +JBS_BBK_ISAIAH="Isaiah" +JBS_BBK_JEREMIAH="Jeremiah" +JBS_BBK_LAMENTATIONS="Lamentations" +JBS_BBK_EZEKIEL="Ezekiel" +JBS_BBK_DANIEL="Daniel" +JBS_BBK_HOSEA="Hosea" +JBS_BBK_JOEL="Joel" +JBS_BBK_AMOS="Amos" +JBS_BBK_OBADIAH="Obadiah" +JBS_BBK_JONAH="Jonah" +JBS_BBK_MICAH="Micah" +JBS_BBK_NEHEMIAH="Nehemiah" +JBS_BBK_HABAKKUK="Habakkuk" +JBS_BBK_ZEPHANIAH="Zephaniah" +JBS_BBK_HAGGAI="Haggai" +JBS_BBK_ZECHARIAH="Zechariah" +JBS_BBK_MALACHI="Malachi" + +;;; New Testament +JBS_BBK_MATTHEW="Matthew" +JBS_BBK_MARK="Mark" +JBS_BBK_LUKE="Luke" +JBS_BBK_JOHN="John" +JBS_BBK_ACTS="Acts" +JBS_BBK_ROMANS="Romans" +JBS_BBK_1CORINTHIANS="1Corinthians" +JBS_BBK_2CORINTHIANS="2Corinthians" +JBS_BBK_GALATIANS="Galatians" +JBS_BBK_EPHESIANS="Ephesians" +JBS_BBK_PHILIPPIANS="Philippians" +JBS_BBK_COLOSSIANS="Colossians" +JBS_BBK_1THESSALONIANS="1Thessalonians" +JBS_BBK_2THESSALONIANS="2Thessalonians" +JBS_BBK_1TIMOTHY="1Timothy" +JBS_BBK_2TIMOTHY="2Timothy" +JBS_BBK_TITUS="Titus" +JBS_BBK_PHILEMON="Philemon" +JBS_BBK_HEBREWS="Hebrews" +JBS_BBK_JAMES="James" +JBS_BBK_1PETER="1Peter" +JBS_BBK_2PETER="2Peter" +JBS_BBK_1JOHN="1John" +JBS_BBK_2JOHN="2John" +JBS_BBK_3JOHN="3John" +JBS_BBK_JUDE="Jude" +JBS_BBK_REVELATION="Revelation" + +;;; Apocrypha +JBS_BBK_TOBIT="Tobit" +JBS_BBK_JUDITH="Judith" +;Additnioins to Esther +JBS_BBK_1MACCABEES="1Maccabees" +JBS_BBK_2MACCABEES="2Maccabees" +JBS_BBK_WISDOM="Wisdom" +JBS_BBK_SIRACH="Sirach" +JBS_BBK_BARUCH="Baruch" + +;; CMT Comments +JBS_CMT_CHOOSE_STUDY_DESC="Select a study to connect this comment to. Required" +JBS_CMT_CREATE_DATE="Create Date" +JBS_CMT_CREATE_DATE_DESC="Create Date of Comment" +JBS_CMT_EMAIL="Email" +JBS_CMT_FULL_NAME="First and Last Name" +JBS_CMT_POST_COMMENT="Post a Comment" +JBS_CMT_REGISTER_TO_POST_COMMENTS="You must be registered to post comments" +JBS_CMT_SHOW_HIDE_COMMENTS="Show/Hide Comments" +JBS_CMT_TEXT="Comment Text" + +;; CPL Control Panel +JBS_CPL_CURRENT_VERSION="Current Version" +JBS_CPL_DATE="Date" +JBS_CPL_GENERAL_STAT="General Statistics" +JBS_CPL_INTRO="From here you can access all of the different views and tasks for creating and maintaining your sermons, messages, and studies. You can also find statistics about your studies located in one convenient place." +JBS_CPL_MENUE_LINKS="Menu Links" +JBS_CPL_NO_INFORMATION="No information available" +JBS_CPL_ONLINE_DOCUMENTATION="Online Documentation" +JBS_CPL_STATISTIC="Statistic" +JBS_CPL_TOP5_DOWNLOADS="Top 5 Downloads" +JBS_CPL_TOP5_DOWNLOADS_LAST_90DAYS="Top Downloads Last 90 Days" +JBS_CPL_TOP5_STUDIES_HITS="Top 5 Studies Hits" +JBS_CPL_TOP5_STUDIES_HITS_90DAYS="Top 5 Studies Hits 90 Days" +JBS_CPL_TOP_STUDIES_HITS_PLAYS_DOWNLOADS="Top Studies (hits, plays, downloads)" +JBS_CPL_TOTAL_COMMENTS="Total Comments" +JBS_CPL_TOTAL_DOWNLOADS="Total Downloads" +JBS_CPL_TOTAL_MEDIA_FILES="Total Media Files" +JBS_CPL_TOTAL_MESSAGES="Total Messages" +JBS_CPL_TOTAL_TOPICS="Total Topics" +JBS_CPL_VALUE="Value" +JBS_CPL_VERSION_INFORMATION="Version Information:" +JBS_CPL_VISIT_FAQ="Visit our Forum with questions" +JBS_CPL_PIM_TITLE="Post Message" +JBS_CPL_PIM_DESC="Please look at post installation massages as you have additional things to correct before proceeding on upgrade." +JBS_CPL_PIM_BUTTON="Go to PostMessages" +JBS_CPL_PIM_ERROR_TITLE="Error in Installation" +JBS_CPL_PIM_ERROR_DESC="There is a error in installation; please look at documentation to see how to fix." +JBS_CPL_PIM_ERROR_BUTTON="Error : CWM-Proclaim Documentation" + +;; IBM Install, Backup, Migrate +JBS_SUCCESS="records changed" +JBS_NOTHING_MATCHED="No matches found in database" +JBS_RESULTS="Results" +JBS_ERROR="Database update errors" +JBS_SELECT_IMAGE="Select an image" +JBS_IBM_IMAGES="Media Image Conversion" +JBS_ADM_MEDIA_IMAGES="Current Image" +JBS_IBM_NEW_IMAGES="New Image Settings" +JBS_IBM_OLD_IMAGES="Current Image" +JBS_IBM_CONVERT="JBS Conversion" +JBS_IBM_CONVERT_PREACH_IT="Convert to JBS from PreachIt" +JBS_IBM_CONVERT_SERMON_SPEAKER="Convert to JBS from Sermon Speaker" +JBS_IBM_CURRENT_JOOMLA_VERSION="Current Joomla Version" +JBS_IBM_ERROR_OCCURED_CREATING_TEACHERS="An error occured while creating teacher records" +JBS_IBM_ERROR_OCCURED_SERVER="An error occured while creating server record" +JBS_IBM_ERROR_OCCURED_SS_SERIES="An error occured while creating series records" +JBS_IBM_ERROR_PHP_UPLOAD_NOT_ENABLED="Error: Upload is not enabled in php.ini." +JBS_IBM_ERROR_UPLOAD_FAILED="Error: Upload of file failed." +JBS_IBM_IMPORT_FROM_BACKUP_FOLDER="Import Database from backup folder" +JBS_IBM_IMPORT_FROM_FILE="Import from a file" +JBS_IBM_IMPORT_FROM_TMP_FOLDER="Import Database from tmp folder" +JBS_IBM_IMPORT_MIGRATE_FROM_SERVER_FOLDER="Import from server folder" +JBS_IBM_IMPORT_ONLY="Import Database" +JBS_IBM_INSTALLDB_ERRORS="Error installing the database" +JBS_IBM_MAX_EXECUTION_TIME="Maximum script execution time in seconds (large database may not have time to import)" +JBS_IBM_MAX_UPLOAD="Maximum upload allowed in your php.ini file using post_max_size is" +JBS_IBM_MEDIAFILES_CREATED="Mediafiles converted for" +JBS_IBM_MIGRATE_NOT_OLD_DB="This file is for the current version of CWM-Proclaim. Please use import." +JBS_IBM_NOTE_ERRORS="Please note any error messages below" +JBS_IBM_NOT_CONVERTED="Not converted: " +JBS_IBM_NOT_CURENT_DB="This file is not for the current version of CWM-Proclaim. Please use Migration to upgrade from this file." +JBS_IBM_NOT_DB="This is not a CWM-Proclaim SQL File. Please use this only for CWM-Proclaim SQL Files" +JBS_IBM_NO_MINISTRIES="No ministries found to convert" +JBS_IBM_NO_PODCASTS="No podcasts found to convert" +JBS_IBM_NO_PREACHIT_FOUND="No version of PreachIt found" +JBS_IBM_NO_SERIES="No series found to convert" +JBS_IBM_NO_SERIES_FOUND_SS="No series found in Sermon Speaker" +JBS_IBM_NO_SERMON_SPEAKER_FOUND="No version of Sermon Speaker found" +JBS_IBM_NO_STUDIES="No studies found to convert" +JBS_IBM_NO_TEACHERS_FOUND_SS="No teachers found in Sermon Speaker component" +JBS_IBM_OLDPREFIX="Copy/Migrate Tables" +JBS_IBM_OLDPREFIXDESC1="Enter old database prefix (with underline. Like: jos_). " +JBS_IBM_OLDPREFIXDESC2="Press submit to migrate. Old and New sites must use the same database." +JBS_IBM_OLDPREFIXDESC3="Function will drop new tables (if exist) before copying." +JBS_IBM_OLD_DB="This is a database from an old version. Migrate first!" +JBS_IBM_PI_COMMENTS="Comments converted: " +JBS_IBM_PI_FOLDERS="Folders converted: " +JBS_IBM_PI_MEDIA="Media Files converted: " +JBS_IBM_PI_PODCAST="Podcasts converted: " +JBS_IBM_PI_SERIES="Series converted: " +JBS_IBM_PI_SERVERS="Servers converted: " +JBS_IBM_PI_STUDIES="Studies converted: " +JBS_IBM_PI_TEACHERS="Teachers converted: " +JBS_IBM_PREACHIT_RESULTS="PreachIt Conversion Results" +JBS_IBM_REVIEW_ADMIN_TEMPLATE="Please review Admin and Template settings. View settings are set differently in this version of JBS." +JBS_IBM_SAVE_DB="Save your JBS database to /media/com_biblestudy/backup" +JBS_IBM_SELECT_DB="Select a database file to restore" +JBS_IBM_SERIES_CONVERTED="Series converted" +JBS_IBM_SERMONS_CREATED_FOR="Sermons converted for" +JBS_IBM_SERVER_RECORD_ADDED="Server Record Added" +JBS_IBM_SHOW_JBSMIGRATION_LABEL="Show Migration Tab" +JBS_IBM_SHOW_JBSMIGRATION_LABEL_DESC="Choose whether or not to show the tab that allows you to migrate from Joomla 1.5 versions of CWM-Proclaim. This should only need to be shown once" +JBS_IBM_TEACHERS_CREATED="Teachers converted" +JBS_IBM_VERSION_TOO_OLD="You must upgrade to at least JBS version 6.0.8 to migrate. Please contact customer service at www.joomlabiblestudy.org" +JBS_LBL_REDIRECT_IN_3S="Will Redirect in 3s" + +;; Assets +JBS_FIXASSETS_WORKING="Fix Assets Working" +JBS_FIXASSETS_DONE="Fix Assets Done" +JBS_LBL_AUTOCLOSE_IN_3S="Window will close in 3s" + +;; INS Install -> also see xx-XX.com_biblestudy.sys.ini +; Install strings ; duplicate? see IBM +JBS_INS_DATABASE_SCHEMA_DOES_NOT_MATCH="Database schema (%s) does not match current version (%s)" +JBS_INS_INSTALLATION_RESULTS="CWM-Proclaim Results - %s" +JBS_INS_WARNING_INSTALL="You have tryed to access a page that is not permitted" +JBS_INS_XML_DESCRIPTION="CWM-Proclaim" +JBS_INS__MSG_DATABASE_UPDATEVERSION_ERROR="Database update version (%s) does not match CWM-Proclaim version (%s)." + +; Preflight and postflight strings ; duplicate? see IBM +JBS_INS_CLICK_TO_FINISH="Click Here To Finish" +JBS_INS_ERROR_SQL_READBUFFER="Could not read the sql file" +JBS_INS_GET_MORE_HELP="Get more help and information at ChristianWebMinistries.org" +JBS_INS_RESETDB="Reset Database to Defaults" +JBS_INS_SQL_UPDATE_ERRORS="Errors Parsing the SQL Update files: %s" +JBS_INS_TITLE="CWM-Proclaim" +JBS_INS_VISIT_DOCUMENTATION="Visit our Documentation Site" +JBS_INS_VISIT_FORUM="Visit our forum with your questions" + +; PostInstall Messages +JBS_POSTINSTALL_TITLE_TEMPLATE="Template Upgrade" +JBS_POSTINSTALL_BODY_TEMPLATE="Version 9.x of CWM-Proclaim uses the native Bootstrap system to create responsive views. You MUST reconfigure your views for this version. In order to implement this on your website, go to Templates and open the default record. Choose what items you want to display, the html styling (9.x uses your site template css), and spans in the items to display according to how wide you want them. Span1 is 1/12 of the width of the screen; Span12 is the entire width." +JBS_POSTINSTALL_ACTION_TEMPLATE="Update Template Settings" +JBS_POSTINSTALL_TITLE_FONTAWESOME="Font Awesome update to v5" +JBS_POSTINSTALL_BODY_FONTAWESOME="We have updated Font Awesome to v5. We have place v4 backwords compadibility script to acomidate." + +; Uninstall strings (used when the extension is uninstalled) ; duplicate? see IBM +JBS_INS_NO_DATABASE_REMOVED="Uninstall Results: Database tables have not been removed. To complete remove CWM-Proclaim Management System, remove all database tables that start with #__bsms (or jos_bsms in most cases)." +JBS_INS_UNINSTALLED="CWM-Proclaim Plugins, and Modules have uninstalled" + +;Migration ; duplicate? see IBM +JBS_MIG_FINISHED="Finished" +JBS_MIG_MIGRATION_DONE="CWM-Proclaim Migration - Finished." +JBS_MIG_PROCESSING="Processing:" +JBS_MIG_TITLE="CWM-Proclaim Migration" +JBS_MIG_STARTING="Starting" +JBS_MIG_WORKING="CWM-Proclaim Migration - still working" + +;; LOC Locations +JBS_LOC_LOCATION_NAME="Location Name" + +;; MDL Module specific strings +JBS_MDL_AND="AND" +JBS_MDL_AND_OR="And/Or" +JBS_MDL_AND_OR_DESC="Choose whether condition between fields should be OR or AND" +JBS_MDL_EXPERT_MODE="Expert Module Template" +JBS_MDL_FILTERS="Filter" +JBS_MDL_HEADER_TEXT="Module Header" +JBS_MDL_HEADER_TEXT_DESC="Add html or text to go above the listing" +JBS_MDL_ITEMS="Number of Items to show" +JBS_MDL_ITEMS_DESC="Choose a number of messages to show on the module display" +JBS_MDL_LANGUAGE_DESC="Choose a language as a filter for studies that show up on the module list." +JBS_MDL_LINK_TEXT="Text to display in link" +JBS_MDL_LINK_TEXT_DESC="Enter the text for the link to display in the module footer" +JBS_MDL_MEDIA="Media Settings" ; duplicate? +JBS_MDL_MEDIA_STORE_PAGE="Virtuemart Display Page" +JBS_MDL_MEDIA_STORE_PAGE_DESC="If using Virtuemart item, setting for display page in url to store item." +JBS_MDL_MORE_SETTINGS="More Settings" +JBS_MDL_OR="OR" +JBS_MDL_SELECT_TEMPLATE="Template for this page" +JBS_MDL_SELECT_TEMPLATE_DESC="Choose a template for your page" +JBS_MDL_SHOW_COMPONENT="Show/Hide component link" +JBS_MDL_SHOW_COMPONENT_DESC="Choose whether to show or hide a link to the main CWM-Proclaim component at the bottom of the module display" +JBS_MDL_TEMPLATE="Template File" +JBS_MDL_TEMPLATE_DESC="Choose a template file you created in the Admin/Template Files area or choose default" +JBS_MDL_TOOLTIP="ToolTip Options" +JBS_MDL_USE_LIST_HEADER="Use List Header" +JBS_MDL_USE_LIST_HEADER_DESC="Use the header from the default listing" + +;; MED Media File Info and selections +JBS_MED_NONE="Use image" +JBS_MED_SERVER_OPTIONS="Use Server Settings" +JBS_MED_BUTTON_ONLY="Button Only" +JBS_MED_BUTTON_AND_ICON="Button and Icon" +JBS_MED_ICON_ONLY="Icon Only" +JBS_MED_RECORDS="Records:" +JBS_MED_NO_COLOR="No Color" +JBS_MED_PRIMARY="Blue" +JBS_MED_SUCCESS="Green" +JBS_MED_INFO="Light Blue" +JBS_MED_WARNING="Orange" +JBS_MED_DANGER="Red" +JBS_MED_PLAY="MP3/Audio" +JBS_MED_YOUTUBE="YouTube" +JBS_MED_VIDEO="Video" +JBS_MED_BROADCAST="Broadcast/Podcast" +JBS_MED_FILE="File" +JBS_MED_FILE_PDF="PDF" +JBS_MED_VIMEO="Vimeo" +JBS_MED_BUTTON="Button" +JBS_MED_TEXT="Text" +JBS_MED_ICON="Icon" +JBS_MED_IMAGE="Image" +JBS_MED_CUSTOM="Custom Icon" +JBS_MED_ACCESS="Access" +JBS_MED_ADD_THIRD_PARTY_URL="Add your Third Party URL" +JBS_MED_APPEARS_UNDER_FILE_OR_TOOLTIP="Appears under file or in Tooltip - set in Template parameters" +JBS_MED_AVRELOADED_DESC="Embedded code: Paste embed code for your media. Choose 'Embed Code' for the player. Nothing else is needed.
      Video player plugin All Videos or JPlayer: Enter opening and closing codes like {mp3remote}-{/mp3remote}. Be SURE to put a dash (-) between the codes. If you choose the parameter for all files to be played using All Videos the component will attempt to fill in the proper code even if you put nothing. You may also put in a file name between the {} and {/}. If you do the component will simply pass on that code to All Videos.
      You can insert text before the dash or after if you need to. Like: {mp3remote}http://-{/mp3remote} inserts that text before your path and filename (The system removes the -). BE SURE TO SET THE USE ALL VIDEOS PARAMETER ON THIS PAGE." +JBS_MED_CHOOSE_MIMETYPE="Choose a Mime Type" +JBS_MED_CHOOSE_MIMETYPE_DESC="If you can't find the mime type here please refer to Mime type standards W3C" +JBS_MED_CHOOSE_PODCAST="Choose Podcast(s)" +JBS_MED_CHOOSE_PODCAST_DESC="You may select mutliple podcasts by using ctrl-click" +JBS_MED_CHOOSE_STUDY_DESC="Select a study to connect this media file to. Required" +JBS_MED_CREATE_DATE="Created" +JBS_MED_CREATE_DATE_DESC="Creation date of media file. suggest you use the date of the service or sermon" +JBS_MED_DOCMAN_ITEM="DocMan Item" +JBS_MED_DOCMAN_ITEM_DESC="Select a DocMan item. Must be installed and a menu created for DocMan (even if invisible)" +JBS_MED_DOCMAN_SELECT="Select a Docman document" +JBS_MED_DOWNLOAD="Download" +JBS_MED_DOWNLOADS_DESC="This shows the number of time this media has been download." +JBS_MED_ENTER_SERVER="Enter Server" +JBS_MED_ERROR_MOVING_FILE="Error moving file" +JBS_MED_ERROR_NO_FILE="Error: no file found" +JBS_MED_ERROR_PARTIAL_UPLOAD="Error: Partial upload only" +JBS_MED_FIELDS_INVALID="Invalid" +JBS_MED_FILENAME="Filename" +JBS_MED_FILESIZE_CONVERTER="Filesize Converter" +JBS_MED_FILESIZE_DESC="File size is in bytes" +JBS_MED_FILE_BIGGER_THAN="Error: File bigger than: " +JBS_MED_FILE_NO_UPLOADED="Error: File not uploaded" +JBS_MED_FILE_NO_UPLOADED_AWS="No Uploaded Files to AWS" +JBS_MED_FILE_NO_UPLOADED_FTP="Error: Cannot upload using ftp" +JBS_MED_FILE_TOO_LARGE_THAN_PHP_INI_ALLOWS="Error: File larger than php.ini allows" +JBS_MED_FILE_TO_LARGE_THAN_HTML_FORM_ALLOWS="Error: File larger than HTML form allows" +JBS_MED_FILE_UPLOADED="File Uploaded" +JBS_MED_FILTER_DOWNLOAD="- Select Download Type -" +JBS_MED_FTP_NO_CHMOD="Error: Cannot CHMOD the file" +JBS_MED_FTP_NO_CONNECT="Error: Cannot connect to ftp" +JBS_MED_FTP_NO_LOGIN="Error: Cannot login to ftp" +JBS_MED_FTP_NO_UPLOAD="Error: Cannot upload via ftp" +JBS_MED_IMAGE_DESC="Choose media image to be displayed" +JBS_MED_INTERNAL_POPUP="Display as popup/New Window or inline" +JBS_MED_INTERNAL_POPUP_DESC="Choose whether the internal viewer should be a popup or inline. If direct then plays in new window. Affects this file only. Overrides global settings" +JBS_MED_LINK_TARGET="Target" +JBS_MED_LINK_TARGET_DESC="Target for link (ie: _self, _blank etc)" +JBS_MED_LINK_TARGET_BLANK="_blank" +JBS_MED_LINK_TARGET_SELF="_self" +JBS_MED_LINK_TARGET_PARENT="_parent" +JBS_MED_LINK_TARGET_TOP="_top" +JBS_MED_MEDIA_FILES="Media File Information" +JBS_MED_MEDIA_FILES_DETAILS="Media File Details" +JBS_MED_MEDIA_FILES_LINKER="Media File Linker" +JBS_MED_MEDIA_FILES_SETTINGS="Media File Settings" +JBS_MED_MEDIA_FILES_STATS="Plays/Downloads" +JBS_MED_MEDIA_POPUPFOOTER="Popup Footer Elements" +JBS_MED_MEDIA_POPUPMARGIN="Height Margin for Popup" +JBS_MED_MEDIA_POPUPMARGIN_DESC="Set space above and below popup for header and footer. Affects only this file" +JBS_MED_MEDIA_POPUPTITLE="Popup Title Elements" +JBS_MED_MEDIA_POPUPTITLE_FOOTER_DESC="Overrides global settings. Use any html. Display Codes: {{teacherimage}}, {{title}}, {{studydate}}, {{teacher}}, {{filename}}, {{description}}, {{length}}, {{series}} {{series_thumbnail}}" +JBS_MED_MEDIA_TYPE="Media Type" +JBS_MED_NO_DOWNLOAD_ICON="No Download icon" +JBS_MED_PATH="Server URL Path" +JBS_MED_PATH_DESC="The Server URL Path to the url not including the http or https" +JBS_MED_PATH_OR_FOLDER="Path or Folder" +JBS_MED_PATH_OR_FOLDER_DESC="Select the folder the media is under" +JBS_MED_PDF="PDF" +JBS_MED_PLAYER="Player for this Media" +JBS_MED_PLAYERHIGHT="Custom height for internal player or window" +JBS_MED_PLAYERHIGHT_DESC="Set a height attribute for the internal player or direct link that will play in a new window. 400 assumed. Only affects this mediafile" +JBS_MED_PLAYERWIDTH="Custom width for internal player or window" +JBS_MED_PLAYERWIDTH_DESC="Set a width for the player or direct link that will play in a new window. 300 assumed if nothing added. Affects only this file" +JBS_MED_PLAYER_DESC="Choose which media player to use, overrides global settings." +JBS_MED_PLAYS_DESC="This shows the number of time this media has be played" +JBS_MED_POPUP="Popup type for this Media" +JBS_MED_RESOURCE_NAME="Resource Name" +JBS_MED_SELECT_ARTICLE="Select an Article" +JBS_MED_SELECT_DOCMAN="Select a DocMan item" +JBS_MED_SELECT_FOLDER="Select an upload folder" +JBS_MED_SELECT_MEDIA_TYPE="- Select a Media Type -" +JBS_MED_SELECT_SERVER="Select an upload server" +JBS_MED_SELECT_VM_ITEM="Select VirtueMart Item" +JBS_MED_SERVER_DESC="Select the server the media is on" +JBS_MED_SHOW_DOWNLOAD_ICON="Show Download Icon" +JBS_MED_SHOW_DOWNLOAD_ICON_DESC="Download icon can be hidden, shown in conjuntion with media or only the download icon" +JBS_MED_SHOW_ONLY_DOWNLOAD_ICON="Show Only Download icon" +JBS_MED_SURE_OVERWRITE_DETAILS="Share Overite Details" +JBS_MED_UPLOAD="Upload" ; duplicate +JBS_MED_UPLOAD_EXISTS="Error: File already exists" +JBS_MED_UPLOAD_FAILED_CHECK_PATH="Error: path failed check." +JBS_MED_UPLOAD_FAILED_NOT_UPLOAD_THIS_FOLDER="Error: Failed to upload to this folder" +JBS_MED_UPLOAD_FAILED_NO_FOLDER="Error: Folder does not exist on server" +JBS_MED_USE_ARTICLE="Use Article" +JBS_MED_USE_DOCMAN="Use DOCman" +JBS_MED_USE_DOCMAN_DESC="Select an item from DocMan sorted by id descending. This will link to the download of the file in DocMan" +JBS_MED_USE_FILENAME_AS_PATH="Use file name as entire path if you wish. Just don't select a server or path.(Don't use this option if uploading)" +JBS_MED_VIRTUEMART_ITEM="Select a VirtueMart item" +JBS_MED_VIRTUEMART_ITEM_DESC="If installed, virtuemart items will appear in descending order by product id along with their SKU number. This will become the link from the media file to the store with that product id" +JBS_MED_SAVE="Media Saved" +JBS_MED_MEDIA_POPOUT_YES="Pop Out:" +JBS_MED_MEDIA_POPOUT_YES_DESC="Should Pop Out show on Squeezebox." +JBS_MED_MEDIA_POPOUT_TEXT="Pop Out Text:" +JBS_MED_MEDIA_POPOUT_TEXT_DESC="Text to to use for button on overiding the default text." + +;; MNU Menu --> moved to xx-XX.com_biblestudy.sys.ini + +;; MST Message Type +JBS_MST_MESSAGETYPE_DESC="Enter some text for this message type / occasion" +JBS_MST_MESSAGETYPE_TEXT="Message Type Text" + +;; PDC Podcast Section +JBS_PDC_ALTERNATE_IMAGE="Podcast alternate image" +JBS_PDC_ALTERNATE_IMAGE_DESC="Choose an image for the alternate podcast feed" +JBS_PDC_ALTERNATE_LINK="Alternate Podcast Link" +JBS_PDC_ALTERNATE_LINK_DESC="You can use this to override the use of the filename. For instance if you have an iTunes podcast" +JBS_PDC_ALTERNATE_WORDS="Label for alternate feed" +JBS_PDC_ALTERNATE_WORDS_DESC="" +JBS_PDC_BOOK_CHAPTER="Book + Chapter" +JBS_PDC_EDITORS_EMAIL="Editor's Email Address" +JBS_PDC_EDITORS_NAME="Editor's Name" +JBS_PDC_EPISODES_CUSTOM_DESC="Use Codes and text.

      CODES

      {scripture1} - Scripture Reference
      {scripture2} - Secondary Scripture Reference
      {secondary} - Secondary Scripture Reference
      {duration} - Duration
      {studytitle} - Study Title
      {teacher} - Teachers Name
      {date} - Date
      {studyintro} - Study Description
      {location_text} - Location
      {message_type} - Message Type
      " +JBS_PDC_EPISODE_DATE_SCRIPTURE_TITLE="Date + Scripture + Title" +JBS_PDC_EPISODE_SCRIPTURE_ONLY="Scripture Only" +JBS_PDC_EPISODE_SCRIPTURE_TITLE="Scripture + Title" +JBS_PDC_EPISODE_SUBTITLE="Episode Subtitle" +JBS_PDC_EPISODE_TEACHER_SCRIPTURE="Teacher & Scripture" +JBS_PDC_EPISODE_TITLE="Episode Title" +JBS_PDC_EPISODE_TITLE_ONLY="Title Only" +JBS_PDC_EPISODE_TITLE_SCRIPTURE="Title + Scripture" +JBS_PDC_IMAGE="Podcast Image" +JBS_PDC_IMAGE_DESC="Used for the 'image' section within the podcast XML file." +JBS_PDC_LINKTYPE="Link Type" +JBS_PDC_LINKTYPE_DESC="Type of link to use for podcast.
      0 = Default is to episode
      1 = Direct Link.
      2 = Popup Player Window with default player as internal." +JBS_PDC_LINK_EPISODE="To Episode" +JBS_PDC_LINK_DIRECT_MEDIA="To Direct Media" +JBS_PDC_LINK_MEDIA_PLAYER="To Media Player Internal" +JBS_PDC_NUM_RECORDS_INCLUDE="Number of Records to include" +JBS_PDC_NUM_RECORDS_INCLUDE_DESC="Max. number of records (blank or '0' for all)" +JBS_PDC_PODCAST_AUTHOR="Podcast Author" +JBS_PDC_PODCAST_DESCRIPTION="Description of Podcast (500 Max)" +JBS_PDC_PODCAST_IMAGES="Podcast Images" +JBS_PDC_PODCAST_LANGUAGE="Podcast language" +JBS_PDC_PODCAST_LOGO="Podcast Logo" +JBS_PDC_PODCAST_LOGO_DESC="Used for the 'itunes:image' section within the podcast XML file." +JBS_PDC_PODCAST_NAME="Podcast Name" +JBS_PDC_PODCAST_NAME_DESC="Alias name to describe the podcast" +JBS_PDC_PODCAST_SEARCH_WORDS="Podcast Search Words (seperate with commas)" +JBS_PDC_PODCAST_SHOW="Subscription Display" +JBS_PDC_PODCAST_SHOW_ALTERNATE="Show alternate link only" +JBS_PDC_PODCAST_SHOW_BOTH="Show both main and alternate" +JBS_PDC_PODCAST_SHOW_DESC="Choose how you want this podcast displayed in the subscription box" +JBS_PDC_PODCAST_SHOW_MAIN="Show main podcast only" +JBS_PDC_PODCAST_SHOW_NO="Do not show in subscription" +JBS_PDC_PODCAST_XML_FILENAME="Podcast XML filename" +JBS_PDC_PODCAST_XML_FILENAME_DESC="Podcast XML filename (path from root - NO http://www.site.org - Just filename to put in root - recommended) like just biblestudies.xml" +JBS_PDC_SUBSCRIBE_IMAGE="Podcast subscribe image" +JBS_PDC_SUBSCRIBE_IMAGE_DESC="Choose an image to use on the subscription module" +JBS_PDC_SUBSCRIBE_WORDS="Label for podcast subscription" +JBS_PDC_SUBSCRIBE_WORDS_DESC="A word or words to go under the image for the podcast subscription. Leave blank for none" +JBS_PDC_TEMPLATE_FOR_DETAILS_VIEW_LINK="Template for Details View Link" +JBS_PDC_WEBSITE_URL="Website url (NO http://)" +JBS_PDC_WRITE_XML_FILES="Write XML Files" +JBS_PDC_XML_FILES_ERROR="There were errors in publishing your podcasts. Please check the site file(s)." +JBS_PDC_XML_FILES_WRITTEN="Podcast successfully published" +JBS_PDC_XML_TTITLE="XML File" +JBS_PDC_XML="XML" + +;; PLG Plugin specific strings (all plugins) +PLG_JBSBACKUP_HEADER="Your site's CWM-Proclaim database backup" +JBS_PLG_BACKUP_EMAIL_MSG_ERROR="Errors in backup process" +JBS_PLG_BACKUP_EMAIL_MSG_SUCCESS="Backup was successful" +JBS_PLG_BACKUP_FILES="Number of backup files to keep" +JBS_PLG_BACKUP_FILES_DESC="After this number of backups have been created the oldest will be deleted" +JBS_PLG_BACKUP_INCLUDEDB="Include database file" +JBS_PLG_BACKUP_INCLUDEDB_DESC="Choose whether or not to include a zip file of the jbs backup database with the email as an attachment" +JBS_PLG_PODCASTBACKUP_CHOOSE_DAY="Choose a day to generate" +JBS_PLG_PODCASTBACKUP_CHOOSE_HOUR="Choose an hour to generate" +JBS_PLG_PODCASTBACKUP_DAY10="Day 10" +JBS_PLG_PODCASTBACKUP_DAY1="Day 1" +JBS_PLG_PODCASTBACKUP_DAY2="Day 2" +JBS_PLG_PODCASTBACKUP_DAY3="Day 3" +JBS_PLG_PODCASTBACKUP_DAY4="Day 4" +JBS_PLG_PODCASTBACKUP_DAY5="Day 5" +JBS_PLG_PODCASTBACKUP_DAY6="Day 6" +JBS_PLG_PODCASTBACKUP_DAY7="Day 7" +JBS_PLG_PODCASTBACKUP_DAY8="Day 8" +JBS_PLG_PODCASTBACKUP_DAY9="Day 9" +JBS_PLG_PODCASTBACKUP_EMAIL_BODY="Body" +JBS_PLG_PODCASTBACKUP_EMAIL_SEND="Send email notification" +JBS_PLG_PODCASTBACKUP_EMAIL_SEND_DESC="Select Yes to send an email when the generation has been started." +JBS_PLG_PODCASTBACKUP_EMAIL_SUBJECT="Subject" +JBS_PLG_PODCASTBACKUP_EMAIL_TO="To Email address(s)" +JBS_PLG_PODCASTBACKUP_EMAIL_TO_DESC="Email address to notify. Leave empty to send to the system default email address. Specify multiple addresses by separating them with a comma." +JBS_PLG_PODCASTBACKUP_GENERATE_EVERY="Generate every x hours" +JBS_PLG_PODCASTBACKUP_GENERATE_EVERY_DESC="Run generation every hour after the last run. (Enter 24 for once a day)" +JBS_PLG_PODCASTBACKUP_GENERATE_METHOD="Choose generation method" +JBS_PLG_PODCASTBACKUP_GENERATE_METHOD_DESC="Choose whether to generate by hour or by specific day/time" +JBS_PLG_PODCASTBACKUP_HOURS="By Hours" +JBS_PLG_PODCASTBACKUP_HOUR_DAY10="Hour of Day 10" +JBS_PLG_PODCASTBACKUP_HOUR_DAY1="Hour of Day 1" +JBS_PLG_PODCASTBACKUP_HOUR_DAY2="Hour of Day 2" +JBS_PLG_PODCASTBACKUP_HOUR_DAY3="Hour of Day 3" +JBS_PLG_PODCASTBACKUP_HOUR_DAY4="Hour of Day 4" +JBS_PLG_PODCASTBACKUP_HOUR_DAY5="Hour of Day 5" +JBS_PLG_PODCASTBACKUP_HOUR_DAY6="Hour of Day 6" +JBS_PLG_PODCASTBACKUP_HOUR_DAY7="Hour of Day 7" +JBS_PLG_PODCASTBACKUP_HOUR_DAY8="Hour of Day 8" +JBS_PLG_PODCASTBACKUP_HOUR_DAY9="Hour of Day 9" +JBS_PLG_PODCASTBACKUP_SCHEDULE="By Schedule" +JBS_PLG_PODCASTBACKUP_SERVER_NO_OFFSET="No Offset" +JBS_PLG_PODCASTBACKUP_SERVER_OFFSET="Use Server Time Offset" +JBS_PLG_PODCASTBACKUP_SERVER_OFFSET_DESC="If time settings are off, try adjusting to configuration time offset set in Global" +JBS_PLG_PODCASTBACKUP_SERVER_USE_OFFSET="Use Offset" +JBS_PLG_PODCAST_EMAIL_BODY_RUN="Process run at: " +JBS_PLG_PODCAST_ONLY_EMAIL_ERRORS="Email only on error" +JBS_PLG_SEARCH_LIMIT="Search Limit" +JBS_PLG_SEARCH_LIMIT_DESC="Number of Search items to return" +JBS_PLG_SEARCH_DESCRIPTION="Hide/Show Description" +JBS_PLG_SEARCH_DESCRIPTION_DESC="Choose whether to hide or show the description on the search results page" +JBS_PLG_SEARCH_HIDE="Hide" +JBS_PLG_SEARCH_SHOW="Show" +JBS_PLG_SEARCH_TITLE="Choose Title" +JBS_PLG_SEARCH_TITLE_DESC="Choose whether the book or the study title is first" +JBS_PLG_SEARCH_BOOK_FIRST="Book First" +JBS_PLG_SEARCH_STUDY_FIRST="Study Title First" +JBS_PLG_SEARCH_FIELD_CONTENT="Studies" +JBS_PLG_SEARCH_FIELD_CONTENT_DESC="Show published studies" +JBS_PLG_SEARCH_FIELD_ARCHIVED="Archived" +JBS_PLG_SEARCH_FIELD_ARCHIVED_DESC="Show archived studies" + +;; SER Series +JBS_SER_RETURN_SERIES_LIST="Return To Series List" +JBS_SER_SERIES_NAME="Series Name" +JBS_SER_STUDIES_FROM_THIS_SERIES="Studies From This Series" + +;; SHR Sharing Networks +JBS_SHR_ALTTEXT="Alt Text" +JBS_SHR_ALTTEXT_DESC="Enter Title for site as alttext or hover text." +JBS_SHR_API="bit.ly appkey" +JBS_SHR_API_DESC="Not required. If using your own bit.ly user, enter your api key here." +JBS_SHR_ITEM1CUSTOM="Custom for Item 1" +JBS_SHR_ITEM1PREFIX="Prefix for Item 1" +JBS_SHR_ITEM2CUSTOM="Custom for Item 2" +JBS_SHR_ITEM2PREFIX="Prefix for Item 2" +JBS_SHR_ITEM3CUSTOM="Custom for Item 3" +JBS_SHR_ITEM3PREFIX="Prefix for Item 3" +JBS_SHR_ITEM4CUSTOM="Custom for Item 4" +JBS_SHR_ITEM4PREFIX="Prefix for Item 4" +JBS_SHR_ITEM="Select an item to display" +JBS_SHR_ITEMCUSTOM_DESC="Enter a custom string including text and multiple items in brackets - see labels on drop down lists" +JBS_SHR_ITEMPREFIX_DESC="Enter a prefix to be used before this item like u=" +JBS_SHR_ITEM_DESC="Select an item from the drop down list to display here" +JBS_SHR_LINK_STUDY="Link to study" +JBS_SHR_MAINLINK="Main link to site and file" +JBS_SHR_MAINLINK_DESC="Enter a site and the main file used for social network sharing. Enter a complete url" +JBS_SHR_NAME="Name" +JBS_SHR_SHAREIMAGE="Share image" +JBS_SHR_SHAREIMAGEH="Height of image" +JBS_SHR_SHAREIMAGEHW_DESC="Can be number or number with px." +JBS_SHR_SHAREIMAGEW="Width of image" +JBS_SHR_SOCIAL_NETWORK="Social Network" +JBS_SHR_TOTALCHARACTERS="Total Characters" +JBS_SHR_TOTALCHARACTERS_DESC="Total characters for string not including the path to the site." +JBS_SHR_USERNAME="Enter your bit.ly username if you have one" +JBS_SHR_USERNAME_DESC="This is not required. If left blank you will use CWM-Proclaim's user name" +JBS_SHR_USE_BITLY="Use link shortener bit.ly" +JBS_SHR_USE_BITLY_DESC="Shortens the link. Helps mainly for services like Twitter that only take a certain number of characters" + +;; STY Study List and Edit +JBS_STY_ADD_MEDIA_FILE="Add Media File" +JBS_STY_BOOK2="Book 2" +JBS_STY_CHAPTER_BEGIN2="Ch Begin 2" +JBS_STY_CHAPTER_BEGIN="Ch Begin" +JBS_STY_CHAPTER_END2="Ch End 2" +JBS_STY_CHAPTER_END="Ch End" +JBS_STY_CLICK_TO_OPEN_PASSAGE="Click to open Bible Reference" +JBS_STY_COMMENTS_DESC="Allow comments for this study? -No- overrides global setting for this study only" +JBS_STY_COMMENT_NOT_PUBLISHED="This comment has not been published." +JBS_STY_COMMENT_PUBLISHED="This comment has been published." +JBS_STY_COMMENT_SUBMITTED="Comment Added" +JBS_STY_COMMENT_UNPUBLISHED="Comment Submitted for Review" +JBS_STY_CREATE_DATE_DESC="Date of the service or sermon" +JBS_STY_DETAILS="Study Details" +JBS_STY_DOWNLOAD_LINK="Media File for Download Link" +JBS_STY_DOWNLOAD_LINK_DESC="If you choose to link an item from the studies list you can use this file as that link-only to the download of that file" +JBS_STY_ERROR_SUBMITTING_COMMENT="Error Submitting Comment" +JBS_STY_FROM_CHAPTER="From chapter:" +JBS_STY_GO_BUTTON="Go" +JBS_STY_HAS_ENTERED_COMMENT="has entered a comment for the study entitled:" +JBS_STY_HITS="Hits" +JBS_STY_INCORRECT_KEY="Incorrect Key" ; duplicate +JBS_STY_MEDIA_THIS_STUDY="Media Files for this Study" +JBS_STY_MESSAGETYPE_DESC="Occasion of the message" +JBS_STY_METADATA="Set Metadata" +JBS_STY_METADESCRIPTION="Meta Description" +JBS_STY_METADESCRIPTION_DESC="Enter a description. If left blank, study description is used" +JBS_STY_METAKEYWORDS="Keywords" +JBS_STY_METAKEYWORDS_DESC="Enter keywords separated by commas" +JBS_STY_NO_COMMENT="No comments available" +JBS_STY_NO_MEDIAFILES="No Media Files For This Study" +JBS_STY_NO_PASSAGE_INCLUDED="No Passage included in this study" +JBS_STY_ON="on" +JBS_STY_PUBLISH="Publishing" +JBS_STY_RESET_HITS="Reset Hits" +JBS_STY_RETURN_STUDIES_LIST="Return to Studies List" +JBS_STY_REVIEW_COMMENTS_LOGIN="You may review the comments by logging in to the site" +JBS_STY_SAVE_FIRST="Click to Save and Add a Media File" +JBS_STY_SCRIPTURE_DESC="Enter begin and end chapters and verses; leave one or more items empty if needed" +JBS_STY_SECONDARY_REFERENCES_DESC="Secondary references like film, literature, web sites or similar" +JBS_STY_SELECT_DOWNLOAD_LINK="- Select a File -" +JBS_STY_STUDY_IMAGE="Study Image" +JBS_STY_STUDY_TEXT="Study Text" +JBS_STY_UPLOAD="Upload Media File" +JBS_STY_UPLOAD_BUTTON="Upload" +JBS_STY_VERSE_BEGIN2="Vs Begin 2" +JBS_STY_VERSE_BEGIN="Vs Begin" +JBS_STY_VERSE_END2="Vs End 2" +JBS_STY_VERSE_END="Vs End" +JGLOBAL_ACTION_PERMISSIONS_LABEL="Permissions" ; review +JGLOBAL_PERMISSIONS_ANCHOR="Set Permissions" ; review + +;;Styles +JBS_STYLE_CANNOT_DELETE_DEFAULT="You cannot delete the default css file biblestudy.css" +JBS_STYLE_CHOOSE_CSS_FILE="Choose a CSS style" +JBS_STYLE_CHOOSE_CSS_FILE_DESC="Choose a CSS file to use for this template. Create or edit under CSS Edit" +JBS_STYLE_CODE="CSS Style Code" +JBS_STYLE_CODE_DESC="Edit the default code. Be sure it is valid css" +JBS_STYLE_CSS_FIX="CSS Fix" +JBS_STYLE_CSS_FIX_COMPLETE="CSS Fix Complete" +JBS_STYLE_FILENAME="Unique CSS Style File Name (no .css)" +JBS_STYLE_FILENAME_DESC="Enter the name of the css file without the .css - that will be added when the file is saved" +JBS_STYLE_FILENAME_NOT_DELETED="File not deleted. Check permissions on /media/com_biblestudy/css/site" +JBS_STYLE_FILENAME_NOT_UNIQUE="Filename must be unique" +JBS_STYLE_RESTRICED_FILE_NAME="File cannot be named 'main' or 'custom'" + +;; SVR Server +JBS_SVR_MEDIA_SETTINGS="Media Settings" +JBS_SVR_SERVER_NAME="Server Name" +JBS_SVR_SERVER_NAME_DESC="Alias name to describe the server" + +;; TCH Teacher +COM_CONTACT_CHANGE_CONTACT_BUTTON="Choose Contact" ; review +COM_CONTACT_SELECT_A_CONTACT="Select Contact" ; review +JBS_TCH_ABOVE="Above Button" +JBS_TCH_ADDRESS="Address" +JBS_TCH_ADDRESS_DESC="Enter the address information" +JBS_TCH_ALLINONE="All links together" +JBS_TCH_ALLINONE_DESC="Show all email and web links together in one cell" +JBS_TCH_BELOW="Below Button" +JBS_TCH_BLOG="Blog Site" +JBS_TCH_BLOG_DESC="Enter a link to the teacher's blog starting with http://" +JBS_TCH_CAN_NOT_DELETE="Teacher is in use and cannot be removed unless records are updated." +JBS_TCH_EDIT_THIS_CONTACT="Edit this contact" +JBS_TCH_EMAIL="Email Address" +JBS_TCH_EMAIL_DESC="Type in an email address for this person" +JBS_TCH_FACEBOOK="FaceBook Page" +JBS_TCH_FACEBOOK_DESC="Enter the teacher's FaceBook page link" +JBS_TCH_INFO="Teacher Information" +JBS_TCH_INFORMATION="Detailed Information" +JBS_TCH_LINK1="Link 1" +JBS_TCH_LINK1_DESC="Enter a url for Link 1 starting with http://" +JBS_TCH_LINK2="Link 2" +JBS_TCH_LINK2_DESC="Enter a url for Link 2 starting with http://" +JBS_TCH_LINK3="Link 3" +JBS_TCH_LINK3_DESC="Enter a url for Link 3 starting with http://" +JBS_TCH_LINKS="Links" +JBS_TCH_LINK_LABEL1="Link 1 label" +JBS_TCH_LINK_LABEL1_DESC="Enter a label for link 1." +JBS_TCH_LINK_LABEL2="Link 2 label" +JBS_TCH_LINK_LABEL2_DESC="Enter a label for link 2." +JBS_TCH_LINK_LABEL3="Link 3 label" +JBS_TCH_LINK_LABEL3_DESC="Enter a label for link 3." +JBS_TCH_MORE_FROM_THIS_TEACHER="More From This Teacher" +JBS_TCH_OUR_TEACHERS="Our Teachers" +JBS_TCH_PHONE="Phone" +JBS_TCH_RETURN_TEACHER_LIST="Return to Teacher List" +JBS_TCH_SELECT_CONTACT_DESC="Choose a contact instead of filling this form. This overrides any duplicate fields from this form" +JBS_TCH_SELECT_CONTACT_LABEL="Contacts:" +JBS_TCH_SHORT_DESCRIPTION_LIST_PAGE="List Description" +JBS_TCH_SHORT_LIST="Description" +JBS_TCH_SHOW_LANDING_PAGE="Show Landing Page" +JBS_TCH_SHOW_LIST="Show Teacher List" +JBS_TCH_SHOW_LIST_VIEW="Show on List View" +JBS_TCH_SHOW_LIST_VIEW_DESC="Show this Teacher in the Teacher List View" +JBS_TCH_TEACHER_IMAGE="Teacher Thumbnail" +JBS_TCH_TEACHER_IMAGE_LARGE = "Teacher Image Large" +JBS_TCH_TITLE_DESC="Title or salutation like Prof" +JBS_TCH_TWITTER="Twitter Feed" +JBS_TCH_TWITTER_DESC="Enter a full url link to the teacher's Twitter feed starting with http://" +JBS_TCH_WEBSITE="Website" + +;; TITLE Title Block +JBS_TITLE_ADMINISTRATION="CWM-Proclaim: Administration" +JBS_TITLE_COMMENTS="CWM-Proclaim: Comments" +JBS_TITLE_COMMENT_CREATING="CWM-Proclaim: Comment New" +JBS_TITLE_COMMENT_EDITING="CWM-Proclaim: Comment Edit ID#%s" +JBS_TITLE_CONTROL_PANEL="CWM-Proclaim: Control Panel" +JBS_TITLE_INSTALL="CWM-Proclaim: %s for %s" +JBS_TITLE_LOCATIONS="CWM-Proclaim: Locations" +JBS_TITLE_LOCATIONS_CREATING="CWM-Proclaim: Locations New" +JBS_TITLE_LOCATIONS_EDITING="CWM-Proclaim: Locations Edit %s" +JBS_TITLE_MEDIA_FILES="CWM-Proclaim: Media Files" +JBS_TITLE_MEDIA_FILES_CREATING="CWM-Proclaim: Media Files New" +JBS_TITLE_MEDIA_FILES_EDITING="CWM-Proclaim: Media Files Edit %s" +JBS_TITLE_MESSAGETYPES="CWM-Proclaim: Message Type" +JBS_TITLE_MESSAGETYPES_CREATING="CWM-Proclaim: Message Type New" +JBS_TITLE_MESSAGETYPES_EDITING="CWM-Proclaim: Message Type Edit %s" +JBS_TITLE_PODCASTS="CWM-Proclaim: Podcasts" +JBS_TITLE_PODCAST_CREATING="CWM-Proclaim: Podcast New" +JBS_TITLE_PODCAST_EDITING="CWM-Proclaim: Podcast Edit %s" +JBS_TITLE_SERIES="CWM-Proclaim: Series" +JBS_TITLE_SERIES_CREATING="CWM-Proclaim: Series New" +JBS_TITLE_SERIES_EDITING="CWM-Proclaim: Series Edit %s" +JBS_TITLE_SERVERS="CWM-Proclaim: Servers" +JBS_TITLE_SERVERS_CREATING="CWM-Proclaim: Servers New" +JBS_TITLE_SERVERS_EDITING="CWM-Proclaim: Servers Edit %s" +JBS_TITLE_SOCIAL_NETWORKING_LINKS="CWM-Proclaim: Social Networking Links" +JBS_TITLE_SOCIAL_NETWORKING_LINKS_CREATING="CWM-Proclaim: Social Networking Links New" +JBS_TITLE_SOCIAL_NETWORKING_LINKS_EDITING="CWM-Proclaim: Social Networking Links Edit %s" +JBS_TITLE_STUDIES="CWM-Proclaim: Studies" +JBS_TITLE_STUDIES_CREATING="CWM-Proclaim: Studies New" +JBS_TITLE_STUDIES_EDITING="CWM-Proclaim: Studies Edit %s" +JBS_TITLE_STYLES="CWM-Proclaim: Styles" +JBS_TITLE_STYLES_CREATING="CWM-Proclaim: Styles New" +JBS_TITLE_STYLES_EDITING="CWM-Proclaim: Styles Edit File: %s" +JBS_TITLE_TEACHERS="CWM-Proclaim: Teachers" +JBS_TITLE_TEACHER_CREATING="CWM-Proclaim: Teacher New" +JBS_TITLE_TEACHER_EDITING="CWM-Proclaim: Teacher Edit %s" +JBS_TITLE_TEMPLATECODES="CWM-Proclaim: Template Codes" +JBS_TITLE_TEMPLATECODES_CREATING="CWM-Proclaim: Template Code New" +JBS_TITLE_TEMPLATECODES_EDITING="CWM-Proclaim: Template Code Edit %s" +JBS_TITLE_TEMPLATES="CWM-Proclaim: Templates" +JBS_TITLE_TEMPLATES_CREATING="CWM-Proclaim: Templates New" +JBS_TITLE_TEMPLATES_EDITING="CWM-Proclaim: Templates Edit %s" +JBS_TITLE_TOPICS="CWM-Proclaim: Topics" +JBS_TITLE_TOPICS_CREATING="CWM-Proclaim: Topics New" +JBS_TITLE_TOPICS_EDITING="CWM-Proclaim: Topics Edit %s" +JBS_TITLE_UPLOAD_FORM="Upload Media File" + +;; Topic Items +JBS_TOP_ABORTION="Abortion" +JBS_TOP_ADDICTION="Addiction" +JBS_TOP_AFTERLIFE="Afterlife" +JBS_TOP_APOLOGETICS="Apologetics" +JBS_TOP_BAPTISM="Baptism" +JBS_TOP_BASICS_OF_CHRISTIANITY="Basics of Christianity" +JBS_TOP_BECOMING_A_CHRISTIAN="Becoming a Christian" +JBS_TOP_BIBLE="Bible" +JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS="Blended Family Relationships" +JBS_TOP_CHILDREN="Children" +JBS_TOP_CHRIST="Christ" +JBS_TOP_CHRISTIAN_CHARACTER_FRUITS="Christian Character/Fruits" +JBS_TOP_CHRISTIAN_VALUES="Christian Values" +JBS_TOP_CHRISTMAS_SEASON="Christmas Season" +JBS_TOP_CHURCH="Church" +JBS_TOP_COMMUNICATION="Communication" +JBS_TOP_COMMUNION___LORDS_SUPPER="Communion / Lords Supper" +JBS_TOP_CREATION="Creation" +JBS_TOP_CULTS="Cults" +JBS_TOP_DA_VINCI_CODE="Da Vinci Code" +JBS_TOP_DEATH="Death" +JBS_TOP_DESCRIPTIONS_OF_GOD="Descriptions of God" +JBS_TOP_DISCIPLES="Disciples" +JBS_TOP_DISCIPLESHIP="Discipleship" +JBS_TOP_DIVORCE="Divorce" +JBS_TOP_EASTER_SEASON="Easter Season" +JBS_TOP_EMOTIONS="Emotions" +JBS_TOP_ENTERTAINMENT="Entertainment" +JBS_TOP_EVANGELISM="Evangelism" +JBS_TOP_FAITH="Faith" +JBS_TOP_FAMILY="Family" +JBS_TOP_FORGIVING_OTHERS="Forgiving Others" +JBS_TOP_FREEDOM="Freedom" +JBS_TOP_FRIENDSHIP="Friendship" +JBS_TOP_FULFILLMENT_IN_LIFE="Fulfillment in Life" +JBS_TOP_FUND_RAISING_RALLY="Fund-raising Rally" +JBS_TOP_FUNERALS="Funerals" +JBS_TOP_GIVING="Giving" +JBS_TOP_GODS_ACTIVITY="Gods Activity" +JBS_TOP_GODS_ATTRIBUTES="Gods Attributes" +JBS_TOP_GODS_FORGIVENESS="Gods Forgiveness" +JBS_TOP_GODS_LOVE="Gods Love" +JBS_TOP_GODS_NATURE="Gods Nature" +JBS_TOP_GODS_WILL="Gods Will" +JBS_TOP_HARDSHIP_OF_LIFE="Hardship of Life" +JBS_TOP_HOLIDAYS="Holidays" +JBS_TOP_HOLY_SPIRIT="Holy Spirit" +JBS_TOP_HOT_TOPICS="Hot Topics" +JBS_TOP_HEALTH="Health" +JBS_TOP_JESUS_BIRTH="Jesus Birth" +JBS_TOP_JESUS_CROSS_FINAL_WEEK="Jesus Cross/Final Week" +JBS_TOP_JESUS_DIVINITY="Jesus Divinity" +JBS_TOP_JESUS_HUMANITY="Jesus Humanity" +JBS_TOP_JESUS_LIFE="Jesus Life" +JBS_TOP_JESUS_MIRACLES="Jesus Miracles" +JBS_TOP_JESUS_RESURRECTION="Jesus Resurrection" +JBS_TOP_JESUS_TEACHING="Jesus Teaching" +JBS_TOP_KINGDOM_OF_GOD="Kingdom of God" +JBS_TOP_LEADERSHIP_ESSENTIALS="Leadership Essentials" +JBS_TOP_LOVE="Love" +JBS_TOP_MARRIAGE="Marriage" +JBS_TOP_MEN="Men" +JBS_TOP_MESSIANIC_PROPHECIES="Messianic Prophecies" +JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY="Misconceptions of Christianity" +JBS_TOP_MONEY="Money" +JBS_TOP_NARNIA="Narnia" +JBS_TOP_OUR_NEED_FOR_GOD="Our Need for God" +JBS_TOP_PARABLES="Parables" +JBS_TOP_PARANORMAL="Paranormal" +JBS_TOP_PARENTING="Parenting" +JBS_TOP_POVERTY="Poverty" +JBS_TOP_PRAYER="Prayer" +JBS_TOP_PROMINENT_N_T__MEN="Prominent N.T. Men" +JBS_TOP_PROMINENT_N_T__WOMEN="Prominent N.T. Women" +JBS_TOP_PROMINENT_O_T__MEN="Prominent O.T. Men" +JBS_TOP_PROMINENT_O_T__WOMEN="Prominent O.T. Women" +JBS_TOP_RACISM="Racism" +JBS_TOP_SECOND_COMING="Second Coming" +JBS_TOP_SEXUALITY="Sexuality" +JBS_TOP_SIN="Sin" +JBS_TOP_SINGLENESS="Singleness" +JBS_TOP_SMALL_GROUPS="Small Groups" +JBS_TOP_SPECIAL_SERVICES="Special Services" +JBS_TOP_SPIRITUAL_DISCIPLINES="Spiritual Disciplines" +JBS_TOP_SPIRITUAL_GIFTS="Spiritual Gifts" +JBS_TOP_STEWARDSHIP="Stewardship" +JBS_TOP_SUPERNATURAL="Supernatural" +JBS_TOP_TEMPTATION="Temptation" +JBS_TOP_TEN_COMMANDMENTS="Ten Commandments" +JBS_TOP_TRUTH="Truth" +JBS_TOP_TWELVE_APOSTLES="Twelve Apostles" +JBS_TOP_WEDDINGS="Weddings" +JBS_TOP_WOMEN="Women" +JBS_TOP_WORKPLACE_ISSUES="Workplace Issues" +JBS_TOP_WORLD_RELIGIONS="World Religions" +JBS_TOP_WORSHIP="Worship" +JBS_TOP_RAIN="Rain" + +;; TPC Topics Manager +JBS_TPC_TOPIC_ALIAS="Alias of topic" +JBS_TPC_TOPIC_ALIAS_DESC="The alias is used as reference in the database and must be unique. It may be generated automatically or filled in manually. Form is: 'JBS_TOP_topic'; 'topic' must contain only underscore '_' and upper case letter A-Z without special characters. Replace white space by underscore too.
      Add the respective phrase in the language file." + +;; TPL Templates +;JBS_TPL_ITEMSLIMIT="Number of studies to display" +JBS_TPL_ALIGN_DESC="Set the alignment for the page title: left, center, or right" +JBS_TPL_ALIGN="Title Alignment" +JBS_SERIES_LIST_THUMBNAIL="Series Thumbnail" ; review +JBS_SERIES_LIST_THUMBNAIL_DESC="Choose whether to use the series thumbnail image" ; review +JBS_TPL_ALL_PLUGINS="Use All Plugins" +JBS_TPL_APPROVAL_BACKEND="Approval on backend" +JBS_TPL_BLOCKQUOTE="Block Quote" +JBS_TPL_BOTH_COMMENTS="Use both JComments and JBS Commments" +JBS_TPL_BUTTON_LABEL="Button and Label" +JBS_TPL_BUTTON_ONLY="Button Only" +JBS_TPL_CAPTCHA_PRIVATE_KEY="Private Key from reCaptcha" +JBS_TPL_CAPTCHA_PRIVATE_KEY_DESC="When you register at https://www.google.com/recaptcha/admin/create you will receive a public and private key to make reCaptcha operate. Put the private key here." +JBS_TPL_CAPTCHA_PUBLIC_KEY="Public Key from reCaptcha" +JBS_TPL_CAPTCHA_PUBLIC_KEY_DESC="When you register at https://www.google.com/recaptcha/admin/create you will receive a public and private key to make reCaptcha operate. Put the public key here" +JBS_TPL_CAPTCHA_USE="Use reCaptcha" +JBS_TPL_CHOOSE_BIBLE_VERSION="Select Bible Version" +JBS_TPL_CHOOSE_BIBLE_VERSION_DESC="Choose which version of the Bible to use in the passage lookup" +JBS_TPL_COLSPAN="Width" +JBS_TPL_COLSPAN_DESC="How wide should the item be. Taking up the entire row would be 12. Taking up 1/12 would be 1 and so forth. Follows Bootstrap 12 column grid" +JBS_TPL_COLUMN="Order" +JBS_TPL_COLUMN_DESC="Choose what order to show this item in its row" +JBS_TPL_COMMENT_TYPE="Type of comments" +JBS_TPL_COMMENT_TYPE_DESC="Choose which comment type you want to use if using comments. JBS is the old com_biblestudy method. JComments is the JComments component. Or you can show both methods" +JBS_TPL_CUSTOM="Custom" +JBS_TPL_CUSTOMCLASS="Custom Class" +JBS_TPL_CUSTOMCLASS_DESC="If you put in style= you can put in any styling for the element. Or you can add a valid existing class" +JBS_TPL_CUSTOM_TEXT="Custom Code" +JBS_TPL_CUSTOM_TEXT_DESC="Place custom code here. Surround elements with single braces. Codes are: scripture1, scripture2, secondary, duration, title, studyintro, studynumber, teacher, teacher-title-image, series_text, series_thumbnail, series_description, submitted, teacherimage, teachername, jbsmedia, studytitle, thumbnail, topics, messagetype, location_text, date, hits" +JBS_TPL_CUSTOM_VIEW="Use custom view" +JBS_TPL_CUSTOM_VIEW_DESC="Choose whether or not to use this as the view" +JBS_TPL_CUSTOM_VIEW_TEACHERDETAIL="Use custom Teacher Detail view" +JBS_TPL_CUSTOM_VIEW_TEACHERLIST="Use custom Teacher List view" +JBS_TPL_DATE_BRACE="Date {date}" +JBS_TPL_DATE_FORMAT_D_MMMM_YYYY="1 September 2012" +JBS_TPL_DATE_FORMAT_D_M_YYYY="1/9/2010" +JBS_TPL_DATE_FORMAT_MMMM_D_YYYY="September 1, 2012" +JBS_TPL_DATE_FORMAT_MMM_D="Sep 1" +JBS_TPL_DATE_FORMAT_MMM_D_YYYY="Sep 1, 2012" +JBS_TPL_DATE_FORMAT_M_D="9/1" +JBS_TPL_DATE_FORMAT_M_D_YYYY="9/1/2012" +JBS_TPL_DATE_FORMAT_USE_GLOBAL="Use Global System Date Format" +JBS_TPL_DATE_FORMAT_WD_MMMM_D_YYYY="Saturday, September 1, 2010" +JBS_TPL_DATE_FORMAT_YYYY_MM_DD="2012/09/01" +JBS_TPL_DETAILS_BODY="Body" +JBS_TPL_DETAILS_COMMENT_ACCESS="Access level for submitting comments" +JBS_TPL_DETAILS_COMMENT_ACCESS_DESC="Set the level at which users can submit comments" +JBS_TPL_DETAILS_COMMENT_PUBLISH="Publishing comments" +JBS_TPL_DETAILS_COMMENT_PUBLISH_DESC="Choose whether posts are published automatically or approved on backend by admins" +JBS_TPL_DETAILS_EMAIL_COMMENTS="Email when comments entered" +JBS_TPL_DETAILS_EMAIL_COMMENTS_DESC="Set to yes if you want an email sent for every comment entered on studies" +JBS_TPL_DETAILS_LINK_COMMENTS="Type of Comments link" +JBS_TPL_DETAILS_LINK_COMMENTS_DESC="Determine whether there is a show/hide link for comments or show all the time" +JBS_TPL_DETAILS_LINK_IMAGE="Details Link Image" +JBS_TPL_DETAILS_LINK_IMAGE_DESC="Show this image when a link to the details is selected. See link selection in the studies list and study details tab." +JBS_TPL_DETAILS_LINK_TEXT="Text to show on bottom details page link to list" +JBS_TPL_DETAILS_LINK_TEXT_DESC="Put in text to show on the bottom of the study details page as a link back to the listing page." +JBS_TPL_DETAILS_PDF="Details PDF" +JBS_TPL_DETAILS_RECIPIENT="To Email address" +JBS_TPL_DETAILS_RECIPIENT_DESC="Email address to notify. Leave empty to send to the system default email address. Specify multiple addresses by separating them with a comma." +JBS_TPL_DETAILS_SHOW_COMMENTS="Access level for showing comments" +JBS_TPL_DETAILS_SHOW_COMMENTS_DESC="Sets access level for viewing comments." +JBS_TPL_DETAILS_SHOW_PASSAGE_VIEW="Show/Hide Passage in Study Details View" +JBS_TPL_DETAILS_SHOW_PASSAGE_VIEW_DESC="Shows the passage referenced in the Scripture of your study. Choose your Bible version and whether to use the Hide/Show link, always show, hide, or use a like to a popup window. Uses BibleGateway.com as source. Reference as $this->passage in custom template file." +JBS_TPL_DETAILS_SHOW_PRINT_VIEW="Show/Hide Print Button" +JBS_TPL_DETAILS_SHOW_SCRIPTURE_LINK="Use Content Plugins" +JBS_TPL_DETAILS_SHOW_SCRIPTURE_LINK_DESC="Choose whether to apply content plugins on study text. You can use the Scripturelinks plugin for all references in study text, for example." +JBS_TPL_DETAILS_STUDY_DETAILTEMPLATE="Detail Template Code" +JBS_TPL_DETAILS_SUBJECT="Subject" +JBS_TPL_DETAILS_TEMPLATECODE_DESC="Use HTML to create your repeatable template. Any HTML will do.

      TEMPLATE CODES

      {{title}} - Sermon Title
      {{teacher}} - Teacher Name
      {{date}} - Date
      {{studyintro}} - Intro Text
      {{scripture}} - Scripture Reference
      {{topics}} - Topics (Tags)
      {{mediatime}} - Time
      {{thumbnail}} - Thumbnail Image
      {{seriestext}} - Series Name
      {{messagetype}} - Message Type
      {{bookname}} - Book Name
      {{studytext}} - Study Notes
      {{scripturelink}} - Scripture Link
      {{media}} - Media Table
      {{share}} - Social Networking Links
      {{hits}} - Hits
      {{location}} - Location
      {{messagetype}} - Message Type" +JBS_TPL_DETAILS_TEXT_BRACE="Details Text {details-text}" +JBS_TPL_DETAILS_TEXT_PDF="Details Text + PDF" +JBS_TPL_DETAILS_USE_CAPTCHA="Use reCaptcha api for comments" +JBS_TPL_DETAILS_USE_CAPTCHA_DESC="Choose whether to use an image with text in it for users to enter before posting their comment. You must register with https://www.google.com/recaptcha/admin/create for reCaptcha to work." +JBS_TPL_DETAILS_VIEW="Details View" +JBS_TPL_DISPLAY_ITEMS1="Display Items List 1" +JBS_TPL_DISPLAY_ITEMS2="Display Items List 2" +JBS_TPL_DISPLAY_ITEMS3="Display Items List 3" +JBS_TPL_DISPLAY_ITEMS4="Display Items List 4" +JBS_TPL_DISPLAY_ITEMS5="Display Items List 5" +JBS_TPL_DISPLAY_ITEMS6="Display Items List 6" +JBS_TPL_DIV="DIV" +JBS_TPL_DURATION_BRACE="Duration {duration}" +JBS_TPL_ELEMENT="HTML Element" +JBS_TPL_ELEMENT_DESC="Choose the type of element to use such as Paragraph or Header" +JBS_TPL_EMAIL_SENT="Email sent" +JBS_TPL_EXPORT_SUCCESS="Template exported successfully. Note any error messages below" +JBS_TPL_FILESIZE_BRACE="Filesize 1st mp3 file{filesize}" +JBS_TPL_FILTERS="Filters" +JBS_TPL_FILTERS_DEFAULTORDER="Default Date Ascending/Descending" +JBS_TPL_FILTERS_DEFAULTORDERSECONDARY = "Default order Secondary Page" +JBS_TPL_FILTERS_DEFAULTORDERSECONDARY_DESC = "Choose Ascending or Descending as the order when a user goes to a drop down item like book or series" +JBS_TPL_FILTERS_DEFAULTORDER_DESC="Choose whether the default listing of studies should be in date ascending or descending order" +JBS_TPL_FP_IMAGES_TOOLTIP="Show/Hide Tooltip" +JBS_TPL_FP_IMAGES_TOOLTIP_DESC="Shows or hides a tooltip with details of your studies over the study details link" +JBS_TPL_FP_SHOW_PAGE_IMAGE="Show/Hide Front Page Image" +JBS_TPL_HEADER1="Header 1" +JBS_TPL_HEADER2="Header 2" +JBS_TPL_HEADER3="Header 3" +JBS_TPL_HEADER4="Header 4" +JBS_TPL_HEADER5="Header 5" +JBS_TPL_HEADERCODE="Header Code" +JBS_TPL_HEADERCODE_DESC="Put any HTML in here you want for the header" +JBS_TPL_HIDE_LINK="Hide Link" +JBS_TPL_HIDE_STUDY="Hide Study Display" +JBS_TPL_HITS_BRACE="Hits {hits}" +JBS_TPL_HOURS_MIN_SEC_COLON="H:M:S" +JBS_TPL_HOURS_MIN_SEC_SLASH="Hours/min/sec" +JBS_TPL_IMPORT_EXPORT_TEMPLATE="Import/Export Templates" +JBS_TPL_IMPORT_SUCCESS="Template import complete. Note any error messages above" +JBS_TPL_JBS_COMMENTS="CWM-Proclaim Comments" +JBS_TPL_JCOMMENTS="Use JComments - Must be installed" +JBS_TPL_LABEL_ONLY="Label Only" +JBS_TPL_LANDINGPAGE_BOOKSLABEL="Books Label" +JBS_TPL_LANDINGPAGE_HEADINGORDER_1="Heading 1" +JBS_TPL_LANDINGPAGE_HEADINGORDER_2="Heading 2" +JBS_TPL_LANDINGPAGE_HEADINGORDER_3="Heading 3" +JBS_TPL_LANDINGPAGE_HEADINGORDER_4="Heading 4" +JBS_TPL_LANDINGPAGE_HEADINGORDER_5="Heading 5" +JBS_TPL_LANDINGPAGE_HEADINGORDER_6="Heading 6" +JBS_TPL_LANDINGPAGE_HEADINGORDER_7="Heading 7" +JBS_TPL_LANDINGPAGE_HEADINGORDER_DESC="Set the order of items on the Landing Page (Set whether to show or not below)" +JBS_TPL_LANDINGPAGE_LANDINGBOOKSLIMIT="# Books before break" +JBS_TPL_LANDINGPAGE_LANDINGLOCATIONSLIMIT="# Locations before break" +JBS_TPL_LANDINGPAGE_LANDINGMESSAGETYPESLIMIT="# Messagetypes before break" +JBS_TPL_LANDINGPAGE_LANDINGSERIESLIMIT="# Series before break" +JBS_TPL_LANDINGPAGE_LANDINGTEACHERSLIMIT="# Teachers before break" +JBS_TPL_LANDINGPAGE_LANDINGTOPICSLIMIT="# Topics before break" +JBS_TPL_LANDINGPAGE_LANDINGYEARSLIMIT="# Years before break" +JBS_TPL_LANDINGPAGE_LANDING_HIDE="Choose type of Show/Hide Label" +JBS_TPL_LANDINGPAGE_LANDING_HIDELABEL="Label to use for Show/Hide link" +JBS_TPL_LANDINGPAGE_LANDING_HIDELABEL_DESC="If you choose the option above, put in words for the Show/Hide label" +JBS_TPL_LANDINGPAGE_LANDING_HIDE_DESC="Choose if you want a label or button or both to appear if limit set below to each item." +JBS_TPL_LANDINGPAGE_LANDING_LIMIT_DESC="Number of items to show before a Show/Hide All link. Leave blank for all" +JBS_TPL_LANDINGPAGE_LINKTO="Link To View" +JBS_TPL_LANDINGPAGE_LOCATIONSLABEL="Locations Label" +JBS_TPL_LANDINGPAGE_MESSAGETYPESLABEL="Message Types Label" +JBS_TPL_LANDINGPAGE_SERIESLABEL="Series Label" +JBS_TPL_LANDINGPAGE_SHOWBOOKS="Show Books" +JBS_TPL_LANDINGPAGE_SHOWLOCATIONS="Show Locations" +JBS_TPL_LANDINGPAGE_SHOWMESSAGETYPES="Show Message Types" +JBS_TPL_LANDINGPAGE_SHOWSERIES="Show Series" +JBS_TPL_LANDINGPAGE_SHOWTEACHERS="Show Teachers" +JBS_TPL_LANDINGPAGE_SHOWTOPICS="Show Topics" +JBS_TPL_LANDINGPAGE_SHOWYEARS="Show Years" +JBS_TPL_LANDINGPAGE_TEACHERSLABEL="Teachers Label" +JBS_TPL_LANDINGPAGE_TOPICSLABEL="Topics Label" +JBS_TPL_LANDINGPAGE_YEARSLABEL="Years Label" +JBS_TPL_LANDING_PAGE="Landing Page" +JBS_TPL_LIGHTBOX="Lightbox" +JBS_TPL_LINK_SERIES_DETAILS="Link to Series Details" +JBS_TPL_LINK_STUDIES_LIST="Link to Studies List" +JBS_TPL_LINK_TEACHER_DETAILS="Link to Teacher details" +JBS_TPL_LINK_TO_DETAILS="Link to Details" +JBS_TPL_LINK_TO_DETAILS_TOOLTIP="Link to Details with ToolTip" +JBS_TPL_LINK_TO_DOCMAN="Link to 1st DocMan Entry (Not implemented in 7.0" +JBS_TPL_LINK_TO_DOWNLOAD="Link to Download of Media File" +JBS_TPL_LINK_TO_FIRST_ARTICLE="Link to 1st Article" +JBS_TPL_LINK_TO_MEDIA="Link to 1st Media File" +JBS_TPL_LINK_TO_MEDIA_TOOLTIP="Link to 1st Media File with ToolTip" +JBS_TPL_LINK_TO_TEACHERS_PROFILE="Link to Teacher's Profile" +JBS_TPL_LINK_TO_VIRTUEMART="Link to 1st VirtueMart Entry" +JBS_TPL_LISTCOLOR1="Table Background Color 1" +JBS_TPL_LISTCOLOR2="Table Background Color 2" +JBS_TPL_LISTCOLOR_DESC="These colors are for alternating background colors on the list of studies. Enter nothing for no striping. Can be either a name like grey or a hex value like #EEEEEE" +JBS_TPL_LISTITEMS_BOOKLIST="Books to Show" +JBS_TPL_LISTITEMS_BOOKLIST_DESC="Choose whether you want to show all Bible books in the drop down or only those that have studies associated with them" +JBS_TPL_LISTITEMS_DETAILS_TEXT="Alt tag for details" +JBS_TPL_LISTITEMS_DETAILS_TEXT_DESC="Text to show on mouse over of details image link other than if you choose a tooltip" +JBS_TPL_LISTITEMS_INTRO_SHOW="Show/Hide Intro" +JBS_TPL_LISTITEMS_INTRO_SHOW_DESC="Choose whether to hide or show the listing introduction header" +JBS_TPL_LISTITEMS_LISTTEACHERS="Ids of teachers on list page" +JBS_TPL_LISTITEMS_LISTTEACHERS_DESC="Enter a comma separated list of teacher ids to show on the list page" +JBS_TPL_LISTITEMS_LIST_INTRO="List Introduction" +JBS_TPL_LISTITEMS_LIST_TEACHER_SHOW="Show/Hide Teachers" +JBS_TPL_LISTITEMS_LIST_TEACHER_SHOW_DESC="Choose whether to hide or show the teachers identified below on the studieslist page" +JBS_TPL_LISTITEMS_SHOW_BOOK_SEARCH="Show/Hide book search" +JBS_TPL_LISTITEMS_SHOW_BOOK_SEARCH_DESC="Shows or hides the drop down box for books" +JBS_TPL_LISTITEMS_SHOW_BOTTOM="Show in footer" +JBS_TPL_LISTITEMS_SHOW_LOCATIONS_SEARCH="Show/Hide Locations search" +JBS_TPL_LISTITEMS_SHOW_LOCATIONS_SEARCH_DESC="Shows or hides the drop down locations list" +JBS_TPL_LISTITEMS_SHOW_ORDER_SEARCH="Show/Hide Ascending/Descending" +JBS_TPL_LISTITEMS_SHOW_ORDER_SEARCH_DESC="Shows or hides the drop down for ordering the year display" +JBS_TPL_LISTITEMS_SHOW_PAGE_TITLE="Show/Hide Listing Page Title" +JBS_TPL_LISTITEMS_SHOW_PAGINATION="Pagination Limits" +JBS_TPL_LISTITEMS_SHOW_PAGINATION_DESC="Choose whether to show the number of results per page drop down in header or footer" +JBS_TPL_LISTITEMS_SHOW_POPULAR="Show/Hide Popular Studies Links" +JBS_TPL_LISTITEMS_SHOW_POPULAR_DESC="Shows or hides the drop down popular studies list. Set limit in Administration tab" +JBS_TPL_LISTITEMS_SHOW_SERIES_SEARCH="Show/Hide Series search" +JBS_TPL_LISTITEMS_SHOW_SERIES_SEARCH_DESC="Shows or hides the drop down box for series" +JBS_TPL_LISTITEMS_SHOW_TEACHER_SEARCH="Show/Hide Teacher search" +JBS_TPL_LISTITEMS_SHOW_TEACHER_SEARCH_DESC="Shows or hides the drop down box for teachers" +JBS_TPL_LISTITEMS_SHOW_SORTBY_SEARCH="Show/Hide Sort By search" +JBS_TPL_LISTITEMS_SHOW_SORTBY_SEARCH_DESC="Shows or hides the drop down box for Sort By" +JBS_TPL_LISTITEMS_SHOW_LIMIT_SEARCH="Show/Hide Limit search" +JBS_TPL_LISTITEMS_SHOW_LIMIT_SEARCH_DESC="Shows or hides the drop down box for Limit" +JBS_TPL_LISTITEMS_SHOW_TOP="Show at top" +JBS_TPL_LISTITEMS_SHOW_TOPIC_SEARCH="Show/Hide Topic search" +JBS_TPL_LISTITEMS_SHOW_TOPIC_SEARCH_DESC="Shows or hides the drop down topical list" +JBS_TPL_LISTITEMS_SHOW_TYPE_SEARCH="Show/Hide Message Type search" +JBS_TPL_LISTITEMS_SHOW_TYPE_SEARCH_DESC="Shows or hides the drop down box for message types" +JBS_TPL_LISTITEMS_SHOW_YEAR_SEARCH="Show/Hide Year search" +JBS_TPL_LISTITEMS_SHOW_YEAR_SEARCH_DESC="Shows or hides the year drop down box" +JBS_TPL_LISTITEMS_TEACHERLINK="Show link to teacher details page" +JBS_TPL_LISTITEMS_TEACHERLINK_DESC="Creates a link out of the teacher name to their details page" +JBS_TPL_LISTITEMS_USE_GO_BUTTON="Use Go Button" +JBS_TPL_LISTITEMS_USE_GO_BUTTON_DESC="Choose whether to use the Go Button on the list. This turns off the javascript submit form" +JBS_TPL_LISTITEMS_USE_HEADERS_LIST="Header Row on List" +JBS_TPL_LISTITEMS_USE_HEADERS_LIST_DESC="Choose whether a header row will appear at the top of the list" +JBS_TPL_LIST_ITEMS="List Items" +JBS_TPL_LOCATION_BRACE="Location {location_text}" +JBS_TPL_MEDIA_BACKCOLOR="Pop Up Back Color" +JBS_TPL_MEDIA_BACKCOLOR_DESC="Use HEX something like 0x287585" +JBS_TPL_MEDIA_BRACE="Media {media}" +JBS_TPL_MEDIA_DOWNLOADS="Mediafile Downloads (total all for this study)" +JBS_TPL_MEDIA_EMBEDSHARE="Allow Share Options in Media Player" +JBS_TPL_MEDIA_EMBEDSHARE_DESC="If set to Show a menu is presented in the internal media player that allows sharing and embedding options" +JBS_TPL_MEDIA_FRONTCOLOR="Pop Up Front Color" +JBS_TPL_MEDIA_FRONTCOLOR_DESC="Use HEX something like 0xFFFFFF" +JBS_TPL_MEDIA_INTERNAL_POPUP="Display Internal player or Direct as popup" +JBS_TPL_MEDIA_INTERNAL_POPUP_DESC="Choose whether the internal viewer or the direct link to a file should be a popup or inline (internal player) or new window (direct)" +JBS_TPL_MEDIA_LIGHTCOLOR="Pop Up Light Color" +JBS_TPL_MEDIA_LIGHTCOLOR_DESC="Use HEX something like 0x000000" +JBS_TPL_MEDIA_MEDIA_PLAYER="Default Player for all media" +JBS_TPL_MEDIA_MEDIA_PLAYER_DESC="Choose media player for all files. This can be overridden in an individual media file record." +JBS_TPL_MEDIA_PLAYERIDLEHIDE="Player ID Hide" +JBS_TPL_MEDIA_PLAYERIDLEHIDE_DESC="Need to find the best discription for this" +JBS_TPL_MEDIA_PLAYERPOSITION="Player Position" +JBS_TPL_MEDIA_PLAYERPOSITION_DESC="Position of the transport bar" +JBS_TPL_MEDIA_PLAYER_HEIGHT="Height for media player" +JBS_TPL_MEDIA_PLAYER_HEIGHT_DESC="Height in pixels of internal audio/video player. Can be overridden in media file. Hint: 23 is good height for just audio" +JBS_TPL_MEDIA_PLAYER_WIDTH="Width for media Player" +JBS_TPL_MEDIA_PLAYER_WIDTH_DESC="Width in pixels of internal audio/video player. Can be overridden in media file." +JBS_TPL_MEDIA_PLAYS="Mediafile Plays (total all for this study)" +JBS_TPL_MEDIA_POPUPBACKGROUND="Background color for popup window" +JBS_TPL_MEDIA_POPUPBACKGROUND_DESC="Set a background color for the popup window." +JBS_TPL_MEDIA_POPUPIMAGE="Path to image for popup" +JBS_TPL_MEDIA_POPUPIMAGE_DESC="Add a path to an image in audio popup" +JBS_TPL_MEDIA_POPUPMARGIN_DESC="Set space above and below popup for header and footer." +JBS_TPL_MEDIA_POPUPTITLE_FOOTER_DESC="Use text and/or Display Codes.

      Codes:
      {{scripture}} - Scripture Reference
      {{title}} - Sermon Title
      {{studydate}} - Date
      {{teacher}} - Teacher Name
      {{filename}} - Media Filename
      {{description}} - Description
      {{length}} - Length" +JBS_TPL_MEDIA_POPUPTYPE="Window or light box (inline) for AVR player" +JBS_TPL_MEDIA_POPUPTYPE_DESC="If installed, use AllVideosReloaded as a separate window or as a light box effect" +JBS_TPL_MEDIA_PROTOCOL="Web protocol" +JBS_TPL_MEDIA_PROTOCOL_DESC="http:// assumed. Type in a different protocol to override such as ftp:// sftp:// https://. Will prepend each media file path" +JBS_TPL_MEDIA_SCREENCOLOR="Screen Color" +JBS_TPL_MEDIA_SCREENCOLOR_DESC="Use HEX something like 0x000000" +JBS_TPL_MEDIA_SHOW_FILESIZE="Media Label/Filesize" +JBS_TPL_MEDIA_SHOW_FILESIZE_DESC="Choose a label for the media file" +JBS_TPL_MESSAGETYPE_BRACE="Messagetype {message_type}" +JBS_TPL_NO_APPROVAL="No Approval needed" +JBS_TPL_NO_CAPTCHA="No Captcha" +JBS_TPL_NO_EMAIL="No Email on Comments" +JBS_TPL_NO_FILE_SELECTED="No File Selected" +JBS_TPL_NO_HEADER_ROW="No Header Row" +JBS_TPL_NO_ITEM="None" +JBS_TPL_NO_LINK="Not a link" +JBS_TPL_NO_PLUGINS="No Plugins" +JBS_TPL_NO_SHARE="No Share Menu" +JBS_TPL_ORDER_BOOK="Books Dropdown Order" +JBS_TPL_ORDER_DESC="Choose an order for this item to appear in the drop down lists on the study list view. If hidden it will not show." +JBS_TPL_ORDER_GO="Go Button Dropdown Order" +JBS_TPL_ORDER_LANGUAGE="Language Drop Down Order" +JBS_TPL_ORDER_LOCATIONS="Locations Dropdown Order" +JBS_TPL_ORDER_MESSAGETYPE="Message Type Dropdown Order" +JBS_TPL_ORDER_ORDER="Order Dropdown Order" +JBS_TPL_ORDER_POPULAR="Popular Studies Dropdown Order" +JBS_TPL_ORDER_SERIES="Series Dropdown Order" +JBS_TPL_ORDER_TEACHER="Teachers Dropdown Order" +JBS_TPL_ORDER_TOPICS="Topics Dropdown Order" +JBS_TPL_ORDER_YEARS="Years Dropdown Order" +JBS_TPL_PAGE_TITLE="Text of Headline" +JBS_TPL_PARAGRAPH="Paragraph" +JBS_TPL_PODCAST_SHOW="Podcast Subscription Links" +JBS_TPL_PODCAST_SHOW_DESC="Decide whether and where to place a table with links to your podcasts. Does not apply to custom template files. Use $this->subscribe in custom" +JBS_TPL_PULLLEFT="Pull Left" +JBS_TPL_PULLRIGHT="Pull Right" +JBS_TPL_RELATED_BOTTOM="Show at bottom of page" +JBS_TPL_RELATED_TOP="Show at top of page" +JBS_TPL_RESPONSIVE="Responsive" +JBS_TPL_RESPONSIVE_DESC="Select if you want to us BootStrap Resposive View" +JBS_TPL_ROW1="Row 1" +JBS_TPL_ROW2="Row 2" +JBS_TPL_ROW3="Row 3" +JBS_TPL_ROW4="Row 4" +JBS_TPL_ROW5="Row 5" +JBS_TPL_ROW6="Row 6" +JBS_TPL_ROWSPANITEM="Item to span rows" +JBS_TPL_ROWSPANITEMIMAGE="Span Image Type" +JBS_TPL_ROWSPANITEMIMAGENONE="No Adjustment" +JBS_TPL_ROWSPANITEMIMAGEPOLAROID="Polaroid" +JBS_TPL_ROWSPANITEMIMAGEROUNDED="Rounded" +JBS_TPL_ROWSPANITEMIMAGE_DESC="Choose from a couple of ways to change the image. Polaroid puts a border around the image. Rounded puts rounded edges on the image. None makes no adjustments" +JBS_TPL_ROWSPANITEMPULL="Image Location" +JBS_TPL_ROWSPANITEMPULL_DESC="Choose whether to show the span image on the left or right of the list" +JBS_TPL_ROWSPANITEMSPAN="Rows to Span" +JBS_TPL_ROWSPANITEMSPAN_DESC="How many rows of the list to span for the span image" +JBS_TPL_ROWSPANITEM_DESC="Choose an image to show on the left or right of each listing" +JBS_TPL_ROW_DESC="Choose where and how to show this item in the list" +JBS_TPL_SCRIPTURE1_BRACE="Scripture {scripture1}" +JBS_TPL_SCRIPTURE2_BRACE="Scripture2 {scripture2}" +JBS_TPL_SECONDARY_REFERENCES_BRACE="Secondary References {secondary}" +JBS_TPL_SELECT_TMPL_TYPE="- Select Type -" +JBS_TPL_SERIESDETAILS="Series Details" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_LIMIT="Number of studies to show" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_LIMIT_DESC="Choose a number of studies to show on the list. Leave blank for all. A link will be provided to the rest of the studies if limit set" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_ORDER="Sort Order" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_ORDER_DESC="Choose ascending or descending for the order of studies" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_SORT="Study sort column" +JBS_TPL_SERIESDETAIL_SERIES_DETAIL_SORT_DESC="Choose a study element to sort the studies list in the series detail section." +JBS_TPL_SERIESDETAIL_SERIES_LIST_RETURN="Show Link to all studies and Back to Series List" +JBS_TPL_SERIESDETAIL_SERIES_LIST_RETURN_DESC="Show/Hide a link to studiesview with all studies in series and a back to all Series at page bottom" +JBS_TPL_SERIESDISPLAY_COLOR="Background color for header" +JBS_TPL_SERIESDISPLAY_USE_HEADER="Display a header for the series" +JBS_TPL_SERIESDISPLAY_USE_HEADER_DESC="Choose whether or not to show a header above the series information" +JBS_TPL_SERIESIMAGE="Series Image" +JBS_TPL_SERIESLIST="Series List" +JBS_TPL_SERIESDETAILSDISPLAY="Series List Display" +JBS_TPL_SERIESTITLE="Series Title" +JBS_TPL_SERIESDETAILSDISPLAY="Series Title Display" +JBS_TPL_SERIES_BRACE="Series {series_text}" +JBS_TPL_SERIES_DESCRIPTION_BRACE="Series Description {series_description}" +JBS_TPL_SERIES_LIST_TEMPLATE="Series List Template File" +JBS_TPL_SERIES_SEARCH_SERIES="Show/Hide Series Drop Down" +JBS_TPL_SERIES_SEARCH_SERIES_DESC="Show or hide the drop down menu with all published series as a filter" +JBS_TPL_SERIES_SEARCH_TEACHERS="Show/Hide Teacher Drop Down" +JBS_TPL_SERIES_SEARCH_TEACHERS_DESC="Choose whether the list of teachers who have series are displayed." +JBS_TPL_SERIES_SEARCH_YEARS="Show/Hide Years Drop Down" +JBS_TPL_SERIES_SEARCH_YEARS_DESC="Choose whether to show a drop down of years where there are studies associated with a series" +JBS_TPL_SERIES_SERIES_CHARACTERS="Character limit for description on list page" +JBS_TPL_SERIES_SERIES_CHARACTERS_DESC="The number of characters to show in the description on the listing page. All description shown on the details link. Leave blank for all" +JBS_TPL_SERIES_SERIES_LIST_ORDER="Set Ascending or Descending for Series list" +JBS_TPL_SERIES_SERIES_LIST_ORDER_DESC="Set ascending or descending by Series title for the list" +JBS_TPL_SERIES_SERIES_ORDER_FIELD="Series List Sort Field" +JBS_TPL_SERIES_SERIES_ORDER_FIELD_DESC="Choose the field to sort the series list by" +JBS_TPL_SERIES_SERIES_SHOW_DESCRIPTION="Show/Hide Description along bottom" +JBS_TPL_SERIES_SERIES_SHOW_DESCRIPTION_DESC="Choose to have a row spanning 4 columns showing the description of the series" +JBS_TPL_SERIES_SHOW_PAGE_IMAGE_SERIES="Choose Series Page Image" +JBS_TPL_SERIES_SHOW_PAGE_IMAGE_SERIES_DESC="Choose an image for the top of the series list page." +JBS_TPL_SERIES_SHOW_SERIES_TITLE="Show/Hide Series List Page Title" +JBS_TPL_SERIES_SHOW_SERIES_TITLE_DESC="Show or hide the text for the top of the series list page." +JBS_TPL_SERIES_TEMPLATE="Series Details Template File" +JBS_TPL_SERIES_THUMBNAIL_BRACE="Series Thumbnail {series_thumbnail}" +JBS_TPL_SERIES_TITLE_TEXT="Series Title" +JBS_TPL_SERMONS_TEMPLATE="Studies List Template File" +JBS_TPL_SERMONS_TEMPLATE_DESC="If you have created a custom template file you can choose it from this list. Otherwise just leave it as Use Default" +JBS_TPL_SERMON_TEMPLATE="Study Details Template File" +JBS_TPL_SHARE_LABEL="Share Labe" +JBS_TPL_SHARE_DESC="Create a label to to display before the share info." +JBS_TPL_SHOW_ALL_BOOKS="Show All Books" +JBS_TPL_SHOW_ALWAYS="Show Always" +JBS_TPL_SHOW_ALWAYS_NO_HIDE_SHOW_LINK="Show always (no hide/show link)" +JBS_TPL_SHOW_AS_POPUP="Show as popup window link" +JBS_TPL_SHOW_BOOKS_W_STUDIES="Show Only Books with Studies" +JBS_TPL_SHOW_COMMENT="Show Comment only" +JBS_TPL_SHOW_COMMENT_OR_FILESIZE="Show Comment (if comment present) or Filesize (if no comment)" +JBS_TPL_SHOW_FILESIZE="Show Filesize only" +JBS_TPL_SHOW_LINK="Show Link" +JBS_TPL_SHOW_ONLY_BOOKS="Show only Book Name" +JBS_TPL_SHOW_ONLY_CHAPTERS="Show only chapters" +JBS_TPL_SHOW_PASSAGE_WITH_HIDE_SHOW="Show with Hide/Show link" +JBS_TPL_SHOW_PODCAST_SUBSCRIBE_BOTTOM="Show at bottom" +JBS_TPL_SHOW_PODCAST_SUBSCRIBE_TOP="Show at top" +JBS_TPL_SHOW_RELATED="Show related studies links" +JBS_TPL_SHOW_RELATED_DESC="Shows a drop down of links to related studies. This is powered by like meta keywords and/or topics between studies" +JBS_TPL_SHOW_SHARE="Show Share Menu" +JBS_TPL_SHOW_STUDIES_STUDIESLIST="Show Study Display with Studieslist set up" +JBS_TPL_SHOW_UNLESS_FILTERED="Show unless filtered" +JBS_TPL_SHOW_VERSES_AND_CHAPTERS="Show verses and chapters" +JBS_TPL_STORE_BRACE="Store {store}" +JBS_TPL_STUDIESVIEW_TEMPLATECODE_DESC="Use HTML to create your repeatable template. Any HTML will do.

      TEMPLATE CODES
      {{title}} - Sermon Title
      {{teacher}} - Teacher Name
      {{date}} - Date
      {{studyintro}} - Intro Text
      {{scripture}} - Scripture Reference
      {{topics}} - Topics (Tags)
      {{mediatime}} - Time
      {{thumbnail}} - Thumbnail Image
      {{seriestext}} - Series Name
      {{messagetype}} - Message Type
      {{bookname}} - Book Name
      {{studytext}} - Study Notes
      {{scripturelink}} - Scripture Link
      {{media}} - Media Table
      {{share}} - Social Networking Links
      {{printview}} - Print View Icon
      {{pdfview}} - PDF View Icon
      {{comments}} - Comments
      {{hits}} - Hits
      {{location}} - Location
      {{messagetype}} - Message Type" +JBS_TPL_STUDYIMAGE="Study Image" +JBS_TPL_STUDYNUMBER_BRACE="Studynumber {studynumber}" +JBS_TPL_STUDY_DETAILS_VIEW="Study Details View" +JBS_TPL_STUDY_INTRO_BRACE="Introduction {studyintro}" +JBS_TPL_STUDY_LIST_CUSTOM="Studies List Custom View" +JBS_TPL_STUDY_LIST_VIEW="Study List View" +JBS_TPL_SUBMITTED_BRACE="Submitted By {submitted}" +JBS_TPL_SUBSCRIBE_INTRO="Subscription header text" +JBS_TPL_SUBSCRIBE_INTRO_DESC="Add words for a header of the podcast subscription table" +JBS_TPL_TABLE="TABLE" +JBS_TPL_TABLE_OR_DIV="Wrap Code in TABLE or DIV tags?" +JBS_TPL_TEACHERAIMGE="Teacher Image" +JBS_TPL_TEACHERDETAIL_TEMPLATECODE="Teacher Detail Display Code" +JBS_TPL_TEACHERDETAILS="Teacher Details" +JBS_TPL_TEACHERDISPLAY="Teacher Details Display" +JBS_TPL_TEACHERLIST_TEMPLATECODE="Teacher List Display Code" +JBS_TPL_TEACHER_BRACE="Teacher {teachername}" +JBS_TPL_TEACHER_DETAILS="Teacher Details" +JBS_TPL_TEACHER_LABEL_TEACHER="Text for Latest Studies Line" +JBS_TPL_TEACHER_LABEL_TEACHER_DESC="Enter some text to show when displaying teacher latest studies" +JBS_TPL_TEACHER_LIST_TEMPLATE="Teacher List Template File" +JBS_TPL_TEACHER_SHOW_TEACHER_STUDIES="Show/Hide Teacher's Studies" +JBS_TPL_TEACHER_SHOW_TEACHER_STUDIES_DESC="Choose to show or hide the listing of latest studies by teacher in teacher display" +JBS_TPL_TEACHER_STUDIES="Number of Studies in Teacher's view" +JBS_TPL_TEACHER_STUDIES_DESC="Type in the number of studies to show for each teacher in the teacher's view. Leave blank for all" +JBS_TPL_TEACHER_TEACHERLINK="Show Link to more studies" +JBS_TPL_TEACHER_TEACHERLINK_DESC="Choose whether to show a link to more studies" +JBS_TPL_TEACHER_TEACHER_TITLE="List Page Title" +JBS_TPL_TEACHER_TEACHER_TITLE_DESC="Text to show on teacher list display page for title" +JBS_TPL_TEACHER_TEMPLATE="Teacher Details Template File" +JBS_TPL_TEACHER_TEMPLATECODE_DESC="Use HTML to create your repeatable template. Any HTML will do.

      TEMPLATE CODES
      {{title}} - Teacher Title
      {{teacher}} - Teacher Title
      {{phone}} - Phone
      {{website}} - Website
      {{information}} - Extended Information
      {{image}} - Large Image
      {{thumbnail}} - Small Image
      {{short}} Short Description" +JBS_TPL_TEACHER_VIEW="Teacher View" +JBS_TPL_TEMPLATECODE="Display Code" +JBS_TPL_TEMPLATE_ID="Template ID" +JBS_TPL_TEMPLATE_NAME="Template Name" +JBS_TPL_TEMPLATE_SERIES_DETAIL="Template Settings for Series Detail View" +JBS_TPL_TEMPLATE_SERIES_DETAIL_DESC="Choose a template for display of the series detail linked from a view displayed with this template" +JBS_TPL_TEMPLATE_SERIES_LIST="Template Settings for Series List View" +JBS_TPL_TEMPLATE_SERIES_LIST_DESC="Choose a template for display of the series list linked from a view displayed with this template" +JBS_TPL_TEMPLATE_STUDIES_LIST="Template Settings for Studies List View" +JBS_TPL_TEMPLATE_STUDIES_LIST_DESC="Choose a template for display of studies list view linked from a view displayed with this template" +JBS_TPL_TEMPLATE_STUDY_DETAIL="Template Settings for Study Details" +JBS_TPL_TEMPLATE_STUDY_DETAIL_DESC="Choose a template for display of study details view linked from a view displayed with this template" +JBS_TPL_TEMPLATE_TEACHER="Template Settings for Teacher View" +JBS_TPL_TEMPLATE_TEACHER_DESC="Choose a template for display of teacher details view linked from a view displayed with this template" +JBS_TPL_THUMBNAIL_BRACE="Thumbnail {thumbnail}" +JBS_TPL_TIME_OFFSET="Time Offset" +JBS_TPL_TIME_OFFSET_DESC="Time zone to be used for the date. Special cases: boolean true for user setting, boolean false for server setting. JBSM prefers false to use the server time frame." +JBS_TPL_TITLE_BRACE="Title {studytitle}" +JBS_TPL_TITLE_TEACHER_BRACE="Title + Teacher {teacher-title-name}" +JBS_TPL_TITLE_TEACHER_THUMBNAIL="Teacher Thumbnail" +JBS_TPL_TOOLTIP_ITEMS="ToolTip Items" +JBS_TPL_TOOLTIP_TIP_ITEM1="Tool Tip Item 1" +JBS_TPL_TOOLTIP_TIP_ITEM1_TITLE="ToolTip Label 1" +JBS_TPL_TOOLTIP_TIP_ITEM2="Tool Tip Item 2" +JBS_TPL_TOOLTIP_TIP_ITEM2_TITLE="ToolTip Label 2" +JBS_TPL_TOOLTIP_TIP_ITEM3="Tool Tip Item 3" +JBS_TPL_TOOLTIP_TIP_ITEM3_TITLE="ToolTip Label 3" +JBS_TPL_TOOLTIP_TIP_ITEM4="Tool Tip Item 4" +JBS_TPL_TOOLTIP_TIP_ITEM4_TITLE="ToolTip Label 4" +JBS_TPL_TOOLTIP_TIP_ITEM5="Tool Tip Item 5" +JBS_TPL_TOOLTIP_TIP_ITEM5_TITLE="ToolTip Label 5" +JBS_TPL_TOOLTIP_TIP_ITEM_DESC="Choose an item for this ToolTip" +JBS_TPL_TOOLTIP_TIP_ITEM_TITLE_DESC="Type in a label for this ToolTip item" +JBS_TPL_TOOLTIP_TIP_TITLE="ToolTip Title" +JBS_TPL_TOOLTIP_TIP_TITLE_DESC="Type in a title for the ToolTip" +JBS_TPL_TOPIC_BRACE="Topic {topics}" +JBS_TPL_TYPE_OF_LINK="Type of link" +JBS_TPL_TYPE_OF_LINK_DESC="Choose what this item should link to - if anything" +JBS_TPL_USE_CUSTOM_VIEW="Use This as view" +JBS_TPL_USE_HEADER_ROW="Use Header Row" +JBS_TPL_USE_HIDE_SHOW_LINK="Use Show/Hide Link" +JBS_TPL_USE_LIMIT="Use Landing Page Limit" +JBS_TPL_USE_LIMIT_DESC="Choose whether to use the limit below or use the settings for the Landing Page from each individual record" +JBS_TPL_USE_LOCATIONS_LIMIT="Type of Locations Limit" +JBS_TPL_USE_MESSAGETYPE_LIMIT="Type of Message Type list" +JBS_TPL_USE_RECORD_SETTING="Use Record Setting" +JBS_TPL_USE_SERIES_LIMIT="Type of Series List" +JBS_TPL_USE_TEACHERS_LIMIT="Type of Teachers List" +JBS_TPL_VERSES_CUSTOM_DATE_FORMAT="Set Custom PHP String To Time" +JBS_TPL_VERSES_CUSTOM_DATE_FORMAT_DESC="Use standard PHP date() code to form date. Overrides setting above. http://php.net/manual/en/function.date.php" +JBS_TPL_VERSES_DATES_CSS="Verses, Dates, CSS" +JBS_TPL_VERSES_DATE_FORMAT="Date format" +JBS_TPL_VERSES_DATE_FORMAT_DESC="Set the date display format" +JBS_TPL_VERSES_DURATION_TYPE="Choose : or hours/min/sec" +JBS_TPL_VERSES_DURATION_TYPE_DESC="Choose a seperator for the duration, either : or hours/mins/secs" +JBS_TPL_VERSES_SHOW_VERSES="Chapters/Verses" +JBS_TPL_VERSES_SHOW_VERSES_DESC="Choose whether just chapter(s) of Bible study book shown or verses too" +JBS_TPL_VERSES_STYLESHEET="Path to Your Stylesheet" +JBS_TPL_VERSES_STYLESHEET_DESC="Path from Joomla root to an alternate stylesheet (for advanced users only). Overrides page styles" +JBS_TPL_WINDOW="Window" +JBS_TPL_DEFAULT_ERROR="You may not Unpublish or Trash the Default template." + +; Template Code +JBS_TPLCODE_CODE="Template php/html code" +JBS_TPLCODE_CODE_DESC="Put the php and html code here. This will be an actual template file. Put in your own css tags too" +JBS_TPLCODE_DESC="Overide Template files for each view" +JBS_TPLCODE_FILENAME="Filename for the template (no .php)" +JBS_TPLCODE_FILENAME_DESC="Will create a file in the template view folder for the type specified. Name must be unique" +JBS_TPLCODE_MODULE="Module" +JBS_TPLCODE_SERIESDISPLAY="Series Display" +JBS_TPLCODE_SERIESDISPLAYS="Series List" +JBS_TPLCODE_SERMON="Sermon Display" +JBS_TPLCODE_SERMONLIST="Sermon List" +JBS_TPLCODE_TEACHER="Teacher Display" +JBS_TPLCODE_TEACHERS="Teachers List" +JBS_TPLCODE_TPLCODES="Template Codes" +JBS_TPLCODE_TYPE="View Template Types" + +;;Uploader +JBS_UPLOADER_ADD_FILES="Add Files" +JBS_UPLOADER_ADD_FILES_TO_QUEUE="Add Files to Queue" +JBS_UPLOADER_DRAG_FILES="Drag Files" +JBS_UPLOADER_ERROR_RUNTIME_NOT_SUPORTED="Your browser doesn't have Flash, Silverlight or HTML5 support." +JBS_UPLOADER_FILENAME="Filename" +JBS_UPLOADER_LOG_BTN="Log" +JBS_UPLOADER_REFRESH_UPLOADER="Refresh" +JBS_UPLOADER_SELECT_FILES="Select Files" +JBS_UPLOADER_SIZE="Size" +JBS_UPLOADER_START_UPLOAD="Start Upload" +JBS_UPLOADER_START_UPLOADING_QUEUE="Start Uploading Queue" +JBS_UPLOADER_STATUS="Status" +JBS_UPLOADER_STOP_CURRENT_UPLOAD="Stop Current Upload" +JBS_UPLOADER_STOP_UPLOAD="Stop Upload" + +;; Addon Languages test +JBS_ADDON_PROTOCOL="Protocol" +JBS_ADDON_PROTOCOL_DESC="Protocol of the server that needs to be used. http:// or https://, Default is (http://)" +JBS_ADDON_MEDIA_TYPE_DEF="Default Media Settings" +JBS_ADDON_BUTTON_COLOR="Custon button color" +JBS_ADDON_BUTTON_COLOR_DESC="Pick a color for the background of the button" +JBS_ADDON_MEDIA_USE_BUTTON="Use button/icon" +JBS_ADDON_MEDIA_USE_BUTTON_DESC="Choose whether to use a button or an icon instead of an image. This will override an image chosen" +JBS_ADDON_BUTTON_TYPE="Button color" +JBS_ADDON_BUTTON_TYPE_DESC="Choose from the available colors that come from Bootstrap. Blue is Primary, No color is Link, Green is Success, Light blue is Info, Orange is Warning, and Red is Danger" +JBS_ADDON_ICON_TYPE="Icon Type" +JBS_ADDON_ICON_TYPE_DESC="Choose an icon type from a selected number of icons available in Joomla" +JBS_ADDON_FONT_SIZE="Font Size (only numbers)" +JBS_ADDON_FONT_SIZE_DESC="Type in a font size in whole numbers only. This will affect the size of the icon" +JBS_ADDON_CUSTOM_ICON="Custom Icon" +JBS_ADDON_CUSTOM_ICON_DESC="Use any of the FontAwesome icons with this format fa fa-facebook. See http://fontawesome.io/icons/" +JBS_ADDON_BUTTON_TEXT="Button Text" +JBS_ADDON_BUTTON_TEXT_DESC="If you choose only a button, enter text for that button" +JBS_ADDON_DOWNLOAD_USE_BUTTON="Default Download Icon" +JBS_ADDON_DOWNLOAD_USE_BUTTON_DESC="Choose whether to use a button/icon or image for the default download icon. Button/icon overrides image choice" \ No newline at end of file diff --git a/build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.sys.ini b/build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.sys.ini new file mode 100644 index 0000000000..56e0c809e5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/en-GB/en-GB.com_biblestudy.sys.ini @@ -0,0 +1,97 @@ +; $Id: en-GB.com_biblestudy.sys.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +; Simple Mode message +SIMPLEMODEMESSAGE_TITLE="Simple Mode" +SIMPLEMODEMESSAGE_BODY="This version of Proclaim! introduces Simple Mode. Simple mode provides an easier interface to enter and display messages. It is ON by default. Turn it OFF and ON in the Administration tab." +SIMPLEMODEMESSAGE_ACTION="Go to the Administration tab and toggle Simple Mode OFF for the full featured Proclaim!" +; Identify the component as extension +COM_BIBLESTUDY="CWM-Proclaim" + +; Name of the component +JBS_CMN_COM_BIBLESTUDY="CWM-Proclaim" + +; Install strings +JBS_INS_ERROR_SQL_READBUFFER="Could not read the sql file" +JBS_INS_XML_DESCRIPTION="CWM-Proclaim" +JBS_INS_INSTALLATION_RESULTS="CWM-Proclaim Results" +JBS_INS_FAILURE="Failed to set up database" + +; Preflight and postflight strings +JBS_INS_GET_MORE_HELP="Get more help and information at ChristianWebMinistries.org" +JBS_INS_VISIT_DOCUMENTATION="Visit our Documentation Site" +JBS_INS_VISIT_FORUM="Visit our forum with your questions" +JBS_INS_CLICK_TO_FINISH="Click Here To Finish" +JBS_INS_TITLE="CWM-Proclaim" +JBS_MIGFINISHED="CWM-Proclaim migration finished" + +; Install Strings +JBS_INS_INSTALLED="Installed" +JBS_INS_NOT_INSTALLED="Not Installed" +JBS_INS_REMOVED="Removed" +JBS_INS_NOT_REMOVED="Not Removed" +JBS_INS_CLIENT="Client" +JBS_INS_MODULE="Module" +JBS_INS_STATUS="Status" +JBS_INS_EXTENSION="Extension" +JBS_INS_UNINSTALL="Uninstall" + +; Uninstall strings (used when the extension is uninstalled) +JBS_INS_UNINSTALLED="CWM-Proclaim Uninstalled. Be sure to uninstall the module and plugins as well." +JBS_INS_NO_DATABASE_REMOVED="Uninstall Results: Database tables have not been removed. To complete remove CWM-Proclaim Management System, remove all database tables that start with #__bsms (or jos_bsms in most cases)." + +; Menue entries +JBS_MNU_ADMINISTRATION="Administration" +JBS_MNU_CONTROL_PANEL="Control Panel" +JBS_MNU_LOCATIONS="Locations" +JBS_MNU_MEDIA_FILES="Media Files" +JBS_MNU_MEDIA_IMAGES="Media Images" +JBS_MNU_MESSAGETYPES="Message Types" +JBS_MNU_MIMETYPES="Mime Types" +JBS_MNU_PODCASTS="Podcasts" +JBS_MNU_SERIES="Series" +JBS_MNU_SERVERS="Servers" +JBS_MNU_SERVER_FOLDERS="Server Folders" +JBS_MNU_SOCIAL_NETWORK_LINKS="Social Media Links" +JBS_MNU_STUDIES="Studies" +JBS_MNU_STUDY_COMMENTS="Study Comments" +JBS_MNU_STYLES="CSS Styles" +JBS_MNU_TEACHERS="Teachers" +JBS_MNU_TEMPLATE_CODE_DISPLAY="Template Files" +JBS_MNU_TEMPLATE_DISPLAY="Template Display Settings" +JBS_MNU_TOPICS="Topics" + +JBS_MNU_COMMENTS_LIST_EDIT_LAYOUT="Administer Comments" +JBS_MNU_COMMENTS_LIST_EDIT_LAYOUT_DESC="Create a link to the Administration Comments Page" +JBS_MNU_LANDING_PAGE_LAYOUT="Landing Page Layout" +JBS_MNU_LANDING_PAGE_LAYOUT_DESC="Create a link to the main Proclaim List Page" +JBS_MNU_LATEST_STUDY_LAYOUT="Latest Study Details Link" +JBS_MNU_LATEST_STUDY_LAYOUT_DESC="Creates a link to the details view of your latest study automatically" +JBS_MNU_MEDIAFILES_LIST_LAYOUT="FOR ADMIN of Media Files" +JBS_MNU_MEDIAFILES_LIST_LAYOUT_DESC="Create a link to the Administration Media Files Page" +JBS_MNU_SERIES_LIST_LAYOUT="Series List Layout" +JBS_MNU_SERIES_LIST_LAYOUT_DESC="Create a link to the main Series List Page" +JBS_MNU_SINGLE_SERIES_LAYOUT="Single Series Layout" +JBS_MNU_SINGLE_SERIES_LAYOUT_DESC="Create a link to a single series" +JBS_MNU_SINGLE_STUDY_LAYOUT="Single Study Layout" +JBS_MNU_SINGLE_STUDY_LAYOUT_DESC="Create a link to a single study" +JBS_MNU_SINGLE_TEACHER_LAYOUT="Single Teacher Layout" +JBS_MNU_SINGLE_TEACHER_LAYOUT_DESC="Create a link to a single teacher" +JBS_MNU_STUDIES_LIST_EDIT_LAYOUT="FOR ADMIN of Studies" +JBS_MNU_STUDIES_LIST_EDIT_LAYOUT_DESC="Create a link to the Administration Studies Page" +JBS_MNU_STUDIES_LIST_LAYOUT="Studies List Layout" +JBS_MNU_STUDIES_LIST_LAYOUT_DESC="Create a link to the main Studies List Page" +JBS_MNU_TEACHERS_LIST_LAYOUT="Teachers List Layout" +JBS_MNU_TEACHERS_LIST_LAYOUT_DESC="Create a link to the main Teachers List Page" +JBS_MNU_PODCASTS_LIST_EDIT_LAYOUT="Podcast List Edit Layout" +JBS_MNU_PODCASTS_LIST_LAYOUT="Podcast Options" +JBS_MNU_PODCASTS_LIST_LAYOUT_DESC="Options for List layout" + +JBS_MNU_SELECT_SERIES_DESC="Choose a single series to link to" +JBS_MNU_SELECT_STUDY_DESC="Choose a single study to link to" +JBS_MNU_SELECT_TEACHER_DESC="Choose a single teacher to link to" +JBS_MNU_SELECT_TEMPLATE="Template for this page" +JBS_MNU_SELECT_TEMPLATE_DESC="Choose a template for your page" diff --git a/build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.ini b/build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.ini new file mode 100644 index 0000000000..ad8f9c1169 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.ini @@ -0,0 +1,12 @@ +; $Id: es-ES.com_biblestudy.ini 1.0 2007-12-17 $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM +; ** Not Complete ** + + +JBS_CMN_DURATION="Duracion" +JBS_CMN_PRINT="Imprimir" +JBS_CMN_PUBLISHED="Publicado" +JBS_CMN_SERIES="Series" +JBS_CMN_STUDYNUMBER="Numero Estudio" diff --git a/build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.sys.ini b/build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.sys.ini new file mode 100644 index 0000000000..732a88b69b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/es-ES/es-ES.com_biblestudy.sys.ini @@ -0,0 +1,31 @@ +; $Id: es-ES.com_biblestudy.sys.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +; Identify the component as extension +COM_BIBLESTUDY="Estudio Biblico" + +; Name of the component +JBS_CMN_COM_BIBLESTUDY="Estudio Biblico" + +; Menue entries +JBS_MNU_ADMINISTRATION="Administration" +JBS_MNU_CONTROL_PANEL="Control Panel" +JBS_MNU_LOCATIONS="Locations" +JBS_MNU_MEDIA_FILES="Media Files" +JBS_MNU_MEDIA_IMAGES="Media Imagenes" +JBS_MNU_MESSAGETYPES="Tipo de Mensajes" +JBS_MNU_MIMETYPES="Mime Types" +JBS_MNU_PODCASTS="Podcasts" +JBS_MNU_SERIES="Series" +JBS_MNU_SERVERS="Servidores" +JBS_MNU_SERVER_FOLDERS="Directorio Servidores" +JBS_MNU_SOCIAL_NETWORK_LINKS="Social Network Links" +JBS_MNU_STUDIES="Estudios" +JBS_MNU_STUDY_COMMENTS="Study Comments" +JBS_MNU_STYLES="CSS Edit" +JBS_MNU_TEACHERS="Maestros" +JBS_MNU_TEMPLATE_DISPLAY="Template Display Settings" +JBS_MNU_TOPICS="Temas" diff --git a/build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.ini b/build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.ini new file mode 100644 index 0000000000..2d842440eb --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.ini @@ -0,0 +1,209 @@ +; $Id: hu-HU.com_biblestudy.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2010 Kerkovits Krisztián +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +JBS_CMN_ASCENDING="Növekvő" +JBS_CMN_BOOK="Könyv" +JBS_CMN_DESCENDING="Csökkenő" +JBS_CMN_DESCRIPTION="Leírás" +JBS_CMN_DETAILS="Részletek" +JBS_CMN_DURATION="Hossz" +JBS_CMN_FILESIZE="Fájlméret" +JBS_CMN_HOURS="Óra" +JBS_CMN_ID="ID" +JBS_CMN_MEDIA="Média" +JBS_CMN_MESSAGETYPE="Üzenettípus" +JBS_CMN_MINUTES="Perc" +JBS_CMN_PRINT="Nyomtatás" +JBS_CMN_PUBLISHED="Közzétéve" +JBS_CMN_SCRIPTURE="Ige" +JBS_CMN_SECONDARY_REFERENCES="Másodlagos referenciák" +JBS_CMN_SECONDS="másodperc" +JBS_CMN_SELECT_BOOK="Válassz könyvet" +JBS_CMN_SELECT_MESSAGETYPE="Válassz üzenettípust" +JBS_CMN_SELECT_SERIES="Válaszz sorozatot" +JBS_CMN_SELECT_TEACHER="Válassz tanítót" +JBS_CMN_SELECT_TOPIC="Válassz témát" +JBS_CMN_SELECT_YEAR="Válassz évet" +JBS_CMN_SERIES="Sorozat" +JBS_CMN_SERVER="Szerver" +JBS_CMN_STUDYNUMBER="Tanítás száma" +JBS_CMN_TEACHER="Tanító" +JBS_CMN_TITLE="Cím" +JBS_CMN_TOPIC="Téma" + +JBS_BBK_GENESIS="1Mózes" +JBS_BBK_EXODUS="2Mózes" +JBS_BBK_LEVITICUS="3Mózes" +JBS_BBK_NUMBERS="4Mózes" +JBS_BBK_DEUTERONOMY="5Mózes" +JBS_BBK_JOSHUA="Józsué" +JBS_BBK_JUDGES="Bírák" +JBS_BBK_RUTH="Rúth" +JBS_BBK_1SAMUEL="1Sámuel" +JBS_BBK_2SAMUEL="2Sámuel" +JBS_BBK_1KINGS="1Királyok" +JBS_BBK_2KINGS="2Királyok" +JBS_BBK_1CHRONICLES="1Krónikák" +JBS_BBK_2CHRONICLES="2Krónikák" +JBS_BBK_EZRA="Ezsdrás" +JBS_BBK_NAHUM="Náhum" +JBS_BBK_ESTHER="Eszter" +JBS_BBK_JOB="Jób" +JBS_BBK_PSALM="Zsoltárok" +JBS_BBK_PROVERBS="Példabeszédek" +JBS_BBK_ECCLESIASTES="Prédikátor" +JBS_BBK_SONG_OF_SOLOMON="Énekek éneke" +JBS_BBK_ISAIAH="Ézsaiás" +JBS_BBK_JEREMIAH="Jeremiás" +JBS_BBK_LAMENTATIONS="Siralmak" +JBS_BBK_EZEKIEL="Ezékiel" +JBS_BBK_DANIEL="Dániel" +JBS_BBK_HOSEA="Hóseás" +JBS_BBK_JOEL="Jóel" +JBS_BBK_AMOS="Ámos" +JBS_BBK_OBADIAH="Abdiás" +JBS_BBK_JONAH="Jónás" +JBS_BBK_MICAH="Mikeás" +JBS_BBK_NEHEMIAH="Nehémiás" +JBS_BBK_HABAKKUK="Habakuk" +JBS_BBK_ZEPHANIAH="Zofóniás" +JBS_BBK_HAGGAI="Haggeus" +JBS_BBK_ZECHARIAH="Zakariás" +JBS_BBK_MALACHI="Malakiás" +JBS_BBK_MATTHEW="Máté" +JBS_BBK_MARK="Márk" +JBS_BBK_LUKE="Lukács" +JBS_BBK_JOHN="János" +JBS_BBK_ACTS="ApCsel" +JBS_BBK_ROMANS="Róma" +JBS_BBK_1CORINTHIANS="1Korinthus" +JBS_BBK_2CORINTHIANS="2Korinthus" +JBS_BBK_GALATIANS="Galata" +JBS_BBK_EPHESIANS="Efézus" +JBS_BBK_PHILIPPIANS="Filippi" +JBS_BBK_COLOSSIANS="Kolossé" +JBS_BBK_1THESSALONIANS="1Thesszalonika" +JBS_BBK_2THESSALONIANS="2Thesszalonika" +JBS_BBK_1TIMOTHY="1Timóteus" +JBS_BBK_2TIMOTHY="2Timóteus" +JBS_BBK_TITUS="Titusz" +JBS_BBK_PHILEMON="Filemon" +JBS_BBK_HEBREWS="Zsidók" +JBS_BBK_JAMES="Jakab" +JBS_BBK_1PETER="1Péter" +JBS_BBK_2PETER="2Péter" +JBS_BBK_1JOHN="1János" +JBS_BBK_2JOHN="2János" +JBS_BBK_3JOHN="3János" +JBS_BBK_JUDE="Júdás" +JBS_BBK_REVELATION="Jelenések" + +JBS_MED_FILENAME="Fájlnév" +JBS_MED_PATH_OR_FOLDER="Elérési út vagy könyvtár" +JBS_MED_USE_FILENAME_AS_PATH="Használd a 'Fájnevet' teljes elérési utakhoz, ha úgy tetszik. De ekkor ne válassz szervert és elérési utat!" + +JBS_STY_CHAPTER_BEGIN="Fejezet eleje" +JBS_STY_CHAPTER_END="Fejezet vége" +JBS_STY_VERSE_BEGIN="Vers eleje" +JBS_STY_VERSE_END="Vers vége" + +JBS_TCH_RETURN_TEACHER_LIST="Vissza a tanítók listájához" + +JBS_TOP_ABORTION="Abortusz" +JBS_TOP_ADDICTION="Függőség" +JBS_TOP_AFTERLIFE="Halál után" +JBS_TOP_APOLOGETICS="Apológia" +JBS_TOP_BAPTISM="Bemerítés" +JBS_TOP_BASICS_OF_CHRISTIANITY="Keresztyénség alapjai" +JBS_TOP_BECOMING_A_CHRISTIAN="Megtérés" +JBS_TOP_BIBLE="Biblia" +JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS="Családon belüli kapcsolatok" +JBS_TOP_CHILDREN="Gyermekek" +JBS_TOP_CHRIST="Krisztus" +JBS_TOP_CHRISTIAN_CHARACTER_FRUITS="Keresztyén jellem/Gyümölcsök" +JBS_TOP_CHRISTIAN_VALUES="Keresztyén értékek" +JBS_TOP_CHRISTMAS_SEASON="Karácsonyi ünnepkör" +JBS_TOP_CHURCH="Gyülekezet" +JBS_TOP_COMMUNICATION="Kommunikáció" +JBS_TOP_COMMUNION___LORDS_SUPPER="Úrvacsora" +JBS_TOP_CREATION="Teremtés" +JBS_TOP_CULTS="Szekták" +JBS_TOP_DA_VINCI_CODE="Da Vinci kód" +JBS_TOP_DEATH="Halál" +JBS_TOP_DESCRIPTIONS_OF_GOD="Isten jellemzői" +JBS_TOP_DISCIPLES="Tanítványok" +JBS_TOP_DISCIPLESHIP="Tanítványság" +JBS_TOP_DIVORCE="Válás" +JBS_TOP_EASTER_SEASON="Húsvéti ünnepkör" +JBS_TOP_EMOTIONS="Érzelmek" +JBS_TOP_ENTERTAINMENT="Szórakozás" +JBS_TOP_EVANGELISM="Evangelizáció" +JBS_TOP_FAITH="Hit" +JBS_TOP_FAMILY="Család" +JBS_TOP_FORGIVING_OTHERS="Megbocsájtás" +JBS_TOP_FREEDOM="Szabadság" +JBS_TOP_FRIENDSHIP="Barátság" +JBS_TOP_FULFILLMENT_IN_LIFE="Beteljesült élet" +JBS_TOP_FUND_RAISING_RALLY="Alapítvány-verseny" +JBS_TOP_FUNERALS="Temetések" +JBS_TOP_GIVING="Ajándékozás" +JBS_TOP_GODS_ACTIVITY="Isten tevékenysége" +JBS_TOP_GODS_ATTRIBUTES="Isten tulajdonságai" +JBS_TOP_GODS_FORGIVENESS="Isteni megbocsájtás" +JBS_TOP_GODS_LOVE="Isten szeretete" +JBS_TOP_GODS_NATURE="Isten természete" +JBS_TOP_GODS_WILL="Isten akarata" +JBS_TOP_HARDSHIP_OF_LIFE="Élet nehézségei" +JBS_TOP_HOLIDAYS="Ünnepek" +JBS_TOP_HOLY_SPIRIT="Szent Szellem" +JBS_TOP_HOT_TOPICS="Forró témák" +JBS_TOP_JESUS_BIRTH="Jézus születése" +JBS_TOP_JESUS_CROSS_FINAL_WEEK="Jézus keresztje/Utolsó hét" +JBS_TOP_JESUS_DIVINITY="Jézus isteni volta" +JBS_TOP_JESUS_HUMANITY="Jézus emberi volta" +JBS_TOP_JESUS_LIFE="Jézus élete" +JBS_TOP_JESUS_MIRACLES="Jézus csodái" +JBS_TOP_JESUS_RESURRECTION="Jézus feltámadása" +JBS_TOP_JESUS_TEACHING="Jézus Tanításai" +JBS_TOP_KINGDOM_OF_GOD="Isten királysága" +JBS_TOP_LEADERSHIP_ESSENTIALS="Vezetőségi kérdések" +JBS_TOP_LOVE="Szeretet" +JBS_TOP_MARRIAGE="Házasság" +JBS_TOP_MEN="Férfiak" +JBS_TOP_MESSIANIC_PROPHECIES="Messás-prófécia" +JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY="Keresztyénség téveszméi" +JBS_TOP_MONEY="Pénz" +JBS_TOP_NARNIA="Narnia" +JBS_TOP_OUR_NEED_FOR_GOD="Isten iránti szükségünk" +JBS_TOP_PARABLES="Példázatok" +JBS_TOP_PARANORMAL="Paranormális" +JBS_TOP_PARENTING="Nevelés" +JBS_TOP_POVERTY="Nyomor" +JBS_TOP_PRAYER="Ima" +JBS_TOP_PROMINENT_N_T__MEN="Újszövetség kiváló férfiai" +JBS_TOP_PROMINENT_N_T__WOMEN="Újszövetség kiváló női" +JBS_TOP_PROMINENT_O_T__MEN="Ószövetség kiváló férfiai" +JBS_TOP_PROMINENT_O_T__WOMEN="Ószövetség kiváló női" +JBS_TOP_RACISM="Rasszizmus" +JBS_TOP_SECOND_COMING="Második eljövetel" +JBS_TOP_SEXUALITY="Nemiség" +JBS_TOP_SIN="Bűn" +JBS_TOP_SINGLENESS="Egyedülállóság" +JBS_TOP_SMALL_GROUPS="Kis csoportok" +JBS_TOP_SPECIAL_SERVICES="Különleges alkalmak" +JBS_TOP_SPIRITUAL_DISCIPLINES="Szellemi törvények" +JBS_TOP_SPIRITUAL_GIFTS="Lelki ajándékok" +JBS_TOP_STEWARDSHIP="Sáfárkodás" +JBS_TOP_SUPERNATURAL="Természetfölötti" +JBS_TOP_TEMPTATION="Kísértés" +JBS_TOP_TEN_COMMANDMENTS="Tízparancsolat" +JBS_TOP_TRUTH="Igazság" +JBS_TOP_TWELVE_APOSTLES="Tizenkét apostol" +JBS_TOP_WEDDINGS="Esküvő" +JBS_TOP_WOMEN="Nők" +JBS_TOP_WORKPLACE_ISSUES="Munkahelyi helyzetek" +JBS_TOP_WORLD_RELIGIONS="Világvallások" +JBS_TOP_WORSHIP="Dicsőítés/Imádat" diff --git a/build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.sys.ini b/build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.sys.ini new file mode 100644 index 0000000000..df515bd2f6 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/hu-HU/hu-HU.com_biblestudy.sys.ini @@ -0,0 +1,31 @@ +; $Id: hu-HU.com_biblestudy.sys.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +; Identify the component as extension +COM_BIBLESTUDY="Bible Study" + +; Name of the component +JBS_CMN_COM_BIBLESTUDY="Bible Study" + +; Menue entries +JBS_MNU_ADMINISTRATION="Adminisztráció" +JBS_MNU_CONTROL_PANEL="Control Panel" +JBS_MNU_LOCATIONS="Helyek" +JBS_MNU_MEDIA_FILES="Médiafájlok" +JBS_MNU_MEDIA_IMAGES="Képek" +JBS_MNU_MESSAGETYPES="Üzenettípusok" +JBS_MNU_MIMETYPES="Mime azonosítók" +JBS_MNU_PODCASTS="Podcast-ok" +JBS_MNU_SERIES="Sorozatok" +JBS_MNU_SERVERS="Szerverek" +JBS_MNU_SERVER_FOLDERS="Szerver könyvtárak" +JBS_MNU_SOCIAL_NETWORK_LINKS="Social Network Links" +JBS_MNU_STUDIES="Tanítások" +JBS_MNU_STUDY_COMMENTS="Kommentek" +JBS_MNU_STYLES="CSS szerkesztő" +JBS_MNU_TEACHERS="Tanítók" +JBS_MNU_TEMPLATE_DISPLAY="Sablon megjelenési beállítások" +JBS_MNU_TOPICS="Témák" diff --git a/build/com_proclaim-9.2.1/admin/language/nl-NL/nl-NL.com_biblestudy.ini b/build/com_proclaim-9.2.1/admin/language/nl-NL/nl-NL.com_biblestudy.ini new file mode 100644 index 0000000000..48bf88e8a9 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/nl-NL/nl-NL.com_biblestudy.ini @@ -0,0 +1,214 @@ +; $Id: nl-NL.com_biblestudy.ini 1.0 2009-11-30 $ +; Copyright (c) 2009 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM +; ** Not Complete ** + +JBS_CMN_ASCENDING="Stijgend" +JBS_CMN_BOOK="Boek" +JBS_CMN_DESCENDING="Dalend" +JBS_CMN_DESCRIPTION="Beschrijving" +JBS_CMN_DETAILS="Details" +JBS_CMN_DURATION="Duur" +JBS_CMN_FILESIZE="Bestandsgrootte" +JBS_CMN_HOURS="Uren" +JBS_CMN_ID="ID" +JBS_CMN_MEDIA="Media" +JBS_CMN_MESSAGETYPE="Soort bericht" +JBS_CMN_MINUTES="Minuten" +JBS_CMN_PRINT=" Afdrukken" +JBS_CMN_PUBLISHED="Gepubliceerd" +JBS_CMN_SCRIPTURE="Schrift" +JBS_CMN_SECONDARY_REFERENCES="Secundaire verwijzingen" +JBS_CMN_SECONDS="Seconden" +JBS_CMN_SELECT_BOOK="Kies een boek" +JBS_CMN_SELECT_LOCATION="Kies een plaats" +JBS_CMN_SELECT_MESSAGETYPE="Kiest een soort boodschap" +JBS_CMN_SELECT_SERIES="Kies een reeks" +JBS_CMN_SELECT_TEACHER="Kies een leerkracht" +JBS_CMN_SELECT_TOPIC="Kies een onderwerp" +JBS_CMN_SELECT_YEAR="Kies een jaar" +JBS_CMN_SERIES="Reeksen" +JBS_CMN_SERVER="Server" +JBS_CMN_SHOW_HIDE_SCRIPTURE="Toon/Verberg Schriftlezing" +JBS_CMN_STUDYNUMBER="Nummer van studie" +JBS_CMN_STUDY_INTRO="Inleiding" +JBS_CMN_TEACHER="Leerkracht" +JBS_CMN_TITLE="Titel" +JBS_CMN_TOPIC="Onderwerp" + +JBS_BBK_GENESIS="Genesis" +JBS_BBK_EXODUS="Exodus" +JBS_BBK_LEVITICUS="Leviticus" +JBS_BBK_NUMBERS="Numeri" +JBS_BBK_DEUTERONOMY="Deuteronomium" +JBS_BBK_JOSHUA="Joshua" +JBS_BBK_JUDGES="Rechters" +JBS_BBK_RUTH="Ruth" +JBS_BBK_1SAMUEL="1Samuel" +JBS_BBK_2SAMUEL="2Samuel" +JBS_BBK_1KINGS="1Koningen" +JBS_BBK_2KINGS="2Koningen" +JBS_BBK_1CHRONICLES="1Kronieken" +JBS_BBK_2CHRONICLES="2Kronieken" +JBS_BBK_EZRA="Ezra" +JBS_BBK_NAHUM="Nahum" +JBS_BBK_ESTHER="Esther" +JBS_BBK_JOB="Job" +JBS_BBK_PSALM="Psalm" +JBS_BBK_PROVERBS="Spreuken" +JBS_BBK_ECCLESIASTES="Ecclesiasticus" +JBS_BBK_SONG_OF_SOLOMON="Hooglied" +JBS_BBK_ISAIAH="Jesaja" +JBS_BBK_JEREMIAH="Jeremia" +JBS_BBK_LAMENTATIONS="Klaaglied" +JBS_BBK_EZEKIEL="Ezechiël" +JBS_BBK_DANIEL="Daniël" +JBS_BBK_HOSEA="Hosea" +JBS_BBK_JOEL="Joël" +JBS_BBK_AMOS="Amos" +JBS_BBK_OBADIAH="Obadia" +JBS_BBK_JONAH="Jona" +JBS_BBK_MICAH="Micha" +JBS_BBK_NEHEMIAH="Nehemia" +JBS_BBK_HABAKKUK="Habakkuk" +JBS_BBK_ZEPHANIAH="Sefanja" +JBS_BBK_HAGGAI="Haggai" +JBS_BBK_ZECHARIAH="Zacharia" +JBS_BBK_MALACHI="Maleachi" +JBS_BBK_MATTHEW="Matteus" +JBS_BBK_MARK="Marcus" +JBS_BBK_LUKE="Lucas" +JBS_BBK_JOHN="Johannes" +JBS_BBK_ACTS="Handelingen" +JBS_BBK_ROMANS="Romeinen" +JBS_BBK_1CORINTHIANS="1Korintiërs" +JBS_BBK_2CORINTHIANS="2Korintiërs" +JBS_BBK_GALATIANS="Galatiërs" +JBS_BBK_EPHESIANS="Efeziërs" +JBS_BBK_PHILIPPIANS="Filippenzen" +JBS_BBK_COLOSSIANS="Kolossenzen" +JBS_BBK_1THESSALONIANS="1Thessalonicenzen" +JBS_BBK_2THESSALONIANS="2Thessalonicenzen" +JBS_BBK_1TIMOTHY="1Timoteus" +JBS_BBK_2TIMOTHY="2Timoteus" +JBS_BBK_TITUS="Titus" +JBS_BBK_PHILEMON="Filemon" +JBS_BBK_HEBREWS="Hebreërs" +JBS_BBK_JAMES="Jacobus" +JBS_BBK_1PETER="1Petrus" +JBS_BBK_2PETER="2Petrus" +JBS_BBK_1JOHN="1Johannes" +JBS_BBK_2JOHN="2Johannes" +JBS_BBK_3JOHN="3Johannes" +JBS_BBK_JUDE="Judas" +JBS_BBK_REVELATION="Openbaring" + +JBS_MED_DOWNLOAD="Download" +JBS_MED_FILENAME="Bestandsnaam" +JBS_MED_PATH_OR_FOLDER="Pad of map:" +JBS_MED_PDF="PDF" +JBS_MED_USE_FILENAME_AS_PATH="Gebruik desgewenst een bestandsnaam als volledig pad. Gebruik alleen geen server of pad." + +JBS_STY_CHAPTER_BEGIN="Hfst Begin" +JBS_STY_CHAPTER_END="Hfst Einde" +JBS_STY_VERSE_BEGIN="Vs Begin" +JBS_STY_VERSE_END="Vs Einde" + +JBS_TCH_RETURN_TEACHER_LIST="Terug naar overzicht leerkrachten" + +JBS_TOP_ABORTION="Abortus" +JBS_TOP_ADDICTION="Verslaving" +JBS_TOP_AFTERLIFE="Leven na de dood" +JBS_TOP_APOLOGETICS="Apologieën" +JBS_TOP_BAPTISM="Doopsel" +JBS_TOP_BASICS_OF_CHRISTIANITY="Beginselen van christendom" +JBS_TOP_BECOMING_A_CHRISTIAN="Christen worden" +JBS_TOP_BIBLE="Bijbel" +JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS="Gemengde familiebanden" +JBS_TOP_CHILDREN="Kinderen" +JBS_TOP_CHRIST="Christus" +JBS_TOP_CHRISTIAN_CHARACTER_FRUITS="Christelijk Karakter/Vruchten" +JBS_TOP_CHRISTIAN_VALUES="Christelijke waarden" +JBS_TOP_CHRISTMAS_SEASON="Kersttijd" +JBS_TOP_CHURCH="Kerk" +JBS_TOP_COMMUNICATION="Communicatie" +JBS_TOP_COMMUNION___LORDS_SUPPER="Communie / Avondmaal" +JBS_TOP_CREATION="Schepping" +JBS_TOP_CULTS="Cultussen" +JBS_TOP_DA_VINCI_CODE="Da Vinci Code" +JBS_TOP_DEATH="Dood" +JBS_TOP_DESCRIPTIONS_OF_GOD="Beschrijvingen van God" +JBS_TOP_DISCIPLES="Apostelen" +JBS_TOP_DISCIPLESHIP="Apostolaat" +JBS_TOP_DIVORCE="Echtscheiding" +JBS_TOP_EASTER_SEASON="Paastijd" +JBS_TOP_EMOTIONS="Emoties" +JBS_TOP_ENTERTAINMENT="Ontspanning" +JBS_TOP_EVANGELISM="Evangeliseren" +JBS_TOP_FAITH="Vertrouwen" +JBS_TOP_FAMILY="Familie" +JBS_TOP_FORGIVING_OTHERS="Vergiffenis schenken" +JBS_TOP_FREEDOM="Vrijheid" +JBS_TOP_FRIENDSHIP="Vriendschap" +JBS_TOP_FULFILLMENT_IN_LIFE="Levensvervulling" +JBS_TOP_FUND_RAISING_RALLY="Geldinzameling" +JBS_TOP_FUNERALS="Uitvaarten" +JBS_TOP_GIVING="Giften" +JBS_TOP_GODS_ACTIVITY="Gods Werk" +JBS_TOP_GODS_ATTRIBUTES="Gods Eigenschappen" +JBS_TOP_GODS_FORGIVENESS="Gods Vergiffenis" +JBS_TOP_GODS_LOVE="Gods Liefde" +JBS_TOP_GODS_NATURE="Gods Aard" +JBS_TOP_GODS_WILL="Gods Wil" +JBS_TOP_HARDSHIP_OF_LIFE="Ontberingen van het leven" +JBS_TOP_HOLIDAYS="Vakantie" +JBS_TOP_HOLY_SPIRIT="Heilige Geest" +JBS_TOP_HOT_TOPICS="Populaire onderwerpen" +JBS_TOP_JESUS_BIRTH="Geboorte van Jezus" +JBS_TOP_JESUS_CROSS_FINAL_WEEK="Kruis van Jezus/Goede Week" +JBS_TOP_JESUS_DIVINITY="Jezus' heiligheid" +JBS_TOP_JESUS_HUMANITY="Jesus' menselijkheid" +JBS_TOP_JESUS_LIFE="Jesus' leven" +JBS_TOP_JESUS_MIRACLES="Jesus' wonderen" +JBS_TOP_JESUS_RESURRECTION="Jesus' verrijzenis" +JBS_TOP_JESUS_TEACHING="Jesus' leer" +JBS_TOP_KINGDOM_OF_GOD="Koninkrijk van God" +JBS_TOP_LEADERSHIP_ESSENTIALS="Essentie van leiderschap" +JBS_TOP_LOVE="Liefde" +JBS_TOP_MARRIAGE="Huwelijk" +JBS_TOP_MEN="Mannen" +JBS_TOP_MESSIANIC_PROPHECIES="Messiaanse profetieën" +JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY="Misvattingen over het christendom" +JBS_TOP_MONEY="Geld" +JBS_TOP_NARNIA="Narnia" +JBS_TOP_OUR_NEED_FOR_GOD="Onze behoefte aan God" +JBS_TOP_PARABLES="Parabels" +JBS_TOP_PARANORMAL="Paranormaal" +JBS_TOP_PARENTING="Ouderschap" +JBS_TOP_POVERTY="Armoede" +JBS_TOP_PRAYER="Gebed" +JBS_TOP_PROMINENT_N_T__MEN="Belangrijkse mannen uit het N.T." +JBS_TOP_PROMINENT_N_T__WOMEN="Belangrijkse vrouwen uit het N.T." +JBS_TOP_PROMINENT_O_T__MEN="Belangrijkse mannen uit het O.T." +JBS_TOP_PROMINENT_O_T__WOMEN="Belangrijkse vrouwen uit het O.T." +JBS_TOP_RACISM="Racisme" +JBS_TOP_SECOND_COMING="Tweede Komst" +JBS_TOP_SEXUALITY="Seksualiteit" +JBS_TOP_SIN="Zonde" +JBS_TOP_SINGLENESS="Vrijgezel zijn" +JBS_TOP_SMALL_GROUPS="Kleine groepen" +JBS_TOP_SPECIAL_SERVICES="Speciale diensten" +JBS_TOP_SPIRITUAL_DISCIPLINES="Spirituele disciplines" +JBS_TOP_SPIRITUAL_GIFTS="Spirituele geschenken" +JBS_TOP_STEWARDSHIP="Dienstbaarheid" +JBS_TOP_SUPERNATURAL="Bovennatuurlijk" +JBS_TOP_TEMPTATION="Verleiding" +JBS_TOP_TEN_COMMANDMENTS="Tien geboden" +JBS_TOP_TRUTH="Waarheid" +JBS_TOP_TWELVE_APOSTLES="Twaalf apostelen" +JBS_TOP_WEDDINGS="Huwelijken" +JBS_TOP_WOMEN="Vrouwen" +JBS_TOP_WORKPLACE_ISSUES="Werkplaats kwesties" +JBS_TOP_WORLD_RELIGIONS="Wereldgodsdiensten" +JBS_TOP_WORSHIP="Aanbidding" diff --git a/build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.ini b/build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.ini new file mode 100644 index 0000000000..4ea3b7062c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.ini @@ -0,0 +1,215 @@ +; $Id: en-GB.com_biblestudy.ini 1.0 2007-04-17 $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM +; ** Not Complete ** + +JBS_CMN_ASCENDING="Stigende" +JBS_CMN_BOOK="Book" +JBS_CMN_DESCENDING="Synkende" +JBS_CMN_DESCRIPTION="Description" +JBS_CMN_DETAILS="Details" +JBS_CMN_DURATION="Varighet" +JBS_CMN_EDIT_MEDIA_FILE="Edit Media File" +JBS_CMN_FILESIZE="Filesize" +JBS_CMN_HOURS="Hours" +JBS_CMN_ID="ID" +JBS_CMN_MEDIA="Media" +JBS_CMN_MESSAGETYPE="Message Type" +JBS_CMN_MINUTES="Minutes" +JBS_CMN_NO="No" +JBS_CMN_PODCASTS="Podcasts" +JBS_CMN_PUBLISHED="Publisert" +JBS_CMN_SCRIPTURE="Bok" +JBS_CMN_SECONDARY_REFERENCES="Andre referanser" +JBS_CMN_SECONDS="Seconds" +JBS_CMN_SELECT_BOOK="Velg en bok" +JBS_CMN_SELECT_ITEM_UNPUBLISH="Select an Item to Unpublish" +JBS_CMN_SELECT_MESSAGETYPE="Velg en type tale" +JBS_CMN_SELECT_SERIES="Velg en serie" +JBS_CMN_SELECT_TEACHER="Velg en lærer" +JBS_CMN_SELECT_TOPIC="Velg ett emne" +JBS_CMN_SELECT_YEAR="Velg ett år" +JBS_CMN_SERIES="Serie" +JBS_CMN_SERVER="Server" +JBS_CMN_STUDYNUMBER="Studie nummer" +JBS_CMN_TEACHER="Teacher" +JBS_CMN_TITLE="Titel" +JBS_CMN_TOPIC="Topic" +JBS_CMN_TOPICS="Topics" +JBS_CMN_YES="Yes" + +JBS_BBK_GENESIS="1Mos" +JBS_BBK_EXODUS="2Mos" +JBS_BBK_LEVITICUS="3Mos" +JBS_BBK_NUMBERS="4Mos" +JBS_BBK_DEUTERONOMY="5Mos" +JBS_BBK_JOSHUA="Jos" +JBS_BBK_JUDGES="Dom" +JBS_BBK_RUTH="Rut" +JBS_BBK_1SAMUEL="1Sam" +JBS_BBK_2SAMUEL="2Sam" +JBS_BBK_1KINGS="1Kong" +JBS_BBK_2KINGS="2kong" +JBS_BBK_1CHRONICLES="1Krøn" +JBS_BBK_2CHRONICLES="2Krøn" +JBS_BBK_EZRA="Esr" +JBS_BBK_NAHUM="Nahu" +JBS_BBK_ESTHER="Est" +JBS_BBK_JOB="Job" +JBS_BBK_PSALM="Sal" +JBS_BBK_PROVERBS="Ord" +JBS_BBK_ECCLESIASTES="Fork" +JBS_BBK_SONG_OF_SOLOMON="Høys" +JBS_BBK_ISAIAH="Jes" +JBS_BBK_JEREMIAH="Jer" +JBS_BBK_LAMENTATIONS="Klag" +JBS_BBK_EZEKIEL="Esek" +JBS_BBK_DANIEL="Dan" +JBS_BBK_HOSEA="Hos" +JBS_BBK_JOEL="Joel" +JBS_BBK_AMOS="Amos" +JBS_BBK_OBADIAH="Obad" +JBS_BBK_JONAH="Jona" +JBS_BBK_MICAH="Mika" +JBS_BBK_NEHEMIAH="Neh" +JBS_BBK_HABAKKUK="Habak" +JBS_BBK_ZEPHANIAH="Sef" +JBS_BBK_HAGGAI="Hag" +JBS_BBK_ZECHARIAH="Sak" +JBS_BBK_MALACHI="Mal" +JBS_BBK_MATTHEW="Matt" +JBS_BBK_MARK="Mark" +JBS_BBK_LUKE="Luk" +JBS_BBK_JOHN="Joh" +JBS_BBK_ACTS="Apg" +JBS_BBK_ROMANS="Rom" +JBS_BBK_1CORINTHIANS="1Kor" +JBS_BBK_2CORINTHIANS="2Kor" +JBS_BBK_GALATIANS="Gal" +JBS_BBK_EPHESIANS="Ef" +JBS_BBK_PHILIPPIANS="Fil" +JBS_BBK_COLOSSIANS="Kol" +JBS_BBK_1THESSALONIANS="1Tess" +JBS_BBK_2THESSALONIANS="2Tess" +JBS_BBK_1TIMOTHY="1Tim" +JBS_BBK_2TIMOTHY="2Tim" +JBS_BBK_TITUS="Tit" +JBS_BBK_PHILEMON="Fil" +JBS_BBK_HEBREWS="Heb" +JBS_BBK_JAMES="Jak" +JBS_BBK_1PETER="1Pet" +JBS_BBK_2PETER="2Pet" +JBS_BBK_1JOHN="1Joh" +JBS_BBK_2JOHN="2Joh" +JBS_BBK_3JOHN="3Joh" +JBS_BBK_JUDE="Jud" +JBS_BBK_REVELATION="Åp" + +JBS_MED_AVRELOADED_DESC="Enter opening and closing codes for AVReloaded like {mp3remote}-{/mp3remote}. Be SURE to put a dash (-) between the codes.
      See AVReloaded Documentation for more information on codes to use.
      You can insert text before the dash or after if you need to. Like: {mp3remote}http://-{/mp3remote} inserts that text before your path and filename (the system removes the -)" +JBS_MED_FILENAME="File Name" +JBS_MED_PATH_OR_FOLDER="Path or Folder" +JBS_MED_USE_FILENAME_AS_PATH="Use File name as entire path if you wish. Just don\'t select a server or path." + +JBS_STY_CHAPTER_BEGIN="Ch Begin" +JBS_STY_CHAPTER_END="Ch End" +JBS_STY_VERSE_BEGIN="Vs Begin" +JBS_STY_VERSE_END="Vs End" + +JBS_TCH_RETURN_TEACHER_LIST="Returner til lærerliste" + +JBS_TOP_ABORTION="Abort" +JBS_TOP_ADDICTION="Avhengighet" +JBS_TOP_AFTERLIFE="Etterlivet" +JBS_TOP_APOLOGETICS="Apologetik" +JBS_TOP_BAPTISM="Dåp" +JBS_TOP_BASICS_OF_CHRISTIANITY="Grunnleggende kristendom" +JBS_TOP_BECOMING_A_CHRISTIAN="Å bli en kristen" +JBS_TOP_BIBLE="Bibelen" +JBS_TOP_BLENDED_FAMILY_RELATIONSHIPS="Blanede familierealsjoner" +JBS_TOP_CHILDREN="Barn" +JBS_TOP_CHRIST="Kristen" +JBS_TOP_CHRISTIAN_CHARACTER_FRUITS="Kristen karakter/frukter" +JBS_TOP_CHRISTIAN_VALUES="Kristne verdier" +JBS_TOP_CHRISTMAS_SEASON="Jul" +JBS_TOP_CHURCH="Menigheten" +JBS_TOP_COMMUNICATION="Kommunikasjon" +JBS_TOP_COMMUNION___LORDS_SUPPER="Nattverd" +JBS_TOP_CREATION="Skapelsen" +JBS_TOP_CULTS="Sekter" +JBS_TOP_DA_VINCI_CODE="Da Vinci Code" +JBS_TOP_DEATH="Død" +JBS_TOP_DESCRIPTIONS_OF_GOD="Beskrivelse av Gud" +JBS_TOP_DISCIPLES="Disipler" +JBS_TOP_DISCIPLESHIP="Disippelskap" +JBS_TOP_DIVORCE="Skilsmisse" +JBS_TOP_EASTER_SEASON="Påske" +JBS_TOP_EMOTIONS="Følelser" +JBS_TOP_ENTERTAINMENT="Underholdning" +JBS_TOP_EVANGELISM="Evangelisering" +JBS_TOP_FAITH="Tro" +JBS_TOP_FAMILY="Familie" +JBS_TOP_FORGIVING_OTHERS="Tilgi andre" +JBS_TOP_FREEDOM="Frihet" +JBS_TOP_FRIENDSHIP="Vennskap" +JBS_TOP_FULFILLMENT_IN_LIFE="Oppfyllelsen i livet" +JBS_TOP_FUND_RAISING_RALLY="Pengeinnsamling" +JBS_TOP_FUNERALS="Vigsel" +JBS_TOP_GIVING="Givertjeneste" +JBS_TOP_GODS_ACTIVITY="Guds aktiviteter" +JBS_TOP_GODS_ATTRIBUTES="Gud beskrevet" +JBS_TOP_GODS_FORGIVENESS="Guds tilgivelse" +JBS_TOP_GODS_LOVE="Guds kjærlighet" +JBS_TOP_GODS_NATURE="Guds natur" +JBS_TOP_GODS_WILL="Guds vilje" +JBS_TOP_HARDSHIP_OF_LIFE="Livets realiteter" +JBS_TOP_HOLIDAYS="Helligdager" +JBS_TOP_HOLY_SPIRIT="Hellig ånd" +JBS_TOP_HOT_TOPICS="Hote emner" +JBS_TOP_JESUS_BIRTH="Jesu fødsel" +JBS_TOP_JESUS_CROSS_FINAL_WEEK="Jesu kors" +JBS_TOP_JESUS_DIVINITY="Jesu guddomelighet" +JBS_TOP_JESUS_HUMANITY="Jesu menneskelighet" +JBS_TOP_JESUS_LIFE="Jesu liv" +JBS_TOP_JESUS_MIRACLES="Jesu mirakler" +JBS_TOP_JESUS_RESURRECTION="Jesu oppstandelse" +JBS_TOP_JESUS_TEACHING="Jesu lærer" +JBS_TOP_KINGDOM_OF_GOD="Guds kongedømme" +JBS_TOP_LEADERSHIP_ESSENTIALS="Lederskap" +JBS_TOP_LOVE="Kjærlighet" +JBS_TOP_MARRIAGE="Ekteskap" +JBS_TOP_MEN="Menn" +JBS_TOP_MESSIANIC_PROPHECIES="Messianske profetier" +JBS_TOP_MISCONCEPTIONS_OF_CHRISTIANITY="Misforståelser om kristendommen" +JBS_TOP_MONEY="Penger" +JBS_TOP_NARNIA="Narnia" +JBS_TOP_OUR_NEED_FOR_GOD="Vårt behov av Gud" +JBS_TOP_PARABLES="Lignelser" +JBS_TOP_PARANORMAL="Overnaturlig" +JBS_TOP_PARENTING="Forelsdre" +JBS_TOP_POVERTY="Fattigdom" +JBS_TOP_PRAYER="Bønn" +JBS_TOP_PROMINENT_N_T__MEN="Fremstående menn i NT" +JBS_TOP_PROMINENT_N_T__WOMEN="Fremstående kvinner i NT" +JBS_TOP_PROMINENT_O_T__MEN="Fremstående menn i GT" +JBS_TOP_PROMINENT_O_T__WOMEN="Fremstående kvinner i GT" +JBS_TOP_RACISM="Rasisme" +JBS_TOP_SECOND_COMING="Jesu gjennkomst" +JBS_TOP_SEXUALITY="Sex" +JBS_TOP_SIN="Synd" +JBS_TOP_SINGLENESS="Ugift" +JBS_TOP_SMALL_GROUPS="Grupper" +JBS_TOP_SPECIAL_SERVICES="Spesielle gudstjenester" +JBS_TOP_SPIRITUAL_DISCIPLINES="Åndelige disipliner" +JBS_TOP_SPIRITUAL_GIFTS="Åndelige gaver" +JBS_TOP_STEWARDSHIP="Tjenestevillighet" +JBS_TOP_SUPERNATURAL="Overnaturlig" +JBS_TOP_TEMPTATION="Fristelser" +JBS_TOP_TEN_COMMANDMENTS="De ti bud" +JBS_TOP_TRUTH="Sannhet" +JBS_TOP_TWELVE_APOSTLES="Tolv apostler" +JBS_TOP_WEDDINGS="Bryllup" +JBS_TOP_WOMEN="Kvinner" +JBS_TOP_WORKPLACE_ISSUES="Jobbrelaterte emner" +JBS_TOP_WORLD_RELIGIONS="Verdens religioner" +JBS_TOP_WORSHIP="Lovsang" diff --git a/build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.sys.ini b/build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.sys.ini new file mode 100644 index 0000000000..546860f3c0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/language/no-NO/no-NO.com_biblestudy.sys.ini @@ -0,0 +1,31 @@ +; $Id: no-NO.com_biblestudy.sys.ini 2025 2011-08-28 04:08:06Z genu $ +; Copyright (c) 2008 Tom Fuller +; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php +; Note : All ini files need to be saved as UTF-8 - No BOM + + +; Identify the component as extension +COM_BIBLESTUDY="Biblestudier" + +; Name of the component +JBS_CMN_COM_BIBLESTUDY="Biblestudier" + +; Menue entries +JBS_MNU_ADMINISTRATION="Administration" +JBS_MNU_CONTROL_PANEL="Control Panel" +JBS_MNU_LOCATIONS="Locations" +JBS_MNU_MEDIA_FILES="Media Filer" +JBS_MNU_MEDIA_IMAGES="Media bilder" +JBS_MNU_MESSAGETYPES="Type budskap" +JBS_MNU_MIMETYPES="Mime Types" +JBS_MNU_PODCASTS="Podcasts" +JBS_MNU_SERIES="Serier" +JBS_MNU_SERVERS="Servers" +JBS_MNU_SERVER_FOLDERS="Server mapper" +JBS_MNU_SOCIAL_NETWORK_LINKS="Social Network Links" +JBS_MNU_STUDIES="Studier" +JBS_MNU_STUDY_COMMENTS="Study Comments" +JBS_MNU_STYLES="CSS Edit" +JBS_MNU_TEACHERS="Underviser" +JBS_MNU_TEMPLATE_DISPLAY="Template Display Settings" +JBS_MNU_TOPICS="Emner" diff --git a/build/com_proclaim-9.2.1/admin/lib/assets.php b/build/com_proclaim-9.2.1/admin/lib/assets.php new file mode 100644 index 0000000000..8e162b8f0b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/assets.php @@ -0,0 +1,380 @@ +getQuery(true); + $query->select('j.id, j.asset_id, a.id as aid, a.parent_id, a.rules') + ->from($db->qn($object['name']) . ' as j') + ->leftJoin('#__assets as a ON (a.id = j.asset_id)'); + $db->setQuery($query); + $results = $db->loadObjectList(); + $this->count += count($results); + $this->query = array_merge((array) $this->query, array($object['assetname'] => $results)); + } + + JLog::add('Build fixAsset', JLog::INFO, 'com_biblestudy'); + + return true; + } + + /** + * Fix Assets function. + * + * @param string $key Asset name to affect + * @param object $result Assets to look at. + * + * @return boolean + * + * @since 9.0.0 + */ + public static function fixAssets($key, $result) + { + $result = (Object) $result; + self::parentid(); + + // If there is no jasset_id it means that this has not been set and should be + if (!$result->asset_id) + { + self::setasset($result, $key); + JLog::add('Set Asset Under Key: ' . $key, JLog::NOTICE, 'com_biblestudy'); + } + + // If there is a jasset_id but no match to the parent_id then a mismatch has occured + if ((self::$parent_id != $result->parent_id || $result->rules === "") && $result->asset_id) + { + JLog::add('Reset Asset ID: ' . $result->asset_id, JLog::NOTICE, 'com_biblstudy'); + $deletasset = self::deleteasset($result); + + if ($deletasset) + { + self::setasset($result, $key); + } + } + + return true; + } + + /** + * Set Parent ID + * + * @return integer Parent ID + * + * @since 9.0.0 + */ + public static function parentid() + { + if (!self::$parent_id) + { + $db = JFactory::getDbo(); + + // First get the new parent_id + $query = $db->getQuery(true); + $query->select('id') + ->from('#__assets') + ->where('name = ' . $db->q('com_biblestudy')); + $db->setQuery($query); + self::$parent_id = $db->loadResult(); + } + + return self::$parent_id; + } + + /** + * Table list Array. + * + * @return array + * + * @since 9.0.0 + */ + protected static function getassetObjects() + { + $objects = array( + array( + 'name' => '#__bsms_servers', + 'titlefield' => 'server_name', + 'assetname' => 'server', + 'realname' => 'JBS_CMN_SERVERS' + ), + array( + 'name' => '#__bsms_studies', + 'titlefield' => 'studytitle', + 'assetname' => 'message', + 'realname' => 'JBS_CMN_STUDIES' + ), + array( + 'name' => '#__bsms_comments', + 'titlefield' => 'comment_date', + 'assetname' => 'comment', + 'realname' => 'JBS_CMN_COMMENTS' + ), + array( + 'name' => '#__bsms_locations', + 'titlefield' => 'location_text', + 'assetname' => 'location', + 'realname' => 'JBS_CMN_LOCATIONS' + ), + array( + 'name' => '#__bsms_mediafiles', + 'titlefield' => 'filename', + 'assetname' => 'mediafile', + 'realname' => 'JBS_CMN_MEDIA_FILES' + ), + array( + 'name' => '#__bsms_message_type', + 'titlefield' => 'message_type', + 'assetname' => 'messagetype', + 'realname' => 'JBS_CMN_MESSAGETYPES' + ), + array( + 'name' => '#__bsms_podcast', + 'titlefield' => 'title', + 'assetname' => 'podcast', + 'realname' => 'JBS_CMN_PODCASTS' + ), + array( + 'name' => '#__bsms_series', + 'titlefield' => 'series_text', + 'assetname' => 'serie', + 'realname' => 'JBS_CMN_SERIES' + ), + array( + 'name' => '#__bsms_teachers', + 'titlefield' => 'teachername', + 'assetname' => 'teacher', + 'realname' => 'JBS_CMN_TEACHERS' + ), + array( + 'name' => '#__bsms_templates', + 'titlefield' => 'title', + 'assetname' => 'template', + 'realname' => 'JBS_CMN_TEMPLATES' + ), + array( + 'name' => '#__bsms_topics', + 'titlefield' => 'topic_text', + 'assetname' => 'topic', + 'realname' => 'JBS_CMN_TOPICS' + ), + array( + 'name' => '#__bsms_templatecode', + 'titlefield' => 'filename', + 'assetname' => 'templatecode', + 'realname' => 'JBS_CMN_TEMPLATECODE' + ), + array( + 'name' => '#__bsms_admin', + 'titlefield' => 'id', + 'assetname' => 'admin', + 'realname' => 'JBS_CMN_ADMINISTRATION' + ) + ); + + return $objects; + } + + /** + * Set Asset + * + * @param object $data Data + * @param string $assetName Asset Name + * + * @return boolean + * + * @since 9.0.0 + */ + private static function setasset($data, $assetName) + { + JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables'); + $table = JTable::getInstance($assetName, 'Table'); + + if ($data->id) + { + try + { + if ($assetName === 'mediafile') + { + $columns = array('media_image', 'special', 'filename', 'size', 'mime_type', 'mediacode', 'link_type', + 'docMan_id', 'article_id', 'virtueMart_id', 'player', 'popup', 'server', 'internal_viewer', 'path'); + + foreach ($columns as $col) + { + unset($table->$col); + } + } + + $table->load($data->id, false); + } + catch (Exception $e) + { + echo 'Caught exception: ', $e->getMessage(), "\n"; + + return false; + } + + $table->store(); + } + + return true; + } + + /** + * Delete assets + * + * @param object $data Data + * + * @return boolean + * + * @since 9.0.0 + */ + private static function deleteasset($data) + { + $db = JFactory::getDbo(); + + if (isset($data->asset_id)) + { + if ($data->asset_id >= 2 && $data->asset_id != self::$parent_id) + { + $query = $db->getQuery(true); + $query->delete('#__assets') + ->where('id = ' . $db->quote($data->asset_id)); + $db->setQuery($query); + $db->execute(); + } + + return true; + } + else + { + return false; + } + } + + /** + * Check Assets + * + * @return array + * + * @since 9.0.0 + */ + public static function checkAssets() + { + $return = array(); + $db = JFactory::getDbo(); + $result = new stdClass; + + // First get the new parent_id + if (!self::$parent_id) + { + self::parentid(); + } + + // Get the names of the JBS tables + $objects = self::getassetObjects(); + + // Run through each table + foreach ($objects as $object) + { + // Put the table into the return array + // Get the total number of rows and collect the table into a query + $query = $db->getQuery(true); + $query->select('j.id as jid, j.asset_id as jasset_id, a.id as aid, a.rules as arules, a.parent_id') + ->from($db->qn($object['name']) . ' as j') + ->leftJoin('#__assets as a ON (a.id = j.asset_id)'); + $db->setQuery($query); + $results = $db->loadObjectList(); + $nullrows = 0; + $matchrows = 0; + $arulesrows = 0; + $nomatchrows = 0; + $numrows = count($results); + + // Now go through each record to test it for asset id + foreach ($results as $result) + { + // If there is no jasset_id it means that this has not been set and should be + if (!$result->jasset_id) + { + $nullrows++; + } + // If there is a jasset_id but no match to the parent_id then a mismatch has occurred + if (self::$parent_id != $result->parent_id && $result->jasset_id) + { + $nomatchrows++; + } + // If $parent_id and $result->parent_id match and the Asset rules are not blank then everything is okay + if (self::$parent_id == $result->parent_id && $result->arules !== '') + { + $matchrows++; + } + // If $parent_id and $result->parent_id match and the Asset rules is blank we need to fix + if (self::$parent_id == $result->parent_id && $result->arules === '') + { + $arulesrows++; + } + } + + $return[] = array( + 'realname' => $object['realname'], + 'numrows' => $numrows, + 'nullrows' => $nullrows, + 'matchrows' => $matchrows, + 'arulesrows' => $arulesrows, + 'nomatchrows' => $nomatchrows, + 'parent_id' => self::$parent_id, + 'result_parent_id' => $result->parent_id, + 'id' => $result->jid, + 'assetid' => $result->jasset_id + ); + } + + return $return; + } +} diff --git a/build/com_proclaim-9.2.1/admin/lib/backup.php b/build/com_proclaim-9.2.1/admin/lib/backup.php new file mode 100644 index 0000000000..9539c7bd49 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/backup.php @@ -0,0 +1,516 @@ +saveAsName = $site . '_jbs-db-backup_' . $date . '_' . time() . '.sql'; + $objects = JBSMDbHelper::getObjects(); + $tables = null; + $config = JFactory::getConfig(); + $path = $config->get('tmp_path') . $this->saveAsName; + $path1 = ''; + + foreach ($objects as $object) + { + $this->getExportTable($object['name']); + } + + switch ($run) + { + case 1: + $this->dumpFile = $path; + + if (!$this->writeline($this->data_cache)) + { + return false; + } + else + { + $mime_type = 'text/x-sql'; + + if (JFactory::getApplication()->input->getInt('jbs_compress', 1)) + { + $mime_type = 'application/zip'; + $files = (array) $this->dumpFile; + $path1 = $path . '.zip'; + $zip = new ZipArchive; + $zip->open($path1, ZipArchive::CREATE); + + foreach ($files as $file) + { + $zip->addFile($file, basename($file)); + } + + $zip->close(); + JFile::delete($path); + } + + $this->output_file($path1, basename($path1), $mime_type); + + return true; + } + break; + + case 2: + $this->dumpFile = JPATH_SITE . '/media/com_biblestudy/backup/' . $this->saveAsName; + + if (!$this->writeline($this->data_cache)) + { + return false; + } + + if (JFactory::getApplication()->input->getInt('jbs_compress', 1)) + { + $files = (array) $this->dumpFile; + $path1 = $this->dumpFile . '.zip'; + $zip = new ZipArchive; + $zip->open($path1, ZipArchive::CREATE); + + foreach ($files as $file) + { + $zip->addFile($file, basename($file)); + } + + $zip->close(); + JFile::delete($this->dumpFile); + } + + JFactory::getApplication() + ->enqueueMessage('Backup File Stored at: ' . $path1, 'notice'); + + return true; + break; + } + + // Clean up files for only set amount. filestokeep (Default 5) + $this->updatefiles(JBSMParams::getAdmin()->params); + + return true; + } + + /** + * Get Export Table + * + * @param string $table Table name + * + * @return boolean|string + * + * @since 9.0.0 + */ + public function getExportTable($table) + { + if (!$table) + { + return false; + } + + /** + * Attempt to increase the maximum execution time for php scripts with check for safe_mode. + */ + if (!ini_get('safe_mode')) + { + set_time_limit(3000); + } + + $db = JFactory::getDbo(); + + // Get the prefix + $prefix = $db->getPrefix(); + $export = ''; + + // Used for Checking file is from the correct version of biblestudy component + if (strpos($table, 'bsms_admin')) + { + $export .= "\n--\n-- " . BIBLESTUDY_VERSION_UPDATEFILE . "\n--\n\n"; + } + + // Start of Tables + $export .= "--\n-- Table structure for table " . $db->qn($table) . "\n--\n\n"; + + // Drop the existing table + $export .= 'DROP TABLE IF EXISTS ' . $db->qn($table) . ";\n"; + + // Create a new table defintion based on the incoming database + $query = 'SHOW CREATE TABLE ' . $db->qn($table); + $db->setQuery($query); + $table_def = $db->loadObject(); + + foreach ($table_def as $value) + { + if (substr_count($value, 'CREATE')) + { + $export .= str_replace($prefix, '#__', $value) . ";\n"; + $export = str_replace('TYPE=', 'ENGINE=', $export); + } + } + + $export .= "\n\n--\n-- Dumping data for table " . $db->qn($table) . "\n--\n\n"; + + // Get the table rows and create insert statements from them + $query = $db->getQuery(true); + $query->select('*') + ->from($db->qn($table)); + $db->setQuery($query); + $results = $db->loadObjectList(); + + if ($results) + { + foreach ($results as $result) + { + $data = array(); + $export .= 'INSERT INTO ' . $db->qn($table) . ' SET '; + + foreach ($result as $key => $value) + { + if ($value === null) + { + $data[] = $db->qn($key) . "=NULL"; + } + else + { + $data[] = $db->qn($key) . "=" . $db->q(trim(str_replace(array("\r\n", "\r"), "\n", $value))); + } + } + + $export .= implode(',', $data); + $export .= ";\n"; + } + } + + $export .= "\n-- --------------------------------------------------------\n\n"; + + $this->data_cache .= $export; + + return true; + } + + /** + * Saves the string in $fileData to the file $backupfile. Returns TRUE. If saving + * failed, return value is FALSE. + * + * @param string &$fileData Data to write. Set to null to close the file handle. + * + * @return boolean TRUE is saving to the file succeeded + * + * @since 9.0.0 + */ + protected function writeline(&$fileData) + { + $app = JFactory::getApplication(); + + if (!$this->fp) + { + $this->fp = @fopen($this->dumpFile, 'a'); + + if ($this->fp === false) + { + $app->enqueueMessage('Could not open ' . $this->dumpFile . ' for append, in DB dump.', 'error'); + + return false; + } + } + + if (is_null($fileData)) + { + if (is_resource($this->fp)) + { + @fclose($this->fp); + } + + $this->fp = null; + + return true; + } + else + { + if ($this->fp) + { + $ret = fwrite($this->fp, $fileData); + @clearstatcache(); + + // Make sure that all data was written to disk + return ($ret == strlen($fileData)); + } + else + { + return false; + } + } + } + + /** + * File output + * + * @param string $file File Name + * @param string $name Name output + * @param string $mime_type Meme_Type + * + * @return void + * + * @since 9.0.0 + */ + public function output_file($file, $name, $mime_type = '') + { + // Clears file status cache + clearstatcache(); + $jweb = new JApplicationWeb; + $jweb->clearHeaders(); + + // Turn off output buffering to decrease cpu usage + @ob_end_clean(); + + /** + * Attempt to increase the maximum execution time for php scripts with check for safe_mode. + */ + if (!ini_get('safe_mode')) + { + set_time_limit(3000); + } + + // Required for IE, otherwise Content-Disposition may be ignored + if (ini_get('zlib.output_compression')) + { + ini_set('zlib.output_compression', 'Off'); + } + + if (!is_readable($file)) + { + die('File not found or inaccessible!'); + } + + /* Figure out the MIME type (if not specified) */ + $known_mime_types = array( + "pdf" => "application/pdf", + "txt" => "text/plain", + "html" => "text/html", + "htm" => "text/html", + "exe" => "application/octet-stream", + "zip" => "application/zip", + "doc" => "application/msword", + "xls" => "application/vnd.ms-excel", + "ppt" => "application/vnd.ms-powerpoint", + "gif" => "image/gif", + "png" => "image/png", + "jpeg" => "image/jpg", + "jpg" => "image/jpg", + "php" => "text/plain", + "sql" => "text/x-sql" + ); + + if ($mime_type == '') + { + $file_extension = strtolower(substr(strrchr($file, "."), 1)); + + if (array_key_exists($file_extension, $known_mime_types)) + { + $mime_type = $known_mime_types[$file_extension]; + } + else + { + $mime_type = "application/force-download"; + } + } + + $name = rawurldecode($name); + + // Test for protocol and set the appropriate headers + jimport('joomla.environment.uri'); + $_tmp_uri = JUri::getInstance(JUri::current()); + $_tmp_protocol = $_tmp_uri->getScheme(); + + if ($_tmp_protocol == "https") + { + // SSL Support + header('Cache-Control: private, max-age=0, must-revalidate, no-store'); + } + else + { + header("Cache-Control: public, must-revalidate"); + header('Cache-Control: pre-check=0, post-check=0, max-age=0'); + header('Pragma: no-cache'); + header("Expires: 0"); + } /* end if protocol https */ + header('Content-Transfer-Encoding: none'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); + header("Accept-Ranges: bytes"); + + $size = filesize($file); + + // Modified by Rene + // HTTP Range - see RFC2616 for more information's (http://www.ietf.org/rfc/rfc2616.txt) + $newFileSize = $size - 1; + + // Default values! Will be overridden if a valid range header field was detected! + $resultLenght = (string) $size; + $resultRange = "0-" . $newFileSize; + + // Workaround for int overflow + if ($size < 0) + { + $size = exec('ls -al "' . $file . '" | awk \'BEGIN {FS=" "}{print $5}\''); + } + + /* We support requests for a single range only. + * So we check if we have a range field. If yes ensure that it is a valid one. + * If it is not valid we ignore it and sending the whole file. + * */ + if (isset($_SERVER['HTTP_RANGE']) && preg_match('%^bytes=\d*\-\d*$%', $_SERVER['HTTP_RANGE'])) + { + // Let's take the right side + list($a, $httpRange) = explode('=', $_SERVER['HTTP_RANGE']); + + // And get the two values (as strings!) + $httpRange = explode('-', $httpRange); + + // Check if we have values! If not we have nothing to do! + if (!empty($httpRange[0]) || !empty($httpRange[1])) + { + // We need the new content length ... + $resultLenght = $size - $httpRange[0] - $httpRange[1]; + + // ... and we can add the 206 Status. + header("HTTP/1.1 206 Partial Content"); + + // Now we need the content-range, so we have to build it depending on the given range! + // ex.: -500 -> the last 500 bytes + if (empty($httpRange[0])) + { + $resultRange = $resultLenght . '-' . $size; + } + + // Ex.: 500- -> from 500 bytes to file size + elseif (empty($httpRange[1])) + { + $resultRange = $httpRange[0] . '-' . $size; + } + + // Ex.: 500-1000 -> from 500 to 1000 bytes + else + { + $resultRange = $httpRange[0] . '-' . $httpRange[1]; + } + } + } + + header('Content-Length: ' . $resultLenght); + header('Content-Range: bytes ' . $resultRange . '/' . $size); + + header('Content-Type: ' . $mime_type); + header('Content-Disposition: attachment; filename="' . $name . '"'); + header('Content-Transfer-Encoding: binary\n'); + + // Try to deliver in chunks + @set_time_limit(0); + $fp = @fopen($file, 'rb'); + + if ($fp !== false) + { + while (!feof($fp)) + { + echo fread($fp, 8192); + } + + fclose($fp); + } + else + { + @readfile($file); + } + + flush(); + exit; + } + + /** + * Update files + * + * @param Joomla\Registry\Registry $params JBSM Params + * + * @return void + * + * @since 7.1.0 + */ + public function updatefiles($params) + { + jimport('joomla.filesystem.folder'); + jimport('joomla.filesystem.file'); + $path = JPATH_SITE . '/media/com_biblestudy/database'; + $exclude = array('.git', '.svn', 'CVS', '.DS_Store', '__MACOSX', '.html'); + $excludefilter = array('^\..*', '.*~'); + $files = JFolder::files($path, '.', 'false', 'true', $exclude, $excludefilter); + arsort($files, SORT_STRING); + $parts = array(); + $numfiles = count($files); + $totalnumber = $params->get('filestokeep', '5'); + + for ($counter = $numfiles; $counter > $totalnumber; $counter--) + { + $parts[] = array_pop($files); + } + + foreach ($parts as $part) + { + JFile::delete($part); + } + } +} diff --git a/build/com_proclaim-9.2.1/admin/lib/debug.php b/build/com_proclaim-9.2.1/admin/lib/debug.php new file mode 100644 index 0000000000..d728042dfe --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/debug.php @@ -0,0 +1,254 @@ +Assertion failed!
      + Script: $script
      + Line: $line
      + Condition:
      $message
      "; + + // Now display the call stack + echo self::Debug_Call_Stack_info(); + } + + /** + * Production error handling + * + * @param string $text ? + * @param int $back ? + * + * @return void + * + * @deprecated 9.0.0 JBSM + * + * @since 7.0.0 + */ + public function Trigger_Db_error($text = '', $back = 0) + { + $db = JFactory::getDbo(); + $dberror = $db->stderr(true); + echo self::Debug_Call_Stack_info($back + 1); + + $CBiblestudyVersion = new JBSMBiblestudyVersion; + $biblestudyVersion = $CBiblestudyVersion->version(); + $biblestudyPHPVersion = $CBiblestudyVersion->PHPVersion(); + $biblestudyMySQLVersion = $CBiblestudyVersion->MySQLVersion(); + ?> + +
      + Installed version: + + | php + + | mysql + +
      + + +
      ' . $dberror, E_USER_ERROR, $back + 1); + } + + /** + * Check db Error + * + * @param string $text ? + * @param int $back ? + * + * @return void + * + * @deprecated 9.0.0 JBSM + * + * @since 7.0.0 + */ + public function Check_Db_error($text = '', $back = 0) + { + } + + /** + * Check db warning + * + * @param string $text ? + * + * @return void + * + * @deprecated 9.0.0 JBSM + * + * @since 7.0.0 + */ + public function Check_Db_warning($text = '') + { + } + + /** + * DB Warning + * + * @param string $text ? + * + * @return void + * + * @deprecated 9.0.0 JBSM + * + * @since 7.0.0 + */ + public function Trigger_Db_warning($text = '') + { + } + + /** + * Little helper to created a formatted output of variables + * + * @param array $varlist ? + * + * @return string + * + * @deprecated 9.0.0 JBSM + * + * @since 7.0.0 + */ + public function Debug_vars($varlist) + { + $output = ''; + + foreach ($varlist as $key => $value) + { + if (is_array($value)) + { + $output .= ''; + } + else + { + if (is_object($value)) + { + $objvarlist = get_object_vars($value); + + // Recursive function call + $this->debug_vars($objvarlist); + } + else + { + $output .= ''; + } + } + } + + $output .= '
      variable value
      $' . $key . ''; + + if (count($value) > 0) + { + $output .= '"'; + + foreach ($value as $skey => $svalue) + { + if (is_array($svalue)) + { + $output .= ''; + } + else + { + if (is_object($svalue)) + { + $objvarlist = get_object_vars($svalue); + + // Recursive function call + $this->debug_vars($objvarlist); + } + else + { + $output .= ''; + } + } + } + + $output .= '
      key value
      [' . $skey . ']Nested Array
      $' . $skey . '"' . $svalue . '"
      "'; + } + else + { + $output .= 'EMPTY'; + } + + $output .= '
      $' . $key . '"' . $value . '"
      '; + + return $output; + } + + /** + * Show the callstack to this point in a decent format + * + * @param int $back ? + * + * @return object + * + * @deprecated 9.0.0 JBSM + * + * @since 7.0.0 + */ + public function Debug_Call_Stack_info($back = 1) + { + $trace = array_slice(debug_backtrace(), $back); + + return self::debug_vars($trace); + } + + /** + * Trigger JBS Errors + * + * @param string $message ? + * @param int $level ? + * @param int $back ? + * + * @return void + * + * @deprecated 9.0.0 JBSM + * + * @since 7.0.0 + */ + public function Biblestudy_error($message, $level = E_USER_NOTICE, $back = 1) + { + $trace = debug_backtrace(); + $caller = $trace[$back]; + trigger_error( + $message . ' in ' . $caller['function'] . '() called from ' . $caller['file'] + . ' on line ' . $caller['line'] . '' . "\n

      Error reported", $level + ); + } +} diff --git a/build/com_proclaim-9.2.1/admin/lib/piconvert.php b/build/com_proclaim-9.2.1/admin/lib/piconvert.php new file mode 100644 index 0000000000..10ac2e062e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/piconvert.php @@ -0,0 +1,1087 @@ +commentsids = array(); + $this->serversids = array(); + $this->foldersids = array(); + $this->mediafilesids = array(); + $this->studiesids = array(); + $this->teachersids = array(); + $this->seriesids = array(); + $this->podcastids = array(); + $this->locations = array(); + $this->cnoadd = 0; + $this->cadd = 0; + $svadd = 0; + $svnoadd = 0; + $fnoadd = 0; + $fadd = 0; + $tnoadd = 0; + $tadd = 0; + $srnoadd = 0; + $sradd = 0; + $pnoadd = 0; + $padd = 0; + $lnoadd = 0; + $ladd = 0; + $snoadd = 0; + $sadd = 0; + $mnoadd = 0; + $madd = 0; + $newid = 0; + $oldid = 0; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('*')->from('#__picomments'); + $db->setQuery($query); + $this->picomments = $db->loadObjectList(); + /** @var $piconversion string */ + $piconversion = null; + + // Create servers and folders + $query = $db->getQuery(true); + $query->select('*')->from('#__pifilepath'); + $db->setQuery($query); + $piservers = $db->loadObjectList(); + + if (!$piservers) + { + $svnoadd++; + } + else + { + foreach ($piservers AS $pi) + { + $data = new stdClass; + $data->id = null; + $data->server_path = $pi->server; + $data->server_name = $pi->server; + $data->published = $pi->published; + + if (!$db->insertObject('#__bsms_servers', $data, 'id')) + { + $svnoadd++; + } + else + { + $svadd++; + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_servers')->order('id desc'); + $db->setQuery($query, 0, 1); + $newid = $db->loadResult(); + $oldid = $pi->id; + $this->serversids[] = array('newid' => $newid, 'oldid' => $oldid); + } + + $datafolders = new stdClass; + $datafolders->id = null; + $datafolders->foldername = $pi->name; + $datafolders->folderpath = $pi->server . '/' . $pi->folder . '/'; + $datafolders->published = $pi->published; + } + } + + // Teachers + $query = $db->getQuery(true); + $query->select('*')->from('#__piteachers'); + $db->setQuery($query); + $piteachers = $db->loadObjectList(); + + if (!$piteachers) + { + $tnoadd++; + } + else + { + foreach ($piteachers AS $pi) + { + // Map new folder for images to old one + $foldersmall = $pi->image_folder; + $folderlarge = $pi->image_folderlrg; + + foreach ($this->foldersids as $folder) + { + if ($folder['oldid'] == $foldersmall) + { + $foldersmall = $folder['newid']; + } + + if ($folder['oldid'] == $folderlarge) + { + $folderlarge = $folder['newid']; + } + } + + // Look up folders to use in teacher images + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $foldersmall); + $db->setQuery($query); + $object = $db->loadObject(); + $newfoldersmall = $object->folderpath; + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $folderlarge); + $db->setQuery($query); + $object = $db->loadObject(); + $newfolderlarge = $object->folderpath; + $datateachers = new stdClass; + $datateachers->id = null; + $datateachers->teachername = $pi->teacher_name; + $datateachers->alias = $pi->alias; + $datateachers->title = $pi->teacher_role; + $datateachers->image = $newfolderlarge . $pi->teacher_image_lrg; + $datateachers->thumb = $newfoldersmall . $pi->teacher_image_sm; + $datateachers->email = $pi->teacher_email; + $datateachers->website = $pi->teacher_website; + $datateachers->short = $db->escape($pi->teacher_description); + $datateachers->list_show = $pi->teacher_view; + $datateachers->published = $pi->published; + + if (!$db->insertObject('#__bsms_teachers', $datateachers, 'id')) + { + $tnoadd++; + } + else + { + $tadd++; + + // Get the new teacherid so we can later connect it to a study + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_teachers')->order('id desc'); + $db->setQuery($query, 0, 1); + $newid = $db->loadResult(); + $oldid = $pi->id; + $this->teachersids[] = array('newid' => $newid, 'oldid' => $oldid); + } + } + } + + // Convert Ministries + $query = $db->getQuery(true); + $query->select('*')->from('#__piministry'); + $db->setQuery($query); + $ministries = $db->loadObjectList(); + + if (!$ministries) + { + $piconversion .= '' . JText::_('JBS_IBM_NO_MINISTRIES') . ''; + } + else + { + foreach ($ministries as $pi) + { + $locations = new stdClass; + $locations->id = null; + $locations->published = $pi->published; + $locations->location_text = $pi->ministry_name; + $locations->access = $pi->access; + $locations->ordering = $pi->ordering; + + if (!$db->insertObject('#__bsms_locations', $locations, 'id')) + { + $lnoadd++; + } + else + { + $ladd++; + + // Get the new teacherid so we can later connect it to a study + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_locations')->order('id desc'); + $db->setQuery($query, 0, 1); + $newid = $db->loadResult(); + $oldid = $pi->id; + $this->locations[] = array('newid' => $newid, 'oldid' => $oldid); + } + } + } + + // Convert Series + $query = $db->getQuery(true); + $query->select('*')->from('#__piseries'); + $db->setQuery($query); + $series = $db->loadObjectList(); + + if (!$series) + { + $piconversion .= '' . JText::_('JBS_IBM_NO_SERIES') . ''; + } + else + { + foreach ($series AS $pi) + { + // Map new folder for images to old one + $foldersmall = $pi->image_folder; + $folderlarge = $pi->image_folderlrg; + + foreach ($this->foldersids as $folder) + { + if ($folder['oldid'] == $foldersmall) + { + $foldersmall = $folder['newid']; + } + + if ($folder['oldid'] == $folderlarge) + { + $folderlarge = $folder['newid']; + } + } + + // Look up folders to use in series images + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $foldersmall); + $db->setQuery($query); + $object = $db->loadObject(); + $newfoldersmall = $object->folderpath; + $dataseries = new stdClass; + $dataseries->id = null; + $dataseries->series_text = $pi->series_name; + $dataseries->alias = $pi->series_alias; + $dataseries->description = $pi->series_description; + $dataseries->series_thumbnail = $newfoldersmall . $pi->series_image_sm; + $dataseries->published = $pi->published; + + if (!$db->insertObject('#__bsms_series', $dataseries, 'id')) + { + $srnoadd++; + } + else + { + $sradd++; + + // Get the new teacherid so we can later connect it to a study + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_series')->order('id desc'); + $db->setQuery($query, 0, 1); + $newid = $db->loadResult(); + $oldid = $pi->id; + $this->seriesids[] = array('newid' => $newid, 'oldid' => $oldid); + } + } + } + + // Convert the podcacst + $query = $db->getQuery(true); + $query->select('*')->from('#__pipodcast'); + $db->setQuery($query); + $podcasts = $db->loadObjectList(); + + if (!$podcasts) + { + $piconversion .= '' . JText::_('JBS_IBM_NO_PODCASTS') . ''; + } + else + { + foreach ($podcasts AS $pi) + { + $podcast = new stdClass; + $podcast->id = null; + $podcast->title = $pi->name; + $podcast->website = $pi->website; + $podcast->description = $pi->description; + $podcast->image = $pi->image; + $podcast->imageh = $pi->imagehgt; + $podcast->imagew = $pi->imagewth; + $podcast->author = $pi->author; + $podcast->filename = $pi->filename; + $podcast->language = $pi->language; + $podcast->editor_name = $pi->editor; + $podcast->editor_email = $pi->email; + $podcast->podcastlimit = $pi->records; + $podcast->episodetitle = $pi->itunestitle; + $podcast->detailstemplateid = 1; + $podcast->published = $pi->published; + $podcast->podcastsearch = $pi->search; + + if (!$db->insertObject('#__bsms_podcast', $podcast, 'id')) + { + $pnoadd++; + } + else + { + $padd++; + + // Get the new teacherid so we can later connect it to a study + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_podcast')->order('id desc'); + $db->setQuery($query, 0, 1); + $newid = $db->loadResult(); + $oldid = $pi->id; + $this->podcasts[] = array('newid' => $newid, 'oldid' => $oldid); + } + } + } + + // Convert studies and media files + $books = $this->getBooks(); + $query = $db->getQuery(true); + $query->select('*')->from('#__pistudies'); + $db->setQuery($query); + $studies = $db->loadObjectList(); + + if (!$studies) + { + $piconversion .= '' . JText::_('JBS_IBM_NO_STUDIES') . ''; + } + else + { + foreach ($studies AS $pi) + { + $studydate = $pi->study_date; + $studytitle = $pi->study_name; + $teacher_id = null; + + foreach ($this->teachersids as $teacher) + { + if ($teacher['oldid'] == $pi->teacher) + { + $teacher_id = $teacher['newid']; + } + else + { + $teacher_id = '1'; + } + } + + $studynumber = $pi->id; + $booknumber = null; + $booknumber2 = null; + + foreach ($books AS $book) + { + if ($book['id'] == $pi->study_book) + { + $booknumber = $book['jbs']; + } + else + { + $booknumber = '101'; + } + + if ($book['id'] == $pi->study_book2) + { + $booknumber2 = $book['jbs']; + } + } + + $chapter_begin = $pi->ref_ch_beg; + $chapter_end = $pi->ref_ch_end; + $verse_begin = $pi->ref_vs_beg; + $verse_end = $pi->ref_vs_end; + $chapter_begin2 = $pi->ref_ch_beg2; + $chapter_end2 = $pi->ref_ch_end2; + $verse_begin2 = $pi->ref_vs_beg2; + $verse_end2 = $pi->ref_vs_end2; + $comments = $pi->comments; + $hits = $pi->hits; + $user_id = $pi->user; + $show_level = $pi->access; + $location_id = null; + + foreach ($this->locations AS $location) + { + if ($location['oldid'] == $pi->ministry) + { + $location_id = $location['newid']; + } + } + + $alias = $pi->study_alias; + $studyintro = $pi->study_description; + $series_id = null; + + foreach ($this->seriesids as $series) + { + if ($series['oldid'] == $pi->series) + { + $series_id = $series['newid']; + } + } + + $studytext = $db->escape($pi->study_text); + $imagefolder = 0; + $newfolder = 0; + $thumbnailm = ''; + $image = null; + + foreach ($this->foldersids as $folder) + { + if ($folder['oldid'] == $pi->image_folder) + { + $imagefolder = $folder['newid']; + $image = $pi->imagesm; + } + + if ($folder['oldid'] == $pi->image_foldermed) + { + $imagefolder = $folder['newid']; + $image = $pi->imagemed; + } + + if ($folder['oldid'] == $pi->image_folderlrg) + { + $imagefolder = $folder['newid']; + $image = $pi->imagelrg; + } + } + + if ($imagefolder) + { + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $imagefolder); + $db->setQuery($query); + $object = $db->loadObject(); + $newfolder = $object->folderpath; + $thumbnailm = $newfolder . $image; + } + + $published = $pi->published; + $params = '{"metakey":"' . $pi->tags . '","metadesc":""}'; + $params = $db->escape($params); + $access = $pi->saccess; + + // Create the study then get the id to create the media file and comments + $datastudies = new stdClass; + $datastudies->id = null; + $datastudies->published = $published; + $datastudies->studydate = $studydate; + $datastudies->studytitle = $studytitle; + $datastudies->teacher_id = $teacher_id; + $datastudies->studynumber = $studynumber; + $datastudies->booknumber = $booknumber; + $datastudies->booknumber2 = $booknumber2; + $datastudies->chapter_begin = $chapter_begin; + $datastudies->chapter_end = $chapter_end; + $datastudies->verse_begin = $verse_begin; + $datastudies->verse_end = $verse_end; + $datastudies->chapter_begin2 = $chapter_begin2; + $datastudies->chapter_end2 = $chapter_end2; + $datastudies->verse_begin2 = $verse_begin2; + $datastudies->verse_end2 = $verse_end2; + $datastudies->comments = $comments; + $datastudies->hits = $hits; + $datastudies->user_id = $user_id; + $datastudies->show_level = $show_level; + $datastudies->location_id = $location_id; + $datastudies->alias = $alias; + $datastudies->studyintro = $studyintro; + $datastudies->series_id = $series_id; + $datastudies->studytext = $studytext; + $datastudies->thumbnailm = $thumbnailm; + $datastudies->params = $params; + $datastudies->access = $access; + + if (!$db->insertObject('#__bsms_studies', $datastudies, 'id')) + { + $snoadd++; + } + else + { + $sadd++; + + // Get the new studiesid so we can later connect it to a study + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_studies')->order('id desc'); + $db->setQuery($query, 0, 1); + $newid = $db->loadResult(); + $oldid = $pi->id; + $this->studiesids[] = array('newid' => $newid, 'oldid' => $oldid); + } + + // Create the mediafiles + if ($pi->audio_link) + { + if (!$audio = $this->insertMedia($pi, $type = 'audio', $newid, $oldid)) + { + $mnoadd++; + } + else + { + $madd++; + } + } + + if ($pi->video_link) + { + if (!$video = $this->insertMedia($pi, $type = 'video', $newid, $oldid)) + { + $mnoadd++; + } + else + { + $madd++; + } + } + + if ($pi->slides_link) + { + if (!$slides = $this->insertMedia($pi, $type = 'slides', $newid, $oldid)) + { + $mnoadd++; + } + else + { + $madd++; + } + } + + if ($pi->notes_link) + { + if (!$notes = $this->insertMedia($pi, $type = 'notes', $newid, $oldid)) + { + $mnoadd++; + } + else + { + $madd++; + } + } + + $comments = $this->insertComments($oldid, $newid); + } + // Endforeach study + } + + $piconversion = '' + . '' + . '' + . '' + . '' + . '' + . '' + . '' + . '' + . '

      ' . JText::_('JBS_IBM_PREACHIT_RESULTS') . '

      ' . JText::_('JBS_IBM_PI_SERVERS') . '' . $svadd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') . $svnoadd . '
      ' . JText::_('JBS_IBM_PI_FOLDERS') . '' . $fadd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') . $fnoadd . '
      ' . JText::_('JBS_IBM_PI_TEACHERS') . '' . $tadd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') . $tnoadd . '
      ' . JText::_('JBS_IBM_PI_SERIES') . '' . $sradd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') . $srnoadd . '
      ' . JText::_('JBS_IBM_PI_PODCAST') . '' . $padd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') . $pnoadd . '
      ' . JText::_('JBS_IBM_PI_STUDIES') . '' . $sadd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') . $snoadd . '
      ' . JText::_('JBS_IBM_PI_MEDIA') . '' . $madd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') . $mnoadd . '
      ' . JText::_('JBS_IBM_PI_COMMENTS') . '' . $this->cadd . ' - ' . JText::_('JBS_IBM_NOT_CONVERTED') + . $this->cnoadd . '
      '; + + return $piconversion; + } + + /** + * Get Books + * + * @return array + * + * @since 9.0.0 + */ + private function getBooks () + { + $books = array( + array('id' => '1', 'book_name' => 'Genesis', 'published' => '1', 'jbs' => '101'), + array('id' => '2', 'book_name' => 'Exodus', 'published' => '1', 'jbs' => '102'), + array('id' => '3', 'book_name' => 'Leviticus', 'published' => '1', 'jbs' => '103'), + array('id' => '4', 'book_name' => 'Numbers', 'published' => '1', 'jbs' => '104'), + array('id' => '5', 'book_name' => 'Deuteronomy', 'published' => '1', 'jbs' => '105'), + array('id' => '6', 'book_name' => 'Joshua', 'published' => '1', 'jbs' => '106'), + array('id' => '7', 'book_name' => 'Judges', 'published' => '1', 'jbs' => '107'), + array('id' => '8', 'book_name' => 'Ruth', 'published' => '1', 'jbs' => '108'), + array('id' => '9', 'book_name' => '1 Samuel', 'published' => '1', 'jbs' => '109'), + array('id' => '10', 'book_name' => '2 Samuel', 'published' => '1', 'jbs' => '110'), + array('id' => '11', 'book_name' => '1 Kings', 'published' => '1', 'jbs' => '111'), + array('id' => '12', 'book_name' => '2 Kings', 'published' => '1', 'jbs' => '112'), + array('id' => '13', 'book_name' => '1 Chronicles', 'published' => '1', 'jbs' => '113'), + array('id' => '14', 'book_name' => '2 Chronicles', 'published' => '1', 'jbs' => '114'), + array('id' => '15', 'book_name' => 'Ezra', 'published' => '1', 'jbs' => '115'), + array('id' => '16', 'book_name' => 'Nehemiah', 'published' => '1', 'jbs' => '116'), + array('id' => '17', 'book_name' => 'Esther', 'published' => '1', 'jbs' => '117'), + array('id' => '18', 'book_name' => 'Job', 'published' => '1', 'jbs' => '118'), + array('id' => '19', 'book_name' => 'Psalm', 'published' => '1', 'jbs' => '119'), + array('id' => '20', 'book_name' => 'Proverbs', 'published' => '1', 'jbs' => '120'), + array('id' => '21', 'book_name' => 'Ecclesiastes', 'published' => '1', 'jbs' => '121'), + array('id' => '22', 'book_name' => 'Song of Songs', 'published' => '1', 'jbs' => '122'), + array('id' => '23', 'book_name' => 'Isaiah', 'published' => '1', 'jbs' => '123'), + array('id' => '24', 'book_name' => 'Jeremiah', 'published' => '1', 'jbs' => '124'), + array('id' => '25', 'book_name' => 'Lamentations', 'published' => '1', 'jbs' => '125'), + array('id' => '26', 'book_name' => 'Ezekiel', 'published' => '1', 'jbs' => '126'), + array('id' => '27', 'book_name' => 'Daniel', 'published' => '1', 'jbs' => '127'), + array('id' => '28', 'book_name' => 'Hosea', 'published' => '1', 'jbs' => '129'), + array('id' => '29', 'book_name' => 'Joel', 'published' => '1', 'jbs' => '129'), + array('id' => '30', 'book_name' => 'Amos', 'published' => '1', 'jbs' => '130'), + array('id' => '31', 'book_name' => 'Obadiah', 'published' => '1', 'jbs' => '131'), + array('id' => '32', 'book_name' => 'Jonah', 'published' => '1', 'jbs' => '132'), + array('id' => '33', 'book_name' => 'Micah', 'published' => '1', 'jbs' => '133'), + array('id' => '34', 'book_name' => 'Nahum', 'published' => '1', 'jbs' => '134'), + array('id' => '35', 'book_name' => 'Habakkuk', 'published' => '1', 'jbs' => '135'), + array('id' => '36', 'book_name' => 'Zephaniah', 'published' => '1', 'jbs' => '136'), + array('id' => '37', 'book_name' => 'Haggai', 'published' => '1', 'jbs' => '137'), + array('id' => '38', 'book_name' => 'Zechariah', 'published' => '1', 'jbs' => '138'), + array('id' => '39', 'book_name' => 'Malachi', 'published' => '1', 'jbs' => '139'), + array('id' => '40', 'book_name' => 'Matthew', 'published' => '1', 'jbs' => '140'), + array('id' => '41', 'book_name' => 'Mark', 'published' => '1', 'jbs' => '141'), + array('id' => '42', 'book_name' => 'Luke', 'published' => '1', 'jbs' => '142'), + array('id' => '43', 'book_name' => 'John', 'published' => '1', 'jbs' => '143'), + array('id' => '44', 'book_name' => 'Acts', 'published' => '1', 'jbs' => '144'), + array('id' => '45', 'book_name' => 'Romans', 'published' => '1', 'jbs' => '145'), + array('id' => '46', 'book_name' => '1 Corinthians', 'published' => '1', 'jbs' => '146'), + array('id' => '47', 'book_name' => '2 Corinthians', 'published' => '1', 'jbs' => '147'), + array('id' => '48', 'book_name' => 'Galatians', 'published' => '1', 'jbs' => '148'), + array('id' => '49', 'book_name' => 'Ephesians', 'published' => '1', 'jbs' => '149'), + array('id' => '50', 'book_name' => 'Philippians', 'published' => '1', 'jbs' => '150'), + array('id' => '51', 'book_name' => 'Colossians', 'published' => '1', 'jbs' => '151'), + array('id' => '52', 'book_name' => '1 Thessalonians', 'published' => '1', 'jbs' => '152'), + array('id' => '53', 'book_name' => '2 Thessalonians', 'published' => '1', 'jbs' => '153'), + array('id' => '54', 'book_name' => '1 Timothy', 'published' => '1', 'jbs' => '154'), + array('id' => '55', 'book_name' => '2 Timothy', 'published' => '1', 'jbs' => '155'), + array('id' => '56', 'book_name' => 'Titus', 'published' => '1', 'jbs' => '156'), + array('id' => '57', 'book_name' => 'Philemon', 'published' => '1', 'jbs' => '157'), + array('id' => '58', 'book_name' => 'Hebrews', 'published' => '1', 'jbs' => '158'), + array('id' => '59', 'book_name' => 'James', 'published' => '1', 'jbs' => '159'), + array('id' => '60', 'book_name' => '1 Peter', 'published' => '1', 'jbs' => '160'), + array('id' => '61', 'book_name' => '2 Peter', 'published' => '1', 'jbs' => '161'), + array('id' => '62', 'book_name' => '1 John', 'published' => '1', 'jbs' => '162'), + array('id' => '63', 'book_name' => '2 John', 'published' => '1', 'jbs' => '163'), + array('id' => '64', 'book_name' => '3 John', 'published' => '1', 'jbs' => '164'), + array('id' => '65', 'book_name' => 'Jude', 'published' => '1', 'jbs' => '165'), + array('id' => '66', 'book_name' => 'Revelation', 'published' => '1', 'jbs' => '166') + ); + + return $books; + } + + /** + * Insert Media into BibleStudy + * + * @param object $pi ? + * @param string $type Type of Media + * @param int $newid New ID + * @param int $oldid Old ID + * + * @return boolean + * + * @since 9.0.0 + * + * @FIXME look like the $pod is missing. + */ + public function insertMedia ($pi, $type, $newid, $oldid) + { + $db = JFactory::getDbo(); + $podcast_id = '-1'; + $study_id = $newid; + $media_image = ''; + $path = ''; + $filename = ''; + $size = ''; + $mime_type = ''; + $podcast_id = ''; + $filesize = ''; + $mediacode = ''; + $link_type = ''; + $player = ''; + $pod = array(); + $query = $db->getQuery(true); + $query->select('*')->from('#__pipodmes'); + $db->setQuery($query); + $podcasts = $db->loadObjectList(); + + if ($type == 'audio') + { + $player = $pi->audio_type; + $media_image = '1'; + $mime_type = '1'; + $filesize = $pi->audiofs; + $player = '1'; + $filename = $pi->audio_link; + + if ($podcasts) + { + foreach ($podcasts as $podcast) + { + if ($podcast->mesid == $oldid) + { + $oldpodid = $podcast->podaudid; + + if ($pod['oldid'] == $oldpodid) + { + $podcast_id = $pod['newid']; + } + } + } + } + } + + if ($type == 'video') + { + if ($podcasts) + { + foreach ($podcasts as $podcast) + { + if ($podcast->mesid == $oldid) + { + $oldpodid = $podcast->podvidid; + + if ($pod['oldid'] == $oldpodid) + { + $podcast_id = $pod['newid']; + } + } + } + } + + $filesize = $pi->videofs; + + switch ($pi->video_type) + { + case 4: + // Bliptv + $mediacode = ''; + $mediacode = $db->escape($mediacode); + $player = '8'; + $media_image = '5'; + $mime_type = '15'; + break; + + case 7: + // Flowplayer + foreach ($this->foldersids as $folder) + { + if ($pi->video_folder == $folder['oldid']) + { + // Look up the text to put here for $folder. + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $folder['newid']); + $db->setQuery($query); + $object = $db->loadObject(); + $path = $object->folderpath; + $filename = $path . $pi->video_link; + } + } + + $player = '1'; + $media_image = '5'; + $mime_type = '15'; + $server = '-1'; + break; + + case 1: + // JWPlayer + foreach ($this->foldersids as $folder) + { + if ($pi->video_folder == $folder['oldid']) + { + // Look up the text to put here for $folder. + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $folder['newid']); + $db->setQuery($query); + $object = $db->loadObject(); + $path = $object->folderpath; + $filename = $path . $pi->video_link; + } + } + + $player = '1'; + $media_image = '5'; + $mime_type = '15'; + $server = '-1'; + break; + + case 2: + // Vimeo + $mediacode = ' '; + $mediacode = $db->escape($mediacode); + $player = '8'; + $media_image = '5'; + $mime_type = '15'; + $path = '-1'; + $server = '-1'; + break; + + case 3: + // Youtube + $mediacode = ''; + $mediacode = $db->escape($mediacode); + $player = '8'; + $media_image = '13'; + $mime_type = '15'; + $path = '-1'; + $server = '-1'; + break; + } + } + + $createdate = $pi->study_date; + + if ($type == 'audio') + { + $link_type = $pi->audio_download; + } + + if ($type == 'video') + { + $link_type = $pi->video_download; + } + + if ($type == 'notes') + { + $filesize = $pi->notesfs; + $download = '1'; + $player = '0'; + $media_image = '12'; + $mime_type = '6'; + + foreach ($this->foldersids as $folder) + { + if ($pi->notes_folder == $folder['oldid']) + { + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $folder['newid']); + $db->setQuery($query); + $object = $db->loadObject(); + $path = $object->folderpath; + $filename = $path . $pi->notes_link; + $server = '-1'; + } + } + } + + $hits = $pi->hits; + $downloads = $pi->downloads; + $published = $pi->published; + $params = '{"playerwidth":"","playerheight":"","itempopuptitle":"","itempopupfooter":"","popupmargin":"50"}'; + $params = $db->escape($params); + $popup = '1'; + $access = $pi->access; + + if ($type == 'slides') + { + $download = '1'; + $filesize = $pi->slidesfs; + $player = '0'; + $filename = $pi->slides_link; + + foreach ($this->foldersids as $folder) + { + if ($pi->slides_folder == $folder['oldid']) + { + $query = $db->getQuery(true); + $query->select('folderpath')->from('#__bsms_folders')->where('id = ' . $folder['newid']); + $db->setQuery($query); + $object = $db->loadObject(); + $path = $object->folderpath; + $server = '-1'; + $filename = $path . $pi->slides_link; + $media_image = '12'; + $mime_type = '6'; + } + } + } + + $mediafiles = new stdClass; + $mediafiles->id = null; + $mediafiles->published = $published; + $mediafiles->study_id = $newid; + $mediafiles->path = $path; + $mediafiles->filename = $filename; + $mediafiles->size = $filesize; + $mediafiles->mime_type = $mime_type; + $mediafiles->podcast_id = $podcast_id; + $mediafiles->mediacode = $mediacode; + $mediafiles->createdate = $createdate; + $mediafiles->link_type = $link_type; + $mediafiles->hits = $pi->hits; + $mediafiles->params = $params; + $mediafiles->player = $player; + $mediafiles->popup = 1; + $mediafiles->access = $pi->access; + $mediafiles->media_image = $media_image; + + if (!$db->insertObject('#__bsms_mediafiles', $mediafiles, 'id')) + { + return false; + } + + return true; + } + + /** + * Insert Comments + * + * @param int $oldid ? + * @param int $newid ? + * + * @return boolean + * + * @since 9.0.0 + */ + private function insertComments ($oldid, $newid) + { + if (!$this->picomments) + { + return false; + } + else + { + $db = JFactory::getDbo(); + + foreach ($this->picomments AS $pi) + { + if ($pi->id == $oldid) + { + $comments = new stdClass; + $comments->id = null; + $comments->published = $pi->published; + $comments->study_id = $newid; + $comments->user_id = $pi->user_id; + $comments->full_name = $pi->full_name; + $comments->comment_date = $pi->comment_date; + $comments->comment_text = $db->escape($pi->comment_text); + + if (!$db->insertObject('#__bsms_comments', $comments, 'id')) + { + $this->cnoadd++; + } + else + { + $this->cadd++; + } + } + } + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/lib/restore.php b/build/com_proclaim-9.2.1/admin/lib/restore.php new file mode 100644 index 0000000000..8e0f7aa8a6 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/restore.php @@ -0,0 +1,529 @@ +setQuery($query); + $db->execute(); + + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY studytext2 BLOB'; + $db->setQuery($query); + $db->execute(); + } + + if (substr_count($backuptable['name'], 'podcast')) + { + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY description BLOB'; + $db->setQuery($query); + $db->execute(); + } + + if (substr_count($backuptable['name'], 'series')) + { + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY description BLOB'; + $db->setQuery($query); + $db->execute(); + } + + if (substr_count($backuptable['name'], 'teachers')) + { + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY information BLOB'; + $db->setQuery($query); + $db->execute(); + } + } + + return true; + } + + /** + * Get Objects for tables + * + * @return array + * + * @since 7.0.0 + */ + protected static function getObjects() + { + $db = JFactory::getDbo(); + $tables = $db->getTableList(); + $prefix = $db->getPrefix(); + $prelength = strlen($prefix); + $bsms = 'bsms_'; + $objects = array(); + + foreach ($tables as $table) + { + if (substr_count($table, $bsms)) + { + $table = substr_replace($table, '#__', 0, $prelength); + $objects[] = array('name' => $table); + } + } + + return $objects; + } + + /** + * Modify tables to Text + * + * @return boolean + * + * @since 9.0.0 + */ + protected static function TablestoText() + { + $backuptables = self::getObjects(); + + $db = JFactory::getDbo(); + + foreach ($backuptables AS $backuptable) + { + if (substr_count($backuptable['name'], 'studies')) + { + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY studytext TEXT'; + $db->setQuery($query); + $db->execute(); + + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY studytext2 TEXT'; + $db->setQuery($query); + $db->execute(); + } + + if (substr_count($backuptable['name'], 'podcast')) + { + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY description TEXT'; + $db->setQuery($query); + $db->execute(); + } + + if (substr_count($backuptable['name'], 'series')) + { + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY description TEXT'; + $db->setQuery($query); + $db->execute(); + } + + if (substr_count($backuptable['name'], 'teachers')) + { + $query = 'ALTER TABLE ' . $backuptable['name'] . ' MODIFY information TEXT'; + $db->setQuery($query); + $db->execute(); + } + } + + return true; + } + + /** + * Import DB + * + * @param boolean $parent Switch to see if it is coming from migration or restore. + * + * @return boolean + * + * @since 9.0.0 + */ + public function importdb($parent) + { + jimport('joomla.filesystem.file'); + + /** + * Attempt to increase the maximum execution time for php scripts with check for safe_mode. + */ + if (!ini_get('safe_mode')) + { + set_time_limit(3000); + } + + $input = new JInput; + $installtype = $input->getPath('install_directory'); + $backuprestore = $input->getWord('backuprestore', ''); + + // Restore form prior backup files located on the server. + if (substr_count($backuprestore, '.sql')) + { + $restored = self::restoreDB($backuprestore); + + if ($restored) + { + $result = true; + + return $result; + } + } + + // Start finding how to restore files. + if (!empty($installtype) && $installtype !== '/' && $installtype != JFactory::getConfig()->get('tmp_path') . '/') + { + $uploadresults = self::_getPackageFromFolder(); + $result = $uploadresults; + } + else + { + $uploadresults = self::_getPackageFromUpload(); + $result = $uploadresults; + } + + if ($result) + { + switch ($result['type']) + { + case 'dir': + $src = JFolder::files($result['dir'], '.', true, true); + $tmp_src = $src[0]; + break; + case 'file': + $tmp_src = $result['dir']; + break; + default: + throw new InvalidArgumentException('Unknown Archive Type'); + } + + $result = self::installdb($tmp_src, $parent); + + // Cleanup the install files. + if (!is_file($uploadresults['packagefile'])) + { + $config = JFactory::getConfig(); + $package['packagefile'] = $config->get('tmp_path') . '/' . $uploadresults['packagefile']; + } + + JInstallerHelper::cleanupInstall($uploadresults['packagefile'], $uploadresults['extractdir']); + + if (($parent !== true) && $result) + { + $controlser = JControllerLegacy::getInstance('Biblestudy'); + $controlser->setRedirect('index.php?option=com_biblestudy&task=admin.fixasset'); + $controlser->redirect(); + } + } + + return $result; + } + + /** + * Restore DB for exerting Proclaim + * + * @param string $backuprestore file name to restore + * + * @return boolean See if the restore worked. + * + * @since 9.0.0 + */ + public static function restoreDB($backuprestore) + { + $app = JFactory::getApplication(); + $db = JFactory::getDbo(); + /** + * Attempt to increase the maximum execution time for php scripts with check for safe_mode. + */ + if (!ini_get('safe_mode')) + { + set_time_limit(3000); + } + + $query = file_get_contents(JPATH_SITE . '/media/com_biblestudy/backup/' . $backuprestore); + + // Check to see if this is a backup from an old db and not a migration + $isold = substr_count($query, '#__bsms_admin_genesis'); + $isnot = substr_count($query, '#__bsms_studies'); + $iscernt = substr_count($query, BIBLESTUDY_VERSION_UPDATEFILE); + + if ($isold !== 0 && $isnot === 0) + { + $app->enqueueMessage(JText::_('JBS_IBM_OLD_DB'), 'warning'); + + return false; + } + elseif ($isnot === 0) + { + $app->enqueueMessage(JText::_('JBS_IBM_NOT_DB'), 'warning'); + + return false; + } + elseif (!$iscernt) + { + $app->enqueueMessage(basename($backuprestore), 'warning'); + $app->enqueueMessage(JText::_('JBS_IBM_NOT_CURENT_DB'), 'warning'); + + return false; + } + else + { + $queries = JDatabaseDriver::splitSql($query); + + foreach ($queries as $query) + { + $query = trim($query); + + if ($query != '' && $query{0} != '#') + { + $db->setQuery($query); + $db->execute(); + } + } + } + + return true; + } + + /** + * Get Package from Folder + * + * @return boolean + * + * @since 9.0.0 + */ + private static function _getPackageFromFolder() + { + $input = JFactory::getApplication()->input; + + // Get the path to the package to install. + $p_dir = $input->getString('install_directory'); + $p_dir = JPath::clean($p_dir); + + // Did you give us a valid directory? + if (!is_dir($p_dir)) + { + JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_PLEASE_ENTER_A_PACKAGE_DIRECTORY')); + + return false; + } + + $package['packagefile'] = null; + $package['extractdir'] = null; + $package['dir'] = $p_dir; + $package['type'] = 'dir'; + + return $package; + } + + /** + * Get Package form Upload + * + * @return boolean + * + * @since 9.0.0 + */ + public function _getPackageFromUpload() + { + $app = JFactory::getApplication(); + $input = $app->input; + + // Get the uploaded file information + $userfile = $input->files->get('importdb', null, 'raw'); + + // Make sure that file uploads are enabled in php + if (!(bool) ini_get('file_uploads')) + { + $app->enqueueMessage(JText::_('JBS_IBM_ERROR_PHP_UPLOAD_NOT_ENABLED'), 'warning'); + + return false; + } + + // Make sure that zlib is loaded so that the package can be unpacked. + if (!extension_loaded('zlib')) + { + JError::raiseWarning('', JText::_('JBS_IBM_ERROR_UPLOAD_FAILED_ZLIB')); + + return false; + } + + // If there is no uploaded file, we have a problem... + if (!is_array($userfile)) + { + $app->enqueueMessage(JText::_('JBS_CMN_NO_FILE_SELECTED'), 'warning'); + + return false; + } + + // Is the PHP tmp directory missing? + if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_NO_TMP_DIR)) + { + JError::raiseWarning( + '', + JText::_('JBS_IBM_ERROR_UPLOAD_FAILED') . '
      ' . JText::_('JBS_IBM_ERROR_UPLOAD_FAILED_PHPUPLOADNOTSET') + ); + + return false; + } + + // Is the max upload size too small in php.ini? + if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_INI_SIZE)) + { + JError::raiseWarning( + '', + JText::_('JBS_IBM_ERROR_UPLOAD_FAILED') . '
      ' . JText::_('JBS_IBM_ERROR_UPLOAD_FAILED_SMALLUPLOADSIZE') + ); + + return false; + } + + // Check if there was a problem uploading the file. + if ($userfile['error'] || $userfile['size'] < 1) + { + $app->enqueueMessage(JText::_('JBS_IBM_ERROR_UPLOAD_FAILED'), 'warning'); + + return false; + } + + // Build the appropriate paths + $config = JFactory::getConfig(); + $tmp_dest = $config->get('tmp_path') . '/' . $userfile['name']; + $tmp_src = $userfile['tmp_name']; + + // Move uploaded file. + jimport('joomla.filesystem.file'); + JFile::upload($tmp_src, $tmp_dest, false, true); + + if (!JBSMBibleStudyHelper::endsWith($tmp_dest, 'sql')) + { + // Unpack the downloaded package file. + $package = JInstallerHelper::unpack($tmp_dest, true); + $package['type'] = 'dir'; + } + else + { + $package['packagefile'] = null; + $package['extractdir'] = null; + $package['dir'] = $tmp_dest; + $package['type'] = 'file'; + } + + return $package; + } + + /** + * Install DB + * + * @param string $tmp_src Temp info + * @param boolean $parent To tell if coming from migration + * + * @return boolean if db installed correctly. + * + * @since 9.0.0 + */ + protected static function installdb($tmp_src, $parent = true) + { + jimport('joomla.filesystem.file'); + /** + * Attempt to increase the maximum execution time for php scripts with check for safe_mode. + */ + if (!ini_get('safe_mode')) + { + set_time_limit(3000); + } + + $app = JFactory::getApplication(); + $db = JFactory::getDbo(); + + $query = file_get_contents($tmp_src); + + // Graceful exit and rollback if read not successful + if ($query === false) + { + $app->enqueueMessage(JText::_('JBS_INS_ERROR_SQL_READBUFFER'), 'error'); + + return false; + } + // Check if sql file is for Joomla! Bible Studies + $isold = substr_count($query, '#__bsms_admin_genesis'); + $isnot = substr_count($query, '#__bsms_studies'); + $iscernt = substr_count($query, BIBLESTUDY_VERSION_UPDATEFILE); + + if ($isold !== 0 && $isnot === 0) + { + $app->enqueueMessage(JText::_('JBS_IBM_OLD_DB'), 'warning'); + + return false; + } + elseif ($isnot === 0) + { + $app->enqueueMessage('Extracted file: ' . basename($tmp_src), 'warning'); + $app->enqueueMessage(JText::_('JBS_IBM_NOT_DB'), 'warning'); + + return false; + } + elseif (($iscernt === 0) && ($parent !== true)) + { + // Way to check to see if file came from restore and is current. + $app->enqueueMessage(JText::_('JBS_IBM_NOT_CURENT_DB'), 'warning'); + + return false; + } + else + { + // First we need to drop the existing JBS tables + $objects = self::getObjects(); + + foreach ($objects as $object) + { + $dropquery = 'DROP TABLE IF EXISTS ' . $object['name'] . ';'; + $db->setQuery($dropquery); + $db->execute(); + } + + // Create an array of queries from the sql file + $queries = JDatabaseDriver::splitSql($query); + + if (count($queries) == 0) + { + // No queries to process + return false; + } + + // Process each query in the $queries array (split out of sql file). + foreach ($queries as $query) + { + $query = trim($query); + + if ($query != '' && $query{0} != '#') + { + $db->setQuery($query); + + if (!$db->execute()) + { + $app->enqueueMessage(JText::sprintf('JBS_IBM_INSTALLDB_ERRORS', $db->stderr(true)), 'error'); + + return false; + } + } + } + } + + return true; + } +} diff --git a/build/com_proclaim-9.2.1/admin/lib/ssconvert.php b/build/com_proclaim-9.2.1/admin/lib/ssconvert.php new file mode 100644 index 0000000000..8e4e0af9df --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/ssconvert.php @@ -0,0 +1,843 @@ +getQuery(true); + $query->select('*') + ->from('#__sermon_sermons'); + $db->setQuery($query); + $sermons = $db->loadObjectList(); + + // Get the old sermons, teachers, series + + // Get a unique list of teacher ids + $query = $db->getQuery(true); + $query->select('speaker_id, id, series_id')->from('#__sermon_sermons')->group('series_id'); + $db->setQuery($query); + $seriesspeakers = $db->loadObjectList(); + + $result_table = ''; + + // Make a server record + $base = JUri::base(); + $site = str_replace('/administrator/', '', $base); + $data = new stdClass; + $data->server_name = $site; + $data->server_path = $site; + + if (!$db->insertObject('#__bsms_servers', $data)) + { + $result_table .= ''; + } + else + { + $result_table .= ''; + } + + $query = $db->getQuery(true); + $query->select('*') + ->from('#__bsms_servers') + ->where('published = 1') + ->order($db->qn('id') . ' desc'); + $db->setQuery($query, 0, 1); + $server = $db->loadAssoc(); + $this->serverid = $server['id']; + + // Make the teachers + $query = $db->getQuery(true); + $query->select('*') + ->from('#__sermon_speakers'); + $db->setQuery($query); + + $teachers = $db->loadObjectList(); + + if (!$teachers) + { + $result_table .= ''; + } + + foreach ($teachers AS $teacher) + { + $data = new stdClass; + $teachername = $teacher->name; + $data->teachername = $teachername; + $data->website = $teacher->website; + $data->information = $db->escape($teacher->bio); + $data->image = $teacher->pic; + $data->thumb = $teacher->pic; + $data->published = $teacher->state; + $data->ordering = $teacher->ordering; + $data->catid = $teacher->catid; + $data->short = $db->escape($teacher->bio); + $data->alias = $teacher->alias; + + if (!$db->insertObject('#__bsms_teachers', $data)) + { + $result_table .= ''; + } + + // Get the last teacherid + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_teachers')->order('id'); + $db->setQuery($query, 0, 1); + $lastteacher = $db->loadResult(); + + // Add the new teacher id to the object for cross walk of series and teachers + foreach ($seriesspeakers as $speakers) + { + if ($speakers->speaker_id == $teacher->id) + { + $speakers->newid = $lastteacher; + } + } + } // End teachers foreach + + // Series Records + $query = $db->getQuery(true); + $query->select('*') + ->from('#__sermon_series'); + $db->setQuery($query); + $series = $db->loadObjectList(); + + if (!$series) + { + $result_table .= ''; + } + else + { + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_studies')->order('id DESC'); + $db->setQuery($query, 0, 1); + $lastseries = $db->loadResult(); + + // Add the new teacher id to the object for cross walk of series and teachers + foreach ($seriesspeakers as $speakers) + { + if ($speakers->series_id == $single->id) + { + $speakers->newseriesid = $lastseries; + } + } + } + } // End foreach $series as $single + } + // Get all the sermons and loop through them, creating new ones in JBS + + foreach ($sermons as $sermon) + { + $this->newStudies($sermon, $seriesspeakers); + } + + // Count the new numbers and report + $query = $db->getQuery(true); + $query->select('COUNT(*)')->from('#__bsms_studies'); + $db->setQuery($query); + $newstudies = $db->loadResult(); + + $query = $db->getQuery(true); + $query->select('COUNT(*)')->from('#__bsms_teachers'); + $db->setQuery($query); + $newteachers = $db->loadResult(); + + $query = $db->getQuery(true); + $query->select('COUNT(*)')->from('#__bsms_series'); + $db->setQuery($query); + $newseries = $db->loadResult(); + + $query = $db->getQuery(true); + $query->select('COUNT(*)')->from('#__bsms_mediafiles'); + $db->setQuery($query); + $newmediafiles = $db->loadResult(); + + $result_table .= ''; + $result_table .= ''; + $result_table .= ''; + $result_table .= ''; + $result_table .= '
      ' . JText::_('JBS_IBM_NOTE_ERRORS') . '
      ' . JText::_('JBS_IBM_ERROR_OCCURED_SERVER') . '
      ' . JText::_('JBS_IBM_SERVER_RECORD_ADDED') . '
      ' . JText::_('JBS_IBM_NO_TEACHERS_FOUND_SS') . '
      ' . JText::_('JBS_IBM_ERROR_OCCURED_CREATING_TEACHERS') . '
      ' . JText::_('JBS_IBM_NO_SERIES_FOUND_SS') . ''; + } + else + { + foreach ($series AS $single) + { + $id = $single->id; + $series_text = $single->series_title; + $description = $single->series_description; + $published = $single->state; + + if (!$published) + { + $published = $single->published; + } + + if (!$published) + { + $published = 1; + } + + $series_thumbnail = $single->avatar; + $data = new stdClass; + $data->series_text = $series_text; + $data->description = $description; + $data->published = $published; + $data->series_thumbnail = $series_thumbnail; + + foreach ($seriesspeakers as $speakers) + { + if ($speakers->series_id == $single->id) + { + $data->teacher = $speakers->newid; + } + else + { + $data->teacher = $id; + } + } + + $data->alias = $single->alias; + $data->ordering = $single->ordering; + + if (!$db->insertObject('#__bsms_series', $data)) + { + $result_table .= '
      ' . JText::_('JBS_IBM_ERROR_OCCURED_SS_SERIES') . '
      ' . $newteachers . ' ' . JText::_('JBS_IBM_TEACHERS_CREATED') . '
      ' . $newstudies . ' ' . JText::_('JBS_IBM_SERMONS_CREATED_FOR') . '
      ' . $newmediafiles . ' ' . JText::_('JBS_IBM_MEDIAFILES_CREATED') . '
      ' . $newseries . ' ' . JText::_('JBS_IBM_SERIES_CONVERTED') . '
      '; + + return $result_table; + } + + /** + * New Studies Carnation + * + * @param object $sermon Test of Sermons + * @param array $seriesspeakers Array of Series + * + * @return void + * + * @since 9.0.0 + */ + public function newStudies($sermon, $seriesspeakers) + { + $db = JFactory::getDbo(); + $data = new stdClass; + + foreach ($seriesspeakers as $speakers) + { + if ($speakers->speaker_id == $sermon->speaker_id) + { + $data->teacher_id = $speakers->newid; + } + + if ($speakers->series_id == $sermon->series_id) + { + $data->series_id = $speakers->newseriesid; + } + } + + $data->studytitle = $sermon->sermon_title; + $data->studynumber = $sermon->sermon_number; + + $scripture = $this->getVerses($sermon->sermon_scripture); + $data->booknumber = $scripture->booknumber; + $data->chapter_begin = $scripture->chapter_begin; + $data->chapter_end = $scripture->chapter_end; + $data->verse_begin = $scripture->verse_begin; + $data->verse_end = $scripture->verse_end; + + $data->studydate = $sermon->sermon_date; + + $data->studytext = $sermon->notes; + $data->user_id = $sermon->created_by; + $data->hits = $sermon->hits; + + if (!$data->hits) + { + $data->hits = 0; + } + + $data->published = $sermon->state; + $data->alias = $sermon->alias; + + $db->insertObject('#__bsms_studies', $data); + $query = $db->getQuery(true); + $query->select('id')->from('#__bsms_studies')->order('id DESC'); + + $db->setQuery($query, 0, 1); + $study = $db->loadAssoc(); + $data1 = new stdClass; + $data1->study_id = $study['id']; + $data1->server_id = $this->serverid; + $data1->filename = $sermon->audiofile; + $data1->published = 1; + $data1->createdate = $data->studydate; + $data1->media_image = 1; + $data1->downloads = 1; + $data1->plays = 0; + + $db->insertObject('#__bsms_mediafiles', $data1, 'id'); + + if ($sermon->videofile) + { + $data2 = new stdClass; + $data2->study_id = $study['id']; + $data2->server = $this->serverid; + $data2->filename = $sermon->videofile; + $data2->published = 1; + $data2->createdate = $data->studydate; + $data2->media_image = 5; + $data2->downloads = 0; + $data2->plays = 0; + + $db->insertObject('#__bsms_mediafiles', $data2, 'id'); + } + } + + /** + * Get Version of Book Number + * + * @param string $sermon Book of the Bible. + * + * @return object Version of the Books + * + * @since 9.0.0 + */ + public function getVerses($sermon) + { + $sermonscripture = new stdClass; + $sermonscripture->booknumber = '101'; + $secondcolon = 0; + + if (!$sermon) + { + $sermonscripture->chapter_begin = ''; + $sermonscripture->chapter_end = ''; + $sermonscripture->verse_begin = ''; + $sermonscripture->verse_end = ''; + } + + $bookname = substr_count(strtolower($sermon), 'genesis'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '101'; + } + + $bookname = substr_count(strtolower($sermon), 'exodus'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '102'; + } + + $bookname = substr_count(strtolower($sermon), 'leviticus'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '103'; + } + + $bookname = substr_count(strtolower($sermon), 'numbers'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '104'; + } + + $bookname = substr_count(strtolower($sermon), 'deuteronomy'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '105'; + } + + $bookname = substr_count(strtolower($sermon), 'joshua'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '106'; + } + + $bookname = substr_count(strtolower($sermon), 'judges'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '107'; + } + + $bookname = substr_count(strtolower($sermon), 'ruth'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '108'; + } + + $bookname = substr_count(strtolower($sermon), '1 samuel'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '109'; + } + + $bookname = substr_count(strtolower($sermon), '2 samuel'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '110'; + } + + $bookname = substr_count(strtolower($sermon), '1 kings'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '111'; + } + + $bookname = substr_count(strtolower($sermon), '2 kings'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '112'; + } + + $bookname = substr_count(strtolower($sermon), '1 chronicles'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '113'; + } + + $bookname = substr_count(strtolower($sermon), '2 chronicles'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '114'; + } + + $bookname = substr_count(strtolower($sermon), 'ezra'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '115'; + } + + $bookname = substr_count(strtolower($sermon), 'nehemiah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '116'; + } + + $bookname = substr_count(strtolower($sermon), 'esther'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '117'; + } + + $bookname = substr_count(strtolower($sermon), 'job'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '118'; + } + + $bookname = substr_count(strtolower($sermon), 'psalm'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '119'; + } + + $bookname = substr_count(strtolower($sermon), 'proverbs'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '120'; + } + + $bookname = substr_count(strtolower($sermon), 'ecclesiastes'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '121'; + } + + $bookname = substr_count(strtolower($sermon), 'song of solomon'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '122'; + } + + $bookname = substr_count(strtolower($sermon), 'isaiah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '123'; + } + + $bookname = substr_count(strtolower($sermon), 'jeremiah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '124'; + } + + $bookname = substr_count(strtolower($sermon), 'lamentations'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '125'; + } + + $bookname = substr_count(strtolower($sermon), 'ezekiel'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '126'; + } + + $bookname = substr_count(strtolower($sermon), 'daniel'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '127'; + } + + $bookname = substr_count(strtolower($sermon), 'hosea'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '128'; + } + + $bookname = substr_count(strtolower($sermon), 'joel'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '129'; + } + + $bookname = substr_count(strtolower($sermon), 'amos'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '130'; + } + + $bookname = substr_count(strtolower($sermon), 'obadiah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '131'; + } + + $bookname = substr_count(strtolower($sermon), 'jonah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '132'; + } + + $bookname = substr_count(strtolower($sermon), 'micah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '133'; + } + + $bookname = substr_count(strtolower($sermon), 'nahum'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '134'; + } + + $bookname = substr_count(strtolower($sermon), 'habakkuk'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '135'; + } + + $bookname = substr_count(strtolower($sermon), 'zephaniah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '136'; + } + + $bookname = substr_count(strtolower($sermon), 'haggai'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '137'; + } + + $bookname = substr_count(strtolower($sermon), 'zechariah'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '138'; + } + + $bookname = substr_count(strtolower($sermon), 'malachi'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '139'; + } + + $bookname = substr_count(strtolower($sermon), 'matthew'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '140'; + } + + $bookname = substr_count(strtolower($sermon), 'mark'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '141'; + } + + $bookname = substr_count(strtolower($sermon), 'luke'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '142'; + } + + $bookname = substr_count(strtolower($sermon), 'john'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '143'; + } + + $bookname = substr_count(strtolower($sermon), 'acts'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '144'; + } + + $bookname = substr_count(strtolower($sermon), 'romans'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '145'; + } + + $bookname = substr_count(strtolower($sermon), '1 corinthians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '146'; + } + + $bookname = substr_count(strtolower($sermon), '2 corinthians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '147'; + } + + $bookname = substr_count(strtolower($sermon), 'galatians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '148'; + } + + $bookname = substr_count(strtolower($sermon), 'ephesians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '149'; + } + + $bookname = substr_count(strtolower($sermon), 'philippians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '150'; + } + + $bookname = substr_count(strtolower($sermon), 'colossians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '151'; + } + + $bookname = substr_count(strtolower($sermon), '1 thessalonians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '152'; + } + + $bookname = substr_count(strtolower($sermon), '2 thessalonians'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '153'; + } + + $bookname = substr_count(strtolower($sermon), '1 timothy'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '154'; + } + + $bookname = substr_count(strtolower($sermon), '2 timothy'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '155'; + } + + $bookname = substr_count(strtolower($sermon), 'titus'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '156'; + } + + $bookname = substr_count(strtolower($sermon), 'philemon'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '157'; + } + + $bookname = substr_count(strtolower($sermon), 'hebrews'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '158'; + } + + $bookname = substr_count(strtolower($sermon), 'james'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '159'; + } + + $bookname = substr_count(strtolower($sermon), '1 peter'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '160'; + } + + $bookname = substr_count(strtolower($sermon), '2 peter'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '161'; + } + + $bookname = substr_count(strtolower($sermon), '1 john'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '162'; + } + + $bookname = substr_count(strtolower($sermon), '2 john'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '163'; + } + + $bookname = substr_count(strtolower($sermon), '3 john'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '164'; + } + + $bookname = substr_count(strtolower($sermon), 'jude'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '165'; + } + + $bookname = substr_count(strtolower($sermon), 'revelation'); + + if ($bookname > 0) + { + $sermonscripture->booknumber = '166'; + } + + $firstspace = strpos($sermon, ' ', 2); + $firstcolon = strpos($sermon, ':'); + $firstdash = strpos($sermon, '-'); + + $issecondcolon = substr_count($sermon, ':', $firstcolon + 1); + + if ($issecondcolon) + { + $secondcolon = strpos($sermon, ':', $firstcolon + 1); + } + + $sermonscripture->chapter_begin = substr($sermon, $firstspace + 1, ($firstcolon - $firstspace) - 1); + + if (!$firstdash) + { + $sermonscripture->verse_begin = substr($sermon, $firstcolon + 1); + } + else + { + $sermonscripture->verse_begin = substr($sermon, $firstcolon + 1, $firstdash - ($firstcolon + 1)); + } + + if (!$issecondcolon) + { + $sermonscripture->chapter_end = ''; + } + else + { + $sermonscripture->chapter_end = substr($sermon, $firstdash + 1, ($secondcolon - $firstdash) - 1); + $sermonscripture->verse_end = substr($sermon, $secondcolon + 1); + } + + if (!$issecondcolon && $firstdash) + { + $sermonscripture->verse_end = substr($sermon, $firstdash + 1); + } + + return $sermonscripture; + } +} diff --git a/build/com_proclaim-9.2.1/admin/lib/stats.php b/build/com_proclaim-9.2.1/admin/lib/stats.php new file mode 100644 index 0000000000..062a31c13d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/stats.php @@ -0,0 +1,729 @@ +getQuery(true); + $query + ->select('sum(m.plays), m.study_id, m.published, s.id FROM #__bsms_mediafiles AS m') + ->leftJoin('#__bsms_studies AS s ON (m.study_id = s.id)') + ->where('m.study_id = ' . $db->q($id)); + $db->setQuery($query); + $plays = $db->loadResult(); + + return (int) $plays; + } + + /** + * Total messages in Bible Study + * + * @param string $start ? + * @param string $end ? + * + * @return int Total Messages + * + * @since 9.0.0 + */ + public static function get_total_messages($start = '', $end = '') + { + if ($start != self::$total_messages_start || $end != self::$total_messages_end || !self::$total_messages) + { + self::$total_messages_start = $start; + self::$total_messages_end = $end; + + $db = JFactory::getDbo(); + $where = array(); + + if (!empty($start)) + { + $where[] = 'time > UNIX_TIMESTAMP(\'' . $start . '\')'; + } + + if (!empty($end)) + { + $where[] = 'time < UNIX_TIMESTAMP(\'' . $end . '\')'; + } + + $query = $db->getQuery(true); + $query + ->select('COUNT(*)') + ->from('#__bsms_studies') + ->where('published =' . $db->q('1')); + + if (count($where) > 0) + { + $query->where(implode(' AND ', $where)); + } + + $db->setQuery($query); + self::$total_messages = intval($db->loadResult()); + } + + return self::$total_messages; + } + + /** + * Total topics in Bible Study + * + * @param string $start ? + * @param string $end ? + * + * @return int Total Topics + * + * @since 9.0.0 + */ + public static function get_total_topics($start = '', $end = '') + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('COUNT(*)') + ->from('#__bsms_studies') + ->leftJoin('#__bsms_studytopics ON (#__bsms_studies.id = #__bsms_studytopics.study_id)') + ->leftJoin('#__bsms_topics ON (#__bsms_topics.id = #__bsms_studytopics.topic_id)') + ->where('#__bsms_topics.published = ' . $db->q('1')); + + if (!empty($start)) + { + $query->where('time > UNIX_TIMESTAMP(\'' . $start . '\')'); + } + + if (!empty($end)) + { + $query->where('time < UNIX_TIMESTAMP(\'' . $end . '\')'); + } + + $db->setQuery($query); + + return intval($db->loadResult()); + } + + /** + * Get top studies + * + * @return string + * + * @since 9.0.0 + */ + public static function get_top_studies() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('*') + ->from('#__bsms_studies') + ->where('published = ' . $db->q('1')) + ->where('hits > ' . $db->q('0')) + ->order('hits desc'); + $db->setQuery($query, 0, 1); + $results = $db->loadObjectList(); + $top_studies = null; + + foreach ($results as $result) + { + $top_studies .= $result->hits . ' ' . JText::_('JBS_CMN_HITS') . + ' - ' . + $result->studytitle . ' - ' . date('Y-m-d', strtotime($result->studydate)) . '
      '; + } + + return $top_studies; + } + + /** + * Total media files in Bible Study + * + * @return int + * + * @since 9.0.0 + */ + public static function get_total_categories() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('*') + ->from('#__bsms_mediafiles') + ->where('published = ' . $db->q('1')); + $db->setQuery($query); + + return intval($db->loadResult()); + } + + /** + * Get top books + * + * @return object + * + * @deprecated Not used as of 8.0.0 + * + * @since 9.0.0 + */ + public static function get_top_books() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('booknumber, COUNT( hits ) AS totalmsg') + ->from('#__bsms_studies') + ->group('booknumber') + ->order('totalmsg DESC'); + $db->setQuery($query, 0, 5); + $results = $db->loadObjectList(); + + if (count($results) > 0) + { + $ids = implode(',', $results); + $query = $db->getQuery(true); + $query + ->select('bookname') + ->from('#__bsms_books') + ->where('booknumber IN (' . $ids . ')') + ->order('booknumber'); + $db->setQuery($query); + $names = $db->loadResult(); + $i = 0; + + foreach ($results as $result) + { + $result->bookname = $names[$i++]; + } + } + else + { + $results = new stdClass; + } + + return $results; + } + + /** + * Total comments + * + * @return int + * + * @since 9.0.0 + */ + public static function get_total_comments() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('COUNT(*)') + ->from('#__bsms_comments') + ->where('published = ' . $db->q('1')); + $db->setQuery($query); + + return intval($db->loadResult()); + } + + /** + * Get top thirty days + * + * @return string + * + * @since 9.0.0 + */ + public static function get_top_thirty_days() + { + $month = mktime(0, 0, 0, date("m") - 3, date("d"), date("Y")); + $last_month = date("Y-m-d 00:00:01", $month); + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('*') + ->from('#__bsms_studies') + ->where('published = ' . $db->q('1')) + ->where('hits > ' . $db->q('0')) + ->where('UNIX_TIMESTAMP(studydate) > UNIX_TIMESTAMP( ' . $db->q($last_month) . ' )') + ->order('hits desc'); + $db->setQuery($query, 0, 5); + $results = $db->loadObjectList(); + $top_studies = null; + + if (!$results) + { + $top_studies = JText::_('JBS_CPL_NO_INFORMATION'); + } + else + { + foreach ($results as $result) + { + $top_studies .= $result->hits . ' ' . JText::_('JBS_CMN_HITS') . + ' - ' . + $result->studytitle . ' - ' . date('Y-m-d', strtotime($result->studydate)) . '
      '; + } + } + + return $top_studies; + } + + /** + * Get Total Media Files + * + * @return int Number of Records under MediaFiles that are published. + * + * @since 9.0.0 + */ + public static function total_media_files() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('COUNT(*)') + ->from('#__bsms_mediafiles') + ->where('published = ' . 1); + $db->setQuery($query); + + return intval($db->loadResult()); + } + + /** + * Get Top Downloads + * + * @return string List of links to the downloads + * + * @since 9.0.0 + */ + public static function get_top_downloads() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select( + '#__bsms_mediafiles.*, #__bsms_studies.published AS spub, #__bsms_mediafiles.published AS mpublished,' . + '#__bsms_studies.id AS sid, #__bsms_studies.studytitle AS stitle, #__bsms_studies.studydate AS sdate ') + ->from('#__bsms_mediafiles') + ->leftJoin('#__bsms_studies ON (#__bsms_mediafiles.study_id = #__bsms_studies.id)') + ->where('#__bsms_mediafiles.published = 1 ') + ->where('downloads > 0') + ->order('downloads desc'); + + $db->setQuery($query, 0, 5); + $results = $db->loadObjectList(); + $top_studies = null; + + foreach ($results as $result) + { + $top_studies .= + $result->downloads . ' - ' . $result->stitle . ' - ' . date('Y-m-d', strtotime($result->sdate)) . + '
      '; + } + + return $top_studies; + } + + /** + * Get Downloads ninety + * + * @return string list of download links + * + * @since 9.0.0 + */ + public static function get_downloads_ninety() + { + $month = mktime(0, 0, 0, date("m") - 3, date("d"), date("Y")); + $lastmonth = date("Y-m-d 00:00:01", $month); + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select( + '#__bsms_mediafiles.*, #__bsms_studies.published AS spub, #__bsms_mediafiles.published AS mpublished,' . + ' #__bsms_studies.id AS sid, #__bsms_studies.studytitle AS stitle, #__bsms_studies.studydate AS sdate ') + ->from('#__bsms_mediafiles') + ->leftJoin('#__bsms_studies ON (#__bsms_mediafiles.study_id = #__bsms_studies.id)') + ->where('#__bsms_mediafiles.published = ' . $db->q('1')) + ->where('downloads > ' . (int) $db->q('0')) + ->where('UNIX_TIMESTAMP(createdate) > UNIX_TIMESTAMP( ' . $db->q($lastmonth) . ' )') + ->order('downloads DESC'); + $db->setQuery($query, 0, 5); + $results = $db->loadObjectList(); + $top_studies = null; + + if (!$results) + { + $top_studies = JText::_('JBS_CPL_NO_INFORMATION'); + } + else + { + foreach ($results as $result) + { + $top_studies .= $result->downloads . ' ' . JText::_('JBS_CMN_HITS') . + ' - ' . + $result->stitle . ' - ' . date('Y-m-d', strtotime($result->sdate)) . '
      '; + } + } + + return $top_studies; + } + + /** + * Total Downloads + * + * @return int Number of Mediafiles Published and have downloads + * + * @since 9.0.0 + */ + public static function total_downloads() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('SUM(downloads)') + ->from('#__bsms_mediafiles') + ->where('published = ' . 1) + ->where('downloads > ' . 0); + $db->setQuery($query); + + return intval($db->loadResult()); + } + + /** + * Top Score ??? + * + * @var Registry $admin_params Admin Prams + * + * @return int number of scores + * + * @since 9.0.0 + */ + public static function top_score() + { + $final = []; + $admin_params = JBSMParams::getAdmin(); + $format = $admin_params->params->get('format_popular', '0'); + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('study_id, sum(downloads + plays) as added ') + ->from('#__bsms_mediafiles') + ->where('published = ' . 1) + ->group('study_id') + ->order('added DESC'); + $db->setQuery($query); + $results = $db->loadAssocList(); + array_splice($results, 5); + + foreach ($results as $key => $result) + { + $query = $db->getQuery(true); + $query + ->select('#__bsms_studies.studydate, #__bsms_studies.studytitle, #__bsms_studies.hits,' . + '#__bsms_studies.id, #__bsms_mediafiles.study_id from #__bsms_studies') + ->leftJoin('#__bsms_mediafiles ON (#__bsms_studies.id = #__bsms_mediafiles.study_id)') + ->where('#__bsms_mediafiles.study_id = ' . (int) $result['study_id']); + $db->setQuery($query); + $hits = $db->loadObject(); + + if ($hits) + { + if ($format < 1) + { + $total = $result['added'] + $hits->hits; + } + else + { + $total = $result->added; + } + + $link = ' ' . + $hits->studytitle . ' ' . date('Y-m-d', strtotime($hits->studydate)) . '
      '; + $final2 = array('total' => $total, 'link' => $link); + $final[] = $final2; + } + } + + rsort($final); + array_splice($final, 5); + $top_score_table = ''; + + foreach ($final as $value) + { + foreach ($value as $scores) + { + $top_score_table .= $scores; + } + } + + return $top_score_table; + } + + /** + * Returns a System of Player + * + * @return string + * + * @since 9.0.0 + */ + public static function players() + { + $count_no_player = 0; + $count_global_player = 0; + $count_internal_player = 0; + $count_av_player = 0; + $count_legacy_player = 0; + $count_embed_code = 0; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('params') + ->from('#__bsms_mediafiles') + ->where('published = ' . $db->q('1')); + $db->setQuery($query); + $params = $db->loadObjectList(); + + $registry = new Registry; + $media_players = null; + + if ($params) + { + $total_players = count($params); + + foreach ($params as $param) + { + $registry->loadString($param->params); + + switch ($registry->get('player', 0)) + { + case 0: + $count_no_player++; + break; + case '100': + $count_global_player++; + break; + case '1': + $count_internal_player++; + break; + case '3': + $count_av_player++; + break; + case '7': + $count_legacy_player++; + break; + case '8': + $count_embed_code++; + break; + } + } + + $media_players = '
      ' . JText::_('JBS_CMN_TOTAL_PLAYERS') . ': ' . $total_players . '' . + '
      ' . JText::_('JBS_CMN_INTERNAL_PLAYER') . ': ' . $count_internal_player . + '
      ' . + JText::_('JBS_CMN_AVPLUGIN') . ': ' . $count_av_player . '
      ' . + JText::_('JBS_CMN_LEGACY_PLAYER') . ': ' . $count_legacy_player . '
      ' . + JText::_('JBS_CMN_NO_PLAYER_TREATED_DIRECT') . ': ' . $count_no_player . '
      ' . + JText::_('JBS_CMN_GLOBAL_SETTINGS') . ': ' . $count_global_player . '
      ' . + JText::_('JBS_CMN_EMBED_CODE') . ': ' . $count_embed_code; + } + + return $media_players; + } + + /** + * Popups for media files + * + * @return string + * + * @since 9.0.0 + */ + public static function popups() + { + $no_player = 0; + $pop_count = 0; + $sq_count = 0; + $inline_count = 0; + $global_count = 0; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('params') + ->from('#__bsms_mediafiles') + ->where('published = ' . 1); + $db->setQuery($query); + $popups = $db->loadObjectList(); + + if ($popups) + { + $total_media_files = count($popups); + + foreach ($popups as $popup) + { + $registry = new Registry; + $registry->loadString($popup->params); + $popup = $registry->get('popup', null); + + switch ($popup) + { + case null: + case 100: + case 0: + $no_player++; + break; + case 1: + $pop_count++; + break; + case 2: + $inline_count++; + break; + case 3: + $sq_count++; + break; + } + } + + $popups = '
      ' . JText::_('JBS_CMN_TOTAL_MEDIAFILES') . ': ' . $total_media_files . '' . + '
      ' . JText::_('JBS_CMN_INLINE') . ': ' . $inline_count . '
      ' . + JText::_('JBS_CMN_POPUP') . ': ' . $pop_count . '
      ' . + JText::_('JBS_CMN_SQUEEZEBOX') . ': ' . $sq_count . '
      ' . + JText::_('JBS_CMN_NO_OPTION_TREATED_GLOBAL') . ': ' . $no_player; + } + + return $popups; + } + + /** + * Top Score Site + * + * @return string + * + * @since 9.0.0 + */ + public function top_score_site() + { + $input = new JInput; + $t = $input->get('t', 1, 'int'); + + $admin = JBSMParams::getAdmin(); + $limit = $admin->params->get('popular_limit', '25'); + $top = ''; + + return $top; + } +} diff --git a/build/com_proclaim-9.2.1/admin/lib/version.php b/build/com_proclaim-9.2.1/admin/lib/version.php new file mode 100644 index 0000000000..b9c444b076 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/lib/version.php @@ -0,0 +1,133 @@ +' . JText::_('JBS_CMN_JOOMLA_BIBLE_STUDY') . '
      ' . JText::_('JBS_CPL_CURRENT_VERSION') + . ': ' . $version->version . '
      ' . JText::_('JBS_CPL_DATE') . ': ' . $version->versiondate . '

      '; + } + + /** + * Retrieve installed Biblestudy version as array. + * + * @return object Contains fields: version, versiondate, build, versionname + * + * @since 9.0.0 + */ + public function versionObject() + { + static $biblestudyversion; + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('*')->from('#__extensions')->where('element = ' . $db->q('com_biblestudy')); + $db->setQuery($query, 0, 1); + $extension = $db->loadObject(); + $manifestvariable = json_decode($extension->manifest_cache); + $biblestudyversion->version = $manifestvariable->version; + $biblestudyversion->versiondate = $manifestvariable->creationDate; + + return $biblestudyversion; + } + + /** + * Retrieve MySQL Server version. + * + * @return string MySQL version + * + * @since 9.0.0 + */ + public function MySQLVersion() + { + static $mysqlversion; + + if (!$mysqlversion) + { + $biblestudy_db = JFactory::getDbo(); + $biblestudy_db->setQuery("SELECT VERSION() AS mysql_version"); + $mysqlversion = $biblestudy_db->loadResult(); + + if (!$mysqlversion) + { + $mysqlversion = 'unknown'; + } + } + + return $mysqlversion; + } + + /** + * Retrieve PHP Server version. + * + * @return string PHP version + * + * @since 9.0.0 + */ + public function PHPVersion() + { + return phpversion(); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/admin.php b/build/com_proclaim-9.2.1/admin/models/admin.php new file mode 100644 index 0000000000..1f236f380d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/admin.php @@ -0,0 +1,697 @@ +loadForm('com_biblestudy.admin', 'admin', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + $this->cleanCache(); + + if (parent::save($data)) + { + return true; + } + + return false; + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Get Media Files + * + * @return mixed + * + * @since 7.0 + * + * @todo not sure if this should be here. + */ + public function getMediaFiles() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('*'); + $query->from('#__bsms_mediafiles'); + $db->setQuery($query->__toString()); + $mediafiles = $db->loadObjectList(); + + foreach ($mediafiles as $i => $mediafile) + { + $reg = new Registry; + $reg->loadString($mediafile->params); + $mediafiles[$i]->params = $reg; + } + + return $mediafiles; + } + + /** + * Fixes database problems + * + * @return boolean + * + * @since 7.0 + * @throws \Exception + */ + public function fix() + { + if (!$changeSet = $this->getItems()) + { + return false; + } + + $changeSet->fix(); + $this->fixSchemaVersion($changeSet); + $this->fixUpdateVersion(); + $this->fixUpdateJBSMVersion(); + $installer = new BiblestudyModelInstall; + $installer->fixMenus(); + $installer->fixemptyaccess(); + $installer->fixemptylanguage(); + $this->fixDefaultTextFilters(); + + /* + * Finally, if the schema updates succeeded, make sure the database is + * converted to utf8mb4 or, if not suported by the server, compatible to it. + */ + $installerJoomla = new JoomlaInstallerScript; + $statusArray = $changeSet->getStatus(); + + if (count($statusArray['error']) == 0) + { + $installerJoomla->convertTablesToUtf8mb4(false); + } + + return true; + } + + /** + * Gets the ChangeSet object + * + * @return string JSchema ChangeSet + * + * @since 7.0 + * @throws \Exception + */ + public function getItems() + { + $folder = JPATH_ADMINISTRATOR . '/components/com_biblestudy/install/sql/updates/'; + + if ($this->changeSet !== null) + { + return $this->changeSet; + } + + try + { + $this->changeSet = JSchemaChangeset::getInstance(JFactory::getDbo(), $folder); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning'); + + return false; + } + + return $this->changeSet; + } + + /** + * Fix schema version if wrong. + * + * @param JSchemaChangeSet $changeSet Schema change set. + * + * @return mixed string schema version if success, false if fail + * + * @since 7.0 + * @throws \Exception + */ + public function fixSchemaVersion($changeSet) + { + // Get correct schema version -- last file in array. + $schema = $changeSet->getSchema(); + $extensionresult = $this->getExtentionId(); + + if ($schema == $this->getSchemaVersion()) + { + return $schema; + } + + // Delete old row + $db = $this->getDbo(); + $query = $db->getQuery(true) + ->delete($db->qn('#__schemas')) + ->where($db->qn('extension_id') . ' = ' . $db->q($extensionresult)); + $db->setQuery($query); + $db->execute(); + + // Add new row + $query->clear() + ->insert($db->qn('#__schemas')) + ->columns($db->quoteName('extension_id') . ',' . $db->quoteName('version_id')) + ->values($db->quote($extensionresult) . ', ' . $db->quote($schema)); + $db->setQuery($query); + + try + { + $db->execute(); + } + catch (JDatabaseExceptionExecuting $e) + { + return false; + } + + return $schema; + } + + /** + * To retrieve component version + * + * @return string Version of component + * + * @since 1.7.3 + */ + public function getCompVersion() + { + $jversion = null; + $file = JPATH_COMPONENT_ADMINISTRATOR . '/biblestudy.xml'; + $xml = simplexml_load_file($file, 'JXMLElement'); + + if ($xml) + { + $jversion = (string) $xml->version; + } + + return $jversion; + } + + /** + * To retrieve component extension_id + * + * @return string extension_id + * + * @since 7.1.0 + * @throws Exception + */ + public function getExtentionId() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('extension_id')->from($db->qn('#__extensions')) + ->where('element = ' . $db->q('com_biblestudy')); + $db->setQuery($query); + $result = $db->loadResult(); + + if (!$result) + { + throw new Exception('Database error - getExtentionId'); + } + + return $result; + } + + /** + * Get version from #__schemas table + * + * @return mixed the return value from the query, or null if the query fails + * + * @since 7.0 + * @throws Exception + */ + public function getSchemaVersion() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $extensionresult = $this->getExtentionId(); + $query->select('version_id')->from($db->qn('#__schemas')) + ->where('extension_id = ' . $db->q($extensionresult)); + $db->setQuery($query); + $result = $db->loadResult(); + + return $result; + } + + /** + * Fix Joomla version in #__extensions table if wrong (doesn't equal JVersion short version) + * + * @return mixed string update version if success, false if fail + * + * @since 7.0 + * @throws \Exception + */ + public function fixUpdateVersion() + { + /** @type JTableExtension $table */ + $table = JTable::getInstance('Extension'); + $table->load($this->getExtentionId()); + $cache = new Registry($table->manifest_cache); + $updateVersion = $cache->get('version'); + + if ($updateVersion == $this->getCompVersion()) + { + return $updateVersion; + } + + $cache->set('version', $this->getCompVersion()); + $table->manifest_cache = $cache->toString(); + + if ($table->store()) + { + return $this->getCompVersion(); + } + + return false; + } + + /** + * Get current version from #__bsms_update table. + * + * @return mixed version if successful, false if fail. + * + * @since 9.0.14 + */ + public function getUpdateJBSMVersion() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $query->select('version') + ->from('#__bsms_update') + ->order('id DESC'); + $db->setQuery($query, 0, 1); + + return $db->loadResult(); + } + + /** + * Fix Joomla version in #__bsms_updae table if wrong (doesn't equal JVersion short version). + * + * @return mixed string update version if success, false if fail. + * + * @since 9.0.14 + */ + public function fixUpdateJBSMVersion() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $query->select('id, version') + ->from('#__bsms_update') + ->order('id DESC'); + $db->setQuery($query, 0, 1); + + $results = $db->loadObject(); + + if ($results->version == $this->getCompVersion()) + { + return $results->version; + } + + $newid = $results->id + 1; + + $query->clear() + ->insert($db->qn('#__bsms_update')) + ->columns($db->qn('id') . ',' . $db->qn('version')) + ->values($db->q($newid) . ', ' . $db->q($this->getCompVersion())); + $db->setQuery($query); + + try + { + $db->execute(); + } + catch (JDatabaseExceptionExecuting $e) + { + return false; + } + + return $results->version; + } + + /** + * Check if com_biblestudy parameters are blank. If so, populate with com_content text filters. + * + * @return mixed boolean true if params are updated, null otherwise + * + * @since 7.0 + */ + public function fixDefaultTextFilters() + { + /** @type JTableExtension $table */ + $table = JTable::getInstance('Extension'); + $table->load($table->find(array('name' => 'com_biblestudy'))); + + // Check for empty $config and non-empty content filters + if (!$table->params) + { + // Get filters from com_content and store if you find them + $contentParams = JComponentHelper::getParams('com_biblestudy'); + + if ($contentParams->get('filters')) + { + $newParams = new Registry; + $newParams->set('filters', $contentParams->get('filters')); + $table->params = (string) $newParams; + $table->store(); + + return true; + } + } + + return false; + } + + /** + * Get Pagination state but is hard coded to be true right now. + * + * @return boolean + * + * @since 7.0 + */ + public function getPagination() + { + return true; + } + + /** + * Get current version from #__extensions table + * + * @return mixed version if successful, false if fail + * + * @since 7.0 + * @throws \Exception + */ + public function getUpdateVersion() + { + /** @type JTableExtension $table */ + $table = JTable::getInstance('Extension'); + $table->load($this->getExtentionId()); + $cache = new Registry($table->manifest_cache); + + return $cache->get('version'); + } + + /** + * Check if com_biblestudy parameters are blank. + * + * @return string default text filters (if any) + * + * @since 7.0 + */ + public function getDefaultTextFilters() + { + /** @type JTableExtension $table */ + $table = JTable::getInstance('Extension'); + $table->load($table->find(array('name' => 'com_biblestudy'))); + + return $table->params; + } + + /** + * Check for SermonSpeaker and PreachIt + * + * @return object + * + * @since 7.0 + */ + public function getSSorPI() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('extension_id, name, element')->from('#__extensions'); + $db->setQuery($query); + + return $db->loadObjectList(); + } + + /** + * Change Player based off MimeType or Extension of File Name + * + * @return string + * + * @since 9.0.12 + */ + public function playerByMediaType() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $db = JFactory::getDbo(); + $msg = JText::_('JBS_CMN_OPERATION_SUCCESSFUL'); + $post = $_POST['jform']; + $reg = new Registry; + $reg->loadArray($post['params']); + $from = $reg->get('mtFrom', 'x'); + $to = $reg->get('mtTo', 'x'); + $account = 0; + $count = 0; + + $MediaHelper = new JBSMMedia; + $mimetypes = $MediaHelper->getMimetypes(); + + if ($from !== 'x') + { + $key = array_search($from, $mimetypes); + } + else + { + return 'No Selection Made'; + } + + $query = $db->getQuery(true); + $query->select('id, params') + ->from('#__bsms_mediafiles') + ->where('published = ' . $db->q('1')); + $db->setQuery($query); + + foreach ($db->loadObjectList() as $media) + { + $count++; + $search = false; + $isfrom = ''; + $reg = new Registry; + $reg->loadString($media->params); + $filename = $reg->get('filename', ''); + $mediacode = $reg->get('mediacode'); + + $extension = substr($filename, strrpos($filename, '.') + 1); + + if (strpos($filename, 'http') !== false && $from == 'http') + { + $reg->set('mime_type', ' '); + $isfrom = 'http'; + $search = true; + } + + if (!empty($mediacode) && $from == 'mediacode') + { + $reg->set('mime_type', ' '); + $isfrom = 'mediacode'; + $search = true; + } + + if (strpos($key, $extension) !== false || $reg->get('mime_type', 0) == $from) + { + $reg->set('mime_type', $from); + $isfrom = 'Extenstion'; + $search = true; + } + + if ($search && !empty($isfrom)) + { + $account++; + + if (JBSMDEBUG) + { + $msg .= ' From: ' . $isfrom . '
      '; + + if ($reg->get('mime_type', 0) == $from) + { + $msg .= ' MimeType: ' . $reg->get('mime_type') . '
      '; + } + + $msg .= ' Search found FileName: ' . $filename . '
      '; + } + + $reg->set('player', $to); + + $query = $db->getQuery(true); + $query->update('#__bsms_mediafiles') + ->set('params = ' . $db->q($reg->toString())) + ->where('id = ' . (int) $media->id); + $db->setQuery($query); + + if (!$db->execute()) + { + return JText::_('JBS_ADM_ERROR_OCCURED'); + } + } + } + + return $msg . ' ' . $account; + } + + /** + * Method to auto-populate the model state. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering ? + * @param string $direction ? + * + * @return void + * + * @since 1.7.2 + * @throws \Exception + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + $this->setState('message', $app->getUserState('com_biblestudy.message')); + $this->setState('extension_message', $app->getUserState('com_biblestudy.extension_message')); + $app->setUserState('com_biblestudy.message', ''); + $app->setUserState('com_biblestudy.extension_message', ''); + parent::populateState(); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param TableAdmin $table A JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + // Reorder the articles within the category so the new article is first + if (empty($table->id)) + { + $table->id = 1; + } + } + + /** + * Load Form Date + * + * @return object + * + * @since 7.0 + * @throws \Exception + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.admin.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/archive.php b/build/com_proclaim-9.2.1/admin/models/archive.php new file mode 100644 index 0000000000..d129ded410 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/archive.php @@ -0,0 +1,110 @@ +loadForm('com_biblestudy.archive', 'archive', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Do Archive of Sermons and Media + * + * @return string + * + * @since 9.0.1 + */ + public function doArchive() + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $studies = 0; + $mediafiles = 0; + + $data = JFactory::getApplication()->input->get('jform', array(), 'array'); + + // Used this field to show how long back to archive. + $timeframe = (int) $data['timeframe']; + + // Use this to field (year, month, day) + $swich = $data['swich']; + + // Fields to update. + $fields = array( + $db->qn('published') . ' =' . $db->q('2') + ); + + // Conditions for which records should be updated. + $conditions = array( + $db->qn('studydate') . ' <= NOW() - INTERVAL ' . $timeframe . ' ' . strtoupper($swich) + ); + + $query->update($db->quoteName('#__bsms_studies'))->set($fields)->where($conditions); + + $db->setQuery($query); + + if ($db->execute()) + { + $studies = $db->getAffectedRows(); + } + + $query = $db->getQuery(true); + + // Conditions for which records should be updated. + $conditions = array( + $db->qn('createdate') . ' <= NOW() - INTERVAL ' . $timeframe . ' ' . strtoupper($swich) + ); + + $query->update($db->quoteName('#__bsms_mediafiles'))->set($fields)->where($conditions); + + $db->setQuery($query); + + if ($db->execute()) + { + $mediafiles = $db->getAffectedRows(); + } + + $frame = $timeframe . ' ' . $swich . 's'; + + return JText::sprintf('JBS_ARCHIVE_DB_CHANGE', $studies, $mediafiles, $frame); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/assets.php b/build/com_proclaim-9.2.1/admin/models/assets.php new file mode 100644 index 0000000000..43cd3491ab --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/assets.php @@ -0,0 +1,520 @@ +name = 'assets'; + } + + /** + * Start Looking though the Versions + * + * @return boolean + * + * @since 7.0 + */ + public function startScanning() + { + $this->resetStack(); + $this->resetTimer(); + $this->getSteps(); + + if (empty($this->versionStack)) + { + $this->versionStack = array(); + } + + ksort($this->versionStack); + + $this->saveStack(); + + if (!$this->haveEnoughTime()) + { + return true; + } + else + { + return $this->run(false); + } + } + + /** + * Starts or resets the internal timer + * + * @return void + * + * @since 7.0 + */ + private function resetTimer() + { + $this->startTime = $this->microtime_float(); + } + + /** + * Returns the current timestamps in decimal seconds + * + * @return string + * + * @since 7.0 + */ + private function microtime_float() + { + list($usec, $sec) = explode(" ", microtime()); + + return ((float) $usec + (float) $sec); + } + + /** + * Get migrate versions of DB after import/copy has finished. + * + * @return boolean + * + * @since 7.0 + */ + private function getSteps() + { + $fix = new JBSMAssets; + $fix->build(); + $this->versionStack = $fix->query; + $this->totalSteps = $fix->count; + + return true; + } + + /** + * Run the Migration will there is time. + * + * @param bool $resetTimer If the time must be reset + * + * @return boolean + * + * @since 7.0 + */ + public function run($resetTimer = true) + { + if ($resetTimer) + { + $this->resetTimer(); + } + + $this->loadStack(); + + $result = true; + + while ($result && $this->haveEnoughTime()) + { + $result = $this->RealRun(); + } + + $this->saveStack(); + + return $result; + } + + /** + * Saves the Versions/SQL/After stack in the session + * + * @return void + * + * @since 7.0 + */ + private function saveStack() + { + $stack = array( + 'version' => $this->versionStack, + 'step' => $this->step, + 'switch' => $this->versionSwitch, + 'allupdates' => $this->allupdates, + 'total' => $this->totalSteps, + 'done' => $this->doneSteps, + ); + $stack = json_encode($stack); + + if (function_exists('base64_encode') && function_exists('base64_decode')) + { + if (function_exists('gzdeflate') && function_exists('gzinflate')) + { + $stack = gzdeflate($stack, 9); + } + + $stack = base64_encode($stack); + } + + $session = JFactory::getSession(); + $session->set('asset_stack', $stack, 'JBSM'); + } + + /** + * Resets the Versions/SQL/After stack saved in the session + * + * @return void + * + * @since 7.0 + */ + private function resetStack() + { + $session = JFactory::getSession(); + $session->set('asset_stack', '', 'JBSM'); + $this->versionStack = array(); + $this->versionSwitch = null; + $this->allupdates = array(); + $this->step = null; + $this->totalSteps = 0; + $this->doneSteps = 0; + } + + /** + * Loads the Versions/SQL/After stack from the session + * + * @return boolean + * + * @since 7.0 + */ + private function loadStack() + { + $session = JFactory::getSession(); + $stack = $session->get('asset_stack', '', 'JBSM'); + + if (empty($stack)) + { + $this->versionStack = array(); + $this->versionSwitch = null; + $this->allupdates = array(); + $this->step = null; + $this->totalSteps = 0; + $this->doneSteps = 0; + + return false; + } + + if (function_exists('base64_encode') && function_exists('base64_decode')) + { + $stack = base64_decode($stack); + + if (function_exists('gzdeflate') && function_exists('gzinflate')) + { + $stack = gzinflate($stack); + } + } + + $stack = json_decode($stack, true); + + $this->versionStack = $stack['version']; + $this->versionSwitch = $stack['switch']; + $this->allupdates = $stack['allupdates']; + $this->step = $stack['step']; + $this->totalSteps = $stack['total']; + $this->doneSteps = $stack['done']; + + return true; + } + + /** + * Makes sure that no more than 5 seconds since the start of the timer have elapsed + * + * @return boolean + * + * @since 7.0 + */ + private function haveEnoughTime() + { + $now = $this->microtime_float(); + $elapsed = abs($now - $this->startTime); + + return $elapsed < 2; + } + + /** + * Start the Run through the Pre Versions then SQL files then After PHP functions. + * + * @return boolean + * + * @since 7.0 + */ + private function RealRun() + { + if (!empty($this->versionStack)) + { + krsort($this->versionStack); + + while (!empty($this->versionStack) && $this->haveEnoughTime()) + { + $this->step = key($this->versionStack); + + if (isset($this->versionStack[$this->step]) && @!empty($this->versionStack[$this->step])) + { + $version = array_pop($this->versionStack[$this->step]); + $this->doneSteps++; + $asset = new JBSMAssets; + $asset->fixAssets($this->step, $version); + } + else + { + unset($this->versionStack[$this->step]); + } + } + } + + if (empty($this->versionStack)) + { + // Just finished + $this->resetStack(); + + return false; + } + + // If we have more Versions or SQL files, continue in the next step + return true; + } + + /** + * Set Parent ID + * + * @return void + * + * @since 7.0 + */ + public function parentid() + { + $fix = new JBSMAssets; + $this->parent_id = $fix->parentid(); + } + + /** + * Table list Array. + * + * @return array + * + * @since 7.0 + */ + protected function getassetObjects() + { + $objects = array( + array( + 'name' => '#__bsms_servers', + 'titlefield' => 'server_name', + 'assetname' => 'server', + 'realname' => 'JBS_CMN_SERVERS' + ), + array( + 'name' => '#__bsms_studies', + 'titlefield' => 'studytitle', + 'assetname' => 'message', + 'realname' => 'JBS_CMN_STUDIES' + ), + array( + 'name' => '#__bsms_comments', + 'titlefield' => 'comment_date', + 'assetname' => 'comment', + 'realname' => 'JBS_CMN_COMMENTS' + ), + array( + 'name' => '#__bsms_locations', + 'titlefield' => 'location_text', + 'assetname' => 'location', + 'realname' => 'JBS_CMN_LOCATIONS' + ), + array( + 'name' => '#__bsms_mediafiles', + 'titlefield' => 'filename', + 'assetname' => 'mediafile', + 'realname' => 'JBS_CMN_MEDIA_FILES' + ), + array( + 'name' => '#__bsms_message_type', + 'titlefield' => 'message_type', + 'assetname' => 'messagetype', + 'realname' => 'JBS_CMN_MESSAGETYPES' + ), + array( + 'name' => '#__bsms_podcast', + 'titlefield' => 'title', + 'assetname' => 'podcast', + 'realname' => 'JBS_CMN_PODCASTS' + ), + array( + 'name' => '#__bsms_series', + 'titlefield' => 'series_text', + 'assetname' => 'serie', + 'realname' => 'JBS_CMN_SERIES' + ), + array( + 'name' => '#__bsms_teachers', + 'titlefield' => 'teachername', + 'assetname' => 'teacher', + 'realname' => 'JBS_CMN_TEACHERS' + ), + array( + 'name' => '#__bsms_templates', + 'titlefield' => 'title', + 'assetname' => 'template', + 'realname' => 'JBS_CMN_TEMPLATES' + ), + array( + 'name' => '#__bsms_topics', + 'titlefield' => 'topic_text', + 'assetname' => 'topic', + 'realname' => 'JBS_CMN_TOPICS' + ), + array( + 'name' => '#__bsms_templatecode', + 'titlefield' => 'filename', + 'assetname' => 'templatecode', + 'realname' => 'JBS_CMN_TEMPLATECODE' + ), + array( + 'name' => '#__bsms_admin', + 'titlefield' => 'id', + 'assetname' => 'admin', + 'realname' => 'JBS_CMN_ADMINISTRATION' + ) + ); + + return $objects; + } + + /** + * Check Assets + * + * @return array + * + * @since 7.0 + */ + public function checkAssets() + { + $return = array(); + $db = JFactory::getDbo(); + $result = new stdClass; + + // First get the new parent_id + if (!$this->parent_id) + { + $this->parentid(); + } + + // Get the names of the JBS tables + $objects = $this->getassetObjects(); + + // Run through each table + foreach ($objects as $object) + { + // Put the table into the return array + // Get the total number of rows and collect the table into a query + $query = $db->getQuery(true); + $query->select('j.id as jid, j.asset_id as jasset_id, a.id as aid, a.rules as arules, a.parent_id') + ->from($db->qn($object['name']) . ' as j') + ->leftJoin('#__assets as a ON (a.id = j.asset_id)'); + $db->setQuery($query); + $results = $db->loadObjectList(); + $nullrows = 0; + $matchrows = 0; + $arulesrows = 0; + $nomatchrows = 0; + $numrows = count($results); + + // Now go through each record to test it for asset id + foreach ($results as $result) + { + // If there is no jasset_id it means that this has not been set and should be + if (!$result->jasset_id) + { + $nullrows++; + } + // If there is a jasset_id but no match to the parent_id then a mismatch has occurred + if ($this->parent_id != $result->parent_id && $result->jasset_id) + { + $nomatchrows++; + } + // If $parent_id and $result->parent_id match and the Asset rules are not blank then everything is okay + if ($this->parent_id == $result->parent_id && $result->arules !== "") + { + $matchrows++; + } + // If $parent_id and $result->parent_id match and the Asset rules is blank we need to fix + if ($this->parent_id == $result->parent_id && $result->arules === "") + { + $arulesrows++; + } + } + + $return[] = array( + 'realname' => $object['realname'], + 'numrows' => $numrows, + 'nullrows' => $nullrows, + 'matchrows' => $matchrows, + 'arulesrows' => $arulesrows, + 'nomatchrows' => $nomatchrows, + 'parent_id' => $this->parent_id, + 'result_parent_id' => $result->parent_id, + 'id' => $result->jid, + 'assetid' => $result->jasset_id + ); + } + + return $return; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/comment.php b/build/com_proclaim-9.2.1/admin/models/comment.php new file mode 100644 index 0000000000..264c6ea919 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/comment.php @@ -0,0 +1,319 @@ +loadForm('com_biblestudy.comment', 'comment', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0); + } + else + { + // The back end uses id so we use that the rest of the time and set it to 0 by default. + $id = $jinput->get('id', 0); + } + + $user = JFactory::getUser(); + + // Check for existing article. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('core.edit.state', 'com_biblestudy.comment.' . (int) $id)) + || ($id == 0 && !$user->authorise('core.edit.state', 'com_biblestudy'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('state', 'disabled', 'true'); + + // Disable fields while saving. + // The controller has already verified this is an article you can edit. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('state', 'filter', 'unset'); + } + + return $form; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $value The new category. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 11.1 + */ + protected function batchCopy($value, $pks, $contexts) + { + $categoryId = (int) ''; + $newIds = array(); + + /** @type TableComment $table */ + $table = $this->getTable(); + $i = 0; + + // Check that the user has create permission for the component + $extension = JFactory::getApplication()->input->get('option', ''); + $user = JFactory::getUser(); + + if (!$user->authorise('core.create', $extension)) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_CREATE')); + + return false; + } + + // Parent exists so we let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $table->reset(); + + // Check that the row actually exists + if (!$table->load($pk)) + { + if ($error = $table->getError()) + { + // Fatal error + $this->setError($error); + + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // Alter the title & alias + $data = $this->generateNewTitle($categoryId, '', ''); + + // Reset the ID because we are making a copy + $table->id = 0; + + // Check the row. + if (!$table->check()) + { + $this->setError($table->getError()); + + return false; + } + + // Store the row. + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + + // Get the new item ID + $newId = $table->get('id'); + + // Add the new ID to the array + $newIds[$i] = $newId; + $i++; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Method to get a table object, load it if necessary. + * + * @param string $name The table name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $options Configuration array for model. Optional. + * + * @return JTable A JTable object + * + * @since 7.0 + */ + public function getTable($name = 'Comment', $prefix = 'Table', $options = array()) + { + return JTable::getInstance($name, $prefix, $options); + } + + /** + * Clean the cache + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return false; + } + + $user = JFactory::getUser(); + + return $user->authorise('core.delete', 'com_biblestudy.comment.' . (int) $record->id); + } + + return false; + } + + /** + * Method to test whether a record can have its state edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission for the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + + // Check for existing article. + if (!empty($record->id)) + { + return $user->authorise('core.edit.state', 'com_biblestudy.comment.' . (int) $record->id); + } + + // Default to component settings if serie known. + return parent::canEditState($record); + } + + /** + * Prepare and sanitise the table prior to saving. + * + * @param JTable $table A reference to a JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + // Holder. + } + + /** + * Load Form Data + * + * @return object + * + * @since 7.0 + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.comment.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/comments.php b/build/com_proclaim-9.2.1/admin/models/comments.php new file mode 100644 index 0000000000..354f84a023 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/comments.php @@ -0,0 +1,172 @@ +input->get('layout'); + + // Adjust the context to support modal layouts. + if ($layout) + { + $this->context .= '.' . $layout; + } + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); + $this->setState('filter.language', $language); + + // List state information. + parent::populateState('comment.comment_date', 'desc'); + } + + /** + * Get Stored ID + * + * @param string $id An identifier string to generate the store id. + * + * @return string A store id. + * + * @since 7.0 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.language'); + + return parent::getStoreId($id); + } + + /** + * List Query + * + * @return JDatabaseQuery A JDatabaseQuery object to retrieve the data set. + * + * @since 7.0 + */ + protected function getListQuery() + { + // Create a new query object. + $db = $this->getDbo(); + + // Select the required fields from the table. + $query = $db->getQuery(true); + $query->select( + $this->getState( + 'list.select', 'comment.id, comment.published, comment.user_id, comment.full_name, comment.user_email, ' + . 'comment.comment_date, comment.comment_text, comment.access, comment.language, comment.asset_id') + ); + $query->from('#__bsms_comments AS comment'); + + // Join over the language + $query->select('l.title AS language_title'); + $query->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = comment.language'); + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('comment.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(comment.published = 0 OR comment.published = 1)'); + } + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('comment.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('(study.studytitle LIKE ' . $search . ' OR book.bookname LIKE ' . $search . ')'); + } + } + + // Join over Studies + $query->select('study.studytitle AS studytitle, study.chapter_begin, study.studydate, study.booknumber'); + $query->join('LEFT', '#__bsms_studies AS study ON study.id = comment.study_id'); + + // Join over books + $query->select('book.bookname as bookname'); + $query->join('LEFT', '#__bsms_books as book ON book.booknumber = study.booknumber'); + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = comment.access'); + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'study.studytitle'); + $orderDirn = $this->state->get('list.direction', 'asc'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/cpanel.php b/build/com_proclaim-9.2.1/admin/models/cpanel.php new file mode 100644 index 0000000000..9d7c9356f7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/cpanel.php @@ -0,0 +1,132 @@ +getQuery(true); + $query->select('*'); + $query->from('#__extensions'); + $query->where('element = "com_biblestudy" and type = "component"'); + $db->setQuery($query); + + try + { + $data = $db->loadObject(); + + // Convert parameter fields to objects. + $registry = new Registry; + $registry->loadString($data->manifest_cache); + + if ($data) + { + $return->version = $registry->get('version'); + $return->versiondate = $registry->get('creationDate'); + } + } + catch (\Exception $e) + { + $return = null; + } + + return $return; + } + + /** + * Returns true if we are installed in Joomla! 3.2 or later and we have post-installation messages for our component + * which must be showed to the user. + * + * Returns null if the com_postinstall component is broken because the user screwed up his Joomla! site following + * some idiot's advice. Apparently there's no shortage of idiots giving terribly bad advice to Joomla! users. + * + * @return boolean|null + * + * @since 7.0 + */ + public function hasPostInstallMessages() + { + // Make sure we have Joomla! 3.2.0 or later + if (!version_compare(JVERSION, '3.2.0', 'ge')) + { + return false; + } + + // Get the extension ID + // Get the extension ID for our component + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('extension_id') + ->from('#__extensions') + ->where($db->qn('element') . ' = ' . $db->q('com_biblestudy')); + $db->setQuery($query); + + try + { + $ids = $db->loadColumn(); + } + catch (Exception $exc) + { + return false; + } + + if (empty($ids)) + { + return false; + } + + $extension_id = array_shift($ids); + + $this->setState('extension_id', $extension_id); + + if (!defined('FOF_INCLUDED')) + { + include_once JPATH_SITE . '/libraries/fof/include.php'; + } + + if (!defined('FOF_INCLUDED')) + { + return false; + } + + // Do I have messages? + try + { + $pimModel = FOFModel::getTmpInstance('Messages', 'PostinstallModel'); + $pimModel->savestate(false); + $pimModel->setState('eid', $extension_id); + + $list = $pimModel->getList(); + $result = count($list) >= 1; + } + catch (\Exception $e) + { + $result = null; + } + + return ($result); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/dir.php b/build/com_proclaim-9.2.1/admin/models/dir.php new file mode 100644 index 0000000000..c22dd3626a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/dir.php @@ -0,0 +1,284 @@ +set('current_dir', $homeDirBase64, 'com_biblestudy'); + } + else + { + $session->set('current_dir', $currentDirBase64, 'com_biblestudy'); + } + } + + /** + * Get folder names and their links + * + * @return array Filled with object with: name, link properties + * + * @since 7.0 + */ + public function getBreadcrumbs() + { + $bc = array(); + $currentDir = $this->_getCurrentDir(); + + $parts = explode(DS, $currentDir); + $link = ''; + $i = 0; + + // Fill bc array with objects + foreach ($parts as $part) + { + if (strlen($part) && $part != ' ') + { + $link .= '/' . $part; + $bc[$i] = new JObject; + $bc[$i]->name = $part; + $bc[$i]->link = $link; + $i++; + } + } + + // Prepend home dir + $firstBC = new stdClass; + $firstBC->name = BIBLESTUDY_MEDIA_PATH; + $firstBC->link = ''; + array_unshift($bc, $firstBC); + + return $bc; + } + + /** + * Folders in current directory + * + * @return array + * + * @since 7.0 + */ + public function getFolders() + { + $currentDir = $this->_getCurrentDir(true); + + // Get all folders in current dir + $folders = JFolder::folders($currentDir, '.', false, true); + + // Set current folder on first place in array + array_unshift($folders, $currentDir); + + return $this->_setFolderInfo($folders); + } + + /** + * Files in current directory + * + * @return array + * + * @since 7.0 + */ + public function getFiles() + { + $currentDir = $this->_getCurrentDir(true); + + // Get all files + $files = JFolder::files($currentDir, '.', false, true, array('index.html')); + + return $this->_setFileInfo($files); + } + + /** + * Get current directory from request + * + * @param bool $fullPath ? + * @param string $separator ? + * + * @return string + * + * @since 7.0 + */ + private function _getCurrentDir($fullPath = false, $separator = '/') + { + $defaultDirVar = ""; + $defaultDirPath = BIBLESTUDY_ROOT_PATH; + + // Filter GET variable + $directoryVarFromReq = JFactory::getApplication()->input->get('dir', $separator); + $directoryVarReplSep = str_replace(array("/", "\\"), $separator, $directoryVarFromReq); + $directoryVarWODots = preg_replace(array("/\.\./", "/\./"), '', $directoryVarReplSep); + $directoryVar = $directoryVarWODots; + + // Make filtered full directory path + $fullDirPath = BIBLESTUDY_ROOT_PATH . $separator . $directoryVar; + $dirPath = JPath::check($fullDirPath); + + if (file_exists($dirPath)) + { + // Save current directory in session whenever this function gets called + $this->_setDirectoryState($dirPath); + + if ($fullPath) + { + return $dirPath; + } + else + { + return $directoryVar; + } + } + else + { + if ($fullPath) + { + return $defaultDirPath; + } + else + { + return $defaultDirVar; + } + } + } + + /** + * Set information for each file + * + * @param array $filePaths ? + * + * @return array + * + * @since 7.0 + */ + private function _setFileInfo($filePaths) + { + $OFiles = array(); + + for ($i = 0; $i < count($filePaths); $i++) + { + $path = JPath::clean($filePaths[$i]); + $OFiles[$i] = new JObject; + $OFiles[$i]->basename = basename($path); + $OFiles[$i]->fullPath = dirname($path) . DS . basename($path); + $OFiles[$i]->link = JUri::root() . '/images' . $this->_getCurrentDir(false, "/") . '/' . basename($path); + $OFiles[$i]->ext = JFile::getExt($path); + + // Image info, if file is image + if (@getimagesize($path)) + { + $OFiles[$i]->imgInfo = @getimagesize($path); + } + else + { + $OFiles[$i]->imgInfo = 0; + } + + // File size + $size = @filesize($path); /* B */ + $unit = ' B'; + + if ($size > 1024) + { + $size = $size / 1024; + $unit = 'KB'; + } + + if ($size > 1024) + { + $size = $size / 1024; + $unit = 'MB'; + } + + if ($size > 1024) + { + $size = $size / 1024; + $unit = 'GB'; + } + + $size = round($size, 2) . " " . $unit; + $OFiles[$i]->size = $size; + + // Last accessed and last modified time + $OFiles[$i]->accessTime = @strftime("%d/%m/%Y %H:%M:%S", @fileatime($path)); + $OFiles[$i]->modifiedTime = @strftime("%d/%m/%Y %H:%M:%S", @filemtime($path)); + } + + return $OFiles; + } + + /** + * Sets the info and path for each folder + * + * @param array $folderPaths ? + * + * @return array + * + * @since 7.0 + */ + private function _setFolderInfo($folderPaths) + { + $OFolders = array(); + + for ($i = 0; $i < count($folderPaths); $i++) + { + $path = JPath::clean($folderPaths[$i]); + $OFolders[$i] = new JObject; + $OFolders[$i]->fullPath = $path; + $OFolders[$i]->basename = basename($path); + $OFolders[$i]->parentFullPath = dirname($path) . '/'; + $OFolders[$i]->parentBasename = basename(dirname($path) . '/'); + $OFolders[$i]->folderCount = count(JFolder::folders($path, '.', false, false)); + $OFolders[$i]->fileCount = count(JFolder::files($path, '.', false, false, array("index.html"))); + + // Make parent short path for go up directory + if ($path == BIBLESTUDY_ROOT_PATH . '/' . basename($path)) + { + $OFolders[$i]->parentShort = ""; + } + else + { + $OFolders[$i]->parentShort = dirname(str_replace(BIBLESTUDY_ROOT_PATH, "", $path . '/')); + } + + $OFolders[$i]->folderLink = $OFolders[$i]->parentShort . '/' . basename($path); + } + + return $OFolders; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/booklist.php b/build/com_proclaim-9.2.1/admin/models/fields/booklist.php new file mode 100644 index 0000000000..32c342ef00 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/booklist.php @@ -0,0 +1,47 @@ +element['size'] ? ' size="' . (int) $this->element['size'] . '"' : ''; + $maxLength = $this->element['maxlength'] ? ' maxlength="' . (int) $this->element['maxlength'] . '"' : ''; + $class = $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' : ''; + $readonly = ((string) $this->element['readonly'] == 'true') ? ' readonly="readonly"' : ''; + $disabled = ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : ''; + + // Initialize JavaScript field attributes. + $onchange = $this->element['onchange'] ? ' onchange="' . (string) $this->element['onchange'] . '"' : ''; + + return '' . $this->sizeConverter(); + } + + /** + * Returns converted size + * + * @return string + * + * @since 9.0.0 + */ + private function sizeConverter() + { + return ""; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/filters.php b/build/com_proclaim-9.2.1/admin/models/fields/filters.php new file mode 100644 index 0000000000..a2ee15192b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/filters.php @@ -0,0 +1,165 @@ +getUserGroups(); + + // Build the form control. + $html = array(); + + // Open the table. + $html[] = ''; + + // The table heading. + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + + // The table body. + $html[] = ' '; + + foreach ($groups as $group) + { + if (!isset($this->value[$group->value])) + { + $this->value[$group->value] = array('filter_type' => 'BL', 'filter_tags' => '', 'filter_attributes' => ''); + } + + $group_filter = $this->value[$group->value]; + + $group_filter['filter_tags'] = !empty($group_filter['filter_tags']) ? $group_filter['filter_tags'] : ''; + $group_filter['filter_attributes'] = !empty($group_filter['filter_attributes']) ? $group_filter['filter_attributes'] : ''; + + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + } + + $html[] = ' '; + + // Close the table. + $html[] = '
      '; + $html[] = ' ' . JText::_('JGLOBAL_FILTER_GROUPS_LABEL') . ''; + $html[] = ' '; + $html[] = ' ' + . JText::_('JGLOBAL_FILTER_TYPE_LABEL') . ''; + $html[] = ' '; + $html[] = ' ' + . JText::_('JGLOBAL_FILTER_TAGS_LABEL') . ''; + $html[] = ' '; + $html[] = ' ' + . JText::_('JGLOBAL_FILTER_ATTRIBUTES_LABEL') . ''; + $html[] = '
      '; + $html[] = ' ' . JLayoutHelper::render('joomla.html.treeprefix', array('level' => $group->level + 1)) . $group->text; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = ' '; + $html[] = '
      '; + + // Add notes + $html[] = '
      '; + $html[] = '

      ' . JText::_('JGLOBAL_FILTER_TYPE_DESC') . '

      '; + $html[] = '

      ' . JText::_('JGLOBAL_FILTER_TAGS_DESC') . '

      '; + $html[] = '

      ' . JText::_('JGLOBAL_FILTER_ATTRIBUTES_DESC') . '

      '; + $html[] = '
      '; + + return implode("\n", $html); + } + + /** + * A helper to get the list of user groups. + * + * @return array + * + * @since 1.6 + */ + protected function getUserGroups() + { + // Get a database object. + $db = JFactory::getDbo(); + + // Get the user groups from the database. + $query = $db->getQuery(true); + $query->select('a.id AS value, a.title AS text, COUNT(DISTINCT b.id) AS level'); + $query->from('#__usergroups AS a'); + $query->join('LEFT', '#__usergroups AS b on a.lft > b.lft AND a.rgt < b.rgt'); + $query->group('a.id, a.title, a.lft'); + $query->order('a.lft ASC'); + $db->setQuery($query); + $options = $db->loadObjectList(); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/icontype.php b/build/com_proclaim-9.2.1/admin/models/fields/icontype.php new file mode 100644 index 0000000000..b08659e67b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/icontype.php @@ -0,0 +1,107 @@ +class) ? ' class="' . $this->class . '"' : ''; + $attr .= !empty($this->size) ? ' size="' . $this->size . '"' : ''; + $attr .= $this->multiple ? ' multiple' : ''; + $attr .= $this->required ? ' required aria-required="true"' : ''; + $attr .= $this->autofocus ? ' autofocus' : ''; + + // To avoid user's confusion, readonly="true" should imply disabled="true". + if ((string) $this->readonly == '1' || (string) $this->readonly == 'true' || (string) $this->disabled == '1'|| (string) $this->disabled == 'true') + { + $attr .= ' disabled="disabled"'; + } + + $options = $this->getOptions(); + + $convert = [ + 'fa fa-play' => 'fas fa-play', + 'fa fa-youtube' => 'fab fa-youtube', + 'fa fa-video-camera' => 'fas fa-video', + 'fa fa fa-television' => 'fas fa-tv', + 'fa fa-file' => 'fas fa-file', + 'fa fa-file-pdf' => 'fas fa-file-pdf', + 'fa fa-vimeo' => 'fab fa-vimeo' + ]; + + if (isset($convert[$this->value])) + { + $this->value = $convert[$this->value]; + } + + // Initialize JavaScript field attributes. + $attr .= $this->onchange ? ' onchange="' . $this->onchange . '"' : ''; + $html[] = JHtml::_('select.genericlist', $options, $this->name, trim($attr), 'value', 'text', $this->value, + $this->id + ); + + return implode($html); + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + * + * @since 7.0 + */ + protected function getOptions() + { + $MediaHelper = new JBSMMedia; + $icontypes = $MediaHelper->getIcons(); + + $options = array(); + + foreach ($icontypes as $key => $message) + { + $key = JText::_($key); + $options[] = JHtml::_('select.option', $message, $key); + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/linkoptions.php b/build/com_proclaim-9.2.1/admin/models/fields/linkoptions.php new file mode 100644 index 0000000000..4fffcc77b2 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/linkoptions.php @@ -0,0 +1,57 @@ +load('com_biblestudy', BIBLESTUDY_PATH_ADMIN, 'en-GB', true); + $language->load('com_biblestudy', BIBLESTUDY_PATH_ADMIN, null, true); + + // Return an empty string; nothing to display + return ''; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/locationlist.php b/build/com_proclaim-9.2.1/admin/models/fields/locationlist.php new file mode 100644 index 0000000000..090cfa6300 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/locationlist.php @@ -0,0 +1,43 @@ +getQuery(true); + $query->select('id,location_text'); + $query->from('#__bsms_locations'); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + + $options = array(); + + if ($messages) + { + foreach ($messages as $message) + { + $options[] = JHtml::_('select.option', $message->id, $message->location_text); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/locationslist.php b/build/com_proclaim-9.2.1/admin/models/fields/locationslist.php new file mode 100644 index 0000000000..07bff03a66 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/locationslist.php @@ -0,0 +1,60 @@ +getQuery(true); + $query->select('id,location_text'); + $query->from('#__bsms_locations'); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + + $options = array(); + + if ($messages) + { + foreach ($messages as $message) + { + $options[] = JHtml::_('select.option', $message->id, $message->location_text); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/mediafile.php b/build/com_proclaim-9.2.1/admin/models/fields/mediafile.php new file mode 100644 index 0000000000..adb58577b3 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/mediafile.php @@ -0,0 +1,77 @@ +form->getValue('id')) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('a.id, a.params'); + $query->from('#__bsms_mediafiles as a'); + $query->where('study_id = ' . $this->form->getValue('id')); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + } + else + { + $messages = null; + } + + $options = array(); + + if ($messages) + { + foreach ($messages as $message) + { + $reg = new Registry; + $reg->loadString($message->params); + $message->params = $reg; + $options[] = JHtml::_('select.option', $message->id, $message->params->get('filename') ? $message->id . ' - ' . + $message->params->get('mimetext') : $message->params->get('filename') + ); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/mediafileimages.php b/build/com_proclaim-9.2.1/admin/models/fields/mediafileimages.php new file mode 100644 index 0000000000..fd9075081f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/mediafileimages.php @@ -0,0 +1,213 @@ +getQuery(true); + $query->select('*'); + $query->from('#__bsms_mediafiles'); + $db->setQuery((string) $query); + $mediafiles = $db->loadObjectList(); + $options = array(); + + if ($mediafiles) + { + foreach ($mediafiles as $media) + { + $reg = new Registry; + $reg->loadString($media->params); + $media->params = $reg; + + if ($media->params->get('media_use_button_icon') >= 1) + { + switch ($media->params->get('media_use_button_icon')) + { + case 1: + $button = $this->getButton($media); + $media->media_image = JText::_('JBS_MED_BUTTON') . ': ' . $button . ' - ' . JText::_('JBS_MED_TEXT') . + ': ' . $media->params->get('media_button_text'); + $options[] = JHtml::_('select.option', '{"media_use_button_icon":"' . $media->params->get('media_use_button_icon') . + '","media_button_type":"' . $media->params->get('media_button_type') . '","media_button_text":"' . + $media->params->get('media_button_text') . '","media_icon_type":"' . $media->params->get('media_icon_type') . + '","media_icon_text_size":"' . $media->params->get('media_icon_text_size') . '","media_image":""}', $media->media_image + ); + break; + case 2: + $button = $this->getButton($media); + $icon = $this->getIcon($media); + $media->media_image = JText::_('JBS_MED_BUTTON') . ': ' . $button . ' - ' . JText::_('JBS_MED_ICON') . ': ' . $icon; + $options[] = JHtml::_('select.option', '{"media_use_button_icon":"' . $media->params->get('media_use_button_icon') . + '","media_button_type":"' . $media->params->get('media_button_type') . '","media_button_text":"' . + $media->params->get('media_button_text') . '","media_icon_type":"' . $media->params->get('media_icon_type') . + '","media_icon_text_size":"' . $media->params->get('media_icon_text_size') . '","media_image":""}', $media->media_image + ); + break; + case 3: + $icon = $this->getIcon($media); + $media->media_image = JText::_('JBS_MED_ICON') . ': ' . $icon; + $options[] = JHtml::_('select.option', '{"media_use_button_icon":"' . $media->params->get('media_use_button_icon') . + '","media_button_type":"' . $media->params->get('media_button_type') . '","media_button_text":"' . + $media->params->get('media_button_text') . '","media_icon_type":"' . $media->params->get('media_icon_type') . + '","media_icon_text_size":"' . $media->params->get('media_icon_text_size') . '","media_image":""}', $media->media_image + ); + break; + } + } + else + { + $image = $media->params->get('media_image'); + $totalcount = strlen($image); + $slash = strrpos($image, '/'); + $imagecount = $totalcount - $slash; + $media->media_image = JText::_('JBS_MED_IMAGE') . ': ' . substr($image, $slash + 1, $imagecount); + $options[] = JHtml::_('select.option', '{"media_use_button_icon":"' . $media->params->get('media_use_button_icon') . + '","media_button_type":"' . $media->params->get('media_button_type') . '","media_button_text":"' . + $media->params->get('media_button_text') . '","media_icon_type":"' . $media->params->get('media_icon_type') . + '","media_icon_text_size":"' . $media->params->get('media_icon_text_size') . '","media_image":"' . + $media->params->get('media_image') . '"}', $media->media_image + ); + } + } + } + + $tmp = array(); + + foreach ($options as $k => $v) + { + $tmp[$k] = $v->text; + } + + // Determine the total records for each image/button/incon + $count = array_count_values($tmp); + + $tmp = array_unique($tmp); + + // Remove the duplicates from original array + foreach ($options as $k => $v) + { + if (!array_key_exists($k, $tmp)) + { + unset($options[$k]); + } + } + + // Add the number of records from $count to the text of the drop down + foreach ($options as $k => $v) + { + foreach ($count as $key => $value) + { + if ($key == $v->text) + { + $options[$k]->text = $v->text . ' (' . $value . ')'; + } + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } + + /** + * Get Button + * + * @param Object $media Media table. + * + * @return string + * + * @since 7.0 + */ + public function getButton ($media) + { + $button = null; + + switch ($media->params->get('media_button_type')) + { + case 'btn-link': + $button = JText::_('JBS_MED_NO_COLOR'); + break; + case 'btn-primary': + $button = JText::_('JBS_MED_PRIMARY'); + break; + case 'btn-success': + $button = JText::_('JBS_MED_SUCCESS'); + break; + case 'btn-info': + $button = JText::_('JBS_MED_INFO'); + break; + case 'btn-warning': + $button = JText::_('JBS_MED_WARNING'); + break; + case 'btn-danger': + $button = JText::_('JBS_MED_DANGER'); + break; + } + + if ($media->params->get('media_button_color')) + { + $button = $media->params->get('media_button_color'); + } + + return $button; + } + + /** + * Get Icon + * + * @param Object $media Media Table + * + * @return string + * + * @since 7.0 + */ + public function getIcon ($media) + { + $MediaHelper = new JBSMMedia; + $mimetypes = $MediaHelper->getIcons(); + + if ($media->params->get('media_icon_type') !== '1') + { + return JText::_($mimetypes[$media->params->get('media_icon_type')]); + } + + return $media->params->get('media_custom_icon'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/messagetypelist.php b/build/com_proclaim-9.2.1/admin/models/fields/messagetypelist.php new file mode 100644 index 0000000000..0c30031389 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/messagetypelist.php @@ -0,0 +1,64 @@ +getQuery(true); + $query->select('id,message_type'); + $query->from('#__bsms_message_type'); + $query->where('published = 1'); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + $options = array(); + + if ($messages) + { + foreach ($messages as $message) + { + $options[] = JHtml::_('select.option', $message->id, $message->message_type); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/mimetype.php b/build/com_proclaim-9.2.1/admin/models/fields/mimetype.php new file mode 100644 index 0000000000..82e0ca6107 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/mimetype.php @@ -0,0 +1,55 @@ +getMimetypes(); + + $options = array(); + + foreach ($mimetypes as $key => $message) + { + $options[] = JHtml::_('select.option', $message, $key); + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/modal/seriesdetail.php b/build/com_proclaim-9.2.1/admin/models/fields/modal/seriesdetail.php new file mode 100644 index 0000000000..61bbb55b78 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/modal/seriesdetail.php @@ -0,0 +1,118 @@ +id . '(id, name, object) {'; + $script[] = ' document.id("' . $this->id . '_id").value = id;'; + $script[] = ' document.id("' . $this->id . '_name").value = name;'; + $script[] = ' SqueezeBox.close();'; + $script[] = ' }'; + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Build the script. + $script = array(); + $script[] = ' window.addEvent("domready", function() {'; + $script[] = ' var div = new Element("div").setStyle("display", "none").injectBefore(document.id("menu-types"));'; + $script[] = ' document.id("menu-types").injectInside(div);'; + $script[] = ' SqueezeBox.initialize();'; + $script[] = ' SqueezeBox.assign($$("input.modal"), {parse:"rel"});'; + $script[] = ' });'; + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Get the title of the linked chart + $db = JFactory::getDbo(); + $db->setQuery( + 'SELECT series_text AS name' . + ' FROM #__bsms_series' . + ' WHERE id = ' . (int) $this->value + ); + $title = $db->loadResult(); + + if ($error = $db->getErrorMsg()) + { + JError::raiseWarning(500, $error); + } + + if (empty($title)) + { + $title = JText::_('JBS_CMN_SELECT_SERIES'); + } + + $link = 'index.php?option=com_biblestudy&view=series&layout=modal&tmpl=component&function=jSelectChart_' . $this->id; + + JHtml::_('behavior.modal', 'a.modal'); + $html = "\n" . '
      '; + $html .= '' . "\n"; + + // The active study id field. + if (0 == (int) $this->value) + { + $value = ''; + } + else + { + $value = (int) $this->value; + } + + // Class='required' for client side validation + $class = ''; + + if ($this->required) + { + $class = ' class="required modal-value"'; + } + + $html .= ''; + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/modal/study.php b/build/com_proclaim-9.2.1/admin/models/fields/modal/study.php new file mode 100644 index 0000000000..27f4265140 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/modal/study.php @@ -0,0 +1,122 @@ +input->get('view'); + + // Build the script. + $script = array(); + $script[] = ' function jSelectStudy_' . $this->id . '(id, title, book, teacher, series, type, year, topic, state, object) {'; + $script[] = ' document.id("' . $this->id . '_id").value = id;'; + $script[] = ' document.id("' . $this->id . '_name").value = title;'; + $script[] = ' SqueezeBox.close();'; + $script[] = ' }'; + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Setup variables for display. + $html = array(); + + if ($view == 'mediafileform') + { + $sview = 'messagelist'; + } + else + { + $sview = 'messages'; + } + + $link = 'index.php?option=com_biblestudy&view=' . $sview . '&layout=modal&tmpl=component&function=jSelectStudy_' . $this->id; + + $db = JFactory::getDbo(); + $db->setQuery( + 'SELECT studytitle AS title' . + ' FROM #__bsms_studies' . + ' WHERE id = ' . (int) $this->value + ); + $title = $db->loadResult(); + + if ($error = $db->getErrorMsg()) + { + JError::raiseWarning(500, $error); + } + + if (empty($title)) + { + $title = JText::_('JBS_CMN_STUDY_SELECT'); + } + + $title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); + + // The current user display field. + $html[] = '
      '; + $html[] = ' '; + + // The user select button. + $html[] = ' '; + $html[] = '
      '; + + // The active article id field. + if (0 == (int) $this->value) + { + $value = ''; + } + else + { + $value = (int) $this->value; + } + + // Class='required' for client side validation + $class = ''; + + if ($this->required) + { + $class = ' class="required modal-value"'; + } + + $html[] = ''; + + return implode("\n", $html); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/modal/studydetails.php b/build/com_proclaim-9.2.1/admin/models/fields/modal/studydetails.php new file mode 100644 index 0000000000..544b220d11 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/modal/studydetails.php @@ -0,0 +1,119 @@ +id . '(id, name, object) {'; + $script[] = ' document.id("' . $this->id . '_id").value = id;'; + $script[] = ' document.id("' . $this->id . '_name").value = name;'; + $script[] = ' SqueezeBox.close();'; + $script[] = ' }'; + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Build the script. + $script = array(); + $script[] = ' window.addEvent("domready", function() {'; + $script[] = ' var div = new Element("div").setStyle("display", "none").injectBefore(document.id("menu-types"));'; + $script[] = ' document.id("menu-types").injectInside(div);'; + $script[] = ' SqueezeBox.initialize();'; + $script[] = ' SqueezeBox.assign($$("input.modal"), {parse:"rel"});'; + $script[] = ' });'; + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Get the title of the linked chart + $db = JFactory::getDbo(); + $db->setQuery( + 'SELECT studytitle AS name' . + ' FROM #__bsms_studies' . + ' WHERE id = ' . (int) $this->value + ); + $title = $db->loadResult(); + + if ($error = $db->getErrorMsg()) + { + JError::raiseWarning(500, $error); + } + + if (empty($title)) + { + $title = JText::_('JBS_CMN_SELECT_STUDY'); + } + + $link = 'index.php?option=com_biblestudy&view=messages&layout=modal&tmpl=component&function=jSelectChart_' . $this->id; + + JHtml::_('behavior.modal', 'a.modal'); + $html = "\n" . '
      '; + $html .= '' . "\n"; + + // The active study id field. + if (0 == (int) $this->value) + { + $value = ''; + } + else + { + $value = (int) $this->value; + } + + // Class='required' for client side validation + $class = ''; + + if ($this->required) + { + $class = ' class="required modal-value"'; + } + + $html .= ''; + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/modal/teacherdisplay.php b/build/com_proclaim-9.2.1/admin/models/fields/modal/teacherdisplay.php new file mode 100644 index 0000000000..3bc1a44d31 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/modal/teacherdisplay.php @@ -0,0 +1,119 @@ +id . '(id, name, object) {'; + $script[] = ' document.id("' . $this->id . '_id").value = id;'; + $script[] = ' document.id("' . $this->id . '_name").value = name;'; + $script[] = ' SqueezeBox.close();'; + $script[] = ' }'; + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Build the script. + $script = array(); + $script[] = ' window.addEvent("domready", function() {'; + $script[] = ' var div = new Element("div").setStyle("display", "none").injectBefore(document.id("menu-types"));'; + $script[] = ' document.id("menu-types").injectInside(div);'; + $script[] = ' SqueezeBox.initialize();'; + $script[] = ' SqueezeBox.assign($$("input.modal"), {parse:"rel"});'; + $script[] = ' });'; + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Get the title of the linked chart + $db = JFactory::getDbo(); + $db->setQuery( + 'SELECT teachername AS name' . + ' FROM #__bsms_teachers' . + ' WHERE id = ' . (int) $this->value + ); + $title = $db->loadResult(); + + if ($error = $db->getErrorMsg()) + { + JError::raiseWarning(500, $error); + } + + if (empty($title)) + { + $title = JText::_('JBS_CMN_SELECT_TEACHER'); + } + + $link = 'index.php?option=com_biblestudy&view=teachers&layout=modal&tmpl=component&function=jSelectChart_' . $this->id; + + JHtml::_('behavior.modal', 'a.modal'); + $html = "\n" . '
      '; + $html .= '' . "\n"; + + // The active study id field. + if (0 == (int) $this->value) + { + $value = ''; + } + else + { + $value = (int) $this->value; + } + + // Class='required' for client side validation + $class = ''; + + if ($this->required) + { + $class = ' class="required modal-value"'; + } + + $html .= ''; + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/modal/templates.php b/build/com_proclaim-9.2.1/admin/models/fields/modal/templates.php new file mode 100644 index 0000000000..6b428b926e --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/modal/templates.php @@ -0,0 +1,63 @@ +getQuery(true); + $query->select('id,teachername'); + $query->from('#__bsms_teachers'); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + $options = array(); + + if ($messages) + { + foreach ($messages as $message) + { + $options[] = JHtml::_('select.option', $message->id, $message->teachername); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/modal/upload.php b/build/com_proclaim-9.2.1/admin/models/fields/modal/upload.php new file mode 100644 index 0000000000..7266114ec0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/modal/upload.php @@ -0,0 +1,81 @@ + + + + + + + Plupload - Queue widget example + + + + + + + + + + + + + + + +
      +
      +

      Your browser doesn't have Flash, Silverlight or HTML5 support.

      +
      + +
      + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/fields/rowoptions.php b/build/com_proclaim-9.2.1/admin/models/fields/rowoptions.php new file mode 100644 index 0000000000..9e4f916c16 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/rowoptions.php @@ -0,0 +1,54 @@ +getQuery(true); + $query->select('id,series_text'); + $query->from('#__bsms_series'); + $query->where('published = 1'); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + $options = array(); + + if ($messages) + { + foreach ($messages as $message) + { + $options[] = JHtml::_('select.option', $message->id, $message->series_text); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/seriesoptions.php b/build/com_proclaim-9.2.1/admin/models/fields/seriesoptions.php new file mode 100644 index 0000000000..01f467bd46 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/seriesoptions.php @@ -0,0 +1,70 @@ +element['edit'] == 'true') ? true : false; + $allowClear = ((string) $this->element['clear'] != 'false') ? true : false; + + // Build the script. + $view = JFactory::getApplication()->input->get('view'); + $size = ($v = $this->element['size']) ? ' size="' . $v . '"' : ''; + + // Get a reverse lookup of the server id to server name + $model = JModelLegacy::getInstance('servers', 'BibleStudyModel'); + $rlu = $model->getIdToNameReverseLookup(); + $server = ArrayHelper::getValue($rlu, $this->value); + + // Load the javascript + JHtml::_('behavior.framework'); + JHtml::_('behavior.modal', 'a.modal'); + JHtml::_('bootstrap.tooltip'); + + // Build the script. + $script = array(); + + if ($view == 'mediafileform') + { + $sview = 'mediafileform.setServer'; + } + else + { + $sview = 'mediafile.setServer'; + } + // Select button script + $script[] = ' jSelectServer_jform_server_id = function(server_id) { + window.parent.Joomla.submitbutton(\'' . $sview . '\', server_id); + window.parent.SqueezeBox.close(); + }'; + $script[] = ' function jSelectServer_' . $this->id . '(id, name, object) {'; + $script[] = ' document.getElementById("' . $this->id . '").value = id;'; + $script[] = ' document.getElementById("' . $this->id . '_name").value = name;'; + + if ($allowEdit) + { + $script[] = ' jQuery("#' . $this->id . '_edit").removeClass("hidden");'; + } + + if ($allowClear) + { + $script[] = ' jQuery("#' . $this->id . '_clear").removeClass("hidden");'; + } + + $script[] = ' jModalClose();'; + $script[] = ' }'; + + // Clear button script + static $scriptClear; + + if ($allowClear && !$scriptClear) + { + $scriptClear = true; + + $script[] = ' function jClearServer(id) {'; + $script[] = ' document.getElementById(id).value = "";'; + $script[] = ' document.getElementById(id + "_name").value = "' + . htmlspecialchars(JText::_('JBS_SVR_SERVER_NAME', true), ENT_COMPAT, 'UTF-8') . '";'; + $script[] = ' jQuery("#"+id + "_clear").addClass("hidden");'; + $script[] = ' if (document.getElementById(id + "_edit")) {'; + $script[] = ' jQuery("#"+id + "_edit").addClass("hidden");'; + $script[] = ' }'; + $script[] = ' return false;'; + $script[] = ' }'; + } + + // Add the script to the document head. + JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); + + // Setup variables for display. + $html = array(); + + if ($view == 'mediafileform') + { + $sview = 'serverslist'; + } + else + { + $sview = 'servers'; + } + + $link = 'index.php?option=com_biblestudy&view=' . $sview . '&layout=modal&tmpl=component&function=jSelectServer_' . $this->id; + + if (isset($this->element['language'])) + { + $link .= '&forcedLanguage=' . $this->element['language']; + } + + // The active server id field. + if (0 == (int) $this->value) + { + $value = ''; + } + else + { + $value = (int) $this->value; + } + + // The current server display field. + $html[] = ''; + $html[] = ''; + $html[] = '' + . ' ' . JText::_('JSELECT') + . ''; + + // Edit Server button. + if ($allowEdit) + { + $html[] = '' + . '' . JText::_('JACTION_EDIT') + . ''; + } + + // Clear Server button + if ($allowClear) + { + $html[] = '' + . '' . JText::_('JCLEAR') + . ''; + } + + $html[] = ''; + + // Note: class='required' for client side validation. + $class = ''; + + if ($this->required) + { + $class = ' class="required modal-value"'; + } + + $html[] = ''; + + return implode("\n", $html); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/servertype.php b/build/com_proclaim-9.2.1/admin/models/fields/servertype.php new file mode 100644 index 0000000000..dfcf5f981a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/servertype.php @@ -0,0 +1,59 @@ +form->getValue('id'); + $size = ($v = $this->element['size']) ? ' size="' . $v . '"' : ''; + $class = ($v = $this->element['class']) ? ' class="' . $v . '"' : 'class="text_area"'; + + // Get a reverse lookup of the endpoint type to endpoint name + /** @var BiblestudyModelServers $model */ + $model = JModelLegacy::getInstance('servers', 'BibleStudyModel'); + $rlu_type = $model->getTypeReverseLookup(); + + $value = ArrayHelper::getValue($rlu_type, $this->value); + JHtml::_('behavior.framework'); + JHtml::_('behavior.modal'); + + $html[] = '
      '; + $html[] = ' '; + $html[] = ' ' . + JText::_('JSELECT') . ''; + $html[] = ' '; + $html[] = '
      '; + + return implode("\n", $html); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/spanoptions.php b/build/com_proclaim-9.2.1/admin/models/fields/spanoptions.php new file mode 100644 index 0000000000..365d65a7d0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/spanoptions.php @@ -0,0 +1,59 @@ +getQuery(true); + $query->select('id,teachername'); + $query->from('#__bsms_teachers'); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + $options = array(); + + if ($messages) + { + foreach ($messages as $message) + { + $options[] = JHtml::_('select.option', $message->id, $message->teachername); + } + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/templatelist.php b/build/com_proclaim-9.2.1/admin/models/fields/templatelist.php new file mode 100644 index 0000000000..52ccf07f12 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/templatelist.php @@ -0,0 +1,69 @@ +getQuery(true); + $query->select('id,title'); + $query->from('#__bsms_templates'); + $query->where('published = 1'); + $query->order('text ASC'); + $db->setQuery((string) $query); + $messages = $db->loadObjectList(); + + foreach ($messages as $message) + { + $options[] = JHtml::_('select.option', $message->id, $message->title); + } + + self::$templates = array_merge(parent::getOptions(), $options); + } + + return self::$templates; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/topics.php b/build/com_proclaim-9.2.1/admin/models/fields/topics.php new file mode 100644 index 0000000000..5e4af51d9b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/topics.php @@ -0,0 +1,45 @@ +'; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/topicslist.php b/build/com_proclaim-9.2.1/admin/models/fields/topicslist.php new file mode 100644 index 0000000000..ccfde707b0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/topicslist.php @@ -0,0 +1,88 @@ +getQuery(true); + $query->select('DISTINCT #__bsms_topics.id, #__bsms_topics.topic_text, #__bsms_topics.params as topic_params') + ->from('#__bsms_studies') + ->leftJoin('#__bsms_studytopics ON #__bsms_studies.id = #__bsms_studytopics.study_id') + ->leftJoin('#__bsms_topics ON #__bsms_topics.id = #__bsms_studytopics.topic_id') + ->where('#__bsms_topics.published = 1') + ->order('#__bsms_topics.topic_text ASC'); + $db->setQuery($query); + $topics = $db->loadObjectList(); + $options = array(); + + if ($topics) + { + foreach ($topics as $topic) + { + $text = JBSMTranslated::getTopicItemTranslated($topic); + $options[] = JHtml::_('select.option', $topic->id, $text); + } + } + + // Sort the Topics after Translation to Alphabetically + usort($options, array($this, "order_new")); + $options = array_merge(parent::getOptions(), $options); + + return $options; + } + + /** + * Order New using strcmp + * + * @param object $a Start. + * @param object $b End. + * + * @return int Used to place in new sort. + * + * @since 7.0 + */ + private function order_new($a, $b) + { + $a = (array) $a; + $b = (array) $b; + + return strcmp($a["text"], $b["text"]); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/upload.php b/build/com_proclaim-9.2.1/admin/models/fields/upload.php new file mode 100644 index 0000000000..7a6fbda208 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/upload.php @@ -0,0 +1,85 @@ +addScript(JUri::root() . 'administrator/components/com_biblestudy/addons/servers/legacy/includes/js/plupload.full.min.js'); + + $document->addScript(JUri::root() . 'administrator/components/com_biblestudy/addons/servers/legacy/includes/js/legacy.js'); + + $document->addScriptDeclaration(' + jQuery(document).ready(function() { + uploader.setOption("url", "index.php?option=com_biblestudy&task=mediafile.xhr&' . JSession::getFormToken() . '=1"); + uploader.bind("BeforeUpload", function() { + var path = jQuery("#jform_params_localFolder").val(); + var type = jQuery("#jform_serverType").val(); + uploader.setOption("multipart_params", { + handler: "' . $this->getAttribute("handler") . '", + path: path, + type: type + }); + }); + uploader.init(); + }); + '); + + $class = $this->getAttribute('class') ? (string) $this->getAttribute('class') : ''; + + $required = 'requires="' . $this->getAttribute('required') . '"'; + + $html = '
      + + +
      '; + $html .= ' + '; + + return $html; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/fields/yearlist.php b/build/com_proclaim-9.2.1/admin/models/fields/yearlist.php new file mode 100644 index 0000000000..f477d36e6b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/fields/yearlist.php @@ -0,0 +1,43 @@ + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/archive.xml b/build/com_proclaim-9.2.1/admin/models/forms/archive.xml new file mode 100644 index 0000000000..8f06e430d4 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/archive.xml @@ -0,0 +1,16 @@ + +
      +
      + + + + + + + +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/comment.xml b/build/com_proclaim-9.2.1/admin/models/forms/comment.xml new file mode 100644 index 0000000000..e62b1381af --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/comment.xml @@ -0,0 +1,48 @@ + +
      + + + + + + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_comments.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_comments.xml new file mode 100644 index 0000000000..2ca60ec7fa --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_comments.xml @@ -0,0 +1,52 @@ + +
      +
      + + + + + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_locations.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_locations.xml new file mode 100644 index 0000000000..fdca929d78 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_locations.xml @@ -0,0 +1,42 @@ + +
      +
      + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_mediafiles.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_mediafiles.xml new file mode 100644 index 0000000000..2f48b4f417 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_mediafiles.xml @@ -0,0 +1,61 @@ + +
      +
      + + + + + + + + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_messages.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_messages.xml new file mode 100644 index 0000000000..81203fdc42 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_messages.xml @@ -0,0 +1,97 @@ + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_messagetypes.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_messagetypes.xml new file mode 100644 index 0000000000..8f99b6269c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_messagetypes.xml @@ -0,0 +1,52 @@ + +
      +
      + + + + + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_podcasts.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_podcasts.xml new file mode 100644 index 0000000000..2ca60ec7fa --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_podcasts.xml @@ -0,0 +1,52 @@ + +
      +
      + + + + + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_series.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_series.xml new file mode 100644 index 0000000000..8f99b6269c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_series.xml @@ -0,0 +1,52 @@ + +
      +
      + + + + + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_servers.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_servers.xml new file mode 100644 index 0000000000..d456ade254 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_servers.xml @@ -0,0 +1,40 @@ + +
      + + + + + + + + + + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_teachers.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_teachers.xml new file mode 100644 index 0000000000..2ca60ec7fa --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_teachers.xml @@ -0,0 +1,52 @@ + +
      +
      + + + + + + + + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_templatecodes.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_templatecodes.xml new file mode 100644 index 0000000000..235409e646 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_templatecodes.xml @@ -0,0 +1,33 @@ + +
      +
      + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_templates.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_templates.xml new file mode 100644 index 0000000000..235409e646 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_templates.xml @@ -0,0 +1,33 @@ + +
      +
      + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/filter_topics.xml b/build/com_proclaim-9.2.1/admin/models/forms/filter_topics.xml new file mode 100644 index 0000000000..235409e646 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/filter_topics.xml @@ -0,0 +1,33 @@ + +
      +
      + + + + + + +
      + + + +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/location.xml b/build/com_proclaim-9.2.1/admin/models/forms/location.xml new file mode 100644 index 0000000000..7cefafd01c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/location.xml @@ -0,0 +1,43 @@ + +
      + + + + + + + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/mediafile.xml b/build/com_proclaim-9.2.1/admin/models/forms/mediafile.xml new file mode 100644 index 0000000000..6377a57057 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/mediafile.xml @@ -0,0 +1,51 @@ + +
      + + + + + + + + + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/message.xml b/build/com_proclaim-9.2.1/admin/models/forms/message.xml new file mode 100644 index 0000000000..292103656c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/message.xml @@ -0,0 +1,191 @@ + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/messagetype.xml b/build/com_proclaim-9.2.1/admin/models/forms/messagetype.xml new file mode 100644 index 0000000000..7d3e863bf4 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/messagetype.xml @@ -0,0 +1,44 @@ + +
      + + + + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/podcast.xml b/build/com_proclaim-9.2.1/admin/models/forms/podcast.xml new file mode 100644 index 0000000000..40c2a32e10 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/podcast.xml @@ -0,0 +1,112 @@ + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/serie.xml b/build/com_proclaim-9.2.1/admin/models/forms/serie.xml new file mode 100644 index 0000000000..5725a4a24d --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/serie.xml @@ -0,0 +1,69 @@ + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/server.xml b/build/com_proclaim-9.2.1/admin/models/forms/server.xml new file mode 100644 index 0000000000..6ccf39728f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/server.xml @@ -0,0 +1,39 @@ + +
      + + + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/teacher.xml b/build/com_proclaim-9.2.1/admin/models/forms/teacher.xml new file mode 100644 index 0000000000..a0247abe92 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/teacher.xml @@ -0,0 +1,95 @@ + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/models/forms/template.xml b/build/com_proclaim-9.2.1/admin/models/forms/template.xml new file mode 100644 index 0000000000..9bfa02ba6b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/template.xml @@ -0,0 +1,1817 @@ + +
      +
      + + + + + + + + + + +
      + +
      + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/templatecode.xml b/build/com_proclaim-9.2.1/admin/models/forms/templatecode.xml new file mode 100644 index 0000000000..383e8d637f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/templatecode.xml @@ -0,0 +1,48 @@ + +
      + + + + + + + + + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/topic.xml b/build/com_proclaim-9.2.1/admin/models/forms/topic.xml new file mode 100644 index 0000000000..3ae60e6c54 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/topic.xml @@ -0,0 +1,15 @@ + +
      + + + + + + + + + + + + + diff --git a/build/com_proclaim-9.2.1/admin/models/forms/upload.xml b/build/com_proclaim-9.2.1/admin/models/forms/upload.xml new file mode 100644 index 0000000000..5c8eb160f0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/forms/upload.xml @@ -0,0 +1,11 @@ + +
      +
      + + + +
      +
      diff --git a/build/com_proclaim-9.2.1/admin/models/install.php b/build/com_proclaim-9.2.1/admin/models/install.php new file mode 100644 index 0000000000..cf670dc438 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/install.php @@ -0,0 +1,1555 @@ +name = 'install'; + } + + /** + * Start Looking though the Versions + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + public function startScanning() + { + $this->resetStack(); + $this->resetTimer(); + $this->getSteps(); + $this->postinstallclenup(); + + if (empty($this->versionStack)) + { + $this->versionStack = array(); + } + + asort($this->versionStack); + + $this->saveStack(); + + if (!$this->haveEnoughTime()) + { + return true; + } + + return $this->run(false); + } + + /** + * Starts or resets the internal timer + * + * @return void + * + * @since 7.1 + */ + private function resetTimer() + { + $this->startTime = $this->microtime_float(); + } + + /** + * Returns the current timestamps in decimal seconds + * + * @return string + * + * @since 7.1 + */ + private function microtime_float() + { + list($usec, $sec) = explode(" ", microtime()); + + return ((float) $usec + (float) $sec); + } + + /** + * Get migrate versions of DB after import/copy has finished. + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + private function getSteps() + { + $olderversiontype = 0; + $app = JFactory::getApplication(); + + // Set Finishing Steps + $this->finish = array('updateversion', 'fixassets', 'fixmenus', 'fixemptyaccess', 'fixemptylanguage', + 'rmoldurl', 'setupdateurl', 'finish'); + $this->totalSteps += count($this->finish); + + /** + * First we check to see if there is a current version database installed. This will have a #__bsms_version + * table so we check for it's existence. + * Check to be sure a really early version is not installed $versiontype: 1 = current version type 2 = older version type 3 = no version + */ + + $tables = $this->_db->getTableList(); + $prefix = $this->_db->getPrefix(); + $versiontype = 0; + $currentversion = false; + $oldversion = false; + + // Check to see if version is newer then 7.0.2 + foreach ($tables as $table) + { + $studies = $prefix . 'bsms_update'; + $currentversionexists = substr_count($table, $studies); + + if ($currentversionexists > 0) + { + $currentversion = true; + $versiontype = 1; + } + } + + if ($versiontype !== 1) + { + foreach ($tables as $table) + { + $studies = $prefix . 'bsms_version'; + $currentversionexists = substr_count($table, $studies); + + if ($currentversionexists > 0) + { + $currentversion = true; + $versiontype = 2; + } + } + } + + // Only move forward if a current version type is not found + if (!$currentversion) + { + // Now let's check to see if there is an older database type (prior to 6.2) + $oldversion = false; + + foreach ($tables as $table) + { + $studies = $prefix . 'bsms_schemaVersion'; + $oldversionexists = substr_count($table, $studies); + + if ($oldversionexists > 0) + { + $oldversion = true; + $olderversiontype = 1; + $versiontype = 3; + } + } + + if (!$oldversion) + { + foreach ($tables as $table) + { + $studies = $prefix . 'bsms_schemaversion'; + $olderversionexists = substr_count($table, $studies); + + if ($olderversionexists > 0) + { + $oldversion = true; + $olderversiontype = 2; + $versiontype = 3; + } + } + } + } + + // Finally if both current version and old version are false, we double check to make sure there are no JBS tables in the database. + if (!$currentversion && !$oldversion) + { + foreach ($tables as $table) + { + $studies = $prefix . 'bsms_studies'; + $jbsexists = substr_count($table, $studies); + + if (!$jbsexists) + { + $versiontype = 5; + } + + if ($jbsexists > 0) + { + $versiontype = 4; + } + } + } + + $this->callstack['versionttype'] = $versiontype; + + // Now we run a switch case on the VersionType and run an install routine accordingly + switch ($versiontype) + { + case 1: + $this->correctVersions(); + + // Find Last updated Version in Update table + $query = $this->_db->getQuery(true); + $query->select('version') + ->from('#__bsms_update') + ->order($this->_db->qn('id') . ' DESC'); + $this->_db->setQuery($query, 0, 1); + $updates = $this->_db->loadObject(); + $version = $updates->version; + $this->versionSwitch = $version; + + $this->callstack['subversiontype_version'] = $version; + break; + case 2: + // This is a current database version so we check to see which version. We query to get the highest build in the version table + $query = $this->_db->getQuery(true); + $query->select('*') + ->from('#__bsms_version') + ->order('build desc'); + $this->_db->setQuery($query); + $this->_db->execute(); + $version = $this->_db->loadObject(); + + $this->versionSwitch = implode('.', preg_split('//', $version->build, -1, PREG_SPLIT_NO_EMPTY)); + + $this->callstack['subversiontype_version'] = $version->build; + break; + + case 3: + $query = $this->_db->getQuery(true); + + // This is an older version of the software so we check it's version + if ($olderversiontype == 1) + { + $query->select('schemaVersion')->from('#__bsms_schemaVersion'); + } + else + { + $query->select('schemaVersion')->from('#__bsms_schemaversion'); + } + + $this->_db->setQuery($query); + $schema = $this->_db->loadResult(); + + $this->versionSwitch = implode('.', preg_split('//', $schema, -1, PREG_SPLIT_NO_EMPTY)); + + $this->callstack['subversiontype_version'] = $schema; + break; + + case 4: + $this->callstack['subversiontype_version'] = JText::_('JBS_IBM_VERSION_TOO_OLD'); + + // There is a version installed, but it is older than 6.0.8 and we can't upgrade it + $this->setState('scanerror', JText::_('JBS_IBM_VERSION_TOO_OLD')); + + return false; + break; + } + + if ($this->callstack['subversiontype_version'] > 000) + { + // Start of Building the All state build. + jimport('joomla.filesystem.folder'); + jimport('joomla.filesystem.file'); + + $files = str_replace('.sql', '', JFolder::files(JPATH_ADMINISTRATOR . $this->filePath, '\.sql$')); + $php = str_replace('.php', '', JFolder::files(JPATH_ADMINISTRATOR . $this->phpPath, '\.php$')); + usort($files, 'version_compare'); + usort($php, 'version_compare'); + + // Find Extension ID of component + $query = $this->_db->getQuery(true); + $query + ->select('extension_id') + ->from('#__extensions') + ->where($this->_db->qn('name') . ' = ' . $this->_db->q('com_biblestudy')); + $this->_db->setQuery($query); + $eid = $this->_db->loadResult(); + $this->biblestudyEid = $eid; + + foreach ($files as $i => $value) + { + $update = $this->versionSwitch; + + if ($update && $eid) + { + // Set new Schema Version + $this->setSchemaVersion($update, $eid); + } + else + { + $value = '7.0.0'; + } + + if (version_compare($value, $update) <= 0) + { + unset($files[$i]); + } + elseif ($files) + { + $this->totalSteps += count($files); + $this->versionStack = $files; + } + else + { + $app->enqueueMessage(JText::_('JBS_INS_NO_UPDATE_SQL_FILES'), 'warning'); + + return false; + } + } + + foreach ($php as $i => $value) + { + if (version_compare($value, $this->versionSwitch) <= 0) + { + unset($php[$i]); + } + elseif ($php) + { + $this->totalSteps += count($files); + $this->subFiles = $php; + } + } + } + + $this->isimport = JFactory::getApplication()->input->getInt('jbsmalt', 0); + ++$this->totalSteps; + + return true; + } + + /** + * Correct problem in are update table under 7.0.2 systems + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + private function correctVersions() + { + // Find Last updated Version in Update table + $query = $this->_db->getQuery(true); + $query->select('*') + ->from('#__bsms_update'); + $this->_db->setQuery($query); + $updates = $this->_db->loadObjectList(); + + foreach ($updates AS $value) + { + // Check to see if Bad version is in key 3 + + if (($value->id === '3') && ($value->version !== '7.0.1.1')) + { + // Find Last updated Version in Update table + $query = "INSERT INTO `#__bsms_update` (id,version) VALUES (3,'7.0.1.1') + ON DUPLICATE KEY UPDATE version= '7.0.1.1';"; + $this->_db->setQuery($query); + + if (!$this->_db->execute()) + { + JFactory::getApplication()->enqueueMessage(JText::_('JBS_CMN_OPERATION_FAILED'), 'error'); + + return false; + } + } + } + + return true; + } + + /** + * Set the schema version for an extension by looking at its latest update + * + * @param string $version Version number + * @param integer $eid Extension ID + * + * @return boolean + * + * @throws Exception + * @since 7.1.0 + */ + private function setSchemaVersion($version, $eid) + { + $app = JFactory::getApplication(); + + if ($version && $eid) + { + // Update the database + $query = $this->_db->getQuery(true); + $query + ->delete() + ->from('#__schemas') + ->where('extension_id = ' . $eid); + $this->_db->setQuery($query); + + if ($this->_db->execute()) + { + $query->clear(); + $query->insert($this->_db->quoteName('#__schemas')); + $query->columns(array($this->_db->quoteName('extension_id'), $this->_db->quoteName('version_id'))); + $query->values($eid . ', ' . $this->_db->quote($version)); + $this->_db->setQuery($query); + + if (!$this->_db->execute()) + { + $app->enqueueMessage('Error instering ID', 'Error'); + + return false; + } + + return true; + } + + $app->enqueueMessage('Could not locate extension id in schemas table'); + + return false; + } + + return false; + } + + /** + * Run the Migration will there is time. + * + * @param bool $resetTimer If the time must be reset + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + public function run($resetTimer = true) + { + if ($resetTimer) + { + $this->resetTimer(); + } + + $this->loadStack(); + $result = true; + + while ($result && $this->haveEnoughTime()) + { + $result = $this->RealRun(); + } + + $this->saveStack(); + + return $result; + } + + /** + * Saves the Versions/SQL/After stack in the session + * + * @return void + * + * @since 7.1 + */ + private function saveStack() + { + $stack = array( + 'aversion' => $this->version, + 'version' => $this->versionStack, + 'switch' => $this->versionSwitch, + 'allupdates' => $this->allupdates, + 'finish' => $this->finish, + 'start' => $this->start, + 'subFiles' => $this->subFiles, + 'subQuery' => $this->subQuery, + 'subSteps' => $this->subSteps, + 'isimport' => $this->isimport, + 'callstack' => $this->callstack, + 'total' => $this->totalSteps, + 'done' => $this->doneSteps, + 'run' => $this->running, + 'query' => $this->query, + ); + $stack = json_encode($stack); + + if (function_exists('base64_encode') && function_exists('base64_decode')) + { + if (function_exists('gzdeflate') && function_exists('gzinflate')) + { + $stack = gzdeflate($stack, 9); + } + + $stack = base64_encode($stack); + } + + $session = JFactory::getSession(); + $session->set('migration_stack', $stack, 'JBSM'); + } + + /** + * Resets the Versions/SQL/After stack saved in the session + * + * @return void + * + * @since 7.1 + */ + private function resetStack() + { + $session = JFactory::getSession(); + $session->set('migration_stack', '', 'JBSM'); + $this->version = '0.0.0'; + $this->versionStack = array(); + $this->versionSwitch = null; + $this->allupdates = array(); + $this->finish = array(); + $this->start = array(); + $this->subFiles = array(); + $this->subQuery = array(); + $this->subSteps = array(); + $this->isimport = 0; + $this->callstack = array(); + $this->totalSteps = 0; + $this->doneSteps = 0; + $this->running = JText::_('JBS_MIG_STARTING'); + $this->query = array(); + } + + /** + * Loads the Versions/SQL/After stack from the session + * + * @return boolean + * + * @since 7.1 + */ + private function loadStack() + { + $session = JFactory::getSession(); + $stack = $session->get('migration_stack', '', 'JBSM'); + + if (empty($stack)) + { + $this->version = '0.0.0'; + $this->versionStack = array(); + $this->versionSwitch = null; + $this->allupdates = array(); + $this->finish = array(); + $this->start = array(); + $this->subFiles = array(); + $this->subQuery = array(); + $this->subSteps = array(); + $this->isimport = 0; + $this->callstack = array(); + $this->totalSteps = 0; + $this->doneSteps = 0; + $this->running = JText::_('JBS_MIG_STARTING'); + $this->query = array(); + + return false; + } + + if (function_exists('base64_encode') && function_exists('base64_decode')) + { + $stack = base64_decode($stack); + + if (function_exists('gzdeflate') && function_exists('gzinflate')) + { + $stack = gzinflate($stack); + } + } + + $stack = json_decode($stack, true); + + $this->version = $stack['aversion']; + $this->versionStack = $stack['version']; + $this->versionSwitch = $stack['switch']; + $this->allupdates = $stack['allupdates']; + $this->finish = $stack['finish']; + $this->start = $stack['start']; + $this->subFiles = $stack['subFiles']; + $this->subQuery = $stack['subQuery']; + $this->subSteps = $stack['subSteps']; + $this->isimport = $stack['isimport']; + $this->callstack = $stack['callstack']; + $this->totalSteps = $stack['total']; + $this->doneSteps = $stack['done']; + $this->running = $stack['run']; + $this->query = $stack['query']; + + return true; + } + + /** + * Makes sure that no more than 5 seconds since the start of the timer have elapsed + * + * @return boolean + * + * @since 7.1 + */ + private function haveEnoughTime() + { + $now = $this->microtime_float(); + $elapsed = abs($now - $this->startTime); + + return $elapsed < 2; + } + + /** + * Start the Run through the Pre Versions then SQL files then After PHP functions. + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + private function realRun() + { + $app = JFactory::getApplication(); + $run = true; + + if (!empty($this->start)) + { + $this->running = 'Backup DB'; + $this->doneSteps++; + $export = new JBSMBackup; + $export->exportdb(2); + JLog::add('Backup DB', JLog::INFO, 'com_biblestudy'); + $this->start = array(); + } + + if ($this->isimport) + { + $this->fiximport(); + $this->running = 'Fixing Imported Params'; + $this->isimport = 0; + JLog::add('Fixing Imported Params', JLog::INFO, 'com_biblestudy'); + $this->doneSteps++; + } + + if (!empty($this->versionStack)) + { + krsort($this->versionStack); + + while (!empty($this->versionStack) && $this->haveEnoughTime()) + { + $version = array_pop($this->versionStack); + $this->running = $version; + $this->doneSteps++; + $run = $this->allUpdate($version); + + if (!$run) + { + JFactory::getApplication()->enqueueMessage('Error Updating Update version ' . (string) $version, 'error'); + JLog::add('Error Updating Update version ' . (string) $version, JLog::ERROR, 'com_biblestudy'); + } + } + } + + if ((!empty($this->allupdates) || !empty($this->subFiles)) && empty($this->versionStack)) + { + ksort($this->allupdates); + + while ((!empty($this->allupdates) || !empty($this->subFiles)) && $this->haveEnoughTime()) + { + $this->version = key($this->allupdates); + + if (isset($this->allupdates[$this->version]) && @!empty($this->allupdates[$this->version])) + { + if (strpos($this->running, $this->version)) + { + $this->totalSteps += count((array) $this->allupdates[$this->version]); + } + + // Used for Install array. + if (!is_array($this->allupdates[$this->version])) + { + $this->allupdates[$this->version] = array($this->allupdates[$this->version]); + } + + $string = array_shift($this->allupdates[$this->version]); + + $this->running = $this->version . ' String: ' . $string; + $run = $this->runUpdates($string); + $this->doneSteps++; + } + elseif (in_array($this->version, $this->subFiles) && @empty($this->allupdates[$this->version])) + { + // Check for corresponding PHP file and run migration + $migrationfile = JPATH_ADMINISTRATOR . '/components/com_biblestudy/install/updates/' . $this->version . '.php'; + + require_once $migrationfile; + $migrationClass = "Migration" . str_ireplace(".", '', $this->version); + $migration = new $migrationClass; + + if (!class_exists($migrationClass)) + { + JLog::add('Missing Class' . $migrationClass, JLog::WARNING, 'com_biblestudy'); + + return true; + } + + if (!empty($this->subSteps) && !empty($this->subFiles)) + { + while (!empty($this->subFiles) && $this->haveEnoughTime()) + { + $query = array(); + $step = $this->versionSwitch; + + if (!isset($this->subQuery[$this->version][$step]) && !empty($this->subSteps[$this->version])) + { + $step = $this->versionSwitch = array_shift($this->subSteps[$this->version]); + JLog::add('Change step : ' . $step, JLog::INFO, 'com_biblestudy'); + } + elseif (empty($this->subSteps[$this->version])) + { + JLog::add('Unset Last Step : ' . $step, JLog::INFO, 'com_biblestudy'); + + $step = $this->versionSwitch = null; + unset($this->subSteps[$this->version]); + unset($this->subQuery[$this->version]); + unset($this->allupdates[$this->version]); + + if (($key = array_search($this->version, $this->subFiles)) !== false) + { + unset($this->subFiles[$key]); + } + } + + if (isset($this->subQuery[$this->version][$step]) && !empty($this->subQuery[$this->version][$step])) + { + $query = array_shift($this->subQuery[$this->version][$step]); + $migration->query = $this->subQuery[$this->version]; + } + elseif (isset($this->subQuery[$this->version][$step]) && empty($this->subQuery[$this->version][$step])) + { + unset($this->subQuery[$this->version][$step]); + $this->versionSwitch = null; + JLog::add('Uset Sub Query if empty : ' . $step . ' ' . $this->version, JLog::INFO, 'com_biblestudy'); + } + + if (empty($step) && empty($query)) + { + unset($this->subFiles[$this->version]); + unset($this->subSteps[$this->version]); + JLog::add('Uset Version in All updates : ' . $this->version, JLog::INFO, 'com_biblestudy'); + } + else + { + $this->running = 'PHP Sub Process: ' . $this->version . ' - ' . $step; + $migration->$step(JFactory::getDbo(), $query); + + // Pull back the Query form PHP file if any. + if (isset($migration->query) && !empty($migration->query)) + { + $this->subQuery[$this->version] = $migration->query; + } + + $queryString = null; + + if (!empty($query) && is_array($query)) + { + $queryString = (string) $query['id']; + $queryString = str_replace(array("\r", "\n"), array('', ' '), substr($queryString, 0, 80)); + $queryString = ' ID:' . $queryString . ' Query count: ' . count($this->subQuery[$this->version][$step]); + } + + JLog::add('Doing Step in ' . $migrationClass . ' Step: ' . $step . $queryString, JLog::INFO, 'com_biblestudy'); + + $this->doneSteps++; + } + } + } + } + else + { + unset($this->allupdates[$this->version]); + JLog::add('Unset Version if no steps : ' . $this->version, JLog::INFO, 'com_biblestudy'); + } + + if ($run === false) + { + JBSMDbHelper::resetdb(); + $this->resetStack(); + $app->enqueueMessage(JText::_('JBS_CMN_DATABASE_NOT_MIGRATED'), 'warning'); + + return false; + } + } + } + + if (!empty($this->finish) && empty($this->versionStack) && empty($this->allupdates) && empty($this->subFiles)) + { + while (!empty($this->finish) && $this->haveEnoughTime()) + { + $finish = array_pop($this->finish); + $this->doneSteps++; + $this->running = $finish; + $this->finish($finish); + } + } + + /** We are going to walk thought the assets that need to be fixed that were found form the finish lookup. */ + if (!empty($this->query) + && empty($this->finish) + && empty($this->versionStack) + && empty($this->allupdates) + && empty($this->subFiles)) + { + krsort($this->query); + + while (!empty($this->query) && $this->haveEnoughTime()) + { + $this->versionSwitch = key($this->query); + + if (isset($this->query[$this->versionSwitch]) && @!empty($this->query[$this->versionSwitch])) + { + $version = array_pop($this->query[$this->versionSwitch]); + $this->doneSteps++; + $this->running = 'Fixing Assets that are not right'; + JBSMAssets::fixAssets($this->versionSwitch, $version); + } + else + { + unset($this->query[$this->versionSwitch]); + } + } + } + + if (empty($this->query) + && empty($this->finish) + && empty($this->versionStack) + && empty($this->allupdates) + && empty($this->subFiles)) + { + // Fix any problem with db versions after migration. + JLoader::register('BiblestudyModelAdmin', JPATH_ADMINISTRATOR . '/components/com_biblestudy/models/admin.php'); + $admin = new BiblestudyModelAdmin; + $admin->fix(); + + // Just finished + $this->resetStack(); + $this->running = JText::_('JBS_MIGFINISED'); + + return false; + } + + // If we have more Versions or SQL files, continue in the next step + return true; + } + + /** + * Uninstall of JBSM + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + public function uninstall() + { + // Check if JBSM can be found from the database + $table = $this->_db->getPrefix() . 'bsms_admin'; + $this->_db->setQuery("SHOW TABLES LIKE {$this->_db->quote($table)}"); + $drop_result = ''; + + if ($this->_db->loadResult()) + { + $query = $this->_db->getQuery(true); + $query->select('*') + ->from('#__bsms_admin') + ->where('id = 1'); + $this->_db->setQuery($query); + $adminsettings = $this->_db->loadObject(); + $drop_tables = $adminsettings->drop_tables; + + if ($drop_tables > 0) + { + // We must remove the assets manually each time + $query = $this->_db->getQuery(true); + $query->select('id') + ->from('#__assets') + ->where('name = ' . $this->_db->q(BIBLESTUDY_COMPONENT_NAME)); + $this->_db->setQuery($query); + $parent_id = $this->_db->loadResult(); + $query = $this->_db->getQuery(true); + + if ($parent_id !== '0') + { + $query->delete() + ->from('#__assets') + ->where('parent_id = ' . $this->_db->q($parent_id)) + ->where('name != ' . $this->_db->q('root.1')); + $this->_db->setQuery($query); + $this->_db->execute(); + } + + $query = $this->_db->getQuery(true); + $query->delete() + ->from('#__assets') + ->where('name LIKE ' . $this->_db->q(BIBLESTUDY_COMPONENT_NAME)) + ->where('name != ' . $this->_db->q('root.1')); + $this->_db->setQuery($query); + $this->_db->execute(); + $buffer = file_get_contents(JPATH_ADMINISTRATOR . '/components/com_biblestudy/install/sql/uninstall-dbtables.sql'); + + // Graceful exit and rollback if read not successful + if ($buffer === false) + { + die('no uninstall-dbtables.sql'); + } + + $queries = $this->_db->splitSql($buffer); + + foreach ($queries as $querie) + { + $querie = trim($querie); + + if ($querie !== '' && $querie{0} !== '#' && $querie !== '`') + { + $this->_db->setQuery($querie); + $this->_db->execute(); + } + } + } + } + else + { + $drop_result = '

      ' . JText::_('JBS_INS_NO_DATABASE_REMOVED') . '

      '; + } + + // Post Install Messages Cleanup for Component + $query = $this->_db->getQuery(true); + $query->delete('#__postinstall_messages') + ->where($this->_db->qn('language_extension') . ' = ' . $this->_db->q('com_biblestudy')); + $this->_db->setQuery($query); + $this->_db->execute(); + JFactory::getApplication()->enqueueMessage('

      ' . JText::_('JBS_INS_UNINSTALLED') . ' ' . + BIBLESTUDY_VERSION . '

      ' . $drop_result . '
      '); + + return true; + } + + /** + * Finish the system + * + * @param string $step Step to process + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + private function finish($step) + { + $app = JFactory::getApplication(); + $run = false; + + switch ($step) + { + case 'updateversion': + $update = $this->getUpdateVersion(); + + // Set new Schema Version + $run = $this->setSchemaVersion($update, $this->biblestudyEid); + $this->running = 'Update Version'; + break; + case 'fixassets': + // Final step is to fix assets by building what need to be fixed. + $assets = new JBSMAssets; + $assets->build(); + $this->query = $assets->query; + $this->totalSteps += $assets->count; + break; + case 'fixmenus': + $run = $this->fixMenus(); + $this->running = 'Fix Menus'; + break; + case 'fixemptyaccess': + $run = $this->fixemptyaccess(); + $this->running = 'Fix Empty Access'; + break; + case 'fixemptylanguage': + $run = $this->fixemptylanguage(); + $this->running = 'Fix Empty Language'; + break; + case 'rmoldurl': + // Removes all other update urls except package url. + $conditions = $this->rmoldurl(); + $query = $this->_db->getQuery(true); + $query->delete($this->_db->qn('#__update_sites')); + $query->where($conditions, $glue = 'OR'); + $this->_db->setQuery($query); + $this->_db->execute(); + $this->running = 'Remove Old Update URL\'s'; + break; + case 'setupdateurl': + // Find Extension ID of component + $query = $this->_db->getQuery(true); + $query + ->select('extension_id') + ->from('#__extensions') + ->where($this->_db->qn('name') . ' = ' . $this->_db->q('com_biblestudy')); + $this->_db->setQuery($query); + $eid = $this->_db->loadResult(); + + $conditions = array( + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim Package'), + ); + $query = $this->_db->getQuery(true); + $query->delete($this->_db->qn('#__update_sites')); + $query->where($conditions, $glue = 'OR'); + $this->_db->setQuery($query); + $this->_db->execute(); + + $conditions = array( + $this->_db->qn('extension_id') . ' = ' . + $this->_db->q($eid), + ); + $query = $this->_db->getQuery(true); + $query->delete($this->_db->qn('#__update_sites_extensions')); + $query->where($conditions, $glue = 'OR'); + $this->_db->setQuery($query); + $this->_db->execute(); + + $updateurl = new stdClass; + $updateurl->name = 'Proclaim Package'; + $updateurl->type = 'extension'; + $updateurl->location = 'https://www.joomlabiblestudy.org/index.php?option=com_ars&view=update&task=stream&id=2&format=xml'; + $updateurl->enabled = '1'; + $this->_db->insertObject('#__update_sites', $updateurl); + $lastid = $this->_db->insertid(); + $updateurl1 = new stdClass; + $updateurl1->update_site_id = $lastid; + $updateurl1->extension_id = $eid; + $this->_db->insertObject('#__update_sites_extensions', $updateurl1); + $this->running = 'Set New Update URL'; + break; + default: + $app->enqueueMessage('' . JText::_('JBS_CMN_OPERATION_SUCCESSFUL') . + JText::_('SIMPLEMODEMESSAGE_BODY') . + JText::_('JBS_IBM_REVIEW_ADMIN_TEMPLATE') + ); + break; + } + + return $run; + } + + /** + * Update messages + * + * @param object $message Install object + * + * @return void + * + * @since 7.1 + */ + public function postinstall_messages($message) + { + // Find Extension ID of component + $query = $this->_db->getQuery(true); + $query + ->select('extension_id') + ->from('#__extensions') + ->where($this->_db->qn('name') . ' = ' . $this->_db->q('com_biblestudy')); + $this->_db->setQuery($query); + $eid = $this->_db->loadResult(); + $this->biblestudyEid = $eid; + $message->extension_id = $this->biblestudyEid; + + if ($this->_db->insertObject('#__postinstall_messages', $message) !== true) + { + jexit('Bad install'); + } + } + + /** + * Returns Update Version form Table + * + * @return string Returns the Last Version in the #_bsms_update table + * + * @since 7.1 + */ + private function getUpdateVersion() + { + /* Find Last updated Version in Update table */ + $query = $this->_db->getQuery(true); + $query + ->select('version') + ->from('#__bsms_update'); + $this->_db->setQuery($query); + $updates = $this->_db->loadObjectList(); + $update = end($updates); + + return $update->version; + } + + /** + * Fix Import problem + * + * @return boolean True if fix complete, False if failure + * + * @since 7.1 + */ + private function fiximport() + { + $tables = JBSMDbHelper::getObjects(); + $set = false; + + foreach ($tables as $table) + { + if (strpos($table['name'], '_bsms_timeset') === false) + { + $query = $this->_db->getQuery(true); + $query->select('*')->from($table); + $this->_db->setQuery($query); + $data = $this->_db->loadObjectList(); + + foreach ($data as $row) + { + if (isset($row->params)) + { + $row->params = stripslashes($row->params); + $set = true; + } + + if (isset($row->metadata)) + { + $row->metadata = stripslashes($row->metadata); + $set = true; + } + + if (isset($row->stylecode)) + { + $row->stylecode = stripslashes($row->stylecode); + $set = true; + } + + if ($set) + { + $this->_db->updateObject($table['name'], $row, array('id')); + } + } + } + } + + return true; + } + + /** + * Function to update using the version number for sql files + * + * @param string $value The File name. + * + * @return boolean + * + * @throws Exception + * @since 7.1.4 + */ + private function allUpdate($value) + { + $buffer = file_get_contents(JPATH_ADMINISTRATOR . $this->filePath . '/' . $value . '.sql'); + + // Graceful exit and rollback if read not successful + if ($buffer === false) + { + JFactory::getApplication()->enqueueMessage(JText::sprintf('JLIBinstallER_ERROR_SQL_READBUFFER'), 'WARNING'); + JLog::add(JText::sprintf('JLIBinstallER_ERROR_SQL_READBUFFER'), JLog::WARNING, 'com_biblestudy'); + + return false; + } + + // Create an array of queries from the sql file + $queries = JDatabaseDriver::splitSql($buffer); + + if (count($queries) == 0) + { + return false; + } + + $this->totalSteps += count($queries); + + $this->allupdates = array_merge($this->allupdates, array($value => $queries)); + + // Build php steps now. + $migrationFile = JPATH_ADMINISTRATOR . '/components/com_biblestudy/install/updates/' . $value . '.php'; + + if (JFile::exists($migrationFile)) + { + require_once $migrationFile; + $migrationClass = "Migration" . str_ireplace(".", '', $value); + + if (class_exists($migrationClass)) + { + $migration = new $migrationClass; + + if (isset($migration->postinstall_messages)) + { + $steps = $migration->steps; + $this->totalSteps += count($steps); + + // If Steps build is mandatory. + $migration->build($this->_db); + + if (isset($migration->count)) + { + $this->totalSteps += (int) $migration->count; + } + + $this->subSteps = array_merge($this->subSteps, array($value => $steps)); + $this->subQuery = array_merge($this->subQuery, array($value => $migration->query)); + } + else + { + $this->subSteps = array_merge($this->subSteps, array($value => array('up'))); + $this->totalSteps += 1; + } + } + } + + return true; + } + + /** + * Run updates SQL + * + * @param string $string String of SQL to process. + * + * @return boolean + * + * @throws Exception + * @since 7.1 + */ + private function runUpdates($string) + { + // Process each query in the $queries array (split out of sql file). + $string = trim($string); + + if ($string !== '' && $string{0} !== '#') + { + $this->_db->setQuery($this->_db->convertUtf8mb4QueryToUtf8($string)); + $this->doneSteps++; + + try + { + $this->_db->execute(); + } + catch (RuntimeException $e) + { + JLog::add($e->getMessage(), JLog::WARNING, 'com_biblestudy'); + + return false; + } + + $queryString = (string) $string; + $queryString = str_replace(array("\r", "\n"), array('', ' '), substr($queryString, 0, 80)); + JLog::add( + JText::sprintf('JLIBINSTALLER_UPDATE_LOG_QUERY', $this->running, $queryString), + JLog::INFO, 'com_biblestudy' + ); + } + + return true; + } + + /** + * Cleanup postInstall before migration + * + * @return void + * + * @since 7.1 + */ + private function postinstallclenup() + { + // Post Install Messages Cleanup for Component + $query = $this->_db->getQuery(true); + $query->delete('#__postinstall_messages') + ->where($this->_db->qn('language_extension') . ' = ' . $this->_db->q('com_biblestudy')); + $this->_db->setQuery($query); + $this->_db->execute(); + JLog::add('PostInstallCleanup', JLog::INFO, 'com_biblestudy'); + } + + /** + * Fix Menus + * + * @return boolean + * @since 7.1.0 + * + */ + public function fixMenus() + { + $query = $this->_db->getQuery(true); + $query->select('*') + ->from('#__menu') + ->where($this->_db->qn('menutype') . ' != ' . $this->_db->q('main')) + ->where($this->_db->qn('link') . ' LIKE ' . $this->_db->q('%com_biblestudy%')); + $this->_db->setQuery($query); + $menus = $this->_db->loadObjectList(); + + foreach ($menus AS $menu) + { + $menu->link = str_replace('teacherlist', 'teachers', $menu->link); + $menu->link = str_replace('teacherdisplay', 'teacher', $menu->link); + $menu->link = str_replace('studydetails', 'sermon', $menu->link); + $menu->link = str_replace('serieslist', 'seriesdisplays', $menu->link); + $menu->link = str_replace('seriesdetail', 'seriesdisplay', $menu->link); + $menu->link = str_replace('studieslist', 'sermons', $menu->link); + $query = $this->_db->getQuery(true); + $query->update('#__menu') + ->set("link = " . $this->_db->q($menu->link)) + ->where('id = ' . $this->_db->q($menu->id)); + $this->_db->setQuery($query); + $this->_db->execute(); + } + + return true; + } + + /** + * Function to find empty language field and set them to "*" + * + * @return boolean + * @since 7.1.0 + * + */ + public function fixemptylanguage() + { + // Tables to fix + $tables = array( + array('table' => '#__bsms_comments'), + array('table' => '#__bsms_mediafiles'), + array('table' => '#__bsms_series'), + array('table' => '#__bsms_studies'), + array('table' => '#__bsms_teachers'), + ); + + // Correct blank records + foreach ($tables as $table) + { + $query = $this->_db->getQuery(true); + $query->update($table['table']) + ->set('language = ' . $this->_db->q('*')) + ->where('language = ' . $this->_db->q('')); + $this->_db->setQuery($query); + $this->_db->execute(); + } + + return true; + } + + /** + * Function to Find empty access in the db and set them to Public + * + * @return boolean + * @since 7.1.0 + * + */ + public function fixemptyaccess() + { + // Tables to fix + $tables = array( + array('table' => '#__bsms_admin'), + array('table' => '#__bsms_mediafiles'), + array('table' => '#__bsms_message_type'), + array('table' => '#__bsms_podcast'), + array('table' => '#__bsms_series'), + array('table' => '#__bsms_servers'), + array('table' => '#__bsms_studies'), + array('table' => '#__bsms_studytopics'), + array('table' => '#__bsms_teachers'), + array('table' => '#__bsms_templates'), + array('table' => '#__bsms_topics'), + ); + + // Get Public id + $id = JFactory::getConfig()->get('access', 1); + + // Correct blank or not set records + foreach ($tables as $table) + { + $query = $this->_db->getQuery(true); + $query->update($table['table']) + ->set('access = ' . $id) + ->where("access = " . $this->_db->q('0'), $glue = 'OR') + ->where("access = " . $this->_db->q(' ')); + $this->_db->setQuery($query); + $this->_db->execute(); + } + + return true; + } + + /** + * Old Update URL's + * + * @return array + * + * @since 7.1 + */ + public function rmoldurl() + { + $urls = array( + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim Module'), + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim Podcast Module'), + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim Finder Plg'), + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim Search Plg'), + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim Backup Plg'), + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim Podcast Plg'), + $this->_db->qn('name') . ' = ' . + $this->_db->q('Proclaim')); + + return $urls; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/location.php b/build/com_proclaim-9.2.1/admin/models/location.php new file mode 100644 index 0000000000..eefad3343c --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/location.php @@ -0,0 +1,133 @@ +getTable(); + $input = new JInput; + $data = $input->get('post'); + + // Bind the form fields to the table + if (!$row->bind($data)) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + // Make sure the record is valid + if (!$row->check()) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + // Store the web link table to the database + if (!$row->store()) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + return true; + } + + /** + * Get the form data + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 7.0 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_biblestudy.location', 'location', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Method to get the data that should be injected in the form. + * + * @return array The default data is an empty array. + * + * @since 7.0 + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.location.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/locations.php b/build/com_proclaim-9.2.1/admin/models/locations.php new file mode 100644 index 0000000000..993079af2f --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/locations.php @@ -0,0 +1,212 @@ +deletes)) + { + $query = 'SELECT allow_deletes' + . ' FROM #__bsms_admin' + . ' WHERE id = 1'; + $this->deletes = $this->_getList($query); + } + + return $this->deletes; + } + + /** + * Method to get a store id based on model configuration state. + * + * This is necessary because the model is used by the component and + * different modules that might need different sets of data or different + * ordering requirements. + * + * @param string $id A prefix for the store id. + * + * @return string A store id. + * + * @since 7.1.0 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.access'); + $id .= ':' . $this->getState('filter.search'); + + return parent::getStoreId($id); + } + + /** + * Method to auto-populate the model state. + * + * This method should only be called once per instantiation and is designed + * to be called on the first call to the getState() method unless the model + * configuration flag to ignore the request is set. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0 + * @throws Exception + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication('administrator'); + + // Adjust the context to support modal layouts. + $layout = $app->input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + // Load the parameters. + $params = JComponentHelper::getParams('com_biblestudy'); + $this->setState('params', $params); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + parent::populateState('location.id', 'desc'); + } + + /** + * Get List Query + * + * @return JDatabaseQuery A JDatabaseQuery object to retrieve the data set. + * + * @since 12.2 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + $query->select( + $this->getState( + 'list.select', 'location.id, location.published, location.access, location.location_text') + ); + $query->from('`#__bsms_locations` AS location'); + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = location.access'); + + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('location.access = ' . (int) $access); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('location.access IN (' . $groups . ')'); + } + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('location.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('location.location_text LIKE ' . $search); + } + } + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('location.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(location.published = 0 OR location.published = 1)'); + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'location.id'); + $orderDirn = $this->state->get('list.direction', 'desc'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/mediafile.php b/build/com_proclaim-9.2.1/admin/models/mediafile.php new file mode 100644 index 0000000000..47c06a3b31 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/mediafile.php @@ -0,0 +1,841 @@ +getTable(); + + if (!$row->load($this->_id)) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + if (!$row->move($direction, ' study_id = ' . (int) $row->study_id . ' AND published >= 0 ')) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + return true; + } + + /** + * Returns a Table object, always creating it. + * + * @param string $type The table type to instantiate + * @param string $prefix A prefix for the table class name. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return TableMediafile A database object + * + * @since 7.0.0 + */ + public function getTable($type = 'Mediafile', $prefix = 'Table', $config = array()) + { + /** @var TableMediafile $table */ + $table = JTable::getInstance($type, $prefix, $config); + + return $table; + } + + /** + * Overrides the JModelAdmin save routine in order to implode the podcast_id + * + * @param array $data The form data. + * + * @return boolean True on successfully save + * + * @since 7.0 + */ + public function save($data) + { + if ($data) + { + // Implode only if they selected at least one podcast. Otherwise just clear the podcast_id field + $data['podcast_id'] = empty($data['podcast_id']) ? '' : implode(",", $data['podcast_id']); + + $params = new Registry; + $params->loadArray($data['params']); + + if (isset($params->toObject()->size) && $params->get('size', '0') == '0') + { + $jdb = JFactory::getDbo(); + $table = new TableServer($jdb); + $table->load($data['server_id']); + + $path = new Registry; + $path->loadString($table->params); + $set_path = ''; + + if ($path->get('path')) + { + $set_path = $path->get('path') . '/'; + } + + if (!$path->get('protocal') && $set_path) + { + $path->set('protocal', 'http://'); + } + else + { + $path->set('protocal', rtrim(JUri::root(), '/')); + } + + if ($table->type == 'legacy' || $table->type == 'local') + { + $params->set('size', JBSMHelper::getRemoteFileSize(JBSMHelper::MediaBuildUrl($set_path, $params->get('filename'), $params, true, true))); + $data['params'] = $params->toArray(); + } + } + + if (parent::save($data)) + { + return true; + } + } + + return false; + } + + /** + * Get the media form + * + * @return boolean|mixed + * + * @throws Exception + * + * @since 9.0.0 + */ + public function getMediaForm() + { + // Needed for site view + JModelLegacy::addIncludePath(BIBLESTUDY_PATH_ADMIN_MODELS); + + // If user hasn't selected a server yet, just return an empty form + $server_id = $this->data->server_id; + + if (empty($server_id)) + { + /** @var Joomla\Registry\Registry $admin */ + $admin = JBSMParams::getAdmin()->params; + $server_id = $admin->get('server'); + + if ($server_id != '-1') + { + $this->data->server_id = $server_id; + } + else + { + $server_id = null; + } + } + + // Reverse lookup server_id to server type + /** @type BiblestudyModelServer $model */ + $model = JModelLegacy::getInstance('Server', 'BibleStudyModel'); + $server_type = $model->getType($server_id, true); + $s_item = $model->getItem($server_id); + + $reg = new Registry; + $reg->loadArray($s_item->params); + + $reg1 = new Registry; + $reg1->loadArray($s_item->media); + $reg1->merge($reg); + + if ($server_type) + { + $path = JPath::clean(JPATH_ADMINISTRATOR . '/components/com_biblestudy/addons/servers/' . $server_type); + + JForm::addFormPath($path); + JForm::addFieldPath($path . '/fields'); + + // Add language files + $lang = JFactory::getLanguage(); + + if (!$lang->load('jbs_addon_' . $server_type, JPATH_ADMINISTRATOR . '/components/com_biblestudy/addons/servers/' . $server_type) && !$server_type) + { + JFactory::getApplication()->enqueueMessage(JText::_('JBS_CMN_ERROR_ADDON_LANGUAGE_NOT_LOADED'), 'error'); + } + + $form = $this->loadForm('com_biblestudy.mediafile.media', "media", array('control' => 'jform', 'load_data' => true), true, "/media"); + } + else + { + JFactory::getApplication()->enqueueMessage(JText::_('JBS_CMN_ERROR_ADDON_LANGUAGE_NOT_LOADED'), 'warning'); + $form = $this->getForm(); + } + + if (empty($form)) + { + return false; + } + + $form->s_params = $reg1->toArray(); + $form->type = $server_type; + + return $form; + } + + /** + * Get the form data + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return boolean|object + * + * @since 7.0 + * @throws Exception + */ + public function getForm($data = array(), $loadData = true) + { + if (empty($data)) + { + $this->getItem(); + } + + // Get the form. + // @TODO Rename the form to "media" instead of mediafile + $form = $this->loadForm('com_biblestudy.mediafile', 'mediafile', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0); + } + else + { + // The back end uses id so we use that the rest of the time and set it to 0 by default. + $id = $jinput->get('id', 0); + } + + $user = JFactory::getUser(); + + // Check for existing article. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('core.edit.state', 'com_biblestudy.mediafile.' . (int) $id)) + || ($id == 0 && !$user->authorise('core.edit.state', 'com_biblestudy'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('state', 'disabled', 'true'); + + // Disable fields while saving. + // The controller has already verified this is an article you can edit. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('state', 'filter', 'unset'); + } + + return $form; + } + + /** + * Method to get media item + * + * @param int $pk int + * + * @return mixed + * + * @since 9.0.0 + * @throws Exception + */ + public function getItem($pk = null) + { + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $pk = $jinput->get('a_id', 0); + } + else + { + // The back end uses id so we use that the rest of the time and set it to 0 by default. + $pk = $jinput->get('id', 0); + } + + if (!empty($this->data)) + { + return $this->data; + } + + $this->data = parent::getItem($pk); + + if (!empty($this->data)) + { + // Make PodCast Id to be array for view + if (!empty($this->data->podcast_id)) + { + $this->data->podcast_id = explode(',', $this->data->podcast_id); + } + + // Convert metadata field to array + $registry = new Registry($this->data->metadata); + $this->data->metadata = $registry->toArray(); + + // Set the server_id from session if available or fall back on the db value + $server_id = $this->getState('mediafile.server_id'); + $this->data->server_id = empty($server_id) ? $this->data->server_id : $server_id; + + $study_id = $this->getState('mediafile.study_id'); + $this->data->study_id = empty($study_id) ? $this->data->study_id : $study_id; + + $createdate = $this->getState('mediafile.createdate'); + $this->data->createdate = empty($createdate) ? $this->data->createdate : $createdate; + } + + return $this->data; + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 2.5 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize user ids. + $pks = array_unique($pks); + ArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + + return false; + } + + $done = false; + + if (strlen($commands['player']) > 0) + { + if (!$this->batchPlayer($commands['player'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (strlen($commands['link_type']) > 0) + { + if (!$this->batchlink_type($commands['link_type'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (strlen($commands['mimetype']) > 0) + { + if (!$this->batchMimetype($commands['mimetype'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (strlen($commands['mediatype']) > 0) + { + if (!$this->batchMediatype($commands['mediatype'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (strlen($commands['popup']) > 0) + { + if (!$this->batchPopup($commands['popup'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (!$done) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + + return false; + } + + // Clear the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch Player changes for a group of mediafiles. + * + * @param string $value The new value matching a player. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchPlayer($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + /** @type TableMediafile $table */ + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + + // Todo Need to move to params BCC + $table->player = (int) $value; + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 7.0.0 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } + + /** + * Batch popup changes for a group of media files. + * + * @param string $value The new value matching a client. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchlink_type($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + /** @type TableMediafile $table */ + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + $reg = new Registry; + $reg->loadString($table->params); + $reg->set('link_type', (int) $value); + $table->params = $reg->toString(); + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch popup changes for a group of media files. + * + * @param string $value The new value matching a client. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchMimetype($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + /** @type TableMediafile $table */ + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + $reg = new Registry; + $reg->loadString($table->params); + $reg->set('mime_type', (int) $value); + $table->params = $reg->toString(); + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch popup changes for a group of media files. + * + * @param string $value The new value matching a client. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchMediatype($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + $reg = new Registry; + $reg->loadString($table->params); + $reg->set('media_image', (int) $value); + $table->params = $reg->toString(); + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch popup changes for a group of media files. + * + * @param string $value The new value matching a client. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchPopup($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + $reg = new Registry; + $reg->loadString($table->params); + $reg->set('popup', (int) $value); + $table->params = $reg->toString(); + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->state != -2) + { + return false; + } + + $user = JFactory::getUser(); + + return $user->authorise('core.delete', 'com_biblestudy.mediafile.' . (int) $record->id); + } + + return false; + } + + /** + * Load Form Data + * + * @return array + * + * @since 7.0 + * @throws Exception + */ + protected function loadFormData() + { + $session = JFactory::getApplication()->getUserState('com_biblestudy.mediafile.edit.data', array()); + + $data = empty($session) ? $this->data : $session; + + return $data; + } + + /** + * Auto-populate the model state + * + * @return void + * + * @since 9.0.0 + * @throws Exception + */ + protected function populateState() + { + $app = JFactory::getApplication('administrator'); + $input = $app->input; + + // Load the Admin settings + $admin = JBSMParams::getAdmin(); + $registry = new Registry; + $registry->loadString($admin->params); + $this->setState('admin', $registry); + + $pk = $input->get('id', null, 'INTEGER'); + $this->setState('mediafile.id', $pk); + + $server_id = $app->getUserState('com_biblestudy.edit.mediafile.server_id'); + $this->setState('mediafile.server_id', $server_id); + + $study_id = $app->getUserState('com_biblestudy.edit.mediafile.study_id'); + $this->setState('mediafile.study_id', $study_id); + + $createdate = $app->getUserState('com_biblestudy.edit.mediafile.createdate'); + $this->setState('mediafile.createdate', $createdate); + } + + /** + * A protected method to get a set of ordering conditions. + * + * @param object $table A record object. + * + * @return array An array of conditions to add to add to ordering queries. + * + * @since 1.6 + */ + protected function getReorderConditions($table) + { + $condition = array(); + $condition[] = 'study_id = ' . (int) $table->study_id; + + return $condition; + } + + /** + * Method override to check-in a record or an array of record + * + * @param mixed $pks The ID of the primary key or an array of IDs + * + * @return mixed Boolean false if there is an error, otherwise the count of records checked in. + * + * @since 12.2 + */ + public function checkin($pks = array()) + { + $pks = (array) $pks; + $table = $this->getTable(); + $count = 0; + + if (empty($pks)) + { + $pks = array((int) $this->getState('mediafile.id')); + } + + // Check in all items. + foreach ($pks as $pk) + { + if ($table->load($pk)) + { + if ($table->checked_out > 0) + { + if (!parent::checkin($pk)) + { + return false; + } + + $count++; + } + } + else + { + $this->setError($table->getError()); + + return false; + } + } + + return $count; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/mediafiles.php b/build/com_proclaim-9.2.1/admin/models/mediafiles.php new file mode 100644 index 0000000000..b4ab7594b7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/mediafiles.php @@ -0,0 +1,380 @@ +getStoreId(); + + // Try to load the data from internal storage. + if (isset($this->cache[$store])) + { + return $this->cache[$store]; + } + + try + { + // Needed for site view + JModelLegacy::addIncludePath(BIBLESTUDY_PATH_ADMIN_MODELS); + + $serverModel = JModelLegacy::getInstance('Server', 'BibleStudyModel'); + + $items = parent::getItems(); + + if (!$items) + { + return false; + } + + if (JFactory::getApplication()->isSite()) + { + $user = JFactory::getUser(); + $groups = $user->getAuthorisedViewLevels(); + + for ($x = 0, $count = count($items); $x < $count; $x++) + { + // Check the access level. Remove articles the user shouldn't see + if (!in_array($items[$x]->access, $groups)) + { + unset($items[$x]); + } + } + } + + foreach ($items as $item) + { + if (empty($item->serverType)) + { + $item->serverType = 'legacy'; + } + + $item->serverConfig = $serverModel->getConfig($item->serverType); + + // Convert all JSON strings to Arrays + $registry = new Registry; + $registry->loadString($item->params); + $item->params = $registry; + + $registry2 = new Registry; + $registry2->loadString($item->metadata); + $item->metadata = $registry2; + } + + $this->cache[$store] = $items; + } + catch (RuntimeException $e) + { + $this->setError($e->getMessage()); + + return false; + } + + return $this->cache[$store]; + } + + /** + * Get Deletes + * + * @return object + * + * @since 7.0 + */ + public function getDeletes() + { + if (empty($this->deletes)) + { + $query = 'SELECT allow_deletes' + . ' FROM #__bsms_admin' + . ' WHERE id = 1'; + $this->deletes = $this->_getList($query); + } + + return $this->deletes; + } + + /** + * Method to auto-populate the model state. + * + * This method should only be called once per instantiation and is designed + * to be called on the first call to the getState() method unless the model + * configuration flag to ignore the request is set. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0 + * @throws Exception + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + + // Adjust the context to support modal layouts. + $input = new JInput; + $layout = $input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $mediaYears = $this->getUserStateFromRequest($this->context . '.filter.mediaYears', 'filter_mediaYears'); + $this->setState('filter.mediaYears', $mediaYears); + + $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); + $this->setState('filter.language', $language); + + parent::populateState('mediafile.createdate', 'DESC'); + + // Force a language + $forcedLanguage = $app->input->get('forcedLanguage'); + + if (!empty($forcedLanguage)) + { + $this->setState('filter.language', $forcedLanguage); + $this->setState('filter.forcedLanguage', $forcedLanguage); + } + } + + /** + * Get Stored ID + * + * @param string $id An identifier string to generate the store id. + * + * @return string A store id. + * + * @since 7.0 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.study_id'); + $id .= ':' . $this->getState('filter.language'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to load the list data + * + * @return JDatabaseQuery + * + * @since 7.0 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + $query->select( + $this->getState( + 'list.select', 'mediafile.* ') + ); + + $query->from('#__bsms_mediafiles AS mediafile'); + + // Join over the language + $query->select('l.title AS language_title'); + $query->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = mediafile.language'); + + // Join over the studies + $query->select('study.studytitle AS studytitle'); + $query->join('LEFT', '#__bsms_studies AS study ON study.id = mediafile.study_id'); + + // Join over servers + $query->select('server.type as serverType'); + $query->join('LEFT', '#__bsms_servers as server ON server.id = mediafile.server_id'); + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = mediafile.access'); + + // Join over the users for the checked out user. + $query->select('uc.name AS editor') + ->join('LEFT', '#__users AS uc ON uc.id=mediafile.checked_out'); + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('mediafile.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(mediafile.published = 0 OR mediafile.published = 1)'); + } + + // Filter by access level. + $access = $this->getState('filter.access'); + + if ($access) + { + $query->where('mediafile.access = ' . (int) $access); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('mediafile.access IN (' . $groups . ')'); + } + + // Filter by study title + $study = $this->getState('filter.study_id'); + + if (!empty($study)) + { + $query->where('mediafile.study_id LIKE "%' . $study . '%"'); + } + + // Filter by media years + $mediaYears = $this->getState('filter.mediaYears'); + + if (!empty($mediaYears)) + { + $query->where('YEAR(mediafile.createdate) = ' . (int) $mediaYears); + } + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('mediafile.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); + $query->where('study.studytitle LIKE ' . $search . ' OR study.alias LIKE ' . $search); + } + } + + // Filter on the language. + if ($language = $this->getState('filter.language')) + { + $query->where('mediafile.language = ' . $db->quote($language)); + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'mediafile.createdate'); + $orderDirn = $this->state->get('list.direction', 'desc'); + + // Sqlsrv change + if ($orderCol == 'study_id') + { + $orderCol = 'mediafile.study_id'; + } + + if ($orderCol == 'ordering') + { + $orderCol = 'mediafile.study_id, mediafile.ordering'; + } + + if ($orderCol == 'published') + { + $orderCol = 'mediafile.published'; + } + + if ($orderCol == 'id') + { + $orderCol = 'mediafile.id'; + } + + if ($orderCol == 'mediafile.ordering') + { + $orderCol = 'mediafile.study_id ' . $orderDirn . ', mediafile.ordering'; + } + + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/message.php b/build/com_proclaim-9.2.1/admin/models/message.php new file mode 100644 index 0000000000..2af3bbb4fc --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/message.php @@ -0,0 +1,709 @@ +getQuery(true); + $query->select('*') + ->from('#__bsms_studytopics') + ->where('study_id = ' . (int) $study_id) + ->where('topic_id = ' . (int) $topic_id); + $db->setQuery($query); + $tresult = $db->loadObject(); + + if (empty($tresult)) + { + return false; + } + else + { + return true; + } + } + + /** + * Gets all the topics associated with a particular study + * + * @return string JSON Object containing the topics + * + * @since 7.0.1 + */ + public function getTopics() + { + // Do search in case of present study only, suppress otherwise + $input = new JInput; + $translatedList = array(); + $id = $input->get('a_id', 0, 'int'); + + if (!$id) + { + $id = $input->get('id', 0, 'int'); + } + + if ($id > 0) + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + + $query->select('topic.id, topic.topic_text, topic.params AS topic_params'); + $query->from('#__bsms_studytopics AS studytopics'); + + $query->join('LEFT', '#__bsms_topics AS topic ON topic.id = studytopics.topic_id'); + $query->where('studytopics.study_id = ' . $id); + + $db->setQuery($query->__toString()); + $topics = $db->loadObjectList(); + + if ($topics) + { + foreach ($topics as $topic) + { + $text = JBSMTranslated::getTopicItemTranslated($topic); + $translatedList[] = array( + 'id' => $topic->id, + 'name' => $text + ); + } + } + } + + return json_encode($translatedList); + } + + /** + * Gets all topics available + * + * @return string JSON Object containing the topics + * + * @since 7.0.1 + */ + public function getAlltopics() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + + $query->select('topic.id, topic.topic_text, topic.params AS topic_params'); + $query->from('#__bsms_topics AS topic'); + + $db->setQuery($query->__toString()); + $topics = $db->loadObjectList(); + $translatedList = array(); + + if ($topics) + { + foreach ($topics as $topic) + { + $text = JBSMTranslated::getTopicItemTranslated($topic); + $translatedList[] = array( + 'id' => $topic->id, + 'name' => $text + ); + } + } + + return json_encode($translatedList); + } + + /** + * Returns a list of media files associated with this study + * + * @since 7.0 + * @return object + */ + public function getMediaFiles() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + + $query->select('m.id, m.language, m.published, m.createdate, m.params'); + $query->from('#__bsms_mediafiles AS m'); + $query->where('m.study_id = ' . (int) $this->getItem()->id); + $query->where('(m.published = 0 OR m.published = 1)'); + $query->order('m.createdate DESC'); + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = m.access'); + + $db->setQuery($query->__toString()); + $mediafiles = $db->loadObjectList(); + + foreach ($mediafiles AS $i => $mediafile) + { + $reg = new Registry; + $reg->loadString($mediafile->params); + $mediafiles[$i]->params = $reg; + } + + return $mediafiles; + } + + /** + * Overrides the JModelAdmin save routine to save the topics(tags) + * + * @param string $data The form data. + * + * @return boolean + * + * @since 7.0.1 + * @throws Exception + */ + public function save($data) + { + /** @var Joomla\Registry\Registry $params */ + $params = JBSMParams::getAdmin()->params; + $input = JFactory::getApplication()->input; + $path = 'images/biblestudy/studies/' . $data['id']; + + $this->cleanCache(); + + if ($input->get('a_id')) + { + $data['id'] = $input->get('a_id'); + } + + // If no image uploaded, just save data as usual + if (empty($data['image']) || strpos($data['image'], 'thumb_') !== false) + { + if (empty($data['image'])) + { + // Modify model data if no image is set. + $data['thumbnailm'] = ""; + } + elseif (!JBSMBibleStudyHelper::startsWith(basename($data['image']), 'thumb_')) + { + // Modify model data + $data['thumbnailm'] = $path . '/thumb_' . basename($data['image']); + } + + return parent::save($data); + } + + JBSMThumbnail::create($data['image'], $path, $params->get('thumbnail_study_size', 100)); + + // Modify model data + $data['thumbnailm'] = $path . '/thumb_' . basename($data['image']); + + return parent::save($data); + } + + /** + * Get the form data + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return string + * + * @since 7.0 + * @throws Exception + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_biblestudy.message', 'message', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0); + } + else + { + // The back end uses id so we use that the rest of the time and set it to 0 by default. + $id = $jinput->get('id', 0); + } + + $user = JFactory::getUser(); + + // Check for existing article. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('core.edit.state', 'com_biblestudy.message.' . (int) $id)) + || ($id == 0 && !$user->authorise('core.edit.state', 'com_biblestudy'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('state', 'disabled', 'true'); + + // Disable fields while saving. + // The controller has already verified this is an article you can edit. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('state', 'filter', 'unset'); + } + + return $form; + } + + /** + * Method to get media item + * + * @param int $pk int + * + * @return mixed + * + * @since 9.0.0 + * @throws Exception + */ + public function getItem($pk = null) + { + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $pk = $jinput->get('a_id', 0); + } + else + { + // The back end uses id so we use that the rest of the time and set it to 0 by default. + $pk = $jinput->get('id', 0); + } + + if (!empty($this->data)) + { + return $this->data; + } + + return parent::getItem($pk); + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return true; + } + + /** + * Saves the manually set order of records. + * + * @param array $pks An array of primary key ids. + * @param integer $order +1 or -1 + * + * @return mixed + * + * @since 11.1 + */ + public function saveorder($pks = null, $order = null) + { + /** @var TableMessage $row */ + $row = $this->getTable(); + $conditions = array(); + + // Update ordering values + foreach ($pks as $i => $pk) + { + $row->load((int) $pk); + + // Track categories + $groupings[] = $row->id; + + if ($row->ordering != $order[$i]) + { + $row->ordering = $order[$i]; + + if (!$row->store()) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + // Remember to reorder within position and client_id + $condition = $this->getReorderConditions($row); + $found = false; + + foreach ($conditions as $cond) + { + if ($cond[1] == $condition) + { + $found = true; + break; + } + } + + if (!$found) + { + $key = $row->getKeyName(); + $conditions[] = array($row->$key, $condition); + } + } + } + + foreach ($conditions as $cond) + { + // $row->reorder('id = ' . (int) $group); + $row->load($cond[0]); + $row->reorder($cond[1]); + } + + // Clear the component's cache + $this->cleanCache(); + + return true; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 2.5 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize user ids. + $pks = array_unique($pks); + ArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + + return false; + } + + $done = false; + + if (strlen($commands['teacher']) > 0) + { + if (!$this->batchTeacher($commands['teacher'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (strlen($commands['series']) > 0) + { + if (!$this->batchSeries($commands['series'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (strlen($commands['messagetype']) > 0) + { + if (!$this->batchMessagetype($commands['messagetype'], $pks, $contexts)) + { + return false; + } + + $done = true; + } + + return $done; + } + + /** + * Batch popup changes for a group of media files. + * + * @param string $value The new value matching a client. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchTeacher($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + /** @var TableMessage $table */ + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + $table->teacher_id = (int) $value; + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch popup changes for a group of media files. + * + * @param string $value The new value matching a client. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchSeries($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + /** @var TableMessage $table */ + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + $table->series_id = (int) $value; + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch popup changes for a group of media files. + * + * @param string $value The new value matching a client. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + protected function batchMessagetype($value, $pks, $contexts) + { + // Set the variables + $user = JFactory::getUser(); + /** @var TableMessage $table */ + $table = $this->getTable(); + + foreach ($pks as $pk) + { + if ($user->authorise('core.edit', $contexts[$pk])) + { + $table->reset(); + $table->load($pk); + $table->messagetype = (int) $value; + + if (!$table->store()) + { + $this->setError($table->getError()); + + return false; + } + } + else + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to get the data that should be injected in the form. + * + * @return array The default data is an empty array. + * + * @since 7.0 + * @throws Exception + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.message.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Prepare and sanitise the table prior to saving. + * + * @param TableMessage $table A reference to a JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + jimport('joomla.filter.output'); + + $table->studytitle = htmlspecialchars_decode($table->studytitle, ENT_QUOTES); + $table->alias = JApplicationHelper::stringURLSafe($table->alias); + + if (empty($table->alias)) + { + $table->alias = JApplicationHelper::stringURLSafe($table->studytitle); + } + + if (empty($table->id)) + { + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select('MAX(ordering)') + ->from($db->quoteName('#__bsms_studies')); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + else + { + // Set the values + $table->modified = $date->toSql(); + $table->modified_by = $user->get('id'); + } + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/messages.php b/build/com_proclaim-9.2.1/admin/models/messages.php new file mode 100644 index 0000000000..42ada0ca66 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/messages.php @@ -0,0 +1,325 @@ +bookname = JText::_($item->bookname); + } + } + + return $items; + } + + /** + * Method to get a store id based on model configuration state. + * + * This is necessary because the model is used by the component and + * different modules that might need different sets of data or different + * ordering requirements. + * + * @param string $id A prefix for the store id. + * + * @return string A store id. + * + * @since 7.1.0 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.year'); + $id .= ':' . $this->getState('filter.book'); + $id .= ':' . $this->getState('filter.teacher'); + $id .= ':' . $this->getState('filter.series'); + $id .= ':' . $this->getState('filter.messagetype'); + $id .= ':' . $this->getState('filter.location'); + $id .= ':' . $this->getState('filter.access'); + $id .= ':' . $this->getState('filter.language'); + $id .= ':' . $this->getState('filter.search'); + + return parent::getStoreId($id); + } + + /** + * Method to auto-populate the model state. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.1.0 + * @throws Exception + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication('administrator'); + + $forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd'); + + // Adjust the context to support modal layouts. + $layout = $app->input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + // Adjust the context to support forced languages. + if ($forcedLanguage) + { + $this->context .= '.' . $forcedLanguage; + } + + // Load the parameters. + $params = JComponentHelper::getParams('com_biblestudy'); + $this->setState('params', $params); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $book = $this->getUserStateFromRequest($this->context . '.filter.book', 'filter_book'); + $this->setState('filter.book', $book); + + $teacher = $this->getUserStateFromRequest($this->context . '.filter.teacher', 'filter_teacher'); + $this->setState('filter.teacher', $teacher); + + $series = $this->getUserStateFromRequest($this->context . '.filter.series', 'filter_series'); + $this->setState('filter.series', $series); + + $messageType = $this->getUserStateFromRequest($this->context . '.filter.messagetype', 'filter_messagetype'); + $this->setState('filter.messagetype', $messageType); + + $year = $this->getUserStateFromRequest($this->context . '.filter.year', 'filter_year'); + $this->setState('filter.year', $year); + + $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); + $this->setState('filter.language', $language); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $location = $this->getUserStateFromRequest($this->context . 'filter.location', 'filter_location'); + $this->setState('filter.location', $location); + + parent::populateState('study.studydate', 'desc'); + + if (!empty($forcedLanguage)) + { + $this->setState('filter.language', $forcedLanguage); + $this->setState('filter.forcedLanguage', $forcedLanguage); + } + } + + /** + * Build an SQL query to load the list data + * + * @return JDatabaseQuery + * + * @since 7.0 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + $query->select( + $this->getState( + 'list.select', + 'study.id, study.published, study.studydate, study.studytitle, study.booknumber, study.chapter_begin' . + ', study.verse_begin, study.chapter_end, study.verse_end, study.ordering, study.hits, study.alias' . + ', study.language, study.access, study.publish_up, study.publish_down' + ) + ); + $query->from('#__bsms_studies AS study'); + + // Join over the language + $query->select('l.title AS language_title'); + $query->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = study.language'); + + // Join over Message Types + $query->select('messageType.message_type AS messageType'); + $query->join('LEFT', '#__bsms_message_type AS messageType ON messageType.id = study.messagetype'); + + // Join over Teachers + $query->select('teacher.teachername AS teachername'); + $query->join('LEFT', '#__bsms_teachers AS teacher ON teacher.id = study.teacher_id'); + + // Join over Series + $query->select('series.series_text, series.id AS series_id'); + $query->join('LEFT', '#__bsms_series AS series ON series.id = study.series_id'); + + // Join over Location + $query->select('locations.location_text'); + $query->join('LEFT', '#__bsms_locations AS locations ON locations.id = study.location_id'); + + // Join over Books + $query->select('book.bookname'); + $query->join('LEFT', '#__bsms_books AS book ON book.booknumber = study.booknumber'); + + // Join over Plays/Downloads + $query->select( + 'SUM(mediafile.plays) AS totalplays, SUM(mediafile.downloads) as totaldownloads, mediafile.study_id' + ); + $query->join('LEFT', '#__bsms_mediafiles AS mediafile ON mediafile.study_id = study.id'); + $query->group('study.id'); + + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('study.access = ' . (int) $access); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('study.access IN (' . $groups . ')'); + } + + // Filter by teacher + $teacher = $this->getState('filter.teacher'); + + if (is_numeric($teacher)) + { + $query->where('study.teacher_id = ' . (int) $teacher); + } + + // Filter by series + $series = $this->getState('filter.series'); + + if (is_numeric($series)) + { + $query->where('study.series_id = ' . (int) $series); + } + + // Filter by message type + $messageType = $this->getState('filter.messageType'); + + if (is_numeric($messageType)) + { + $query->where('study.messageType = ' . (int) $messageType); + } + + // Filter by Year + $year = $this->getState('filter.year'); + + if (!empty($year)) + { + $query->where('YEAR(study.studydate) = ' . (int) $year); + } + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('study.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(study.published = 0 OR study.published = 1)'); + } + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('study.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('(study.studytitle LIKE ' . $search . ' OR study.alias LIKE ' . $search . ')'); + } + } + + // Filter by location + $location = $this->getState('filter.location'); + + if (is_numeric($location)) + { + $query->where('study.location_id = ' . (int) $location); + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'study.studydate'); + $orderDirn = $this->state->get('list.direction', 'DESC'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/messagetype.php b/build/com_proclaim-9.2.1/admin/models/messagetype.php new file mode 100644 index 0000000000..62ee60dd9b --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/messagetype.php @@ -0,0 +1,170 @@ +getTable(); + $input = new JInput; + $data = $input->get('post'); + + // Bind the form fields to the hello table + if (!$row->bind($data)) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + // Make sure the record is valid + if (!$row->check()) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + // Store the table to the database + if (!$row->store()) + { + $this->setError($this->_db->getErrorMsg()); + + return false; + } + + return true; + } + + /** + * Abstract method for getting the form from the model. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 7.0 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_biblestudy.messagetype', 'messagetype', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Method to get the data that should be injected in the form. + * + * @return array The default data is an empty array. + * + * @since 7.0 + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.messagetype.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Prepare and sanitise the table prior to saving. + * + * @param TableMessagetype $table A reference to a JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + jimport('joomla.filter.output'); + + $table->message_type = htmlspecialchars_decode($table->message_type, ENT_QUOTES); + $table->alias = JApplicationHelper::stringURLSafe($table->alias); + + if (empty($table->alias)) + { + $table->alias = JApplicationHelper::stringURLSafe($table->message_type); + } + + if (empty($table->id)) + { + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('MAX(ordering)')->from('#__bsms_message_type'); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/messagetypes.php b/build/com_proclaim-9.2.1/admin/models/messagetypes.php new file mode 100644 index 0000000000..066dae3482 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/messagetypes.php @@ -0,0 +1,207 @@ +deletes)) + { + $query = 'SELECT allowdeletes' + . ' FROM #__bsms_admin' + . ' WHERE id = 1'; + $this->deletes = $this->_getList($query); + } + + return $this->deletes; + } + + /** + * Method to auto-populate the model state. + * + * This method should only be called once per instantiation and is designed + * to be called on the first call to the getState() method unless the model + * configuration flag to ignore the request is set. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0.0 + */ + protected function populateState($ordering = null, $direction = null) + { + // Adjust the context to support modal layouts. + $input = new JInput; + $layout = $input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); + $this->setState('filter.language', $language); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + parent::populateState('messagetype.message_type', 'asc'); + } + + /** + * Method to get a store id based on model configuration state. + * + * This is necessary because the model is used by the component and + * different modules that might need different sets of data or different + * ordering requirements. + * + * @param string $id A prefix for the store id. + * + * @return string A store id. + * + * @since 7.1.0 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.messagetype'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.language'); + + return parent::getStoreId($id); + } + + /** + * Get List Query + * + * @return JDatabaseQuery A JDatabaseQuery object to retrieve the data set. + * + * @since 7.0.0 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + $query->select( + $this->getState( + 'list.select', 'messagetype.id, messagetype.published, messagetype.message_type, ' . + 'messagetype.ordering, messagetype.access, messagetype.alias') + ); + + $query->from('#__bsms_message_type AS messagetype'); + + // Filter by published state + $published = $this->getState('filter.published'); + + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('messagetype.access = ' . (int) $access); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('messagetype.access IN (' . $groups . ')'); + } + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('messagetype.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('messagetype.message_type LIKE ' . $search); + } + } + + if (is_numeric($published)) + { + $query->where('messagetype.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(messagetype.published = 0 OR messagetype.published = 1)'); + } + + // Add the list ordering clause. + $orderCol = $this->state->get('list.ordering', 'messagetype.message_type'); + $orderDirn = $this->state->get('list.direction', 'acs'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/podcast.php b/build/com_proclaim-9.2.1/admin/models/podcast.php new file mode 100644 index 0000000000..068f75ced7 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/podcast.php @@ -0,0 +1,132 @@ +loadForm('com_biblestudy.podcast', 'podcast', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Returns a reference to the a Table object, always creating it. + * + * @param string $name The table name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $options Configuration array for model. Optional. + * + * @return JTable A database object + * + * @since 2.5 + */ + public function getTable($name = 'Podcast', $prefix = 'Table', $options = array()) + { + return JTable::getInstance($name, $prefix, $options); + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Method to get the data that should be injected in the form. + * + * @return array The default data is an empty array. + * + * @since 7.0 + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.podcast.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + $item = parent::getItem($pk); + + return $item; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/podcasts.php b/build/com_proclaim-9.2.1/admin/models/podcasts.php new file mode 100644 index 0000000000..4b9c111a01 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/podcasts.php @@ -0,0 +1,191 @@ +getState('filter.search'); + $id .= ':' . $this->getState('filter.access'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.language'); + + return parent::getStoreId($id); + } + + /** + * Method to auto-populate the model state. + * + * This method should only be called once per instantiation and is designed + * to be called on the first call to the getState() method unless the model + * configuration flag to ignore the request is set. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0 + */ + protected function populateState($ordering = null, $direction = null) + { + // Adjust the context to support modal layouts. + $input = new JInput; + $layout = $input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access'); + $this->setState('filter.access', $access); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); + $this->setState('filter.language', $language); + + parent::populateState('podcast.title', 'ASC'); + } + + /** + * Method to get a JDatabaseQuery object for retrieving the data set from a database. + * + * @return JDatabaseQuery A JDatabaseQuery object to retrieve the data set. + * + * @since 7.0 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + $query->select( + $this->getState( + 'list.select', 'podcast.id, podcast.published, podcast.title, podcast.description, podcast.filename, podcast.language, podcast.access') + ); + $query->from('#__bsms_podcast AS podcast'); + + // Join over the language + $query->select('l.title AS language_title'); + $query->join('LEFT', $db->qn('#__languages') . ' AS l ON l.lang_code = podcast.language'); + + // Join over the asset groups. + $query->select('ag.title AS access_level') + ->join('LEFT', '#__viewlevels AS ag ON ag.id = podcast.access'); + + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('podcast.access = ' . (int) $access); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('podcast.access IN (' . $groups . ')'); + } + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('podcast.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(podcast.published = 0 OR podcast.published = 1)'); + } + + // Filter on the language. + if ($language = $this->getState('filter.language')) + { + $query->where('podcast.language = ' . $db->quote($language)); + } + + // Filter by search in filename or study title + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('podcast.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('(podcast.title LIKE ' . $search . ' OR podcast.description LIKE ' . $search . ')'); + } + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'podcast.id'); + $orderDirn = $this->state->get('list.direction', 'desc'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/serie.php b/build/com_proclaim-9.2.1/admin/models/serie.php new file mode 100644 index 0000000000..8a91628782 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/serie.php @@ -0,0 +1,456 @@ +loadForm('com_biblestudy.serie', 'serie', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0); + } + else + { + // The back end uses id so we use that the rest of the time and set it to 0 by default. + $id = $jinput->get('id', 0); + } + + $user = JFactory::getUser(); + + // Check for existing article. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('core.edit.state', 'com_biblestudy.serie.' . (int) $id)) + || ($id == 0 && !$user->authorise('core.edit.state', 'com_biblestudy'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + + // Disable fields while saving. + // The controller has already verified this is an article you can edit. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + + return $form; + } + + /** + * Get Teacher data + * + * @return object + * + * @since 7.0 + */ + public function getTeacher() + { + if (empty($this->teacher)) + { + $query = 'SELECT id AS value, teachername AS text' + . ' FROM #__bsms_teachers' + . ' WHERE published = 1'; + $this->teacher = $this->_getList($query); + } + + return $this->teacher; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + /** @var Joomla\Registry\Registry $params */ + $params = JBSMParams::getAdmin()->params; + $app = JFactory::getApplication(); + $path = 'images/biblestudy/series/' . $data['id']; + $prefix = 'thumb_'; + + // Alter the title for save as copy + if ($app->input->get('task') == 'save2copy') + { + list($title, $alias) = $this->generateNewTitle('0', $data['alias'], $data['title']); + $data['title'] = $title; + $data['alias'] = $alias; + } + + // If no image uploaded, just save data as usual + if (empty($data['image']) || strpos($data['image'], $prefix) !== false) + { + if (empty($data['image'])) + { + // Modify model data if no image is set. + $data['series_thumbnail'] = ""; + } + elseif (!JBSMBibleStudyHelper::startsWith(basename($data['image']), $prefix)) + { + // Modify model data + $data['series_thumbnail'] = $path . '/thumb_' . basename($data['image']); + } + elseif (substr_count(basename($data['image']), $prefix) > 1) + { + $x = substr_count(basename($data['image']), $prefix); + + while ($x > 1) + { + if (substr(basename($data['image']), 0, strlen($prefix)) == $prefix) + { + $str = substr(basename($data['image']), strlen($prefix)); + $data['series_thumbnail'] = $path . '/' . $str; + $data['image'] = $path . '/' . $str; + } + + $x--; + } + } + + return parent::save($data); + } + + JBSMThumbnail::create($data['image'], $path, $params->get('thumbnail_series_size', 100)); + + // Modify model data + $data['series_thumbnail'] = $path . '/thumb_' . basename($data['image']); + + return parent::save($data); + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $value The new category. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 11.1 + */ + protected function batchCopy($value, $pks, $contexts) + { + $app = JFactory::getApplication(); + /** @type TableSerie $table */ + $table = $this->getTable(); + $i = 0; + $newIds = array(); + + // Check that the user has create permission for the component + $extension = $app->input->get('option', ''); + $user = JFactory::getUser(); + + if (!$user->authorise('core.create', $extension)) + { + $app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_CREATE'), 'error'); + + return false; + } + + // Parent exists so we let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $table->reset(); + + // Check that the row actually exists + if (!$table->load($pk)) + { + if ($error = $table->getError()) + { + // Fatal error + $app->enqueueMessage($error, 'error'); + + return false; + } + else + { + // Not fatal error + $app->enqueueMessage(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // Alter the title & alias + $data = $this->generateNewTitle('', $table->alias, $table->series_text); + $table->series_text = $data['0']; + $table->alias = $data['1']; + + // Reset the ID because we are making a copy + $table->id = 0; + + // Check the row. + if (!$table->check()) + { + $app->enqueueMessage($table->getError(), 'error'); + + return false; + } + + // Store the row. + if (!$table->store()) + { + $app->enqueueMessage($table->getError(), 'error'); + + return false; + } + + // Get the new item ID + $newId = $table->get('id'); + + // Add the new ID to the array + $newIds[$i] = $newId; + $i++; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Method to get a table object, load it if necessary. + * + * @param string $name The table name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $options Configuration array for model. Optional. + * + * @return JTable A JTable object + * + * @since 7.0 + */ + public function getTable($name = 'Serie', $prefix = 'Table', $options = array()) + { + return JTable::getInstance($name, $prefix, $options); + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + parent::cleanCache('mod_biblestudy_podcast'); + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission for the component. + * + * @since 12.2 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return false; + } + + $user = JFactory::getUser(); + + return $user->authorise('core.delete', 'com_biblestudy.serie.' . (int) $record->id); + } + + return false; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission for the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + + // Check for existing article. + if (!empty($record->id)) + { + return $user->authorise('core.edit.state', 'com_biblestudy.serie.' . (int) $record->id); + } + + // Default to component settings if serie known. + return parent::canEditState($record); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param TableSerie $table A reference to a JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + jimport('joomla.filter.output'); + + $table->series_text = htmlspecialchars_decode($table->series_text, ENT_QUOTES); + $table->alias = JApplicationHelper::stringURLSafe($table->alias); + + if (empty($table->alias)) + { + $table->alias = JApplicationHelper::stringURLSafe($table->series_text); + } + + if (empty($table->id)) + { + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('MAX(ordering)')->from('#__bsms_series'); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + + if ($table->ordering == 0) + { + $table->ordering = 1; + $table->reorder('id = ' . (int) $table->id); + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return array The default data is an empty array. + * + * @since 7.0 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $app = JFactory::getApplication(); + $data = $app->getUserState('com_biblestudy.edit.serie.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get a single record. + * + * @param int $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 7.0 + */ + public function getItem($pk = null) + { + $item = parent::getItem($pk); + + if ($item) + { + $item->admin = JBSMParams::getAdmin(); + } + + return $item; + } + + /** + * A protected method to get a set of ordering conditions. + * + * @param JTable $table A JTable object. + * + * @return array An array of conditions to add to ordering queries. + * + * @since 1.6 + */ + protected function getReorderConditions($table) + { + return array(); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/series.php b/build/com_proclaim-9.2.1/admin/models/series.php new file mode 100644 index 0000000000..e79c92343a --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/series.php @@ -0,0 +1,272 @@ +isSite()) + { + $user = JFactory::getUser(); + $groups = $user->getAuthorisedViewLevels(); + + for ($x = 0, $count = count($items); $x < $count; $x++) + { + // Check the access level. Remove articles the user shouldn't see + if (!in_array($items[$x]->access, $groups)) + { + unset($items[$x]); + } + } + } + + return $items; + } + + /** + * Method to auto-populate the model state. + * + * This method should only be called once per instantiation and is designed + * to be called on the first call to the getState() method unless the model + * configuration flag to ignore the request is set. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0 + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + $layout = $app->input->get('layout'); + + // Adjust the context to support modal layouts. + if ($layout) + { + $this->context .= '.' . $layout; + } + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $level = $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level', 0, 'int'); + $this->setState('filter.level', $level); + + $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); + $this->setState('filter.language', $language); + + // Force a language + $forcedLanguage = $app->input->get('forcedLanguage'); + + if (!empty($forcedLanguage)) + { + $this->setState('filter.language', $forcedLanguage); + $this->setState('filter.forcedLanguage', $forcedLanguage); + } + + parent::populateState('series.series_text', 'asc'); + } + + /** + * Method to get a store id based on model configuration state. + * + * This is necessary because the model is used by the component and + * different modules that might need different sets of data or different + * ordering requirements. + * + * @param string $id A prefix for the store id. + * + * @return string A store id. + * + * @since 1.6 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.access'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.language'); + + return parent::getStoreId($id); + } + + /** + * Build and SQL query to load the list data + * + * @return JDatabaseQuery + * + * @since 7.1.0 + */ + protected function getListQuery() + { + // Create a new query object. + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + // Select the required fields from the table. + $query->select( + $this->getState( + 'list.select', + 'series.id, series_text, series.published, series.alias, series.language , series.access, series.ordering' + ) + ); + $query->from('#__bsms_series AS series'); + + // Join over the language + $query->select('l.title AS language_title'); + $query->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = series.language'); + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = series.access'); + + // Filter on the language. + $language = $this->getState('filter.language'); + + if ($language) + { + $query->where('series.language = ' . $db->quote($language)); + } + + // Filter by access level. + $access = $this->getState('filter.access'); + + if ($access) + { + $query->where('series.access = ' . (int) $access); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('series.access IN (' . $groups . ')'); + } + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('series.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(series.published = 0 OR series.published = 1)'); + } + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('series.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('(series.series_text LIKE ' . $search . ' OR series.alias LIKE ' . $search . ')'); + } + } + + // Filter on the language. + $language = $this->getState('filter.language'); + + if ($language) + { + $query->where('series.language = ' . $db->quote($language)); + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'series.series_text'); + $orderDirn = $this->state->get('list.direction', 'asc'); + + // Sqlsrv change + if ($orderCol == 'language') + { + $orderCol = 'l.title'; + } + + if ($orderCol == 'access_level') + { + $orderCol = 'ag.title'; + } + + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/server.php b/build/com_proclaim-9.2.1/admin/models/server.php new file mode 100644 index 0000000000..6d97ab9840 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/server.php @@ -0,0 +1,333 @@ +event_after_upload = isset($config['event_after_upload']); + } + } + + /** + * Reverse look up of id to server_type + * + * @param int $pk ID to get + * @param bool $ext If comfing from externl + * + * @return String + * + * @since 9.0.0 + */ + public function getType($pk, $ext = false) + { + $item = $this->getItem($pk, $ext); + + return $item->type; + } + + /** + * Method to get a server item. + * + * @param null $pk An optional id of the object to get + * @param bool $ext If comfing from externl + * + * @return mixed Server Server data object, false on failure + * + * @since 9.0.0 + */ + public function getItem($pk = null, $ext = false) + { + if (!empty($this->data)) + { + return $this->data; + } + + $this->data = parent::getItem($pk); + + if ($this->data) + { + // Convert media field to array + $registry = new Registry($this->data->media); + $this->data->media = $registry->toArray(); + + // Set the type from session if available or fall back on the db value + $server_name = $this->getState('server.server_name'); + $this->data->server_name = empty($server_name) ? $this->data->server_name : $server_name; + + $type = null; + + if (!$ext) + { + $type = $this->getState('server.type'); + } + + $this->data->type = empty($type) ? $this->data->type : $type; + + // Load server type configuration if available + if ($this->data->type) + { + $this->data->addon = $this->getConfig($this->data->type); + } + } + + return $this->data; + } + + /** + * Return the configuration xml of a server + * + * @param string $addon Type of server + * + * @return SimpleXMLElement + * + * @since 9.0.0 + */ + public function getConfig($addon) + { + $path = JPATH_ADMINISTRATOR . '/components/com_biblestudy/addons/servers/' . $addon . '/' . $addon . '.xml'; + $xml = simplexml_load_file($path); + + return $xml; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + if (isset($data['params']['path'])) + { + if (strpos($data['params']['path'], '//')) + { + $data['params']['path'] = substr($data['params']['path'], strpos($data['params']['path'], '//')); + } + elseif (strpos($data['params']['path'], '//') === false) + { + $data['params']['path'] = '//' . $data['params']['path']; + } + } + + if (parent::save($data)) + { + return true; + } + + return false; + } + + /** + * Get the server form + * + * @return boolean|mixed + * + * @throws Exception + * + * @since 9.0.0 + */ + public function getAddonServerForm() + { + // If user hasn't selected a server type yet, just return an empty form + $type = $this->data->type; + + if (empty($type)) + { + // @TODO This may not be optimal, seems like a hack + return new JForm("No-op"); + } + + $path = JPath::clean(JPATH_ADMINISTRATOR . '/components/com_biblestudy/addons/servers/' . $type); + + JForm::addFormPath($path); + JForm::addFieldPath($path . '/fields'); + + // Add language files + $lang = JFactory::getLanguage(); + + if (!$lang->load('jbs_addon_' . $type, $path)) + { + throw new Exception(JText::_('JBS_CMN_ERROR_ADDON_LANGUAGE_NOT_LOADED')); + } + + $form = $this->loadForm('com_biblestudy.server.' . $type, $type, array('control' => 'jform', 'load_data' => true), true, "/server"); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Abstract method for getting the form from the model. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 7.0 + */ + public function getForm($data = array(), $loadData = true) + { + if (empty($data)) + { + $this->getItem(); + } + + // Get the forms. + $form = $this->loadForm('com_biblestudy.server', 'server', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission for the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + $user = JFactory::getUser(); + + return $user->authorise('core.delete', 'com_biblestudy.article.' . (int) $record->id); + } + + /** + * Method to test whether a state can be edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the + * component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + + // Check for existing article. + if (!empty($record->id)) + { + return $user->authorise('core.edit.state', 'com_biblestudy.server.' . (int) $record->id); + } /* Default to component settings if neither article nor category known. */ + else + { + return parent::canEditState($record); + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return array The default data is an empty array. + * + * @since 9.0.0 + * @TODO This gets called twice, because we're loading two forms. (There is a redundancy + * in the bind() because the data is itereted over 2 times, 1 for each form). Possibly, + * figure out a way to iterate over only the relevant data) + */ + protected function loadFormData() + { + // If current state has data, use it instead of data from db + $session = JFactory::getApplication()->getUserState('com_biblestudy.edit.server.data', array()); + + $data = empty($session) ? $this->data : $session; + + return $data; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } + + /** + * Auto-populate the model state. + * + * @return void + * + * @since 9.0.0 + */ + protected function populateState() + { + $app = JFactory::getApplication('administrator'); + $input = $app->input; + + $pk = $input->get('id', null, 'INTEGER'); + $this->setState('server.id', $pk); + + $sname = $app->getUserState('com_biblestudy.edit.server.server_name'); + $this->setState('server.server_name', $sname); + + $type = $app->getUserState('com_biblestudy.edit.server.type'); + $this->setState('server.type', $type); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/servers.php b/build/com_proclaim-9.2.1/admin/models/servers.php new file mode 100644 index 0000000000..6570614574 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/servers.php @@ -0,0 +1,214 @@ +rlu_id)) + { + $_rlu = array(); + + foreach ($this->getItems() as $server) + { + $_rlu[$server->id] = array( + 'name' => $server->server_name, + 'type' => $server->type + ); + } + + $this->rlu_id = $_rlu; + } + + return $this->rlu_id; + } + + /** + * Method to get the reverse lookup of the Endpoint type to Endpoint name + * + * @return array Array of reverse lookup + * + * @since 9.0.0 + */ + public function getTypeReverseLookup() + { + if (empty($this->rlu_type)) + { + $this->getServerOptions(); + } + + return $this->rlu_type; + } + + /** + * Get a list of available endpoints + * + * @return array|bool Array of available endpoints options grouped by type or false if there aren't any + * + * @since 9.0.0 + */ + public function getServerOptions() + { + $options = array(); + + // Path to endpoints + $path = JPATH_ADMINISTRATOR . '/components/com_biblestudy/addons/servers'; + + if (JFolder::exists($path)) + { + $servers = JFolder::folders($path); + } + else + { + return false; + } + + foreach ($servers as $server) + { + $file = $path . '/' . $server . '/' . $server . '.xml'; + + if (is_file($file)) + { + if ($xml = simplexml_load_file($file)) + { + // Create the reverse lookup for Endpoint type to Endpoint name + $this->rlu_type[$server] = (string) $xml->name; + + $o = new stdClass; + $o->type = (string) $xml['type']; + $o->name = (string) $server; + $o->image_url = JUri::base() . '/components/com_biblestudy/addons/servers/' . $server . '/' . $server . '.png'; + $o->title = (string) $xml->name; + $o->description = (string) $xml->description; + $o->path = $path . '/' . $server . '/'; + + $options[$o->type][] = $o; + unset($xml); + } + } + } + + return $options; + } + + /** + * Method to auto-populate the model state. + * + * This method should only be called once per instantiation and is designed + * to be called on the first call to the getState() method unless the model + * configuration flag to ignore the request is set. + * + * Note. Calling getState in this method will result in recursion. + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0.0 + */ + protected function populateState($ordering = null, $direction = null) + { + // Adjust the context to support modal layouts. + $input = new JInput; + $layout = $input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + parent::populateState('server.server_name', 'DESC'); + } + + /** + * Method to get a JDatabaseQuery object for retrieving the data set from a database. + * + * @return JDatabaseQuery A JDatabaseQuery object to retrieve the data set. + * + * @since 7.0.0 + * @throws Exception + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + $query->select($this->getState('list.select', 'server.id, server.published, server.server_name, server.type')); + $query->from('#__bsms_servers AS server'); + + // Filter by published state + $published = $this->getState('filter.published'); + + if (JFactory::getApplication()->input->get('layout') == 'modal' && $published === '') + { + $published = 1; + } + + if (is_numeric($published)) + { + $query->where('server.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(server.published = 0 OR server.published = 1)'); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('server.access IN (' . $groups . ')'); + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'server.server_name'); + $orderDirn = $this->state->get('list.direction', 'DESC'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/teacher.php b/build/com_proclaim-9.2.1/admin/models/teacher.php new file mode 100644 index 0000000000..a5eb9b9f10 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/teacher.php @@ -0,0 +1,310 @@ +loadForm('com_biblestudy.teacher', 'teacher', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + // Modify the form based on access controls. + if (!$this->canEditState((object) $data)) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + + // Disable fields while saving. + // The controller has already verified this is a record you can edit. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + + return $form; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission for the + * component. + * + * @since 12.2 + */ + protected function canEditState($record) + { + $tmp = (array) $record; + $db = JFactory::getDbo(); + $user = JFactory::getUser(); + $canDoState = $user->authorise('core.edit.state', $this->option); + $text = ''; + + if (!empty($tmp)) + { + $query = $db->getQuery(true); + $query->select('id, studytitle') + ->from('#__bsms_studies') + ->where('teacher_id = ' . $record->id) + ->where('published != ' . $db->q('-2')); + $db->setQuery($query); + $studies = $db->loadObjectList(); + + if (!$studies && $canDoState) + { + return true; + } + + if ($record->published == '-2' || $record->published == '0') + { + foreach ($studies as $studie) + { + $text .= ' ' . $studie->id . '-"' . $studie->studytitle . '",'; + } + + JFactory::getApplication()->enqueueMessage(JText::_('JBS_TCH_CAN_NOT_DELETE') . $text); + } + + return false; + } + else + { + return $canDoState; + } + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Saves data creating image thumbnails + * + * @param array $data Data + * + * @return boolean + * + * @since 9.0.0 + */ + public function save($data) + { + /** @var Joomla\Registry\Registry $params */ + $params = JBSMParams::getAdmin()->params; + $path = 'images/biblestudy/teachers/' . $data['id']; + $prefix = 'thumb_'; + + // If no image uploaded, just save data as usual + if (empty($data['image']) || strpos($data['image'], $prefix) !== false) + { + if (empty($data['image'])) + { + // Modify model data if no image is set. + $data['teacher_image'] = ""; + $data['teacher_thumbnail'] = ""; + } + elseif (!JBSMBibleStudyHelper::startsWith(basename($data['image']), $prefix)) + { + // Modify model data + $data['teacher_image'] = $data['image']; + $data['teacher_thumbnail'] = $path . '/thumb_' . basename($data['image']); + } + elseif (substr_count(basename($data['image']), $prefix) > 1) + { + // Out Fix removing redundent 'thumb_' in path. + $x = substr_count(basename($data['image']), $prefix); + + while ($x > 1) + { + if (substr(basename($data['image']), 0, strlen($prefix)) == $prefix) + { + $str = substr(basename($data['image']), strlen($prefix)); + $data['teacher_image'] = $path . '/' . $str; + $data['teacher_thumbnail'] = $path . '/' . $str; + $data['image'] = $path . '/' . $str; + } + + $x--; + } + } + + // Fix Save of update file to match path. + if ($data['teacher_image'] != $data['image']) + { + $data['teacher_thumbnail'] = $data['image']; + $data['teacher_image'] = $data['image']; + } + + return parent::save($data); + } + + JBSMThumbnail::create($data['image'], $path, $params->get('thumbnail_teacher_size', 100)); + + // Modify model data + $data['teacher_image'] = $data['image']; + $data['teacher_thumbnail'] = $path . '/thumb_' . basename($data['image']); + + return parent::save($data); + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 7.0 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.teacher.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get a single record. + * + * @param int $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.7.0 + */ + public function getItem($pk = null) + { + $item = parent::getItem($pk); + + if ($item) + { + // Convert the params field to an array. + } + + return $item; + } + + /** + * Prepare and sanitise the table prior to saving. + * + * @param TableTeacher $table A reference to a JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + jimport('joomla.filter.output'); + + $table->teachername = htmlspecialchars_decode($table->teachername, ENT_QUOTES); + $table->alias = JApplicationHelper::stringURLSafe($table->alias); + + if (empty($table->alias)) + { + $table->alias = JApplicationHelper::stringURLSafe($table->teachername); + } + + if (empty($table->id)) + { + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select('MAX(ordering)')->from('#__bsms_teachers'); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/teachers.php b/build/com_proclaim-9.2.1/admin/models/teachers.php new file mode 100644 index 0000000000..f2071c24c6 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/teachers.php @@ -0,0 +1,188 @@ +get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); + $this->setState('filter.language', $language); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + // List state information. + parent::populateState('teacher.teachername', 'asc'); + } + + /** + * Method to get a store id based on model configuration state. + * + * This is necessary because the model is used by the component and + * different modules that might need different sets of data or different + * ordering requirements. + * + * @param string $id A prefix for the store id. + * + * @return string A store id. + * + * @since 7.0 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.language'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to load the list data. + * + * @return JDatabaseQuery + * + * @since 7.0 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + $user = JFactory::getUser(); + + $query->select($this->getState('list.select', 'teacher.*')); + $query->from('#__bsms_teachers AS teacher'); + + // Join over the language + $query->select('l.title AS language_title'); + $query->join('LEFT', '`#__languages` AS l ON l.lang_code = teacher.language'); + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = teacher.access'); + + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('teacher.access = ' . (int) $access); + } + + // Implement View Level Access + if (!$user->authorise('core.admin')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('teacher.access IN (' . $groups . ')'); + } + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('teacher.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(teacher.published = 0 OR teacher.published = 1)'); + } + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('teacher.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('(teacher.teachername LIKE ' . $search . ' OR teacher.alias LIKE ' . $search . ')'); + } + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'teacher.teachername'); + $orderDirn = $this->state->get('list.direction', 'asc'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/template.php b/build/com_proclaim-9.2.1/admin/models/template.php new file mode 100644 index 0000000000..dfd4df3da5 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/template.php @@ -0,0 +1,185 @@ +enqueueMessage(JText::_('JBS_TPL_DEFAULT_ERROR'), 'error'); + + return false; + } + + return parent::save($data); + } + + /** + * Copy Template + * + * @param array $cid ID of template + * + * @return boolean + * + * @since 7.0 + */ + public function copy($cid) + { + foreach ($cid as $id) + { + /** @type TableTemplate $tmplCurr */ + $tmplCurr = JTable::getInstance('Template', 'Table'); + + $tmplCurr->load($id); + $tmplCurr->id = null; + $tmplCurr->title .= " - copy"; + + if (!$tmplCurr->store()) + { + JFactory::getApplication()->enqueueMessage($tmplCurr->getError(), 'error'); + + return false; + } + } + + return true; + } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + foreach ($pks as $i => $pk) + { + if ($pk == 1 && $value != 1) + { + JFactory::getApplication()->enqueueMessage(JText::_('JBS_TPL_DEFAULT_ERROR'), 'error'); + unset($pks[$i]); + } + } + + return parent::publish($pks, $value); + } + + /** + * Get the form data + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 7.0 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_biblestudy.template', 'template', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Method to get a table object, load it if necessary. + * + * @param string $name The table name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $options Configuration array for model. Optional. + * + * @return JTable A JTable object + * + * @since 1.6 + */ + public function getTable($name = 'template', $prefix = 'Table', $options = array()) + { + return JTable::getInstance($name, $prefix, $options); + } + + /** + * Load Form Date + * + * @return array The default data is an empty array. + * + * @since 7.0 + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.template.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/templatecode.php b/build/com_proclaim-9.2.1/admin/models/templatecode.php new file mode 100644 index 0000000000..b8b5de1eb0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/templatecode.php @@ -0,0 +1,196 @@ +loadForm('com_biblestudy.templatecode', 'templatecode', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + return $form; + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Get Type Language String + * + * @return string|Null + * + * @since 7.0 + */ + public function getType() + { + $item = $this->getItem(); + $type2 = $item->type; + $type = null; + + switch ($type2) + { + case 1: + $type = JText::_('JBS_TPLCODE_SERMONLIST'); + break; + + case 2: + $type = JText::_('JBS_TPLCODE_SERMON'); + break; + + case 3: + $type = JText::_('JBS_TPLCODE_TEACHERS'); + break; + + case 4: + $type = JText::_('JBS_TPLCODE_TEACHER'); + break; + + case 5: + $type = JText::_('JBS_TPLCODE_SERIESDISPLAYS'); + break; + + case 6: + $type = JText::_('JBS_TPLCODE_SERIESDISPLAY'); + break; + case 7: + $type = JText::_('JBS_TPLCODE_MODULE'); + break; + case null: + $type = null; + break; + } + + return $type; + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + $item = parent::getItem($pk); + + return $item; + } + + /** + * Method to auto-populate the model state. + * + * Note. Calling getState in this method will result in recursion. + * + * @return void + * + * @since 1.6 + */ + protected function populateState() + { + $app = JFactory::getApplication('administrator'); + + // Save the syntax for later use + $app->setUserState('editor.source.syntax', 'php'); + + // Initialise variables. + $table = $this->getTable(); + $key = $table->getKeyName(); + + // Get the pk of the record from the request. + $input = new JInput; + $pk = $input->get($key, '', 'int'); + $this->setState($this->getName() . '.id', $pk); + + // Load the parameters. + $value = JComponentHelper::getParams($this->option); + $this->setState('params', $value); + } + + /** + * Returns a reference to the a Table object, always creating it. + * + * @param string $name The table name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $options Configuration array for model. Optional. + * + * @return JTable A JTable object + * + * @since 2.5 + */ + public function getTable($name = 'Templatecode', $prefix = 'Table', $options = array()) + { + return JTable::getInstance($name, $prefix, $options); + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 2.5 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.templatecode.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/templatecodes.php b/build/com_proclaim-9.2.1/admin/models/templatecodes.php new file mode 100644 index 0000000000..f63974f654 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/templatecodes.php @@ -0,0 +1,120 @@ +get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + parent::populateState('templatecode.filename', 'ASC'); + } + + /** + * Get list query + * + * @return JDatabaseQuery + * + * @since 7.1 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + + $query->select( + $this->getState( + 'list.select', 'templatecode.id, templatecode.published, templatecode.filename, templatecode.templatecode, templatecode.type') + ); + $query->from('`#__bsms_templatecode` AS templatecode'); + + // Filter by search in filename or study title + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('podcast.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('(templatecode.filename LIKE ' . $search . ' OR templatecode.templatecode LIKE ' . $search . ')'); + } + } + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('templatecode.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(templatecode.published = 0 OR templatecode.published = 1)'); + } + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/templates.php b/build/com_proclaim-9.2.1/admin/models/templates.php new file mode 100644 index 0000000000..b2965eede0 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/templates.php @@ -0,0 +1,177 @@ +templates)) + { + $query = 'SELECT id as value, title as text FROM `#__bsms_templates` WHERE published = 1 ORDER BY id ASC'; + $this->templates = $this->_getList($query); + } + + return $this->templates; + } + + /** + * Gets a list of templates types for the filter dropdown + * + * @return array Array of objects + * + * @since 7.0 + */ + public function getTypes() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + + $query->select('template.type AS text'); + $query->from('#__bsms_templates AS template'); + $query->group('template.type'); + $query->order('template.type'); + + $db->setQuery($query->__toString()); + + return $db->loadObjectList(); + } + + /** + * Populate State + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0 + */ + protected function populateState($ordering = null, $direction = null) + { + // Adjust the context to support modal layouts. + $input = new JInput; + $layout = $input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $type = $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type'); + $this->setState('filter.type', $type); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + parent::populateState('template.title', 'ASC'); + } + + /** + * Build and SQL query to load the list data + * + * @return JDatabaseQuery + * + * @since 7.0 + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + + $query->select( + $this->getState( + 'list.select', 'template.id, template.published, template.title') + ); + $query->from('#__bsms_templates AS template'); + + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('template.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(template.published = 0 OR template.published = 1)'); + } + + // Filter by search in filename or study title + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('template.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('template.title LIKE ' . $search); + } + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'template.id'); + $orderDirn = $this->state->get('list.direction', 'ACS'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/topic.php b/build/com_proclaim-9.2.1/admin/models/topic.php new file mode 100644 index 0000000000..46d5cbbae6 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/topic.php @@ -0,0 +1,121 @@ +loadForm('com_biblestudy.topic', 'topic', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + // Modify the form based on access controls. + if (!$this->canEditState((object) $data)) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + + // Disable fields while saving. + // The controller has already verified this is a record you can edit. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + + return $form; + } + + /** + * Method to check-out a row for editing. + * + * @param integer $pk The numeric id of the primary key. + * + * @return boolean False on failure or error, true otherwise. + * + * @since 11.1 + */ + public function checkout($pk = null) + { + return $pk; + } + + /** + * Load Form Data + * + * @return array The default data is an empty array. + * + * @since 7.0 + */ + protected function loadFormData() + { + $data = JFactory::getApplication()->getUserState('com_biblestudy.edit.topic.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Custom clean the cache of com_biblestudy and biblestudy modules + * + * @param string $group The cache group + * @param integer $client_id The ID of the client + * + * @return void + * + * @since 1.6 + */ + protected function cleanCache($group = null, $client_id = 0) + { + parent::cleanCache('com_biblestudy'); + parent::cleanCache('mod_biblestudy'); + } +} diff --git a/build/com_proclaim-9.2.1/admin/models/topics.php b/build/com_proclaim-9.2.1/admin/models/topics.php new file mode 100644 index 0000000000..5ddc342951 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/models/topics.php @@ -0,0 +1,160 @@ +topic_text = $translate->getTopicItemTranslated($item); + } + + return $items; + } + + /** + * Populate State + * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * + * @return void + * + * @since 7.0 + */ + protected function populateState($ordering = null, $direction = null) + { + // Adjust the context to support modal layouts. + $input = new JInput; + $layout = $input->get('layout'); + + if ($layout) + { + $this->context .= '.' . $layout; + } + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + parent::populateState('topic.topic_text', 'ASC'); + } + + /** + * Get Stored ID + * + * @param string $id A prefix for the store id + * + * @return string A store id + * + * @since 7.0 + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + + return parent::getStoreId($id); + } + + /** + * Get List Query + * + * @since 7.0 + * @return JDatabaseQuery + */ + protected function getListQuery() + { + $db = $this->getDbo(); + $query = $db->getQuery(true); + + $query->select($this->getState('list.select', 'topic.id, topic.topic_text, topic.published, topic.params AS topic_params')); + $query->from('#__bsms_topics AS topic'); + + // Filter by search in title. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('topic.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search, true) . '%'); + $query->where('(topic.topic_text LIKE ' . $search . ')'); + } + } + // Filter by published state + $published = $this->getState('filter.published'); + + if (is_numeric($published)) + { + $query->where('topic.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(topic.published = 0 OR topic.published = 1)'); + } + + // Add the list ordering clause + $orderCol = $this->state->get('list.ordering', 'topic.topic_text'); + $orderDirn = $this->state->get('list.direction', 'asc'); + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + + return $query; + } +} diff --git a/build/com_proclaim-9.2.1/admin/postinstall/template.php b/build/com_proclaim-9.2.1/admin/postinstall/template.php new file mode 100644 index 0000000000..0c490abdd6 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/postinstall/template.php @@ -0,0 +1,80 @@ +getQuery(true); + $qurey->select('*')->from('#__bsms_templates'); + $db->setQuery($qurey); + + try + { + $tables = $db->loadObjectList(); + + foreach ($tables as $table) + { + $registry = new Registry; + $registry->loadString($table->params); + + if ($registry->get('playerresposive', false) != false) + { + $results = false; + } + else + { + $results = true; + } + } + } + catch (Exception $e) + { + $results = null; + } + + return $results; +} + +/** + * Redirect the view to the Templates view + * + * @return void + * + * @throws Exception + * @since 3.2 + */ +function Admin_Postinstall_Template_action() +{ + $url = 'index.php?option=com_biblestudy&view=templates'; + JFactory::getApplication()->redirect($url); +} diff --git a/build/com_proclaim-9.2.1/admin/tables/admin.php b/build/com_proclaim-9.2.1/admin/tables/admin.php new file mode 100644 index 0000000000..b894d12771 --- /dev/null +++ b/build/com_proclaim-9.2.1/admin/tables/admin.php @@ -0,0 +1,231 @@ +loadArray($array['params']); + $params = $parameter->toArray(); + $array['params'] = (string) $parameter; + } + // If simple mode, check and rename some files to hide menus + $views = array(); + $views[] = 'landingpage'; + $views[] = 'podcastdisplay'; + $views[] = 'podcastlist'; + $views[] = 'seriesdisplay'; + $views[] = 'seriesdisplays'; + $views[] = 'sermon'; + $views[] = 'teacher'; + $views[] = 'teachers'; + if ($params['simple_mode'] == 1) + { + //Go through each folder and change content of default.xml to add the hidden value to the layout tag + foreach ($views as $view) + { + $filecontents = file_get_contents(JPATH_ROOT . DIRECTORY_SEPARATOR . 'components/com_biblestudy/views/'.$view.'/tmpl/default.xml'); + if (substr_count($filecontents, '