In mid development for image upload handling
authorChuck Scott <cscott@gaslightmedia.com>
Tue, 30 Jun 2015 14:50:09 +0000 (10:50 -0400)
committerChuck Scott <cscott@gaslightmedia.com>
Tue, 30 Jun 2015 14:50:09 +0000 (10:50 -0400)
62 files changed:
classes/data/dataAccommodationTypes.php
classes/data/dataAmenities.php
classes/data/dataCategories.php
classes/data/dataCategoryMemberInfo.php
classes/data/dataCities.php
classes/data/dataImages.php [new file with mode: 0644]
classes/data/dataMemberInfo.php
classes/data/dataMemberTypes.php
classes/data/dataMembers.php
classes/data/dataRegions.php
classes/data/settings/dataSettingsGeneral.php
classes/data/settings/dataSettingsTerms.php [new file with mode: 0644]
config/plugin.ini
controllers/admin.php
glm-member-db.php
js/imageUpload/OLD_SAVE_imageUpload.js [new file with mode: 0644]
js/imageUpload/imageUpload.css [new file with mode: 0644]
js/imageUpload/imageUpload.js [new file with mode: 0644]
js/jqueryDragAndDrop-ForReferenceOnly/.editorconfig [new file with mode: 0644]
js/jqueryDragAndDrop-ForReferenceOnly/.gitignore [new file with mode: 0644]
js/jqueryDragAndDrop-ForReferenceOnly/.travis.yml [new file with mode: 0644]
js/jqueryDragAndDrop-ForReferenceOnly/README [new file with mode: 0644]
js/jqueryDragAndDrop-ForReferenceOnly/jquery.ezdz.css [new file with mode: 0644]
js/jqueryDragAndDrop-ForReferenceOnly/jquery.ezdz.js [new file with mode: 0644]
lib/GlmDataAbstract/DataAbstract.php
lib/html5-File-Upload/assets/css/styles.css [new file with mode: 0644]
lib/html5-File-Upload/assets/img/background_tile_1.jpg [new file with mode: 0644]
lib/html5-File-Upload/assets/img/background_tile_2.jpg [new file with mode: 0644]
lib/html5-File-Upload/assets/img/background_tile_3.jpg [new file with mode: 0644]
lib/html5-File-Upload/assets/img/blue_line.jpg [new file with mode: 0644]
lib/html5-File-Upload/assets/img/done.png [new file with mode: 0644]
lib/html5-File-Upload/assets/img/logo.jpg [new file with mode: 0644]
lib/html5-File-Upload/assets/img/tzine.png [new file with mode: 0644]
lib/html5-File-Upload/assets/js/jquery.filedrop.js [new file with mode: 0644]
lib/html5-File-Upload/assets/js/upload-script.js [new file with mode: 0644]
lib/html5-File-Upload/post_file.php [new file with mode: 0644]
lib/html5-File-Upload/sample-index.html [new file with mode: 0644]
misc/databaseScripts/create_database_V0.1.sql
misc/notes.txt
misc/smarty/templates_c/081a36d97cdf30d438a1e104c26a275acc180da0.file.index.html.php
misc/smarty/templates_c/47fb9b803e7138d215645f3c977b0b1dc2a9e718.file.index.html.php
misc/smarty/templates_c/60cbe99d19bbec013cbca4d9344f2fd4a4152f52.file.index.html.php
models/admin/dashboardWidget/index.php
models/admin/member/memberImage.php [new file with mode: 0644]
models/admin/member/memberInfo.php
models/admin/members/index.php
models/admin/settings/index.php
models/admin/settings/terms.php [new file with mode: 0644]
views/admin/configure/accommodationTypes.html
views/admin/configure/amenities.html
views/admin/configure/categories.html
views/admin/configure/cities.html
views/admin/configure/index.html
views/admin/configure/regions.html
views/admin/dashboardWidget/index.html
views/admin/member/memberInfo.html
views/admin/members/index.html
views/admin/settings/header.html
views/admin/settings/index.html
views/admin/settings/terms.html [new file with mode: 0644]
views/admin/settingsPage-ISTHISNEEDED/index.html [new file with mode: 0644]
views/admin/settingsPage/index.html [deleted file]

index c87ab97..ef803e5 100644 (file)
@@ -141,7 +141,7 @@ class GlmDataAccommodationTypes extends GlmDataAbstract
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
index ee49098..ce8d06c 100644 (file)
@@ -157,7 +157,7 @@ class GlmDataAmenities extends GlmDataAbstract
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
index 5f1062e..599f72f 100644 (file)
@@ -154,7 +154,7 @@ class GlmDataCategories extends GlmDataAbstract
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
@@ -283,7 +283,7 @@ class GlmDataCategories extends GlmDataAbstract
 
         }
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice("Category added: name = $name, parent = $parent, ID = $categoryID", 'DataBlock', "addCategory()");
         }
 
index 447d0ee..23b30fc 100644 (file)
@@ -143,7 +143,7 @@ class GlmDataCategoryMemberInfo extends GlmDataAbstract
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
@@ -200,7 +200,7 @@ class GlmDataCategoryMemberInfo extends GlmDataAbstract
         ;";
         $list = $this->wpdb->get_results($sql, ARRAY_A);
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($sql, 'DataBlock', "DataAbstract - getListWithParents() query");
             glmMembersAdmin::addNotice($list, 'DataBlock', 'getListWithParents() data');
         }
@@ -289,7 +289,7 @@ class GlmDataCategoryMemberInfo extends GlmDataAbstract
         // Get new list and return it
         $current = $this->getList($memberInfoID);
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($current, 'DataBlock', 'Currently Selected Member Categories');
         }
 
index 35396aa..8b4156c 100644 (file)
@@ -10,7 +10,7 @@
  * @package  GLM Member-DB
  * @author   Chuck Scott <cscott@gaslightmedia.com>
  * @license  http://www.gaslightmedia.com Gaslightmedia
- * @release  SVN: $Id: dataMemberType.php,v 1.0 2011/01/25 19:31:47 cscott Exp $
+ * @release  SVN: $Id: dataCities.php,v 1.0 2011/01/25 19:31:47 cscott Exp $
  */
 
 /**
@@ -22,8 +22,8 @@
  * @package EventManagement
  * @author Chuck Scott <cscott@gaslightmedia.com>
  * @license http://www.gaslightmedia.com Gaslightmedia
- *          @release SVN: $Id: dataMembers.php,v 1.0 2011/01/25 19:31:47 cscott
- *          Exp $
+ * @release SVN: $Id: dataCities.php,v 1.0 2011/01/25 19:31:47 cscott
+ * Exp $
  */
 class GlmDataCities extends GlmDataAbstract
 {
@@ -126,7 +126,7 @@ class GlmDataCities extends GlmDataAbstract
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
diff --git a/classes/data/dataImages.php b/classes/data/dataImages.php
new file mode 100644 (file)
index 0000000..a5e66e3
--- /dev/null
@@ -0,0 +1,240 @@
+<?php
+
+/**
+ * GLM Member-DB WordPress Plugin
+ * Images data class
+ *
+ * PHP version 5.3
+ *
+ * @category Data
+ * @package  GLM Member-DB
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  SVN: $Id: dataImages.php,v 1.0 2011/01/25 19:31:47 cscott Exp $
+ */
+
+/**
+ * EventManagementDataImages class
+ *
+ * PHP version 5
+ *
+ * @category Data
+ * @package EventManagement
+ * @author Chuck Scott <cscott@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ *          @release SVN: $Id: dataImages.php,v 1.0 2011/01/25 19:31:47 cscott
+ *          Exp $
+ */
+class GlmDataImages extends GlmDataAbstract
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+    /**
+     * Field definitions
+     *
+     * @var $ini
+     * @access public
+     */
+    public $table;
+
+    /**
+     * Field definitions
+     *
+     * 'type' is type of field as defined by the application
+     * text Regular text field
+     * pointer Pointer to an entry in another table
+     * 'filters' is the filter name for a particular filter ID in PHP filter
+     * functions
+     * See PHP filter_id()
+     *
+     * 'use' is when to use the field
+     * l = List
+     * g = Get
+     * n = New
+     * i = Insert
+     * e = Edit
+     * u = Update
+     * d = Delete
+     * a = All
+     *
+     * @var $ini
+     * @access public
+     */
+    public $fields = false;
+
+    /**
+     * Constructor
+     *
+     * @param object $d
+     *            database connection
+     *
+     * @return void
+     * @access public
+     */
+    function __construct ($wpdb, $config)
+    {
+
+        // If this class is not being extended along with existing $wpdb and $config
+           if (!$this->wpdb) {
+
+           // Save WordPress Database object
+           $this->wpdb = $wpdb;
+
+           // Save plugin configuration object
+           $this->config = $config;
+
+           }
+
+        /*
+         * Table Name
+         */
+        $this->table = GLM_MEMBERS_PLUGIN_DB_PREFIX . 'images';
+
+        /*
+         * Table Data Fields
+         */
+        $this->fields = array(
+
+                'id' => array(
+                        'field' => 'id',
+                        'type' => 'integer',
+                        'view_only' => true,
+                        'use' => 'a'
+                ),
+
+                // Status
+                'status' => array (
+                        'field' => 'status',
+                        'type' => 'list',
+                        'list' => $this->config['status'],
+                        'required' => true,
+                        'default' => $this->config['status_numb']['Pending'],
+                        'force_list' => true,
+                        'use' => 'a'
+                ),
+
+                // File Name
+                'file_name' => array(
+                        'field' => 'file_name',
+                        'type' => 'text',
+                        'required' => true,
+                        'use' => 'a'
+                ),
+
+                // Description
+                'descr' => array(
+                        'field' => 'descr',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Caption
+                'caption' => array(
+                        'field' => 'caption',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Position
+                'position' => array(
+                        'field' => 'position',
+                        'type' => 'integer',
+                        'use' => 'a'
+                ),
+
+                // Reference Type - Which table this entry is associated with
+                'ref_type' => array (
+                        'field' => 'ref_type',
+                        'type' => 'list',
+                        'list' => $this->config['ref_type'],
+                        'required' => true,
+                        'default' => $this->config['ref_type_numb']['None'],
+                        'force_list' => true,
+                        'use' => 'a'
+                ),
+
+                // Reference Destination - Which entry in the table is it associated with
+                'position' => array(
+                        'field' => 'position',
+                        'type' => 'integer',
+                        'use' => 'a'
+                )
+
+        );
+
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+            glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
+        }
+
+    }
+
+
+    /*
+     * Get an Image Gallery
+     *
+     * Retrieves all images for a specific refernce type and ID
+     *
+     * Reference types point to a particuarl table of data, such as
+     * the member_info table. The ID points to a particular entry,
+     * such as a specific member information record (Reference
+     * Destination).
+     *
+     * @param int $refType Reference Type
+     * @param int $refID Reference entry ID
+     *
+     * @return object Class object
+     *
+     */
+    public function getGallery($refType, $refID )
+    {
+
+        // Check for a valid reference type
+        if (!isset($this->config['ref_type'][$refType])) {
+
+            if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                glmMembersAdmin::addNotice("<b>dataImages.php - getGallery()</b><br>&nbsp;&nbsp;Specified reference type ($refType) is invalid.", 'Alert');
+            }
+
+            return false;
+        }
+
+        // Make sure $refID is a positive integer - If it's not a valid reference, nothing will be returned anyway.
+        $refID = $refID -0;
+        if ($refID <= 0) {
+
+            if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                glmMembersAdmin::addNotice("<b>dataImages.php - getGallery()</b><br>&nbsp;&nbsp;Specified reference destination ($refID) is invalid.", 'Alert');
+            }
+
+            return false;
+        }
+
+
+        // Get all images matching $refType and $refID ordered by "position" number
+        $where = "T.ref_type = $refType AND T.ref_dest = $refID";
+        $imageGallery = $this->getList($where, 'T.position');
+
+        // Check if we found anything
+        if (!is_array($imageGallery) || count($imageGallery) == 0) {
+            return false;
+        }
+
+        return $imageGallery;
+
+    }
+}
+
+?>
\ No newline at end of file
index ced7e2e..5ff5ea2 100644 (file)
@@ -314,7 +314,7 @@ class GlmDataMemberInfo extends GlmDataAbstract
 
                );
 
-               if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+               if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
                    glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
                }
 
index 92cd797..887f3bb 100644 (file)
@@ -134,7 +134,7 @@ class GlmDataMemberTypes extends GlmDataAbstract
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
index 753c572..409102e 100644 (file)
@@ -179,7 +179,7 @@ class GlmDataMembers extends GlmDataAbstract {
 
                );
 
-               if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+               if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
                    glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
                }
 
index 571df30..09ccaef 100644 (file)
@@ -141,7 +141,7 @@ class GlmDataRegions extends GlmDataAbstract
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
index dc7ea0a..ad6fc34 100644 (file)
@@ -122,21 +122,21 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                 // Adming Debug
                 'admin_debug' => array(
                         'field' => 'admin_debug',
-                        'type' => 'boolean',
+                        'type' => 'checkbox',
                         'use' => 'a'
                 ),
 
                 // Adming Debug Verbose
                 'admin_debug_verbose' => array(
                         'field' => 'admin_debug_verbose',
-                        'type' => 'boolean',
+                        'type' => 'checkbox',
                         'use' => 'a'
                 ),
 
                 // Front-end Debug
                 'front_debug' => array(
                         'field' => 'front_debug',
-                        'type' => 'boolean',
+                        'type' => 'checkbox',
                         'use' => 'a'
                 ),
 
@@ -266,7 +266,7 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                         'field' => 'list_logo_size',
                                'type' => 'list',
                                'list' => $this->config['image_sizes'],
-                        'required' => true,
+                        'force_list' => true,
                         'use' => 'a'
                 ),
 
@@ -280,7 +280,7 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
 
                 // Front-end Listings - Show Street
                 'list_show_street' => array(
-                        'field' => 'list_show_Street',
+                        'field' => 'list_show_street',
                         'type' => 'checkbox',
                         'use' => 'a'
                 ),
@@ -366,7 +366,7 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                 ),
 
                 // Front-end Listings - Show Credit Cards
-                'list_show_logo' => array(
+                'list_show_creditcards' => array(
                         'field' => 'list_show_creditcards',
                         'type' => 'checkbox',
                         'default' => true,
@@ -406,13 +406,13 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                         'field' => 'list_map_logo_size',
                                'type' => 'list',
                                'list' => $this->config['image_sizes'],
-                        'required' => true,
+                        'force_list' => true,
                         'use' => 'a'
                 ),
 
                 // Front-end Listings - Map Show Description
-                'list_map_show_description' => array(
-                        'field' => 'list_map_show_description',
+                'list_map_show_descr' => array(
+                        'field' => 'list_map_show_descr',
                         'type' => 'checkbox',
                         'default' => false,
                         'use' => 'a'
@@ -435,7 +435,7 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                 ),
 
                 // Front-end Listings - Map Show Street
-                'list_map_show_Street' => array(
+                'list_map_show_street' => array(
                         'field' => 'list_map_show_street',
                         'type' => 'checkbox',
                         'default' => false,
@@ -555,13 +555,13 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                         'field' => 'detail_logo_size',
                         'type' => 'list',
                         'list' => $this->config['image_sizes'],
-                        'required' => true,
+                        'force_list' => true,
                         'use' => 'a'
                 ),
 
                 // Front-end Member Detail - Show Description
-                'detail_show_description' => array(
-                        'field' => 'detail_show_description',
+                'detail_show_descr' => array(
+                        'field' => 'detail_show_descr',
                         'type' => 'checkbox',
                         'default' => false,
                         'use' => 'a'
@@ -669,11 +669,148 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                         'type' => 'checkbox',
                         'default' => false,
                         'use' => 'a'
-                )
+                ),
+
+                /*
+                 * Front-end Member Detail Map Options
+                 */
+
+                // Front-end Detail - Map Show Logo
+                'detail_map_show_logo' => array(
+                        'field' => 'detail_map_show_logo',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Logo Size
+                'detail_map_logo_size' => array(
+                        'field' => 'detail_map_logo_size',
+                        'type' => 'list',
+                        'list' => $this->config['image_sizes'],
+                        'force_list' => true,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Description
+                'detail_map_show_descr' => array(
+                        'field' => 'detail_map_show_descr',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Short Description
+                'detail_map_show_short_descr' => array(
+                        'field' => 'detail_map_show_short_descr',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Address
+                'detail_map_show_address' => array(
+                        'field' => 'detail_map_show_address',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Street
+                'detail_map_show_street' => array(
+                        'field' => 'detail_map_show_street',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show City, State, ZIP
+                'detail_map_show_citystatezip' => array(
+                        'field' => 'detail_map_show_citystatezip',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Country
+                'detail_map_show_country' => array(
+                        'field' => 'detail_map_show_country',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Region
+                'detail_map_show_region' => array(
+                        'field' => 'detail_map_show_region',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Phone
+                'detail_map_show_phon' => array(
+                        'field' => 'detail_map_show_phone',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Toll Free
+                'detail_map_show_tollfree' => array(
+                        'field' => 'detail_map_show_tollfree',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show URL
+                'detail_map_show_url' => array(
+                        'field' => 'detail_map_show_url',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show URL With New Target
+                'detail_map_show_url_newtarget' => array(
+                        'field' => 'detail_map_show_url_newtarget',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Categories
+                'detail_map_show_categories' => array(
+                        'field' => 'detail_map_show_categories',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show Credit Cards
+                'detail_map_show_creditcards' => array(
+                        'field' => 'detail_map_show_creditcards',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+                // Front-end Detail - Map Show amenities
+                'detail_map_show_amenities' => array(
+                        'field' => 'detail_map_show_amenities',
+                        'type' => 'checkbox',
+                        'default' => false,
+                        'use' => 'a'
+                ),
+
+
+
+
 
         );
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
         }
 
diff --git a/classes/data/settings/dataSettingsTerms.php b/classes/data/settings/dataSettingsTerms.php
new file mode 100644 (file)
index 0000000..4a05295
--- /dev/null
@@ -0,0 +1,448 @@
+<?php
+
+/**
+ * GLM Member-DB WordPress Plugin
+ * Terms and Phrases Settings data class
+ *
+ * PHP version 5.3
+ *
+ * @category Data
+ * @package  GLM Member-DB
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  SVN: $Id: dataSettingsTerms.php,v 1.0 2011/01/25 19:31:47 cscott Exp $
+ */
+
+/**
+ * EventManagementDataSettingsGeneral class
+ *
+ * PHP version 5
+ *
+ * @category Data
+ * @package EventManagement
+ * @author Chuck Scott <cscott@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ *          @release SVN: $Id: dataMembers.php,v 1.0 2011/01/25 19:31:47 cscott
+ *          Exp $
+ */
+class GlmDataSettingsTerms extends GlmDataAbstract
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+    /**
+     * Field definitions
+     *
+     * @var $ini
+     * @access public
+     */
+    public $table;
+
+    /**
+     * Field definitions
+     *
+     * 'type' is type of field as defined by the application
+     * text Regular text field
+     * pointer Pointer to an entry in another table
+     * 'filters' is the filter name for a particular filter ID in PHP filter
+     * functions
+     * See PHP filter_id()
+     *
+     * 'use' is when to use the field
+     * l = List
+     * g = Get
+     * n = New
+     * i = Insert
+     * e = Edit
+     * u = Update
+     * d = Delete
+     * a = All
+     *
+     * @var $ini
+     * @access public
+     */
+    public $fields = false;
+
+    /**
+     * Constructor
+     *
+     * @param object $d
+     *            database connection
+     *
+     * @return void
+     * @access public
+     */
+    function __construct ($wpdb, $config)
+    {
+
+        // If this class is not being extended along with existing $wpdb and $config
+           if (!$this->wpdb) {
+
+           // Save WordPress Database object
+           $this->wpdb = $wpdb;
+
+           // Save plugin configuration object
+           $this->config = $config;
+
+           }
+
+        /*
+         * Table Name
+         */
+        $this->table = GLM_MEMBERS_PLUGIN_DB_PREFIX . 'settings_terms';
+
+        /*
+         * Table Data Fields
+         */
+        $this->fields = array(
+
+                'id' => array(
+                        'field' => 'id',
+                        'type' => 'integer',
+                        'view_only' => true,
+                        'use' => 'a'
+                ),
+
+                /*
+                 * Admin Menu Names
+                 */
+
+                // Menu Members
+                'term_admin_menu_members' => array(
+                        'field' => 'term_admin_menu_members',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Sub Menu Member List
+                'term_admin_menu_members_list' => array(
+                        'field' => 'term_admin_menu_member_list',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Menu Member
+                'term_admin_menu_member' => array(
+                        'field' => 'term_admin_menu_member',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Menu Configure
+                'term_admin_menu_configure' => array(
+                        'field' => 'term_admin_menu_configure',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Menu Settings
+                'term_admin_menu_settings' => array(
+                        'field' => 'term_admin_menu_settings',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Menu Shortcodes
+                'term_admin_menu_shortcodes' => array(
+                        'field' => 'term_admin_menu_shortcodes',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                /*
+                 * Admin Page Tabs
+                 */
+
+                // Tab Members/Main Dashboard
+                'term_admin_menu_members_dashboard' => array(
+                        'field' => 'term_admin_menu_members_dashboard',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Members/List of Members
+                'term_admin_menu_members_list' => array(
+                        'field' => 'term_admin_menu_members_list',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Members/Reports
+                'term_admin_menu_members_reports' => array(
+                        'field' => 'term_admin_menu_members_reports',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Member/Member Dashboard
+                'term_admin_menu_member_dashboard' => array(
+                        'field' => 'term_admin_menu_member_dashboard',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Member/Member Info
+                'term_admin_menu_member_info' => array(
+                        'field' => 'term_admin_menu_member_info',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Member/Locations
+                'term_admin_menu_member_locations' => array(
+                        'field' => 'term_admin_menu_member_locations',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Member/Facilities
+                'term_admin_menu_member_facilities' => array(
+                        'field' => 'term_admin_menu_member_facilities',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Member/Attractions
+                'term_admin_menu_member_attractions' => array(
+                        'field' => 'term_admin_menu_member_attractions',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Member/Contacts
+                'term_admin_menu_member_contacts' => array(
+                        'field' => 'term_admin_menu_member_contacts',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Configure/Member Types
+                'term_admin_menu_configure_member_types' => array(
+                        'field' => 'term_admin_menu_configure_member_types',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Configure/Member Categories
+                'term_admin_menu_configure_member_cats' => array(
+                        'field' => 'term_admin_menu_configure_member_cats',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Configure/Accommodation Types
+                'term_admin_menu_configure_accom_types' => array(
+                        'field' => 'term_admin_menu_configure_accom_types',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Configure/Amenities
+                'term_admin_menu_configure_amenities' => array(
+                        'field' => 'term_admin_menu_configure_amenities',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Configure/Cities
+                'term_admin_menu_configure_cities' => array(
+                        'field' => 'term_admin_menu_configure_cities',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Configure/Regions
+                'term_admin_menu_configure_regions' => array(
+                        'field' => 'term_admin_menu_configure_regions',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Settings/General Settings
+                'term_admin_menu_settings_general' => array(
+                        'field' => 'term_admin_menu_settings_general',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Settings/Terms and Phrases
+                'term_admin_menu_settings_terms' => array(
+                        'field' => 'term_admin_menu_settings_terms',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Tab Settings/Development
+                'term_admin_menu_settings_development' => array(
+                        'field' => 'term_admin_menu_settings_development',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                /*
+                 * General Terms
+                 */
+
+                // Member
+                'term_member' => array(
+                        'field' => 'term_member',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Member Cap
+                'term_member_cap' => array(
+                        'field' => 'term_member_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Member Plural
+                'term_member_plur' => array(
+                        'field' => 'term_member_plur',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Member Plural Cap
+                'term_member_plur_cap' => array(
+                        'field' => 'term_member_plur_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Location
+                'term_location' => array(
+                        'field' => 'term_location',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Location Cap
+                'term_location_cap' => array(
+                        'field' => 'term_location_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Location Plur
+                'term_location_plur' => array(
+                        'field' => 'term_location_plur',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Location Plur Cap
+                'term_location_plur_cap' => array(
+                        'field' => 'term_location_plur_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Facility
+                'term_facility' => array(
+                        'field' => 'term_facility',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Facility Cap
+                'term_facility_cap' => array(
+                        'field' => 'term_facility_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Facility Plur
+                'term_facility_plur' => array(
+                        'field' => 'term_facility_plur',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Facility Plur Cap
+                'term_facility_plur_cap' => array(
+                        'field' => 'term_facility_plur_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Attraction
+                'term_attraction' => array(
+                        'field' => 'term_attraction',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Attraction Cap
+                'term_attraction_cap' => array(
+                        'field' => 'term_attraction_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Attraction Plur
+                'term_attraction_plur' => array(
+                        'field' => 'term_attraction_plur',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Attraction Plur Cap
+                'term_attraction_plur_cap' => array(
+                        'field' => 'term_attraction_plur_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Contact
+                'term_contact' => array(
+                        'field' => 'term_contact',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Contact Cap
+                'term_contact_cap' => array(
+                        'field' => 'term_contact_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Contact Plur
+                'term_contact_plur' => array(
+                        'field' => 'term_contact_plur',
+                        'type' => 'text',
+                        'use' => 'a'
+                ),
+
+                // Contact Plur Cap
+                'term_contact_plur_cap' => array(
+                        'field' => 'term_contact_plur_cap',
+                        'type' => 'text',
+                        'use' => 'a'
+                )
+
+
+        );
+
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+            glmMembersAdmin::addNotice($this->fields, 'DataBlock', 'Table Fields: '.$this->table);
+        }
+
+    }
+}
+
+?>
\ No newline at end of file
index 4263698..fad26a1 100644 (file)
@@ -323,6 +323,7 @@ phrase['phrase_test'] = 'test'
 
 [chuck:common]
 admin_debug = true
+admin_debug_verbose = true
 front_debug = true
 googleMapsApiKey = ''
 
index 1868820..064bc73 100644 (file)
@@ -41,7 +41,8 @@ $GLOBALS['glmMembersAdminValidActions'] = array(
                 'locations',
                 'facilities',
                 'activities',
-                'accommodations'
+                'accommodations',
+                'memberImage',      // Member Image Processing via AJAX
         )
         ,
         'configure' => array(
@@ -54,6 +55,7 @@ $GLOBALS['glmMembersAdminValidActions'] = array(
         ),
         'settings' => array(
                 'index',            // General Options
+                'terms',            // Terms and Phrases
                 'development'
         ),
         'shortcodes' => array(
@@ -219,20 +221,95 @@ class glmMembersAdmin extends GlmPluginSupport
 
                 ));
 
-/*
-        add_action( 'admin_init',
-                array(
-                        $this,
-                        'glmMembersAdminSettingsInit'
-                ));
-*/
+        // Add AJAX image upload action
+        add_action( 'wp_ajax_glm_members_image_upload',
+            array(
+                $this,
+                'glmMembersImageUpload'
+            )
+        );
+
+
+    }
+
+    /**
+     * Image Upload AJAX Target
+     *
+     * Acccepts image uploads and routes them to the appropriate
+     * model file.
+     *
+     * @return void
+     * @access public
+     */
+    public function  glmMembersImageUpload()
+    {
+        // Get the model menu
+        if (isset($_REQUEST['glm_menu']) && $_REQUEST['glm_menu'] != '') {
+            $a = sanitize_text_field($_REQUEST['glm_menu']);
+            if ($a != '') {
+                $menuItem = $a;
+            } else {
+                // No menu provided - terminating
+                trigger_error ( 'ERROR: No "glm_menu" string provided in POST array.', E_USER_ERROR);
+            }
+        } else {
+            // Missing glm_menu Item in post array.
+            trigger_error ( 'ERROR: No "glm_menu" item in POST array.', E_USER_ERROR);
+        }
+
+        // Get the model action
+        if (isset($_REQUEST['glm_action']) && $_REQUEST['glm_action'] != '') {
+            $a = sanitize_text_field($_REQUEST['glm_action']);
+            if ($a != '') {
+                $Action = $a;
+            } else {
+                // No menu provided - terminating
+                trigger_error ( 'ERROR: No "glm_action" string provided in POST array.', E_USER_ERROR);
+            }
+
+        } else {
+            trigger_error ( 'ERROR: No "glm_action" itme in POST array.', E_USER_ERROR);
+        }
+
+        // If menu item and action aren't valid, quit now.
+        if (! isset($GLOBALS['glmMembersAdminValidActions'][$menuItem]) ||
+            ! in_array($Action, $GLOBALS['glmMembersAdminValidActions'][$menuItem])) {
+
+            // Menu item/Action not in valid actions array
+            trigger_error ( 'ERROR: The specified menu item and action are not valid.', E_USER_ERROR);
+        }
+
+        // Build model and path and class names
+        $modelName = GLM_MEMBERS_PLUGIN_PATH . '/models/admin/' . $menuItem .
+                 '/' . $Action . '.php';
+        $className = 'GlmMembersAdmin_' . $menuItem . '_' . $Action;
+
+        // If model file doesn't exist - we have an error
+        if (!file_exists($modelName)) {
+            trigger_error ( "ERROR: The specified model file doesn't exist. ($modelName)", E_USER_ERROR);
+        }
+
+        // Load the model file
+        require_once ($modelName);
+
+        // check for an invalid model class name
+        if (!class_exists($className)) {
+            trigger_error ( "ERROR: The specified class naeme doesn't exist. ($className)", E_USER_ERROR);
+        }
+
+        // Instantiate the model and ask it to perform the work
+        $model = new $className($this->wpdb, $this->config);
+        $model->modelAction();
+
+        wp_die();
+
     }
 
     /**
      * Setup inclusion of admin scripts and css
      *
      * This method is called by an add_action() hook setup in the contructor.
-     *
+     *FormData
      * (no prameters)
      *
      * @return void
@@ -252,6 +329,8 @@ class glmMembersAdmin extends GlmPluginSupport
         wp_enqueue_style('wp-jquery-ui-dialog');
 
         wp_enqueue_media();
+
+        // Scripts included with this plugin
         wp_register_script('glm-members-admin-js',
                 GLM_MEMBERS_PLUGIN_URL . 'js/admin.js',
                 array(
@@ -265,6 +344,16 @@ class glmMembersAdmin extends GlmPluginSupport
                 GLM_MEMBERS_PLUGIN_URL . 'css/admin.css');
         wp_enqueue_style('glmMembersAdminStyle');
 
+        // Image Upload scripts and css for Member DB and perhaps other
+        wp_register_script('glm-members-admin-image-upload',
+                GLM_MEMBERS_PLUGIN_URL . 'js/imageUpload/imageUpload.js',
+                array(
+                        'jquery'
+                ));
+        wp_enqueue_script('glm-members-admin-image-upload');
+        wp_register_style('glm-members-admin-image-upload-css',
+                GLM_MEMBERS_PLUGIN_URL . 'js/imageUpload/imageUpload.css');
+        wp_enqueue_style('glm-members-admin-image-upload-css');
 
     }
 
index c89d96d..a45a1db 100644 (file)
@@ -352,8 +352,6 @@ function glmMembersAdminNotices($windowed = true)
             }
         }
 
-        delete_option('glmMembersAdminNoticeDataBlocks');
-
         echo $output.'
                 </body>
             </html>
@@ -383,11 +381,14 @@ function glmMembersAdminNotices($windowed = true)
 
         echo $output.'</p></div>';
 
-        // Delete the option containing the notices to indicate they have been sent
-        delete_option('glmMembersAdminNotices');
 
     }
 
+    delete_option('glmMembersAdminNoticeAlerts');
+    delete_option('glmMembersAdminNotices');
+    delete_option('glmMembersAdminNoticeProcess');
+    delete_option('glmMembersAdminNoticeDataBlocks');
+
 }
 
 /*
diff --git a/js/imageUpload/OLD_SAVE_imageUpload.js b/js/imageUpload/OLD_SAVE_imageUpload.js
new file mode 100644 (file)
index 0000000..61d2688
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * HTML5 Image Upload Support
+ * 
+ * Developed from information in http://www.sitepoint.com/html5-file-drag-and-drop/
+ */
+
+jQuery(document).ready(function($) {
+
+       // output information
+       function Output(msg) {
+               var m = $id("imageDragMessages");
+               m.innerHTML = msg + m.innerHTML;
+       }
+
+       // Setup Drag and Drop when Add and 
+       $('#newImageButton').click( function() {
+               //call initialization function if drag/drop supported by browser
+               if (window.File && window.FileList && window.FileReader) {
+                       ImageDragInit();
+               }
+       });
+
+       //initialize
+       function ImageDragInit() {
+
+               // is XHR2 available?
+               var xhr = new XMLHttpRequest();
+               if (xhr.upload) {
+       
+                       // Change from Drag/Drop not supported to drop here display
+                       $('#noImageDrop').css('display', 'none');
+                       $('#noImageDrop').css('display', 'none');
+                       $('#imageDrop').css('display', 'block');                
+               
+                       // file drop
+//                     imageDrop.addEventListener("dragover", FileDragHover, false);
+//                     imageDrop.addEventListener("dragleave", FileDragHover, false);
+//                     imageDrop.addEventListener("drop", FileSelectHandler, false);
+                       
+                       // remove submit button
+                       newImageSubmit.style.display = "none";
+
+               }
+
+       }
+       
+       /*
+       $(window).on('dragenter', function(){
+               $(this).preventDefault();
+       });
+*/
+       
+       // Change drop destination appearance only when dragging over a file.
+       $('#imageDrop').on('dragenter', function(){
+               $('#imageDropText').css('display', 'none');
+               $('#imageDrop').addClass('imageDropDragOver');
+       });
+
+       $('#imageDrop').on('dragleave', function(){
+               $('#imageDropText').css('display', 'block');
+               $('#imageDrop').removeClass('imageDropDragOver');
+       });
+       
+       // file drag hover
+       $('#imageDrop').mouseover( function(e) {
+               e.stopPropagation();
+//             e.preventDefault();
+//             $('#imageDrop').css('display', 'block');                
+               e.target.className = (e.type == "dragover" ? "hover" : "");
+       });
+       
+       // file selection
+       $('#newImage').change( function() {
+
+               // cancel event and hover styling
+               FileDragHover(e);
+
+               // fetch FileList object
+               var files = e.target.files || e.dataTransfer.files;
+
+               // process all File objects
+               for (var i = 0, f; f = files[i]; i++) {
+                       ParseFile(f);
+               }
+
+       });
+
+});
diff --git a/js/imageUpload/imageUpload.css b/js/imageUpload/imageUpload.css
new file mode 100644 (file)
index 0000000..660dd1e
--- /dev/null
@@ -0,0 +1,132 @@
+.glm-imageGalleryContainer
+{
+    margin: .5em 1em 1em 1em;
+    padding: .5em;
+    border: 2px solid #ccc;
+    text-align: center;
+}
+
+.glm-imageDropContainer
+{
+    position: relative;
+    text-align: center;
+    padding: 0 1em 1em 1em;
+    background-color: #eee;
+    border: 2px solid #ccc;
+    border-radius: 7px;
+    cursor: default;
+    margin-left: auto;
+    margin-right: auto;
+    width: 75%;
+    height: 5em;
+}
+.glm-imageDrop
+{
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    z-index: 10;
+    border-radius: 7px;
+    height: 100%;
+    background-color: #000;
+    opacity: .0;
+    filter: alpha(opacity=0); /* For IE8 and earlier */
+    
+}
+.glm-imageDropText
+{
+    color: #666;
+    z-index: 9; 
+}
+.glm-noImageDropText
+{
+    color: #666;
+}
+.glm-imageItemHidden
+{
+    display: none;
+    z-index: 9;    
+}
+.glm-imageDropDragOver
+{
+    border: 2px solid #000 important;
+    background-color: #fff;
+}
+.glm-imageUploadStatus
+{
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 20px;
+    left: 10px;
+    z-index: 11;
+    border: 2px solid black;
+    border-radius: 7px;
+    height: 8em;
+    background-color: #fff;
+    box-shadow: 10px 10px 5px grey;
+}
+
+.glm-imageGalleryImages
+{
+}
+
+.glm-statusTable 
+{
+    width: 100%;
+/*    table-layout: fixed; */
+    line-height: 80%;
+}
+.glm-statusImageTD
+{
+/*    width: 25%; */
+    max-width: 100%;
+    overflow: hidden;
+    padding: 3px;
+    display: table-cell;
+    vertical-align: middle; 
+}
+.glm-statusPrompt 
+{
+    width: 10%;
+    padding: 0px;
+    font-weight: bold;
+    text-align: right;
+}
+.glm-statusValue
+{
+    width: 65%;
+    padding: 0px;    
+    text-align: left;
+}
+.glm-statusImageContainer
+{
+    display: block;
+    width: 100px;
+}
+.glm-statusImage
+{
+    height: 5.1em;
+    width: auto;
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+.glm-progressBarContainer 
+{
+    height: 100%;
+    width: 95%;
+    background-color: #ccc;
+    border: 1px solid black;
+    line-height: 1em;
+}
+.glm-progressBar
+{
+    height: 1em;
+    background-color: blue;
+    width: 0%;
+}
+
diff --git a/js/imageUpload/imageUpload.js b/js/imageUpload/imageUpload.js
new file mode 100644 (file)
index 0000000..5a64419
--- /dev/null
@@ -0,0 +1,314 @@
+/*
+ * HTML5 Image Upload Support
+ * 
+ * Developed from information in 
+ *     http://www.sitepoint.com/html5-file-drag-and-drop/
+ *  http://hayageek.com/drag-and-drop-file-upload-jquery/
+ */
+
+
+/****** NEED TO ADD FILE SIZE TEST AND USER NOTICE ALERT *******/
+
+jQuery(document).ready(function($) {
+
+       
+       var drop;
+       var recordID;
+       var menuItem;
+       var action;
+       var files;
+       
+       // Setup Drag and Drop when Add and 
+       if (window.File && window.FileList && window.FileReader) {
+       
+               // is XHR2 available?
+               var xhr = new XMLHttpRequest();
+               if (xhr.upload) {
+
+                       // Change from Drag/Drop not supported to drop here text
+                       $('.glm-imageBrowseButton').addClass('glm-imageItemHidden');
+                       $('.glm-imageDropText').removeClass('glm-imageItemHidden');
+                       $('.glm-imageDrop').removeClass('glm-imageItemHidden');
+
+                       // Prevent dropping on the document
+                       $(document).on('dragenter', function (e) {
+                           e.stopPropagation();
+                           e.preventDefault();
+                       });
+                       $(document).on('dragover', function (e) {
+                         e.stopPropagation();
+                         e.preventDefault();
+                       });
+                       $(document).on('drop', function (e) {
+                           e.preventDefault();
+                       });
+                       
+                       // For each image drop area
+                       $('.glm-imageDrop').each(function() {
+                               drop = $(this);
+                               initDrop();
+                               
+                               // **** NEED TO DEAL WITH DELAY TILL THE PRIOR DROP AREA HAS BEEN PROCESSED ***
+                               
+                       });
+
+               } else {
+                       $('.glm-noImageDropText').removeClass('glm-imageItemHidden');
+               }
+
+       }
+       
+       // Setup a single drop area
+       function initDrop() {
+
+               // Get ID for the record number to which these images belong.
+               recordID = drop.attr("data-id");
+               menuItem = drop.attr("data-menuItem");
+               action = drop.attr("data-action");
+               
+               // Change drop destination appearance only when dragging over a file.
+               drop.on('dragenter', function(e){
+                       e.stopPropagation();
+                       e.preventDefault();
+                       drop.parent().addClass('glm-imageDropDragOver');
+               });
+               drop.on('dragover', function(e){
+                       e.stopPropagation();
+                       e.preventDefault();
+               });
+               drop.on('dragleave', function(e){
+                       e.stopPropagation();
+                       e.preventDefault();
+                       drop.parent().removeClass('glm-imageDropDragOver');
+               });
+               
+               // File drop action
+               $('.glm-imageDrop').on('drop', function (e) { 
+                       e.preventDefault();
+                       files = e.originalEvent.dataTransfer.files;
+                       handleFileDrop();
+                       drop.parent().removeClass('glm-imageDropDragOver');
+               });
+
+       }
+       
+       /* 
+        * This function sets up AJAX processing of the list of files.
+        * It then fires off the processFile() function to do the first
+        * file. When the AJAX call in sendFileToServer() completes,
+        * the complete: function will call processFile() again to
+        * do the next file, if one exists.  
+        */
+       var thisFile = 0;
+       var numbFiles = 0;
+
+       function handleFileDrop() {
+               
+               // Reset file pointer and set number of last file
+               thisFile = 0;
+               numbFiles = files.length;
+
+               // Start with the first file
+               processFile();
+               
+/*                     var fd = new FormData();
+               fd.append('file', file);
+
+                       var status = new createStatusbar(file, drop);
+               statusArea.fadeIn( function() {
+                       sendFileToServer(fd,status);
+               });
+*/             
+//             statusArea.addClass('glm-imageItemHidden');
+                       
+       }
+       
+       /*
+        * Process the current file - AJAX complete: will call back to this 
+        * function for the next file
+        */ 
+       function processFile() {
+
+               // If we still have files to process
+               if (thisFile < numbFiles) {
+                       
+                       file = files[thisFile];
+                       
+                       // Setup field pairs for sending in request
+                       var fd = new FormData();
+               fd.append('file', file);
+
+               // Setup status display area
+                       var status = new createStatusbar(file, thisFile, numbFiles);
+               statusArea.fadeIn( function() {
+                       
+                       // When status has faded in, Send the files
+                       sendFileToServer(fd, status, recordID);
+               
+               });
+
+               thisFile++;
+                       
+               } else {
+                       
+                       // done
+                       
+               }
+
+       }       
+       
+       function createStatusbar(file, thisFile, numbFiles)
+       {
+               var statusDone = false;
+               
+               /*
+                * We need to redefine these values inside this function
+                * so the reader.onload function can see them.
+                */
+               var curFile = thisFile + 1;
+               var lastFile = numbFiles;
+               
+               // Get status area for this drop area
+               statusArea = drop.siblings('.glm-imageUploadStatus');
+
+               // Make status area visible (overlay) and clear contents
+               statusArea.html('');
+
+               // If file is an image
+               var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.jpg|.jpeg|.gif|.png|.bmp)$/;
+
+        if (regex.test(file.name.toLowerCase())) {
+
+               // Create HTML5 file reader and load image
+               var reader = new FileReader();
+               reader.onload = function (e) {
+               
+                       // Add file information to status area
+                       statusbar =
+                               '<b><u>Uploading Image {thisFile} of {numbFiles}</u></b>' +
+                               '<table class="glm-statusTable">' +
+                               '       <tr><td class="glm-statusImageTD" rowspan="5"><div class="glm-statusImageContainer"><img class="glm-statusImage" src="{fileImage}"></div></td></tr>' +
+                               '       <tr><td class="glm-statusPrompt">Name: </td><td class="glm-statusValue">{fileName}</td></tr>' +
+                               '       <tr><td class="glm-statusPrompt">Type: </td><td class="glm-statusValue">{fileType}</td></tr>' +
+                               '       <tr><td class="glm-statusPrompt">Size: </td><td class="glm-statusValue">{fileSize}</td></tr>' +
+                               '       <tr><td class="glm-statusPrompt">Progress: </td><td class="glm-statusValue"><div class="glm-progressBarContainer"><div class="glm-progressBar"></div></div></td></tr>' +
+                               '</table>'
+                       ;
+                       statusbar = statusbar.replace('{thisFile}', curFile);
+                       statusbar = statusbar.replace('{numbFiles}', lastFile);
+                       statusbar = statusbar.replace('{fileImage}', e.target.result);
+                       statusbar = statusbar.replace('{fileName}', file.name);
+                       statusbar = statusbar.replace('{fileType}', file.type);
+
+                       // Fix up file size string and replace that
+                       var sizeStr="";
+                var sizeKB = file.size/1024;
+                if(parseInt(sizeKB) > 1024)
+                {
+                    var sizeMB = sizeKB/1024;
+                    sizeStr = sizeMB.toFixed(2)+" MB";
+                }
+                else
+                {
+                    sizeStr = sizeKB.toFixed(2)+" KB";
+                }
+                       statusbar = statusbar.replace('{fileSize}', sizeStr);
+                       
+                       // Assign the HTML to the status area
+                       statusArea.html(statusbar);
+
+               }
+            reader.readAsDataURL(file);
+        } else {
+            alert(file.name + " is not a valid image file.");
+            statusArea.addClass('glm-imageItemHidden');
+            return false;
+        }
+               
+           this.setProgress = function(progress)
+           {
+               statusArea.find('.glm-progressBar').css('width', progress + '%');
+               
+/*             
+               var progressBarWidth =progress*this.progressBar.width()/ 100;  
+               this.progressBar.find('div').animate({ width: progressBarWidth }, 10).html(progress + "% ");
+               if(parseInt(progress) >= 100)
+               {
+                   this.abort.hide();
+               }
+*/             
+           }
+
+           this.setAbort = function(jqxhr)
+           {
+               var sb = this.statusbar;
+               this.abort.click(function()
+               {
+                   jqxhr.abort();
+                   sb.hide();
+               });
+           }       
+       }
+       
+       /*
+        * Sends file to image plugin via AJAX submission targeting
+        * WordPress AJAX handling. An image upload processor has been
+        * declared with an add_action() in the admin controller 
+        * specifying the function containing that processor. We tell 
+        * WordPress how to route the submission using the "action" 
+        * post parameter. This matches everything after "wp_ajax_"
+        * in the action name. 
+        */
+       function sendFileToServer(fd, status, recordID)
+       {
+
+               fd.append( 'action', 'glm_members_image_upload' );
+
+           var jqXHR=$.ajax({
+                   xhr: function() {
+                   var xhrobj = $.ajaxSettings.xhr();
+                   if (xhrobj.upload) {
+                           xhrobj.upload.addEventListener('progress', function(event) {
+                               var percent = 0;
+                               var position = event.loaded || event.position;
+                               var total = event.total;
+                               if (event.lengthComputable) {
+                                   percent = Math.ceil(position / total * 100);
+                               }
+                               status.setProgress(percent);
+                           }, false);
+
+                   }
+                   return xhrobj;
+               },      
+               url: ajaxurl + '?glm_menu=' + menuItem + '&glm_action=' + action + '&memberInfoID=' + recordID,         // WordPress admin AJAX url
+               type: "POST",
+               contentType:false,
+               processData: false,
+               cache: false,
+               data: fd,
+               success: function(data){
+alert(data);                   
+//                     status.clearStatus();
+//                 status.setProgress(100);
+        
+//                 $("#status1").append("File upload Done<br>");           
+               },
+               complete: function() {
+                       
+                       // When status area has faded
+                       statusArea.fadeOut( function() {
+                               
+                               // Process the next file, if one exists.
+                               processFile();
+                               
+                       });
+                        
+               }
+           }); 
+           
+           return jqXHR;
+//         status.setAbort(jqXHR);
+       }
+
+});
diff --git a/js/jqueryDragAndDrop-ForReferenceOnly/.editorconfig b/js/jqueryDragAndDrop-ForReferenceOnly/.editorconfig
new file mode 100644 (file)
index 0000000..ad446fa
--- /dev/null
@@ -0,0 +1,11 @@
+; http://editorconfig.org
+
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
\ No newline at end of file
diff --git a/js/jqueryDragAndDrop-ForReferenceOnly/.gitignore b/js/jqueryDragAndDrop-ForReferenceOnly/.gitignore
new file mode 100644 (file)
index 0000000..14fe67f
--- /dev/null
@@ -0,0 +1,5 @@
+node_modules
+tmp
+
+.DS_Store
+._*
\ No newline at end of file
diff --git a/js/jqueryDragAndDrop-ForReferenceOnly/.travis.yml b/js/jqueryDragAndDrop-ForReferenceOnly/.travis.yml
new file mode 100644 (file)
index 0000000..7f22ed1
--- /dev/null
@@ -0,0 +1,8 @@
+language: node_js
+node_js:
+  - 0.10
+
+before_script:
+  - npm install -g grunt-cli
+
+script: "grunt test"
diff --git a/js/jqueryDragAndDrop-ForReferenceOnly/README b/js/jqueryDragAndDrop-ForReferenceOnly/README
new file mode 100644 (file)
index 0000000..f3ac9e5
--- /dev/null
@@ -0,0 +1,70 @@
+ezdz-multiple
+
+jQuery File Input plugin ezdz multiple files and grid preview
+
+It is based on Ezdz jQuery File Input plugin. new features have been added as follows.
+
+    support multiple file upload.
+    support grid preview of image.
+
+All other settings pls refer to ezdz documentation https://github.com/jaysalvat/ezdz
+
+index.html file demostrates multiple file upload features and preview of image features.
+
+remember add multiple attribute to input tag.
+Sample Usage
+
+in the html head section
+
+<link rel="stylesheet" href="src/jquery.ezdz.css">
+<script type="text/javascript" src= "node_modules/jquery/dist/jquery.min.js"></script>
+<script src="src/jquery.ezdz.js"></script>
+
+in the body section, simply add normal input tag, the plugin will automatically convert it into dropzone.
+
+<input type="file" name="file_upload[]" accept="image/png, image/jpeg" multiple/>  
+
+add javascript pointing to input tag, add customize configuration.
+
+$('input[type="file"]').ezdz({
+                text: 'drop cover photos',
+                validators: {
+                    maxWidth:  2000,
+                    maxHeight: 2000,
+                    maxNumber: 6
+                },
+                reject: function(file, errors) {
+                    if (errors.mimeType) {
+                        alert(file.name + ' must be an image.');
+                        return;
+                    }
+
+                    if (errors.maxWidth) {
+                        alert(file.name + ' must be width:2000px max.');
+                        return;
+                    }
+
+                    if (errors.maxHeight) {
+                        alert(file.name + ' must be height:2000px max.');
+                        return;
+                    }
+
+                    if (errors.maxNumber) {
+                        alert('you can upload maximum of 6 images');
+                        return;
+                    }
+                }
+        });
+
+if you looking for modify preview image grid, editing jquery.ezdz.css, for example, the code represent 3 columns grid.
+
+.image-g li {
+    float: left;
+    max-width: 32%;
+    max-height: 48%;
+    padding: 0.10em;
+}
+
+.image-g li:nth-child(3n+1) {
+    clear: left;
+}
diff --git a/js/jqueryDragAndDrop-ForReferenceOnly/jquery.ezdz.css b/js/jqueryDragAndDrop-ForReferenceOnly/jquery.ezdz.css
new file mode 100644 (file)
index 0000000..b2607eb
--- /dev/null
@@ -0,0 +1,126 @@
+/* ----------------------------------------------------------------------------
+// Ezdz [izy-dizy]
+// Licensed under the MIT license.
+// http://github.com/jaysalvat/ezdz/
+// ----------------------------------------------------------------------------
+// Copyright (C) 2014 Jay Salvat
+// http://jaysalvat.com/
+// --------------------------------------------------------------------------*/
+
+.ezdz-dropzone {
+    position: relative;
+/*    font: bold 24px arial; */
+    text-align: center;
+    width: 100%;
+    height: 400px;          /* Width of entire drop area */
+    line-height: 100px;
+    color: #;
+    overflow: hidden;
+}
+
+.ezdz-dropzone div {
+    color: lightgray;
+/*    font: bold 24px arial; */
+    line-height: 100px;
+    /* */
+}
+
+.ezdz-dropzone span {
+    border-radius: 20px;
+    background: black;
+    background: rgba(0,0,0,0.7);
+    color: white;
+    font-size: 13px;
+    font-weight: normal;
+    max-width: 90%;
+    vertical-align: middle;
+    padding: 4%;
+    line-height: 10px;
+    display: inline-block;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    overflow: hidden;
+}
+
+.ezdz-dropzone img {
+    border-radius: 5px;
+    
+}
+
+.ezdz-dropzone [type="file"] {
+    cursor: pointer;
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    opacity: 0;
+    margin: 0;
+    padding: 0;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+}
+
+.ezdz-focus {
+/*    border: 10px dotted darkgray; */
+    color: darkgray;
+}
+
+.ezdz-focus div {
+    color: darkgray;
+
+}
+
+.ezdz-enter {
+/*    border: 10px solid black; */
+    color: black;
+}
+
+.ezdz-enter div {
+    color: black;
+
+}
+.ezdz-accept {
+/*    border: 10px solid gray; */
+    color: gray;
+}
+
+.ezdz-accept div {
+    color: gray;
+}
+
+.ezdz-reject {
+/*    border: 10px solid darkred; */
+    color: darkred;
+}
+
+.ezdz-reject div {
+    color: darkred;
+}
+    
+.image-g {
+    list-style-type: none;
+    padding: 0.25em;
+    overflow: hidden;
+    white-space: nowrap;
+}
+
+.image-g li {
+    float: left;
+    width: 360px;
+/*    max-width: 32%;
+    max-height: 48%; */ 
+    padding: 0.10em;
+}
+        
+.image-g img {
+    display: block;
+    width: 40%;
+    height: auto;
+    border: 2px solid black;
+}
+        
+.image-g li:nth-child(3n+1) {
+    clear: left;
+}
+    
\ No newline at end of file
diff --git a/js/jqueryDragAndDrop-ForReferenceOnly/jquery.ezdz.js b/js/jqueryDragAndDrop-ForReferenceOnly/jquery.ezdz.js
new file mode 100644 (file)
index 0000000..e30ab87
--- /dev/null
@@ -0,0 +1,422 @@
+/* ----------------------------------------------------------------------------
+// Ezdz [izy-dizy]
+// Licensed under the MIT license.
+// http://github.com/jaysalvat/ezdz/
+// ----------------------------------------------------------------------------
+// Copyright (C) 2014 Jay Salvat
+// http://jaysalvat.com/
+// --------------------------------------------------------------------------*/
+
+/* global define: true, require: true, jQuery */
+
+(function (factory) {
+    "use strict";
+
+    if (typeof define === 'function' && define.amd) {
+        define(['jquery'], factory);
+    } else if (typeof exports === 'object') {
+        factory(require('jquery'));
+    } else {
+        factory(jQuery);
+    }
+}(function ($) {
+    "use strict";
+
+    // Default settings
+    var defaults = {
+        className:     '',
+        text:          'Drop a file',
+        previewImage:  true,
+        value:         null,
+        classes: {
+            main:      'ezdz-dropzone',
+            enter:     'ezdz-enter',
+            reject:    'ezdz-reject',
+            accept:    'ezdz-accept',
+            focus:     'ezdz-focus'
+        },
+        validators: {
+            maxSize:   null,
+            width:     null,
+            maxWidth:  null,
+            minWidth:  null,
+            height:    null,
+            maxHeight: null,
+            minHeight: null,
+            maxNumber: null
+        },
+        init:   function() {},
+        enter:  function() {},
+        leave:  function() {},
+        reject: function() {},
+        accept: function() {},
+        format: function(filename) {
+            return filename;
+        }
+    };
+
+    // Main plugin
+    $.ezdz = function(element, options) {
+        this.settings = $.extend(true, {}, defaults, $.ezdz.defaults, options);
+        this.$input   = $(element);
+
+        var self      = this,
+            settings  = self.settings,
+            $input    = self.$input;
+
+        if (!$input.is('input[type="file"]')) {
+            return;
+        }
+
+        // Stop if not compatible with HTML5 file API
+        if (!$.ezdz.isBrowserCompatible()) {
+            return;
+        }
+
+        // private: Init the plugin
+        var init = function() {
+            var $ezdz, $container, value;
+
+            // Build the container
+            $container = $('<div class="' + settings.classes.main + '" />')
+
+            .on('dragover.ezdz', function() {
+                $(this).addClass(settings.classes.enter);
+
+                if ($.isFunction(settings.enter)) {
+                     settings.enter.apply(this);
+                }
+            })
+
+            .on('dragleave.ezdz', function() {
+                $(this).removeClass(settings.classes.enter);
+
+                if ($.isFunction(settings.leaved)) {
+                    settings.leaved.apply(this);
+                }
+            })
+
+            .addClass(settings.className);
+
+            // Build the whole dropzone
+            $input
+                .wrap($container)
+                .before('<div>' + settings.text + '</div>');
+
+            $ezdz = $input.parent('.' + settings.classes.main);
+
+            // Preview a file at start if it's defined
+            value = settings.value || $input.data('value');
+
+            if (value) {
+                self.preview(value);
+            }
+
+            // Trigger the init callback
+            if ($.isFunction(settings.init)) {
+                 settings.init.apply($input, [ value ]);
+            }
+
+            // Events on the input
+            $input
+
+            .on('focus.ezdz', function() {
+                $ezdz.addClass(settings.classes.focus);
+            })
+
+            .on('blur.ezdz', function() {
+                $ezdz.removeClass(settings.classes.focus);
+            })
+
+            .on('change.ezdz', function() {
+               
+                
+                // No file, so user has cancelled
+                if (this.files.length == 0) {
+                    return;
+                }
+
+                // Mime-Types
+                var allowed  = $input.attr('accept'),
+                    accepted = false,
+                    valid    = true,
+                    errors   = {
+                        'mimeType':  false,
+                        'maxSize':   false,
+                        'width':     false,
+                        'minWidth':  false,
+                        'maxWidth':  false,
+                        'height':    false,
+                        'minHeight': false,
+                        'maxHeight': false,
+                        'maxNumber': false
+                    };
+                
+                //Check the maximum number of files
+                
+                if (settings.validators.maxNumber && this.files.length > settings.validators.maxNumber) {
+                    valid = false;
+                    errors.maxNumber = true;
+                }
+                
+                var imgArr = new Array();
+                var isImage = true;
+                
+                var i=0;
+                for(i=0;i<this.files.length;i++){
+                       
+                        var file = this.files[i];
+                        
+                        
+                       // Info about the dropped or selected file
+                     var basename  = file.name.replace(/\\/g,'/').replace( /.*\//, ''),
+                         extension = file.name.split('.').pop(),
+                         formatted = settings.format(basename);
+
+                     file.extension = extension;
+                     
+
+                     // Check the accepted Mime-Types from the input file
+                     if (allowed) {
+                         var types = allowed.split(/[,|]/);
+
+                         $.each(types, function(i, type) {
+                             type = $.trim(type);
+
+                             if (file.type === type) {
+                                 accepted = true;
+                                 return false;
+                             }
+
+                             // Mime-Type with wildcards ex. image/*
+                             if (type.indexOf('/*') !== false) {
+                                 var a = type.replace('/*', ''),
+                                     b = file.type.replace(/(\/.*)$/g, '');
+
+                                 if (a === b) {
+                                     accepted = true;
+                                     return false;
+                                 }
+                             }
+                         });
+
+                         if (accepted === false) {
+                             errors.mimeType = true;
+                         }
+                     } else {
+                         accepted = true;
+                     }
+
+                     // Reset the accepted / rejected classes
+                     $ezdz.removeClass(settings.classes.reject + ' ' + settings.classes.accept);
+
+                     // If the Mime-Type is not accepted
+                     if (accepted !== true) {
+                         $input.val('');
+
+                         $ezdz.addClass(settings.classes.reject);
+
+                         // Trigger the reject callback
+                         if ($.isFunction(settings.reject)) {
+                              settings.reject.apply($input, [ file, errors ]);
+                         }
+                         return false;
+                     }
+
+                     // Read the added file
+                     var reader = new FileReader(file);
+
+                     reader.readAsDataURL(file);
+
+                     reader.onload = function(e) {
+                         var img = new Image();
+                             
+                         imgArr.push(img);
+                         
+                         file.data = e.target.result;
+                         img.src   = file.data;
+
+                         setTimeout(function() {
+                             if(img.width && img.height){
+                                
+                             }else{
+                                isImage = false;
+                             }
+
+                             // Validator
+                             if (settings.validators.maxSize && file.size > settings.validators.maxSize) {
+                                 valid = false;
+                                 errors.maxSize = true;
+                             }
+
+                             if (isImage) {
+                                 file.width  = img.width;
+                                 file.height = img.height;
+
+                                 if (settings.validators.width && img.width !== settings.validators.width) {
+                                     valid = false;
+                                     errors.width = true;
+                                 }
+
+                                 if (settings.validators.maxWidth && img.width > settings.validators.maxWidth) {
+                                     valid = false;
+                                     errors.maxWidth = true;
+                                 }
+
+                                 if (settings.validators.minWidth && img.width < settings.validators.minWidth) {
+                                     valid = false;
+                                     errors.minWidth = true;
+                                 }
+
+                                 if (settings.validators.height && img.height !== settings.validators.height) {
+                                     valid = false;
+                                     errors.height = true;
+                                 }
+
+                                 if (settings.validators.maxHeight && img.height > settings.validators.maxHeight) {
+                                     valid = false;
+                                     errors.maxHeight = true;
+                                 }
+
+                                 if (settings.validators.minHeight && img.height < settings.validators.minHeight) {
+                                     valid = false;
+                                     errors.minHeight = true;
+                                 }
+                             }
+
+                            
+                           }, 100);
+                       };                      
+                }
+                
+                setTimeout(function() {
+                       
+                    // The file is validated, so added to input
+                    if (valid === true) {
+                        $ezdz.find('img').remove();
+                        
+                        if (isImage && settings.previewImage === true) {
+                               var $image_wrapper = $("<ul></ul>");
+                               $image_wrapper.addClass("image-g");
+                               var i;
+                               for (i=0;i<imgArr.length;i++){
+                                       var img_obj = imgArr[i];
+                                       var $image_item = $("<li></li>").append(img_obj);
+                                       $image_wrapper.append($image_item);
+                               }
+                            $ezdz.find('div').html($image_wrapper.fadeIn());
+                        } else {
+                            $ezdz.find('div').html('<span>' + formatted + '</span>');
+                        }
+
+                        $ezdz.addClass(settings.classes.accept);
+
+                        // Trigger the accept callback
+                        if ($.isFunction(settings.accept)) {
+                             settings.accept.apply($input, [ file ]);
+                        }
+                        
+                    // The file is invalidated, so rejected
+                    } else {
+                        $input.val('');
+
+                        $ezdz.addClass(settings.classes.reject);
+
+                        // Trigger the reject callback
+                        if ($.isFunction(settings.reject)) {
+                             settings.reject.apply($input, [ file, errors ]);
+                        }
+                    }
+                       
+                }, 1000);
+                
+  
+            });
+        };
+
+        init();
+    };
+
+    // Inject a file or image in the preview
+    $.ezdz.prototype.preview = function(path, callback) {
+        var settings  = this.settings,
+            $input    = this.$input,
+            $ezdz     = $input.parent('.' + settings.classes.main),
+            basename  = path.replace(/\\/g,'/').replace( /.*\//, ''),
+            formatted = settings.format(basename);
+
+        var img = new Image();
+        img.src = path;
+
+        // Is an image
+        img.onload = function() {
+            $ezdz.find('div').html($(img).fadeIn());
+           
+            if ($.isFunction(callback)) {
+                 callback.apply(this);
+            }
+        };
+
+        // Is not an image
+        img.onerror = function() {
+            $ezdz.find('div').html('<span>' + formatted + '</span>');
+
+            if ($.isFunction(callback)) {
+                 callback.apply(this);
+            }
+        };
+
+        $ezdz.addClass(settings.classes.accept);
+    };
+
+    // Destroy ezdz
+    $.ezdz.prototype.destroy = function() {
+        var settings = this.settings,
+            $input   = this.$input;
+
+        $input.parent('.' + settings.classes.main).replaceWith($input);
+        $input.off('*.ezdz');
+        $input.removeData('ezdz');
+    };
+
+    // Extend settings
+    $.ezdz.prototype.options = function(options) {
+        var settings = this.settings;
+
+        if (!options) {
+            return settings;
+        }
+
+        $.extend(true, this.settings, options);
+    };
+
+    // Get input container
+    $.ezdz.prototype.container = function() {
+        var settings = this.settings,
+            $input   = this.$input;
+
+        return $input.parent('.' + settings.classes.main);
+    };
+
+    // Is browser compatible
+    $.ezdz.isBrowserCompatible = function() {
+        return !!(window.File && window.FileList && window.FileReader);
+    };
+
+    // Default options
+    $.ezdz.defaults = defaults;
+
+    // jQuery plugin
+    $.fn.ezdz = function(options) {
+        var args = arguments,
+            plugin = $(this).data('ezdz');
+
+        if (!plugin) {
+            return $(this).data('ezdz', new $.ezdz(this, options));
+        } if (plugin[options]) {
+            return plugin[options].apply(plugin, Array.prototype.slice.call(args, 1));
+        } else {
+            $.error('Ezdz error - Method ' +  options + ' does not exist.');
+        }
+    };
+}));
index 07955ed..c99a4c1 100755 (executable)
@@ -2360,7 +2360,7 @@ abstract class GlmDataAbstract
 
             } else {
 
-                if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
                     glmMembersAdmin::addNotice($newImage, 'DataBlock', "DataAbstract - imageInput() wp_get_image_editor($tmpFile) Error");
                 }
 
@@ -2645,6 +2645,12 @@ abstract class GlmDataAbstract
         $this->select = '';
         $sep = ''; // Used as separator for $select list
 
+        // Check that we have a fields list
+        if (!is_array($this->fields) || count($this->fields) == 0) {
+            echo "ALERT: Empty Fields List in data abstract buildFieldsList()! Likely programming error.";
+            return false;
+        }
+
         // For each possible field
         reset($this->fields);
         while (list($k, $v) = each($this->fields )) {
@@ -2701,7 +2707,7 @@ abstract class GlmDataAbstract
 
         }
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($this->fieldData, 'DataBlock', "buildFieldsList() data");
         }
 
@@ -2895,7 +2901,7 @@ abstract class GlmDataAbstract
 
         $stats = $this->wpdb->get_row($sql, ARRAY_A);
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($sql, 'DataBlock', "DataAbstract - getStats() query");
             glmMembersAdmin::addNotice($stats, 'DataBlock', "Stats Data");
         }
@@ -2942,7 +2948,7 @@ abstract class GlmDataAbstract
             ";
         }
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($sql, 'DataBlock', "DataAbstract - getList() query");
         }
 
@@ -2958,7 +2964,7 @@ abstract class GlmDataAbstract
             $newList[$v['id']] = $this->processOutputData($v, 'l');
         }
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($newList, 'DataBlock', "getList() data");
         }
 
@@ -2997,7 +3003,7 @@ abstract class GlmDataAbstract
         $detail = $this->processOutputData($detail, 'g', $fieldVals);
 
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($sql, 'DataBlock', "DataAbstract - getEntry() query");
             glmMembersAdmin::addNotice($detail, 'DataBlock', "getEntry() data");
         }
@@ -3128,7 +3134,7 @@ abstract class GlmDataAbstract
         // Check if there's a function to do other checks
         $r = $this->checkOther($r, 'n');
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($r, 'DataBlock', "newEntry() data");
         }
 
@@ -3206,42 +3212,40 @@ abstract class GlmDataAbstract
                     ( $fields ) VALUES ( $vals );
                 ";
 
-                if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
                     glmMembersAdmin::addNotice($sql, 'DataBlock', "insertEntry() Query");
                 }
 
                 // Now store the field data
                 $this->wpdb->query($sql);
 
-                $queryError = $this->wpdb->last_error;
-
-                // If there were no errors
-                if (trim($queryError) != '') {
-                    if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                // Check for query errors
+                if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                    $queryError = $this->wpdb->last_error;
+                    if (trim($queryError) != '') {
                         glmMembersAdmin::addNotice(
-                            'insertEntry() Query Failure<br>'
+                            '<b>insertEntry() Query Failure</b><br>'
                             .'&nbsp;&nbsp;Error Message: '.$queryError.'<br>'
                             .'&nbsp;&nbsp;Table: '.$this->table, 'Alert');
                     }
                 }
 
-
                 // Get the current ID value and set that in the session
                 $r['fieldData']['id'] = $this->wpdb->insert_id;
 
             } else {
-                if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
                     glmMembersAdmin::addNotice('&nbsp;&nbsp;insertEntry() requested to NOT store new entry!', 'Process');
                 }
             }
 
         } else {
-            if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+            if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
                 glmMembersAdmin::addNotice('&nbsp;&nbspcheckOther() returned bad status.', 'Process');
             }
         }
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($r, 'DataBlock', "DataAbstract - insertEntry() data");
         }
 
@@ -3264,6 +3268,17 @@ abstract class GlmDataAbstract
                 ;";
         $detail = $this->wpdb->get_row($sql, ARRAY_A);
 
+        // Check for Errors
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+            $queryError = $this->wpdb->last_error;
+            if (trim($queryError) != '') {
+                glmMembersAdmin::addNotice(
+                        '<b>editEntry() Query Failure</b><br>'
+                        .'&nbsp;&nbsp;Error Message: '.$queryError.'<br>'
+                        .'&nbsp;&nbsp;Table: '.$this->table, 'Alert');
+            }
+        }
+
         // Check for failure retrieving data
         if (!$detail) {
             return false;
@@ -3272,7 +3287,7 @@ abstract class GlmDataAbstract
         // Process individual fields
         $detail = $this->processOutputData($detail, 'e', true, $id, $idField);
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($sql, 'DataBlock', "DataAbstract - editEntry() query");
             glmMembersAdmin::addNotice($detail, 'DataBlock', "editEntry() data");
         }
@@ -3346,12 +3361,23 @@ abstract class GlmDataAbstract
             // Now store the field data
             $this->wpdb->query($sql, ARRAY_A);
 
+            // Check for Errors
+            if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                $queryError = $this->wpdb->last_error;
+                if (trim($queryError) != '') {
+                    glmMembersAdmin::addNotice(
+                            '<b>updateEntry() Query Failure</b><br>'
+                            .'&nbsp;&nbsp;Error Message: '.$queryError.'<br>'
+                            .'&nbsp;&nbsp;Table: '.$this->table, 'Alert');
+                }
+            }
+
             // Get the data again for output
             $r['fieldData'] = $this->getEntry($id, $idField);
 
         }
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($r, 'DataBlock', "updateEntry() data");
         }
 
@@ -3406,7 +3432,7 @@ abstract class GlmDataAbstract
                      WHERE $idField = $id;
                 ";
 
-                if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
                     glmMembersAdmin::addNotice($sql, 'DataBlock', "DataAbstract - deleteEntry() query");
                 }
 
@@ -3421,7 +3447,7 @@ abstract class GlmDataAbstract
             }
         }
 
-        if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+        if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
             glmMembersAdmin::addNotice($detail, 'DataBlock', "deleteEntry() data");
         }
 
diff --git a/lib/html5-File-Upload/assets/css/styles.css b/lib/html5-File-Upload/assets/css/styles.css
new file mode 100644 (file)
index 0000000..5f2545d
--- /dev/null
@@ -0,0 +1,256 @@
+/*-------------------------\r
+       Simple reset\r
+--------------------------*/\r
+\r
+\r
+/*\r
+*{\r
+       margin:0;\r
+       padding:0;\r
+}\r
+*/\r
+\r
+\r
+/*-------------------------\r
+       General Styles\r
+--------------------------*/\r
+\r
+/*\r
+\r
+html{\r
+       background:url('../img/background_tile_2.jpg');\r
+       min-height:100%;\r
+       position:relative;\r
+       \r
+}\r
+\r
+body{\r
+       color:#fff;\r
+       min-height:600px;\r
+       font:14px/1.3 'Segoe UI',Arial, sans-serif;\r
+}\r
+\r
+a, a:visited {\r
+       text-decoration:none;\r
+       outline:none;\r
+       color:#54a6de;\r
+}\r
+\r
+a:hover{\r
+       text-decoration:underline;\r
+}\r
+\r
+header, footer{\r
+       display:block;\r
+}\r
+\r
+*/\r
+\r
+/*-------------------------\r
+       Header Styles\r
+--------------------------*/\r
+\r
+/*\r
+\r
+header{\r
+       background:url('../img/background_tile_1.jpg');\r
+       padding:75px;\r
+       position: relative;\r
+}\r
+\r
+header:before,\r
+#dropbox:before{\r
+       display: block;\r
+       content:'';\r
+       height:4px;\r
+       width:100%;\r
+       background:url('../img/blue_line.jpg');\r
+       position: absolute;\r
+       top:0;\r
+       left:0;\r
+       box-shadow:0 2px 2px rgba(0,0,0,0.4);\r
+}\r
+\r
+\r
+h1{\r
+       background:url('../img/logo.jpg') no-repeat top center;\r
+       height:92px;\r
+       overflow: hidden;\r
+       text-indent: -99999px;\r
+       text-align: center;\r
+}\r
+\r
+*/\r
+\r
+/*-------------------------\r
+       Dropbox Element\r
+--------------------------*/\r
+\r
+\r
+\r
+#dropbox{\r
+/*    \r
+       background:url('../img/background_tile_3.jpg');\r
+       \r
+       border-radius:3px;\r
+       position: relative;\r
+       margin:80px auto 90px;\r
+       min-height: 290px;\r
+       overflow: hidden;\r
+       padding-bottom: 40px;\r
+    width: 990px;\r
+       \r
+       box-shadow:0 0 4px rgba(0,0,0,0.3) inset,0 -3px 2px rgba(0,0,0,0.1);\r
+*/\r
+}\r
+\r
+\r
+#dropbox .message{\r
+       font-size: 11px;\r
+    text-align: center;\r
+    padding-top:160px;\r
+    display: block;\r
+}\r
+\r
+#dropbox .message i{\r
+       color:#ccc;\r
+       font-size:10px;\r
+}\r
+\r
+#dropbox:before{\r
+       border-radius:3px 3px 0 0;\r
+}\r
+\r
+\r
+\r
+/*-------------------------\r
+       Image Previews\r
+--------------------------*/\r
+\r
+\r
+\r
+#dropbox .preview{\r
+       width:245px;\r
+       height: 215px;\r
+       float:left;\r
+       margin: 55px 0 0 60px;\r
+       position: relative;\r
+       text-align: center;\r
+}\r
+\r
+#dropbox .preview img{\r
+       max-width: 240px;\r
+       max-height:180px;\r
+       border:3px solid #fff;\r
+       display: block;\r
+       \r
+       box-shadow:0 0 2px #000;\r
+}\r
+\r
+#dropbox .imageHolder{\r
+       display: inline-block;\r
+       position:relative;\r
+}\r
+\r
+#dropbox .uploaded{\r
+       position: absolute;\r
+       top:0;\r
+       left:0;\r
+       height:100%;\r
+       width:100%;\r
+       background: url('../img/done.png') no-repeat center center rgba(255,255,255,0.5);\r
+       display: none;\r
+}\r
+\r
+#dropbox .preview.done .uploaded{\r
+       display: block;\r
+}\r
+\r
+\r
+\r
+/*-------------------------\r
+       Progress Bars\r
+--------------------------*/\r
+\r
+\r
+\r
+#dropbox .progressHolder{\r
+       position: absolute;\r
+       background-color:#252f38;\r
+       height:12px;\r
+       width:100%;\r
+       left:0;\r
+       bottom: 0;\r
+       \r
+       box-shadow:0 0 2px #000;\r
+}\r
+\r
+#dropbox .progress{\r
+       background-color:#2586d0;\r
+       position: absolute;\r
+       height:100%;\r
+       left:0;\r
+       width:0;\r
+       \r
+       box-shadow: 0 0 1px rgba(255, 255, 255, 0.4) inset;\r
+       \r
+       -moz-transition:0.25s;\r
+       -webkit-transition:0.25s;\r
+       -o-transition:0.25s;\r
+       transition:0.25s;\r
+}\r
+\r
+#dropbox .preview.done .progress{\r
+       width:100% !important;\r
+}\r
+\r
+\r
+\r
+/*----------------------------\r
+       The Footer\r
+-----------------------------*/\r
+\r
+/*\r
+\r
+footer{\r
+       display:block;\r
+       background-color: #151517;\r
+    \r
+    position:fixed;\r
+       width:100%;\r
+       height:70px;\r
+       bottom:0;\r
+       left:0;\r
+       z-index: 100000;\r
+       \r
+       box-shadow: 0 -1px 2px #171717;\r
+       -webkit-box-shadow: 0 -1px 2px #171717;\r
+       -moz-box-shadow: 0 -1px 2px #171717;\r
+}\r
+\r
+footer h2{\r
+       font-size:20px;\r
+       font-weight:normal;\r
+       left:50%;\r
+       margin-left:-400px;\r
+       padding:22px 0;\r
+       position:absolute;\r
+       width: 540px;\r
+       color:#eee;\r
+}\r
+\r
+footer a.tzine,a.tzine:visited{\r
+       background:url("../img/tzine.png") no-repeat right top;\r
+       border:none;\r
+       text-decoration:none;\r
+       color:#FCFCFC;\r
+       font-size:12px;\r
+       height:70px;\r
+       left:50%;\r
+       line-height:31px;\r
+       margin:23px 0 0 110px;\r
+       position:absolute;\r
+       top:0;\r
+       width:290px;\r
+}\r
+*/
\ No newline at end of file
diff --git a/lib/html5-File-Upload/assets/img/background_tile_1.jpg b/lib/html5-File-Upload/assets/img/background_tile_1.jpg
new file mode 100644 (file)
index 0000000..ad83d30
Binary files /dev/null and b/lib/html5-File-Upload/assets/img/background_tile_1.jpg differ
diff --git a/lib/html5-File-Upload/assets/img/background_tile_2.jpg b/lib/html5-File-Upload/assets/img/background_tile_2.jpg
new file mode 100644 (file)
index 0000000..c7b5efc
Binary files /dev/null and b/lib/html5-File-Upload/assets/img/background_tile_2.jpg differ
diff --git a/lib/html5-File-Upload/assets/img/background_tile_3.jpg b/lib/html5-File-Upload/assets/img/background_tile_3.jpg
new file mode 100644 (file)
index 0000000..ac39d60
Binary files /dev/null and b/lib/html5-File-Upload/assets/img/background_tile_3.jpg differ
diff --git a/lib/html5-File-Upload/assets/img/blue_line.jpg b/lib/html5-File-Upload/assets/img/blue_line.jpg
new file mode 100644 (file)
index 0000000..2af2c9f
Binary files /dev/null and b/lib/html5-File-Upload/assets/img/blue_line.jpg differ
diff --git a/lib/html5-File-Upload/assets/img/done.png b/lib/html5-File-Upload/assets/img/done.png
new file mode 100644 (file)
index 0000000..22a1410
Binary files /dev/null and b/lib/html5-File-Upload/assets/img/done.png differ
diff --git a/lib/html5-File-Upload/assets/img/logo.jpg b/lib/html5-File-Upload/assets/img/logo.jpg
new file mode 100644 (file)
index 0000000..5c83252
Binary files /dev/null and b/lib/html5-File-Upload/assets/img/logo.jpg differ
diff --git a/lib/html5-File-Upload/assets/img/tzine.png b/lib/html5-File-Upload/assets/img/tzine.png
new file mode 100644 (file)
index 0000000..df4abaf
Binary files /dev/null and b/lib/html5-File-Upload/assets/img/tzine.png differ
diff --git a/lib/html5-File-Upload/assets/js/jquery.filedrop.js b/lib/html5-File-Upload/assets/js/jquery.filedrop.js
new file mode 100644 (file)
index 0000000..ec2b238
--- /dev/null
@@ -0,0 +1,315 @@
+/*\r
+ * Default text - jQuery plugin for html5 dragging files from desktop to browser\r
+ *\r
+ * Author: Weixi Yen\r
+ *\r
+ * Email: [Firstname][Lastname]@gmail.com\r
+ * \r
+ * Copyright (c) 2010 Resopollution\r
+ * \r
+ * Licensed under the MIT license:\r
+ *   http://www.opensource.org/licenses/mit-license.php\r
+ *\r
+ * Project home:\r
+ *   http://www.github.com/weixiyen/jquery-filedrop\r
+ *\r
+ * Version:  0.1.0\r
+ *\r
+ * Features:\r
+ *      Allows sending of extra parameters with file.\r
+ *      Works with Firefox 3.6+\r
+ *      Future-compliant with HTML5 spec (will work with Webkit browsers and IE9)\r
+ * Usage:\r
+ *     See README at project homepage\r
+ *\r
+ */\r
+(function($){\r
+\r
+       jQuery.event.props.push("dataTransfer");\r
+       var opts = {},\r
+               default_opts = {\r
+                       url: '',\r
+                       refresh: 1000,\r
+                       paramname: 'userfile',\r
+                       maxfiles: 25,\r
+                       maxfilesize: 1, // MBs\r
+                       data: {},\r
+                       drop: empty,\r
+                       dragEnter: empty,\r
+                       dragOver: empty,\r
+                       dragLeave: empty,\r
+                       docEnter: empty,\r
+                       docOver: empty,\r
+                       docLeave: empty,\r
+                       beforeEach: empty,\r
+                       afterAll: empty,\r
+                       rename: empty,\r
+                       error: function(err, file, i){alert(err);},\r
+                       uploadStarted: empty,\r
+                       uploadFinished: empty,\r
+                       progressUpdated: empty,\r
+                       speedUpdated: empty\r
+               },\r
+               errors = ["BrowserNotSupported", "TooManyFiles", "FileTooLarge"],\r
+               doc_leave_timer,\r
+               stop_loop = false,\r
+               files_count = 0,\r
+               files;\r
+\r
+       $.fn.filedrop = function(options) {\r
+               opts = $.extend( {}, default_opts, options );\r
+               \r
+               this.bind('drop', drop).bind('dragenter', dragEnter).bind('dragover', dragOver).bind('dragleave', dragLeave);\r
+               $(document).bind('drop', docDrop).bind('dragenter', docEnter).bind('dragover', docOver).bind('dragleave', docLeave);\r
+       };\r
+     \r
+       function drop(e) {\r
+               opts.drop(e);\r
+               files = e.dataTransfer.files;\r
+               if (files === null || files === undefined) {\r
+                       opts.error(errors[0]);\r
+                       return false;\r
+               }\r
+               \r
+               files_count = files.length;\r
+               upload();\r
+               e.preventDefault();\r
+               return false;\r
+       }\r
+       \r
+       function getBuilder(filename, filedata, boundary) {\r
+               var dashdash = '--',\r
+                       crlf = '\r\n',\r
+                       builder = '';\r
+\r
+               $.each(opts.data, function(i, val) {\r
+               if (typeof val === 'function') val = val();\r
+                       builder += dashdash;\r
+                       builder += boundary;\r
+                       builder += crlf;\r
+                       builder += 'Content-Disposition: form-data; name="'+i+'"';\r
+                       builder += crlf;\r
+                       builder += crlf;\r
+                       builder += val;\r
+                       builder += crlf;\r
+               });\r
+               \r
+               builder += dashdash;\r
+               builder += boundary;\r
+               builder += crlf;\r
+               builder += 'Content-Disposition: form-data; name="'+opts.paramname+'"';\r
+               builder += '; filename="' + filename + '"';\r
+               builder += crlf;\r
+               \r
+               builder += 'Content-Type: application/octet-stream';\r
+               builder += crlf;\r
+               builder += crlf; \r
+               \r
+               builder += filedata;\r
+               builder += crlf;\r
+        \r
+               builder += dashdash;\r
+               builder += boundary;\r
+               builder += dashdash;\r
+               builder += crlf;\r
+               return builder;\r
+       }\r
+\r
+       function progress(e) {\r
+               if (e.lengthComputable) {\r
+                       var percentage = Math.round((e.loaded * 100) / e.total);\r
+                       if (this.currentProgress != percentage) {\r
+                               \r
+                               this.currentProgress = percentage;\r
+                               opts.progressUpdated(this.index, this.file, this.currentProgress);\r
+                               \r
+                               var elapsed = new Date().getTime();\r
+                               var diffTime = elapsed - this.currentStart;\r
+                               if (diffTime >= opts.refresh) {\r
+                                       var diffData = e.loaded - this.startData;\r
+                                       var speed = diffData / diffTime; // KB per second\r
+                                       opts.speedUpdated(this.index, this.file, speed);\r
+                                       this.startData = e.loaded;\r
+                                       this.currentStart = elapsed;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+    \r
+    \r
+    \r
+       function upload() {\r
+               stop_loop = false;\r
+               if (!files) {\r
+                       opts.error(errors[0]);\r
+                       return false;\r
+               }\r
+               var filesDone = 0,\r
+                       filesRejected = 0;\r
+               \r
+               if (files_count > opts.maxfiles) {\r
+                   opts.error(errors[1]);\r
+                   return false;\r
+               }\r
+\r
+               for (var i=0; i<files_count; i++) {\r
+                       if (stop_loop) return false;\r
+                       try {\r
+                               if (beforeEach(files[i]) != false) {\r
+                                       if (i === files_count) return;\r
+                                       var reader = new FileReader(),\r
+                                               max_file_size = 1048576 * opts.maxfilesize;\r
+                                               \r
+                                       reader.index = i;\r
+                                       if (files[i].size > max_file_size) {\r
+                                               opts.error(errors[2], files[i], i);\r
+                                               filesRejected++;\r
+                                               continue;\r
+                                       }\r
+                                       \r
+                                       reader.onloadend = send;\r
+                                       reader.readAsBinaryString(files[i]);\r
+                               } else {\r
+                                       filesRejected++;\r
+                               }\r
+                       } catch(err) {\r
+                               opts.error(errors[0]);\r
+                               return false;\r
+                       }\r
+               }\r
+           \r
+               function send(e) {\r
+                       // Sometimes the index is not attached to the\r
+                       // event object. Find it by size. Hack for sure.\r
+                       if (e.target.index == undefined) {\r
+                               e.target.index = getIndexBySize(e.total);\r
+                       }\r
+                       \r
+                       var xhr = new XMLHttpRequest(),\r
+                               upload = xhr.upload,\r
+                               file = files[e.target.index],\r
+                               index = e.target.index,\r
+                               start_time = new Date().getTime(),\r
+                               boundary = '------multipartformboundary' + (new Date).getTime(),\r
+                               builder;\r
+                               \r
+                       newName = rename(file.name);\r
+                       if (typeof newName === "string") {\r
+                               builder = getBuilder(newName, e.target.result, boundary);\r
+                       } else {\r
+                               builder = getBuilder(file.name, e.target.result, boundary);\r
+                       }\r
+                       \r
+                       upload.index = index;\r
+                       upload.file = file;\r
+                       upload.downloadStartTime = start_time;\r
+                       upload.currentStart = start_time;\r
+                       upload.currentProgress = 0;\r
+                       upload.startData = 0;\r
+                       upload.addEventListener("progress", progress, false);\r
+                       \r
+                       xhr.open("POST", opts.url, true);\r
+                       xhr.setRequestHeader('content-type', 'multipart/form-data; boundary=' \r
+                           + boundary);\r
+                           \r
+                       xhr.sendAsBinary(builder);  \r
+                       \r
+                       opts.uploadStarted(index, file, files_count);  \r
+                       \r
+                       xhr.onload = function() { \r
+                           if (xhr.responseText) {\r
+                               var now = new Date().getTime(),\r
+                                   timeDiff = now - start_time,\r
+                                   result = opts.uploadFinished(index, file, jQuery.parseJSON(xhr.responseText), timeDiff);\r
+                                       filesDone++;\r
+                                       if (filesDone == files_count - filesRejected) {\r
+                                               afterAll();\r
+                                       }\r
+                           if (result === false) stop_loop = true;\r
+                           }\r
+                       };\r
+               }\r
+       }\r
+    \r
+       function getIndexBySize(size) {\r
+               for (var i=0; i < files_count; i++) {\r
+                       if (files[i].size == size) {\r
+                               return i;\r
+                       }\r
+               }\r
+               \r
+               return undefined;\r
+       }\r
+    \r
+       function rename(name) {\r
+               return opts.rename(name);\r
+       }\r
+       \r
+       function beforeEach(file) {\r
+               return opts.beforeEach(file);\r
+       }\r
+       \r
+       function afterAll() {\r
+               return opts.afterAll();\r
+       }\r
+       \r
+       function dragEnter(e) {\r
+               clearTimeout(doc_leave_timer);\r
+               e.preventDefault();\r
+               opts.dragEnter(e);\r
+       }\r
+       \r
+       function dragOver(e) {\r
+               clearTimeout(doc_leave_timer);\r
+               e.preventDefault();\r
+               opts.docOver(e);\r
+               opts.dragOver(e);\r
+       }\r
+        \r
+       function dragLeave(e) {\r
+               clearTimeout(doc_leave_timer);\r
+               opts.dragLeave(e);\r
+               e.stopPropagation();\r
+       }\r
+        \r
+       function docDrop(e) {\r
+               e.preventDefault();\r
+               opts.docLeave(e);\r
+               return false;\r
+       }\r
+        \r
+       function docEnter(e) {\r
+               clearTimeout(doc_leave_timer);\r
+               e.preventDefault();\r
+               opts.docEnter(e);\r
+               return false;\r
+       }\r
+        \r
+       function docOver(e) {\r
+               clearTimeout(doc_leave_timer);\r
+               e.preventDefault();\r
+               opts.docOver(e);\r
+               return false;\r
+       }\r
+        \r
+       function docLeave(e) {\r
+               doc_leave_timer = setTimeout(function(){\r
+                       opts.docLeave(e);\r
+               }, 200);\r
+       }\r
+        \r
+       function empty(){}\r
+       \r
+       try {\r
+               if (XMLHttpRequest.prototype.sendAsBinary) return;\r
+               XMLHttpRequest.prototype.sendAsBinary = function(datastr) {\r
+                   function byteValue(x) {\r
+                       return x.charCodeAt(0) & 0xff;\r
+                   }\r
+                   var ords = Array.prototype.map.call(datastr, byteValue);\r
+                   var ui8a = new Uint8Array(ords);\r
+                   this.send(ui8a.buffer);\r
+               }\r
+       } catch(e) {}\r
+     \r
+})(jQuery);
\ No newline at end of file
diff --git a/lib/html5-File-Upload/assets/js/upload-script.js b/lib/html5-File-Upload/assets/js/upload-script.js
new file mode 100644 (file)
index 0000000..3341086
--- /dev/null
@@ -0,0 +1,102 @@
+$(function(){\r
+       \r
+       var dropbox = $('#dropbox'),\r
+               message = $('.message', dropbox);\r
+       \r
+       dropbox.filedrop({\r
+               // The name of the $_FILES entry:\r
+               paramname:'pic',\r
+               \r
+               maxfiles: 5,\r
+       maxfilesize: 2,\r
+               url: 'post_file.php',\r
+               \r
+               uploadFinished:function(i,file,response){\r
+                       $.data(file).addClass('done');\r
+                       // response is the JSON object that post_file.php returns\r
+               },\r
+               \r
+       error: function(err, file) {\r
+                       switch(err) {\r
+                               case 'BrowserNotSupported':\r
+                                       showMessage('Your browser does not support HTML5 file uploads!');\r
+                                       break;\r
+                               case 'TooManyFiles':\r
+                                       alert('Too many files! Please select 5 at most! (configurable)');\r
+                                       break;\r
+                               case 'FileTooLarge':\r
+                                       alert(file.name+' is too large! Please upload files up to 2mb (configurable).');\r
+                                       break;\r
+                               default:\r
+                                       break;\r
+                       }\r
+               },\r
+               \r
+               // Called before each upload is started\r
+               beforeEach: function(file){\r
+                       if(!file.type.match(/^image\//)){\r
+                               alert('Only images are allowed!');\r
+                               \r
+                               // Returning false will cause the\r
+                               // file to be rejected\r
+                               return false;\r
+                       }\r
+               },\r
+               \r
+               uploadStarted:function(i, file, len){\r
+                       createImage(file);\r
+               },\r
+               \r
+               progressUpdated: function(i, file, progress) {\r
+                       $.data(file).find('.progress').width(progress);\r
+               }\r
+        \r
+       });\r
+       \r
+       var template = '<div class="preview">'+\r
+                                               '<span class="imageHolder">'+\r
+                                                       '<img />'+\r
+                                                       '<span class="uploaded"></span>'+\r
+                                               '</span>'+\r
+                                               '<div class="progressHolder">'+\r
+                                                       '<div class="progress"></div>'+\r
+                                               '</div>'+\r
+                                       '</div>'; \r
+       \r
+       \r
+       function createImage(file){\r
+\r
+               var preview = $(template), \r
+                       image = $('img', preview);\r
+                       \r
+               var reader = new FileReader();\r
+               \r
+               image.width = 100;\r
+               image.height = 100;\r
+               \r
+               reader.onload = function(e){\r
+                       \r
+                       // e.target.result holds the DataURL which\r
+                       // can be used as a source of the image:\r
+                       \r
+                       image.attr('src',e.target.result);\r
+               };\r
+               \r
+               // Reading the file as a DataURL. When finished,\r
+               // this will trigger the onload function above:\r
+               reader.readAsDataURL(file);\r
+               \r
+               message.hide();\r
+               preview.appendTo(dropbox);\r
+               \r
+               // Associating a preview container\r
+               // with the file, using jQuery's $.data():\r
+               \r
+               $.data(file,preview);\r
+       }\r
+\r
+       function showMessage(msg){\r
+               message.html(msg);\r
+       }\r
+\r
+});
\ No newline at end of file
diff --git a/lib/html5-File-Upload/post_file.php b/lib/html5-File-Upload/post_file.php
new file mode 100644 (file)
index 0000000..c364f94
--- /dev/null
@@ -0,0 +1,59 @@
+<?php\r
+\r
+// If you want to ignore the uploaded files, \r
+// set $demo_mode to true;\r
+\r
+$demo_mode = false;\r
+$upload_dir = 'uploads/';\r
+$allowed_ext = array('jpg','jpeg','png','gif');\r
+\r
+\r
+if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){\r
+       exit_status('Error! Wrong HTTP method!');\r
+}\r
+\r
+\r
+if(array_key_exists('pic',$_FILES) && $_FILES['pic']['error'] == 0 ){\r
+       \r
+       $pic = $_FILES['pic'];\r
+\r
+       if(!in_array(get_extension($pic['name']),$allowed_ext)){\r
+               exit_status('Only '.implode(',',$allowed_ext).' files are allowed!');\r
+       }       \r
+\r
+       if($demo_mode){\r
+               \r
+               // File uploads are ignored. We only log them.\r
+               \r
+               $line = implode('               ', array( date('r'), $_SERVER['REMOTE_ADDR'], $pic['size'], $pic['name']));\r
+               file_put_contents('log.txt', $line.PHP_EOL, FILE_APPEND);\r
+               \r
+               exit_status('Uploads are ignored in demo mode.');\r
+       }\r
+       \r
+       \r
+       // Move the uploaded file from the temporary \r
+       // directory to the uploads folder:\r
+       \r
+       if(move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])){\r
+               exit_status('File was uploaded successfuly!');\r
+       }\r
+       \r
+}\r
+\r
+exit_status('Something went wrong with your upload!');\r
+\r
+\r
+// Helper functions\r
+\r
+function exit_status($str){\r
+       echo json_encode(array('status'=>$str));\r
+       exit;\r
+}\r
+\r
+function get_extension($file_name){\r
+       $ext = explode('.', $file_name);\r
+       $ext = array_pop($ext);\r
+       return strtolower($ext);\r
+}\r
+?>
\ No newline at end of file
diff --git a/lib/html5-File-Upload/sample-index.html b/lib/html5-File-Upload/sample-index.html
new file mode 100644 (file)
index 0000000..50aa031
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE html>\r
+<html>\r
+    <head>\r
+        <meta charset="utf-8" />\r
+        <title>HTML5 File Drag and Drop Upload with jQuery and PHP | Tutorialzine Demo</title>\r
+        \r
+        <!-- Our CSS stylesheet file -->\r
+        <link rel="stylesheet" href="assets/css/styles.css" />\r
+        \r
+        <!--[if lt IE 9]>\r
+          <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>\r
+        <![endif]-->\r
+    </head>\r
+    \r
+    <body>\r
+               \r
+               <header>\r
+                       <h1>HTML5 File Upload with jQuery and PHP</h1>\r
+               </header>\r
+               \r
+               <div id="dropbox">\r
+                       <span class="message">Drop images here to upload. <br /><i>(they will only be visible to you)</i></span>\r
+               </div>\r
+               \r
+        <footer>\r
+               <h2>HTML5 File Upload with jQuery and PHP</h2>\r
+            <a class="tzine" href="http://tutorialzine.com/2011/09/html5-file-upload-jquery-php/">Read &amp; Download on</a>\r
+        </footer>\r
+        \r
+        <!-- Including The jQuery Library -->\r
+               <script src="http://code.jquery.com/jquery-1.6.3.min.js"></script>\r
+               \r
+               <!-- Including the HTML5 Uploader plugin -->\r
+               <script src="assets/js/jquery.filedrop.js"></script>\r
+               \r
+               <!-- The main script file -->\r
+        <script src="assets/js/script.js"></script>\r
+    \r
+    </body>\r
+</html>\r
+\r
index 885865d..89de3ff 100644 (file)
@@ -259,10 +259,10 @@ CREATE TABLE {prefix}golf (
 CREATE TABLE {prefix}images (
   id INT NOT NULL AUTO_INCREMENT,
   name TINYTEXT NULL,
+  status TINYINT(1) NULL,
   file_name TINYTEXT NULL,
   descr TEXT NULL,
   caption TINYTEXT NULL,
-  pending TINYINT(1) NULL,
   position INT NULL,
   ref_type INT NULL,
   ref_dest INT NULL,
@@ -475,85 +475,253 @@ CREATE TABLE {prefix}restaurants (
 
 CREATE TABLE {prefix}settings_general (
   id INT NOT NULL AUTO_INCREMENT,
-  admin_debug BOOLEAN NULL,
-  admin_debug_verbose BOOLEAN NULL,
-  front_debug BOOLEAN NULL,
-  front_debug_verbose BOOLEAN NULL,
-  google_maps_api_key TINYTEXT NULL,
-  maps_default_lat FLOAT NULL,
-  maps_default_lon FLOAT NULL,
+  admin_debug BOOLEAN DEFAULT true,
+  admin_debug_verbose BOOLEAN DEFAULT false,
+  front_debug BOOLEAN DEFAULT false,
+  front_debug_verbose BOOLEAN DEFAULT false,
+  google_maps_api_key TINYTEXT DEFAULT '',
+  maps_default_lat FLOAT DEFAULT 45.3749,
+  maps_default_lon FLOAT DEFAULT -84.9592,
   time_zone TINYTEXT NULL,
-  list_show_map BOOLEAN NULL,
-  list_show_list BOOLEAN NULL,
-  list_show_search BOOLEAN NULL,
-  list_show_search_text BOOLEAN NULL,
-  list_show_search_category BOOLEAN NULL,
-  list_show_search_amenities BOOLEAN NULL,
-  list_show_search_alphja BOOLEAN NULL,
-  list_show_detail_link BOOLEAN NULL,
-  list_show_logo BOOLEAN NULL,
+  list_show_map BOOLEAN DEFAULT true,
+  list_show_list BOOLEAN DEFAULT true,
+  list_show_search BOOLEAN DEFAULT true,
+  list_show_search_text BOOLEAN DEFAULT true,
+  list_show_search_category BOOLEAN DEFAULT true,
+  list_show_search_amenities BOOLEAN DEFAULT true,
+  list_show_search_alpha BOOLEAN DEFAULT true,
+  list_show_detail_link BOOLEAN DEFAULT true,
+  list_show_logo BOOLEAN DEFAULT true,
   list_logo_size TINYTEXT NULL,
-  list_show_address BOOLEAN NULL,
-  list_show_street BOOLEAN NULL,
-  list_show_citystatezip BOOLEAN NULL,
-  list_show_country BOOLEAN NULL,
-  list_show_region BOOLEAN NULL,
-  list_show_descr BOOLEAN NULL,
-  list_show_short_descr BOOLEAN NULL,
-  list_show_phone BOOLEAN NULL,
-  list_show_tollfree BOOLEAN NULL,
-  list_show_url BOOLEAN NULL,
-  list_show_url_newtarget BOOLEAN NULL,
-  list_show_categories BOOLEAN NULL,
-  list_show_creditcards BOOLEAN NULL,
-  list_show_amenities BOOLEAN NULL,
-  list_map_show_detaillink BOOLEAN NULL,
-  list_map_show_logo BOOLEAN NULL,
+  list_show_address BOOLEAN DEFAULT true,
+  list_show_street BOOLEAN DEFAULT true,
+  list_show_citystatezip BOOLEAN DEFAULT true,
+  list_show_country BOOLEAN DEFAULT true,
+  list_show_region BOOLEAN DEFAULT true,
+  list_show_descr BOOLEAN DEFAULT false,
+  list_show_short_descr BOOLEAN DEFAULT true,
+  list_show_phone BOOLEAN DEFAULT true,
+  list_show_tollfree BOOLEAN DEFAULT true,
+  list_show_url BOOLEAN DEFAULT true,
+  list_show_url_newtarget BOOLEAN DEFAULT true,
+  list_show_categories BOOLEAN DEFAULT true,
+  list_show_creditcards BOOLEAN DEFAULT true,
+  list_show_amenities BOOLEAN DEFAULT false,
+  list_map_show_detaillink BOOLEAN DEFAULT true,
+  list_map_show_logo BOOLEAN DEFAULT false,
   list_map_logo_size TINYTEXT NULL,
-  list_map_show_description BOOLEAN NULL,
-  list_map_show_short_description BOOLEAN NULL,
-  list_map_show_address BOOLEAN NULL,
-  list_map_show_street BOOLEAN NULL,
-  list_map_show_citystatezip BOOLEAN NULL,
-  list_map_show_country BOOLEAN NULL,
-  list_map_show_region BOOLEAN NULL,
-  list_map_show_phone BOOLEAN NULL,
-  list_map_show_tollfree BOOLEAN NULL,
-  list_map_show_url BOOLEAN NULL,
-  list_map_show_url_newtarget BOOLEAN NULL,
-  list_map_show_categories BOOLEAN NULL,
-  list_map_show_creditcards BOOLEAN NULL,
-  list_map_show_amenities BOOLEAN NULL,
-  detail_show_map BOOLEAN NULL,
-  detail_show_directions BOOLEAN NULL,
-  detail_show_logo BOOLEAN NULL,
-  detail_show_logo_size TINYTEXT NULL,
-  detail_show_description BOOLEAN NULL,
-  detail_show_short_description BOOLEAN NULL,
-  detail_show_address BOOLEAN NULL,
-  detail_show_street BOOLEAN NULL,
-  detail_show_citystatezip BOOLEAN NULL,
-  detail_show_country BOOLEAN NULL,
-  detail_show_region BOOLEAN NULL,
-  detail_show_phone BOOLEAN NULL,
-  detail_show_tollfree BOOLEAN NULL,
-  detail_show_url BOOLEAN NULL,
-  detail_show_url_newtarget BOOLEAN NULL,
-  detail_show_categories BOOLEAN NULL,
-  detail_show_creditcards BOOLEAN NULL,
-  detail_show_amenities BOOLEAN NULL,
+  list_map_show_descr BOOLEAN DEFAULT false,
+  list_map_show_short_descr BOOLEAN DEFAULT true,
+  list_map_show_address BOOLEAN DEFAULT true,
+  list_map_show_street BOOLEAN DEFAULT true,
+  list_map_show_citystatezip BOOLEAN DEFAULT true,
+  list_map_show_country BOOLEAN DEFAULT true,
+  list_map_show_region BOOLEAN DEFAULT true,
+  list_map_show_phone BOOLEAN DEFAULT true,
+  list_map_show_tollfree BOOLEAN DEFAULT true,
+  list_map_show_url BOOLEAN DEFAULT true,
+  list_map_show_url_newtarget BOOLEAN DEFAULT true,
+  list_map_show_categories BOOLEAN DEFAULT false,
+  list_map_show_creditcards BOOLEAN DEFAULT false,
+  list_map_show_amenities BOOLEAN DEFAULT false,
+  detail_show_map BOOLEAN DEFAULT true,
+  detail_show_directions BOOLEAN DEFAULT true,
+  detail_show_logo BOOLEAN DEFAULT true,
+  detail_logo_size TINYTEXT NULL,
+  detail_show_descr BOOLEAN DEFAULT true,
+  detail_show_short_descr BOOLEAN DEFAULT false,
+  detail_show_address BOOLEAN DEFAULT true,
+  detail_show_street BOOLEAN DEFAULT true,
+  detail_show_citystatezip BOOLEAN DEFAULT true,
+  detail_show_country BOOLEAN DEFAULT true,
+  detail_show_region BOOLEAN DEFAULT true,
+  detail_show_phone BOOLEAN DEFAULT true,
+  detail_show_tollfree BOOLEAN DEFAULT true,
+  detail_show_url BOOLEAN DEFAULT true,
+  detail_show_url_newtarget BOOLEAN DEFAULT true,
+  detail_show_categories BOOLEAN DEFAULT true,
+  detail_show_creditcards BOOLEAN DEFAULT true,
+  detail_show_amenities BOOLEAN DEFAULT true,
+  detail_map_show_logo BOOLEAN DEFAULT false,
+  detail_map_logo_size TINYTEXT NULL,
+  detail_map_show_descr BOOLEAN DEFAULT false,
+  detail_map_show_short_descr BOOLEAN DEFAULT true,
+  detail_map_show_address BOOLEAN DEFAULT true,
+  detail_map_show_street BOOLEAN DEFAULT true,
+  detail_map_show_citystatezip BOOLEAN DEFAULT true,
+  detail_map_show_country BOOLEAN DEFAULT true,
+  detail_map_show_region BOOLEAN DEFAULT true,
+  detail_map_show_phone BOOLEAN DEFAULT true,
+  detail_map_show_tollfree BOOLEAN DEFAULT true,
+  detail_map_show_url BOOLEAN DEFAULT true,
+  detail_map_show_url_newtarget BOOLEAN DEFAULT true,
+  detail_map_show_categories BOOLEAN DEFAULT false,
+  detail_map_show_creditcards BOOLEAN DEFAULT false,
+  detail_map_show_amenities BOOLEAN DEFAULT false,
   PRIMARY KEY (id)
 );
 
 ----
 
+INSERT INTO {prefix}settings_general
+    ( id, time_zone )
+   VALUES
+    ( 1, 'America/Detroit' )
+;
+
+----
+
 CREATE TABLE {prefix}settings_terms (
   id INT NOT NULL AUTO_INCREMENT,
+  term_admin_menu_members TINYTEXT NULL,
+  term_admin_menu_member_list TINYTEXT NULL,
+  term_admin_menu_member TINYTEXT NULL,
+  term_admin_menu_configure TINYTEXT NULL,
+  term_admin_menu_settings TINYTEXT NULL,
+  term_admin_menu_shortcodes TINYTEXT NULL,
+  term_admin_menu_members_dashboard TINYTEXT NULL,
+  term_admin_menu_members_list TINYTEXT NULL,
+  term_admin_menu_members_reports TINYTEXT NULL,
+  term_admin_menu_member_dashboard TINYTEXT NULL,
+  term_admin_menu_member_info TINYTEXT NULL,
+  term_admin_menu_member_locations TINYTEXT NULL,
+  term_admin_menu_member_facilities TINYTEXT NULL,
+  term_admin_menu_member_attractions TINYTEXT NULL,
+  term_admin_menu_member_contacts TINYTEXT NULL,
+  term_admin_menu_configure_member_types TINYTEXT NULL,
+  term_admin_menu_configure_member_cats TINYTEXT NULL,
+  term_admin_menu_configure_accom_types TINYTEXT NULL,
+  term_admin_menu_configure_amenities TINYTEXT NULL,
+  term_admin_menu_configure_cities TINYTEXT NULL,
+  term_admin_menu_configure_regions TINYTEXT NULL,
+  term_admin_menu_settings_general TINYTEXT NULL,
+  term_admin_menu_settings_terms TINYTEXT NULL,
+  term_admin_menu_settings_development TINYTEXT NULL,
+  term_member TINYTEXT NULL,
+  term_member_cap TINYTEXT NULL,
+  term_member_plur TINYTEXT NULL,
+  term_member_plur_cap TINYTEXT NULL,
+  term_location TINYTEXT NULL,
+  term_location_cap TINYTEXT NULL,
+  term_location_plur TINYTEXT NULL,
+  term_location_plur_cap TINYTEXT NULL,
+  term_facility TINYTEXT NULL,
+  term_facility_cap TINYTEXT NULL,
+  term_facility_plur TINYTEXT NULL,
+  term_facility_plur_cap TINYTEXT NULL,
+  term_attraction TINYTEXT NULL,
+  term_attraction_cap TINYTEXT NULL,
+  term_attraction_plur TINYTEXT NULL,
+  term_attraction_plur_cap TINYTEXT NULL,
+  term_contact TINYTEXT NULL,
+  term_contact_cap TINYTEXT NULL,
+  term_contact_plur TINYTEXT NULL,
+  term_contact_plur_cap TINYTEXT NULL,
   PRIMARY KEY (id)
 );
 
 ----
 
+INSERT INTO {prefix}settings_terms
+    (
+    id,
+    term_admin_menu_members,                        
+    term_admin_menu_member_list,                    
+    term_admin_menu_member,                     
+    term_admin_menu_configure,                      
+    term_admin_menu_settings,                       
+    term_admin_menu_shortcodes,                     
+    term_admin_menu_members_dashboard,         
+    term_admin_menu_members_list,                   
+    term_admin_menu_members_reports,                
+    term_admin_menu_member_dashboard,
+    term_admin_menu_member_info,
+    term_admin_menu_member_locations,               
+    term_admin_menu_member_facilities,              
+    term_admin_menu_member_attractions,             
+    term_admin_menu_member_contacts,                
+    term_admin_menu_configure_member_types,         
+    term_admin_menu_configure_member_cats,          
+    term_admin_menu_configure_accom_types,          
+    term_admin_menu_configure_amenities,     
+    term_admin_menu_configure_cities,               
+    term_admin_menu_configure_regions,              
+    term_admin_menu_settings_general,               
+    term_admin_menu_settings_terms,                 
+    term_admin_menu_settings_development,           
+    term_member,                                    
+    term_member_cap,                                
+    term_member_plur,                               
+    term_member_plur_cap,                           
+    term_location,                                  
+    term_location_cap,                              
+    term_location_plur,                             
+    term_location_plur_cap,                         
+    term_facility,                                  
+    term_facility_cap,                              
+    term_facility_plur,                             
+    term_facility_plur_cap,                         
+    term_attraction,                                
+    term_attraction_cap,                            
+    term_attraction_plur,                           
+    term_attraction_plur_cap,                       
+    term_contact,                                   
+    term_contact_cap,                               
+    term_contact_plur,                              
+    term_contact_plur_cap                           
+    )
+   VALUES
+    (
+    1,
+    'Members',            
+    'Member',             
+    'Add Member',         
+    'Configure',          
+    'Settings',           
+    'Shortcodes',         
+    'Dashboard',          
+    'Member List',        
+    'Reports',            
+    'Member Dashboard',
+    'Member Info',        
+    'Locations',          
+    'Facilities',         
+    'Attractions',        
+    'Contacts',           
+    'Member Types',       
+    'Member Categories',  
+    'Accommodation Types',
+    'Amenities',          
+    'Cities',             
+    'Regions',            
+    'General Settings',   
+    'Terms & Phrases',    
+    'Development',        
+    'member',             
+    'Member',             
+    'members',            
+    'Members',            
+    'location',           
+    'Location',           
+    'locations',          
+    'Locations',          
+    'facility',           
+    'Facility',           
+    'facilities',         
+    'Facilities',         
+    'attraction',         
+    'Attraction',         
+    'attractions',        
+    'Attractions',        
+    'contact',            
+    'Contact',            
+    'contacts',           
+    'Contacts'
+    )
+;
+
+----
+
 CREATE TABLE {prefix}social_media (
   id INT NOT NULL AUTO_INCREMENT,
   name TINYTEXT NULL,
index 968827c..703863d 100644 (file)
@@ -1,6 +1,17 @@
 Development Notes
 -----------------
 
+Database Updates
+
+* Added table settings_general
+* Added table settings_terms
+* ALTER TABLE wp_glm_members_images CHANGE pending status tinyint;
+
+
+TO-DO
+
+* Check all current_user_can() calls to make sure they're for the right capability.
+
 ADMIN AREA
 
 * Consider paginating certain lists
index d206596..f2747bd 100644 (file)
@@ -1,4 +1,4 @@
-<?php /* Smarty version Smarty-3.1.21-dev, created on 2015-03-10 12:28:06
+<?php /* Smarty version Smarty-3.1.21-dev, created on 2015-06-19 11:18:56
          compiled from "/var/www/server/wordpress/wp-content/plugins/glm-member-db/views/admin/members/index.html" */ ?>
 <?php /*%%SmartyHeaderCode:43313958054c05ab60b0587-71987387%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
 $_valid = $_smarty_tpl->decodeProperties(array (
@@ -7,7 +7,7 @@ $_valid = $_smarty_tpl->decodeProperties(array (
     '081a36d97cdf30d438a1e104c26a275acc180da0' => 
     array (
       0 => '/var/www/server/wordpress/wp-content/plugins/glm-member-db/views/admin/members/index.html',
-      1 => 1426001139,
+      1 => 1434727132,
       2 => 'file',
     ),
   ),
@@ -22,8 +22,10 @@ $_valid = $_smarty_tpl->decodeProperties(array (
     'haveMemberTypes' => 0,
     'thisURL' => 0,
     'haveCategories' => 0,
-    'haveRegions' => 0,
     'haveAccommodationTypes' => 0,
+    'haveAmenities' => 0,
+    'haveCities' => 0,
+    'haveRegions' => 0,
     'numbMembers' => 0,
     'membersPending' => 0,
     'pendingList' => 0,
@@ -42,7 +44,7 @@ $_valid = $_smarty_tpl->decodeProperties(array (
         <tr>
             <th class="glm-error">You do not have any Member Types setup.</th>
             <td><a href="<?php echo $_smarty_tpl->tpl_vars['thisURL']->value;?>
-?page=glm-members-admin-menu-configure&glm_action=memberTypes">Click here to add Member Types.</a></td>
+?page=glm-members-admin-menu-configure&glm_action=index">Click here to add Member Types.</a></td>
         </tr>
 <?php }?>                
 <?php if (!$_smarty_tpl->tpl_vars['haveCategories']->value) {?>
@@ -52,21 +54,36 @@ $_valid = $_smarty_tpl->decodeProperties(array (
 ?page=glm-members-admin-menu-configure&glm_action=categories">Click here to add Member Categories.</a></td>
         </tr>
 <?php }?>                
-<?php if (!$_smarty_tpl->tpl_vars['haveRegions']->value) {?>
+<?php if (!$_smarty_tpl->tpl_vars['haveAccommodationTypes']->value) {?>
         <tr>
-            <th><span class="glm-error">You do not have any Regions setup.</span></th>
+            <th><span class="glm-error">You do not have any Accommodation Types setup.</span></th>
             <td><a href="<?php echo $_smarty_tpl->tpl_vars['thisURL']->value;?>
-?page=glm-members-admin-menu-configure&glm_action=regions">Click here to add Regions.</a></td>
+?page=glm-members-admin-menu-configure&glm_action=accommodationTypes">Click here to add Accommodation Types.</a></td>
         </tr>
 <?php }?>                
-<?php if (!$_smarty_tpl->tpl_vars['haveAccommodationTypes']->value) {?>
+<?php if (!$_smarty_tpl->tpl_vars['haveAmenities']->value) {?>
+        <tr>
+            <th><span class="glm-error">You do not have any Amenities setup.</span></th>
+            <td><a href="<?php echo $_smarty_tpl->tpl_vars['thisURL']->value;?>
+?page=glm-members-admin-menu-configure&glm_action=amenities">Click here to add Amenities.</a></td>
+        </tr>
+<?php }?>                
+<?php if (!$_smarty_tpl->tpl_vars['haveCities']->value) {?>
         <tr>
-            <th><span class="glm-error">You do not have any AccommodationTypes setup.</span></th>
+            <th><span class="glm-error">You do not have any Cities setup.</span></th>
             <td><a href="<?php echo $_smarty_tpl->tpl_vars['thisURL']->value;?>
-?page=glm-members-admin-menu-configure&glm_action=accommodationTypes">Click here to add AccommodationTypes.</a></td>
+?page=glm-members-admin-menu-configure&glm_action=cities">Click here to add Cities.</a></td>
+        </tr>
+<?php }?>                
+<?php if (!$_smarty_tpl->tpl_vars['haveRegions']->value) {?>
+        <tr>
+            <th><span class="glm-error">You do not have any Regions setup.</span></th>
+            <td><a href="<?php echo $_smarty_tpl->tpl_vars['thisURL']->value;?>
+?page=glm-members-admin-menu-configure&glm_action=regions">Click here to add Regions.</a></td>
         </tr>
 <?php }?>                
 <?php if ($_smarty_tpl->tpl_vars['numbMembers']->value==0) {?>
+        <tr><td colspan="2">&nbsp;</td></tr>
         <tr>
            <th> <span class="glm-error">You do not have any members listed.</span></th>
             <td><a href="<?php echo $_smarty_tpl->tpl_vars['thisURL']->value;?>
@@ -97,7 +114,9 @@ $_valid = $_smarty_tpl->decodeProperties(array (
             </tr>
         </thead>
         <tbody>
-    <?php $_smarty_tpl->tpl_vars["i"] = new Smarty_variable("0", null, 0);?>
+    <?php if (isset($_smarty_tpl->tpl_vars["i"])) {$_smarty_tpl->tpl_vars["i"] = clone $_smarty_tpl->tpl_vars["i"];
+$_smarty_tpl->tpl_vars["i"]->value = "0"; $_smarty_tpl->tpl_vars["i"]->nocache = null; $_smarty_tpl->tpl_vars["i"]->scope = 0;
+} else $_smarty_tpl->tpl_vars["i"] = new Smarty_variable("0", null, 0);?>
     <?php  $_smarty_tpl->tpl_vars['p'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['p']->_loop = false;
  $_from = $_smarty_tpl->tpl_vars['pendingList']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
 foreach ($_from as $_smarty_tpl->tpl_vars['p']->key => $_smarty_tpl->tpl_vars['p']->value) {
index 8c5bfbf..1a98278 100644 (file)
@@ -1,4 +1,4 @@
-<?php /* Smarty version Smarty-3.1.21-dev, created on 2015-06-03 14:05:40
+<?php /* Smarty version Smarty-3.1.21-dev, created on 2015-06-17 16:40:00
          compiled from "/var/www/server/wordpress/wp-content/plugins/glm-member-db/views/admin/configure/index.html" */ ?>
 <?php /*%%SmartyHeaderCode:135960089454c0496da6c5c6-30692976%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
 $_valid = $_smarty_tpl->decodeProperties(array (
@@ -7,7 +7,7 @@ $_valid = $_smarty_tpl->decodeProperties(array (
     '47fb9b803e7138d215645f3c977b0b1dc2a9e718' => 
     array (
       0 => '/var/www/server/wordpress/wp-content/plugins/glm-member-db/views/admin/configure/index.html',
-      1 => 1433354735,
+      1 => 1434554103,
       2 => 'file',
     ),
   ),
@@ -56,7 +56,7 @@ $_valid = $_smarty_tpl->decodeProperties(array (
             </table>
             <p><span class="glm-required">*</span> Required</p>
             <a id="newMemberTypeCancel" class="button-primary glm-right">Cancel</a>
-            <input type="submit" value="Add new member type">
+            <input type="submit" value="Add new member type" class="button-primary">
         </form>
     </div>
 
index b511d05..9a2aeee 100644 (file)
@@ -1,4 +1,4 @@
-<?php /* Smarty version Smarty-3.1.21-dev, created on 2015-01-22 05:12:19
+<?php /* Smarty version Smarty-3.1.21-dev, created on 2015-06-13 11:33:11
          compiled from "/var/www/server/wordpress/wp-content/plugins/glm-member-db/views/admin/error/index.html" */ ?>
 <?php /*%%SmartyHeaderCode:74342921254c086b3b0af86-22635380%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
 $_valid = $_smarty_tpl->decodeProperties(array (
@@ -7,7 +7,7 @@ $_valid = $_smarty_tpl->decodeProperties(array (
     '60cbe99d19bbec013cbca4d9344f2fd4a4152f52' => 
     array (
       0 => '/var/www/server/wordpress/wp-content/plugins/glm-member-db/views/admin/error/index.html',
-      1 => 1421691086,
+      1 => 1434209562,
       2 => 'file',
     ),
   ),
@@ -15,9 +15,9 @@ $_valid = $_smarty_tpl->decodeProperties(array (
   'function' => 
   array (
   ),
-  'has_nocache_code' => false,
   'version' => 'Smarty-3.1.21-dev',
   'unifunc' => 'content_54c086b3b1dd65_92948708',
+  'has_nocache_code' => false,
 ),false); /*/%%SmartyHeaderCode%%*/?>
 <?php if ($_valid && !is_callable('content_54c086b3b1dd65_92948708')) {function content_54c086b3b1dd65_92948708($_smarty_tpl) {?><?php echo $_smarty_tpl->getSubTemplate ('admin/error/header.html', $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, null, array(), 0);?>
 
index 3aec7c4..d784028 100644 (file)
@@ -119,18 +119,30 @@ class GlmMembersAdmin_dashboardWidget_index extends GlmDataMembers
         $categoriesStats = $Categories->getStats();
         $haveCategories = ($categoriesStats > 0);
 
-        // Check for required Regions
-        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataRegions.php');
-        $Regions = new GlmDataRegions($this->wpdb, $this->config);
-        $regionsStats = $Regions->getStats();
-        $haveRegions = ($regionsStats > 0);
-
         // Check for required Accommodation Types
         require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataAccommodationTypes.php');
         $AccommodationTypes = new GlmDataAccommodationTypes($this->wpdb, $this->config);
         $accommodationTypesStats = $AccommodationTypes->getStats();
         $haveAccommodationTypes = ($accommodationTypesStats > 0);
 
+        // Check for required Amenities
+        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataAmenities.php');
+        $Amenities = new GlmDataAmenities($this->wpdb, $this->config);
+        $amenitiesStats = $Amenities->getStats();
+        $haveAmenities = ($amenitiesStats > 0);
+
+        // Check for required Cities
+        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCities.php');
+        $Cities = new GlmDataCities($this->wpdb, $this->config);
+        $citiesStats = $Cities->getStats();
+        $haveCities = ($citiesStats > 0);
+
+        // Check for required Regions
+        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataRegions.php');
+        $Regions = new GlmDataRegions($this->wpdb, $this->config);
+        $regionsStats = $Regions->getStats();
+        $haveRegions = ($regionsStats > 0);
+
         // Get number of member information records with pending updates
         require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMemberInfo.php');
         $MemberInfo = new GlmDataMemberInfo($this->wpdb, $this->config);
@@ -149,8 +161,10 @@ class GlmMembersAdmin_dashboardWidget_index extends GlmDataMembers
             'membersPending' => $membersPending,
             'haveMemberTypes' => $haveMemberTypes,
             'haveCategories' => $haveCategories,
-            'haveRegions' => $haveRegions,
             'haveAccommodationTypes' => $haveAccommodationTypes,
+            'haveAmenities' => $haveAmenities,
+            'haveRegions' => $haveRegions,
+            'haveCities' => $haveCities,
             'pendingList' => $pendingList
         );
 
diff --git a/models/admin/member/memberImage.php b/models/admin/member/memberImage.php
new file mode 100644 (file)
index 0000000..668cc51
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+
+/**
+ * Gaslight Media Members Database
+ * Admin Member Info Image Upload by AJAX
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @version  0.1
+ */
+
+// Load Members data abstract
+require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataImages.php');
+
+/*
+ * This class performs the work of handling images passed to it via
+ * an AJAX call that goes through the WorPress AJAX Handler.
+ *
+ */
+class GlmMembersAdmin_member_memberImage extends GlmDataImages
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+
+    /*
+     * Constructor
+     *
+     * This contructor sets up this model. At this time that only includes
+     * storing away the WordPress data object.
+     *
+     * @return object Class object
+     *
+     */
+    public function __construct ($wpdb, $config)
+    {
+
+        // Save WordPress Database object
+        $this->wpdb = $wpdb;
+
+        // Save plugin configuration object
+        $this->config = $config;
+
+        // Run constructor for members data class
+        parent::__construct(false, false);
+
+    }
+
+    /*
+     * Perform Model Action
+     *
+     * This method does the work for this model and returns any resulting data
+     *
+     * @return array Status and data array
+     *
+     * 'status'
+     *
+     * True if successfull and false if there was a fatal failure.
+     *
+     * 'menuItemRedirect'
+     *
+     * If not false, provides a menu item the controller should
+     * execute after this one. Normally if this is used, there would also be a
+     * modelRedirect value supplied as well.
+     *
+     * 'modelRedirect'
+     *
+     * If not false, provides an action the controller should execute after
+     * this one.
+     *
+     * 'view'
+     *
+     * A suggested view name that the contoller should use instead of the
+     * default view for this model or false to indicate that the default view
+     * should be used.
+     *
+     * 'data'
+     *
+     * Data that the model is returning for use in merging with the view to
+     * produce output.
+     *
+     */
+    public function modelAction ($actionData = false)
+    {
+
+        $return = array(
+            'status' => false,       // Assume we didn't get files or nothing works
+            'files' => false,       // Provide submitted data along with stored image data
+            'message' => false
+        );
+
+
+        // Check for uploaded files
+        if (!isset($_FILES) || count($_FILES) == 0) {
+            $return['message'] = 'No image file provided!';
+            echo json_encode($return);
+            die();
+        }
+
+        // Include the incoming files data
+        $files = $_FILES;
+
+        // Check for Member Info record ID
+        if (!isset($_REQUEST['memberInfoID']) || trim($_REQUEST['memberInfoID']) == '') {
+            $return['message'] = 'No Member Info Record ID provided!';
+            echo json_encode($return);
+            die();
+        }
+echo "memberInfoID = ".$_REQUEST['memberInfoID']."\n\n";
+        // Store each file away
+
+            // Add stored image to return data
+
+        // Return stored image data
+        echo json_encode($return);
+        die();
+    }
+
+
+}
+?>
index 95735c3..19cdeb8 100644 (file)
@@ -60,39 +60,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
         // Run constructor for members data class
         parent::__construct(false, false);
 
-        // Add scrips and css
-        add_action('glm_members_memberInfo_enqueue_scripts',
-            array(
-                $this,
-                'glmMembersMemberInfoScripts'
-            )
-        );
-
-
-    }
-
-    /**
-     * Setup inclusion of needed scripts
-     *
-     * This method is called by an add_action() hook setup in the contructor.
-     *
-     * (no prameters)
-     *
-     * @return void
-     * @access public
-     */
-    public function glmMembersMemberInfoScripts ()
-    {
-/*  Not working at this time
-        // Enqueue Geolocation Edit Script
-        wp_register_script('glm-members-geo-js',
-            GLM_MEMBERS_PLUGIN_URL . 'js/geolocation-edit/jquery.geolocation.edit.0.0.11.js',
-            array(
-                'jquery'
-            )
-        );
-        wp_enqueue_script('glm-members-geo-js');
-*/
     }
 
     /*
@@ -137,6 +104,7 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
         $haveMember = false;
         $memberInfoID = 0;
         $haveMemberInfo = false;
+        $haveImageGallery = false;
         $isActive = false;
         $noActive = false;
         $categories = false;
@@ -296,11 +264,19 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
                 // Edit the existing member
                 $memberInfo = $this->editEntry($memberInfoID);
 
-                // If we have member data, say so
+                // If we have member data
                 if (is_array($memberInfo) && $memberInfo['status']) {
 
+                    // Say we do
                     $haveMemberInfo = true;
 
+                    // Also get any image gallery images
+                    require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataImages.php');
+                    $Images = new GlmDataImages($this->wpdb, $this->config);
+                    $imageGallery = $Images->getGallery($this->config['ref_type_numb']['Member'], $memberInfoID);
+
+                    $haveImageGallery = ($imageGallery != false);
+
                 // Otherwise
                 } else {
 
index caee4bd..73ca9ca 100644 (file)
@@ -115,18 +115,30 @@ class GlmMembersAdmin_members_index extends GlmDataMembers
         $categoriesStats = $Categories->getStats();
         $haveCategories = ($categoriesStats > 0);
 
-        // Check for required Regions
-        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataRegions.php');
-        $Regions = new GlmDataRegions($this->wpdb, $this->config);
-        $regionsStats = $Regions->getStats();
-        $haveRegions = ($regionsStats > 0);
-
         // Check for required Accommodation Types
         require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataAccommodationTypes.php');
         $AccommodationTypes = new GlmDataAccommodationTypes($this->wpdb, $this->config);
         $accommodationTypesStats = $AccommodationTypes->getStats();
         $haveAccommodationTypes = ($accommodationTypesStats > 0);
 
+        // Check for required Amenities
+        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataAmenities.php');
+        $Amenities = new GlmDataAmenities($this->wpdb, $this->config);
+        $amenitiesStats = $Amenities->getStats();
+        $haveAmenities = ($amenitiesStats > 0);
+
+        // Check for required Cities
+        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCities.php');
+        $Cities = new GlmDataCities($this->wpdb, $this->config);
+        $citiesStats = $Cities->getStats();
+        $haveCities = ($citiesStats > 0);
+
+        // Check for required Regions
+        require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataRegions.php');
+        $Regions = new GlmDataRegions($this->wpdb, $this->config);
+        $regionsStats = $Regions->getStats();
+        $haveRegions = ($regionsStats > 0);
+
         // Get number of member information records with pending updates
         require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMemberInfo.php');
         $MemberInfo = new GlmDataMemberInfo($this->wpdb, $this->config);
@@ -145,8 +157,10 @@ class GlmMembersAdmin_members_index extends GlmDataMembers
             'membersPending' => $membersPending,
             'haveMemberTypes' => $haveMemberTypes,
             'haveCategories' => $haveCategories,
-            'haveRegions' => $haveRegions,
             'haveAccommodationTypes' => $haveAccommodationTypes,
+            'haveAmenities' => $haveAmenities,
+            'haveRegions' => $haveRegions,
+            'haveCities' => $haveCities,
             'pendingList' => $pendingList
         );
 
index e5645f5..e0bb79d 100644 (file)
  * @version  0.1
  */
 
+// Load Members data abstract
+require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/settings/dataSettingsGeneral.php');
+
 /*
  * This class performs the work for the default action of the "Members" menu
  * option, which is to display the members dashboard.
  *
  */
-class GlmMembersAdmin_settings_index
+class GlmMembersAdmin_settings_index extends GlmDataSettingsGeneral
 {
 
     /**
@@ -54,6 +57,9 @@ class GlmMembersAdmin_settings_index
         // Save plugin configuration object
         $this->config = $config;
 
+        // Run constructor for members data class
+        parent::__construct(false, false);
+
     }
 
     /*
@@ -92,13 +98,74 @@ class GlmMembersAdmin_settings_index
      */
     public function modelAction ($actionData = false)
     {
+        // General settings are always stored in a record with ID=1.
+        $id = 1;
+
+        // Determine if current user can edit configurations
+        if (!current_user_can('glm_members_configure')) {
+            return array(
+                    'status' => false,
+                    'menuItemRedirect' => 'error',
+                    'modelRedirect' => 'index',
+                    'view' => 'admin/error/index.html',
+                    'data' => array(
+                            'reason' => 'User does not have rights to make configuration changes.'
+                    )
+            );
+        }
+
+        // Check for submission option
+        $option = '';
+        if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') {
+            $option = $_REQUEST['option'];
+        }
+
+        switch($option) {
+
+            // Update the settings and redisplay the form
+            case 'submit':
+
+                // Update the general settings
+                $generalSettings = $this->updateEntry(1);
+
+                // Display admin message that the data has been updated
+                glmMembersAdmin::addNotice('General Settings for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been updated.', 'AdminNotice');
+
+                break;
+
+            // Default is to get the current settings and display the form
+            default:
+
+                // Try to get the first (should be only) entry for general settings.
+                $generalSettings = $this->editEntry($id);
+
+                if ($generalSettings === false) {
+
+                    if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) {
+                        glmMembersAdmin::addNotice("<b>&nbsp;&nbsp;/modesl/admin/settings/index.php: Unable to load General Settings.", 'Alert');
+                    }
+
+                    return array(
+                        'status' => false,
+                        'menuItemRedirect' => 'error',
+                        'modelRedirect' => 'index',
+                        'view' => 'admin/error/index.html',
+                        'data' => array(
+                            'reason' => 'Unable to create general settings entry in database.'
+                        )
+                    );
+                }
+
+                break;
 
-        // Determine if current user can add, edit, delete member data
-        $canEdit = current_user_can('glm_members_edit');
+        }
 
         // Compile template data
         $templateData = array(
-            'canEdit' => $canEdit
+            'reason' => '',
+            'settings' => $generalSettings,
+            'timezones' =>  DateTimeZone::listIdentifiers()
+//            'canEdit' => $canEdit
         );
 
         // Return status, suggested view, and data to controller
diff --git a/models/admin/settings/terms.php b/models/admin/settings/terms.php
new file mode 100644 (file)
index 0000000..9db4ce6
--- /dev/null
@@ -0,0 +1,184 @@
+<?php
+
+/**
+ * Gaslight Media Members Database
+ * Admin Settings Terms
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @version  0.1
+ */
+
+// Load Members data abstract
+require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/settings/dataSettingsTerms.php');
+
+/*
+ * This class performs the work for the default action of the "Members" menu
+ * option, which is to display the members dashboard.
+ *
+ */
+class GlmMembersAdmin_settings_terms extends GlmDataSettingsTerms
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+
+    /*
+     * Constructor
+     *
+     * This contructor sets up this model. At this time that only includes
+     * storing away the WordPress data object.
+     *
+     * @return object Class object
+     *
+     */
+    public function __construct ($wpdb, $config)
+    {
+
+        // Save WordPress Database object
+        $this->wpdb = $wpdb;
+
+        // Save plugin configuration object
+        $this->config = $config;
+
+        // Run constructor for members data class
+        parent::__construct(false, false);
+
+    }
+
+    /*
+     * Perform Model Action
+     *
+     * This method does the work for this model and returns any resulting data
+     *
+     * @return array Status and data array
+     *
+     * 'status'
+     *
+     * True if successfull and false if there was a fatal failure.
+     *
+     * 'menuItemRedirect'
+     *
+     * If not false, provides a menu item the controller should
+     * execute after this one. Normally if this is used, there would also be a
+     * modelRedirect value supplied as well.
+     *
+     * 'modelRedirect'
+     *
+     * If not false, provides an action the controller should execute after
+     * this one.
+     *
+     * 'view'
+     *
+     * A suggested view name that the contoller should use instead of the
+     * default view for this model or false to indicate that the default view
+     * should be used.
+     *
+     * 'data'
+     *
+     * Data that the model is returning for use in merging with the view to
+     * produce output.
+     *
+     */
+    public function modelAction ($actionData = false)
+    {
+        // General settings are always stored in a record with ID=1.
+        $id = 1;
+
+        // Determine if current user can edit configurations
+        if (!current_user_can('glm_members_configure')) {
+            return array(
+                    'status' => false,
+                    'menuItemRedirect' => 'error',
+                    'modelRedirect' => 'index',
+                    'view' => 'admin/error/index.html',
+                    'data' => array(
+                            'reason' => 'User does not have rights to make configuration changes.'
+                    )
+            );
+        }
+
+        // Check for submission option
+        $option = '';
+        if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') {
+            $option = $_REQUEST['option'];
+        }
+
+        switch($option) {
+
+            // Update the settings and redisplay the form
+            case 'submit':
+
+                // Update the general settings
+                $termsSettings = $this->updateEntry(1);
+
+                // Display admin message that the data has been updated
+                glmMembersAdmin::addNotice('Terms Settings for the '.GLM_MEMBERS_PLUGIN_NAME.' plugin have been updated.', 'AdminNotice');
+
+                break;
+
+            // Default is to get the current settings and display the form
+            default:
+
+                // Try to get the first (should be only) entry for general settings.
+                $termsSettings = $this->editEntry($id);
+
+                // Check that we actually have the terms
+                if ($termsSettings === false) {
+
+                    if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) {
+                        glmMembersAdmin::addNotice("<b>/modesl/admin/settings/terms.php:</b> Unable to load Terms Settings.", 'Alert');
+                    }
+
+                    return array(
+                        'status' => false,
+                        'menuItemRedirect' => 'error',
+                        'modelRedirect' => 'index',
+                        'view' => 'admin/error/index.html',
+                        'data' => array(
+                            'reason' => 'Unable to create terms settings entry in database.'
+                        )
+                    );
+                }
+
+                break;
+
+        }
+
+        // Compile template data
+        $templateData = array(
+            'reason' => '',
+            'settings' => $termsSettings,
+//            'canEdit' => $canEdit
+        );
+
+        // Return status, suggested view, and data to controller
+        return array(
+            'status' => true,
+            'menuItemRedirect' => false,
+            'modelRedirect' => false,
+            'view' => 'admin/settings/terms.html',
+            'data' => $templateData
+        );
+
+    }
+
+}
+
+?>
\ No newline at end of file
index 8e78a95..0f1839d 100644 (file)
@@ -28,7 +28,7 @@
             </table>
             <p><span class="glm-required">*</span> Required</p>
             <a id="newAccommodationTypeCancel" class="button-primary glm-right">Cancel</a>
-            <input type="submit" value="Add new Accommodation Type">
+            <input type="submit" value="Add new Accommodation Type" class="button-primary">
         </form>
     </div>
 
index 4e76561..ea5088c 100644 (file)
@@ -43,7 +43,7 @@
             </table>
             <p><span class="glm-required">*</span> Required</p>
             <a id="newAmenityCancel" class="button-primary glm-right">Cancel</a>
-            <input type="submit" value="Add new Amenity">
+            <input type="submit" value="Add new Amenity" class="button-primary">
             
         </form>
     </div>
index c816db0..7ede7f0 100644 (file)
@@ -44,7 +44,7 @@
             </table>
             <p><span class="glm-required">*</span> Required</p>
             <a id="newCategoryCancel" class="button-primary glm-right">Cancel</a>
-            <input type="submit" value="Add new Category">
+            <input type="submit" value="Add new Category" class="button-primary">
         </form>
     </div>
     
index 789f036..892fca5 100644 (file)
@@ -45,7 +45,7 @@
             </table>
             <p><span class="glm-required">*</span> Required</p>
             <a id="newCityCancel" class="button-primary glm-right">Cancel</a>
-            <input type="submit" value="Update this City">
+            <input type="submit" value="Update this City" class="button-primary">
         </form>
     </div>
     
index 0cbedb6..b188b6d 100644 (file)
@@ -23,7 +23,7 @@
             </table>
             <p><span class="glm-required">*</span> Required</p>
             <a id="newMemberTypeCancel" class="button-primary glm-right">Cancel</a>
-            <input type="submit" value="Add new member type">
+            <input type="submit" value="Add new member type" class="button-primary">
         </form>
     </div>
 
index c4cb6e8..0475d07 100644 (file)
@@ -28,7 +28,7 @@
             </table>
             <p><span class="glm-required">*</span> Required</p>
             <a id="newRegionCancel" class="button-primary glm-right">Cancel</a>
-            <input type="submit" value="Add new Region">
+            <input type="submit" value="Add new Region" class="button-primary">
         </form>
     </div>
 
index 2b92759..953e5f6 100644 (file)
             <td><a href="{$adminURL}?page=glm-members-admin-menu-configure&glm_action=categories" class="glm-right">Add</a></td>
         </tr>
 {/if}                
-{if !$haveRegions}
-        <tr>
-            <th><span class="glm-error">No Regions</span></th>
-            <td><a href="{$adminURL}?page=glm-members-admin-menu-configure&glm_action=regions" class="glm-right">Add</a></td>
-        </tr>
-{/if}                
 {if !$haveAccommodationTypes}
         <tr>
             <th><span class="glm-error">No Accommodation Types</span></th>
             <td><a href="{$adminURL}?page=glm-members-admin-menu-configure&glm_action=accommodationTypes" class="glm-right">Add</a></td>
         </tr>
 {/if}                
+{if !$haveAmenities}
+        <tr>
+            <th><span class="glm-error">No Amenities</span></th>
+            <td><a href="{$adminURL}?page=glm-members-admin-menu-configure&glm_action=amenities" class="glm-right">Add</a></td>
+        </tr>
+{/if}                
+{if !$haveCities}
+        <tr>
+            <th><span class="glm-error">No Cities</span></th>
+            <td><a href="{$adminURL}?page=glm-members-admin-menu-configure&glm_action=cities" class="glm-right">Add</a></td>
+        </tr>
+{/if}                
+{if !$haveRegions}
+        <tr>
+            <th><span class="glm-error">No Regions</span></th>
+            <td><a href="{$adminURL}?page=glm-members-admin-menu-configure&glm_action=regions" class="glm-right">Add</a></td>
+        </tr>
+{/if}                
 {if $numbMembers == 0}
         <tr>
            <th> <span class="glm-error">No Members</span></th>
index de2d17b..eaa60c0 100644 (file)
@@ -2,6 +2,10 @@
 
     <script src="http://maps.googleapis.com/maps/api/js?sensor=true&key={$googleMapsBrowserApiKey}"></script>
     
+    <!--[if lt IE 9]>
+      <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    
     {if $haveMemberInfo}
         <!--  Delete Member Information dialog -->
         <div id="deleteMemberInfoButton" class="button-primary glm-right">Archive this Member Information</div>
@@ -95,7 +99,8 @@
                             // 'media_buttons' => true,
                             // 'quicktags' => false,
                             'wpautop' => false,
-                            'textarea_name' => 'descr',
+                            'textarea_name' => 'descr',                    </div>
+                            
                             'editor_height' => 200,     // Height in px, overrides editor_rows
                                 // 'textarea_rows' => 8
                         ));
                     {if $memberInfo.fieldFail.notes}<p>{$memberInfo.fieldFail.notes}</p>{/if}
                 </td>
             </tr>
+            <tr>
+                <th>Image Gallery</th>
+                <td class="glm-item-container glm-imageGalleryContainer">
+                    <input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" />
+                    <div class="glm-imageDropContainer">
+                        <div class="glm-imageDrop glm-imageItemHidden" data-refType="" data-recordID="{$memberInfo.fieldData.id}" data-menuItem="member" data-action="memberImage"></div> <!-- Overlay of parent for drag detection -->
+                        <div class="glm-imageUploadStatus glm-imageItemHidden"></div> <!-- Overlay for Upload Status Bars -->
+                        <input id="newImage" type="file" name="newImage[]" multiple="multiple" class="glm-form-text-input glm-imageBrowseButton">
+                        <div class="glm-imageDropText glm-imageItemHidden">Drag and drop new images here</div>
+                        <div class="glm-noImageDropText glm-imageItemHidden">HTML5 file drag-and-drop not supported by your browser.<br>Use "Browse" button above to upload an image.</div>
+                    </div>
+                </td>
+            </tr>
         </table>
         <p><span class="glm-required">*</span> Required</p>
         <input type="submit" name="Add new member">
+        
     </form>
-  
+
+<!-- 
+                    <input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" />
+                    <div id="newImageButton" class="button-primary glm-right">Add an Image</div>
+                    <div id="newImageDialog" class="glm-dialog-box" title="Select a new image">
+                        <table class="glm-admin-table">
+                            <tr>
+                                <th class="glm-required">Image:</th>
+                                <td id="newImageTD">
+                                    <input id="newImage" type="file" name="newImage[]" multiple="multiple" class="glm-form-text-input">
+                                    <div id="imageDrop"><span id="imageDropText">or drop files here</span></div>
+                                    <div id="noImageDrop">HTML5 file drag-and-drop not supported by your browser.<br>Use "Browse" button above to upload an image.</div>
+                                    <div id="newImageRequired"></div>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th class="glm-required">Image Caption:</th>
+                                <td id="newImageNameTD">
+                                    <input id="newImageName" type="text" name="newImageName" class="glm-form-text-input">
+                                    <div id="newImageNameRequired"></div>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>Description:</th>
+                                <td>
+                                    <textarea id="editImageDescr" name="descr" class="glm-form-textarea"></textarea>
+                                </td>
+                            </tr>
+                        </table>
+                        <div id="imageDragMessages">
+                            <p>Status Messages</p>
+                        </div>
+                        <p><span class="glm-required">*</span> Required</p>
+                        <a id="newImageCancel" class="button-primary glm-right">Cancel</a>
+                        <input id="newImageSubmit" type="submit" value="Add new image">
+                    </div>
+ -->
+
+
+
+    <!-- Include scripts for html5-File-Upload -->
+    
     <script type="text/javascript">
         jQuery(document).ready(function($) {
 
             });
 
                // Submit new category
-            $('#newCategorySubmit').click( function() {
-
+             $('#newCategorySubmit').click( function() {
                 
                 // Assign new cat number
                 newCat--;
                window.location.replace("{$thisURL}?page={$thisPage}&glm_action=index&member={$memberID}&deleteID={$memberInfo.fieldData.id}");
             });
     {/if}        
+            
+            /*
+             * New Image Dialog
+             */
+    
+            // Setup dialog box for adding a new image
+            $("#newImageDialog").dialog({
+                autoOpen: false,
+                minWidth: 400,
+                dialogClass: "glm-dialog-no-close"
+            });
+            $('#newImageCancel').click( function() {
+                $("#newImageDialog").dialog("close");
+            });
+             
+            // Ad a new image button action - pop-up dialog
+            $('#newImageButton').click( function() {
+                $("#newImageDialog").dialog("open");
+            });
+    
+            // Submit new city
+            var newImageAdded = false;
+            $('#newImageSubmit').click( function() {
+    
+/*             
+                // Get new city name
+                var newImageName = $('#newImageName').val();
+    
+                // If no name is supplied, notify used it's required
+                if (newImageName == '') {
+                    $('#newImageNameTD').addClass('glm-form-bad-input');
+                    $('#newImageNameRequired').text('An image name is required!');
+                    return false;
+                }
+    
+                // Add new image name to the hidden field that will pass the new name to PHP.
+                $('#imageName').val(newImageName);
+                
+                // Add new image name to picklist and for storing - Only one permitted per submission
+                if (newImageAdded) {
+                    
+                    // New image already added, so just update the name and select that one
+                    $('#image').val(-1);
+                    $('#image option:selected').text(newImageName);
+                    
+                } else {
+                    
+                    // Add the new image name to the image picklist
+                    $('#image').append('<option value="-1">' + newImageName + '</option>');
+                    $('#image').val(-1);
+                    $('#newImageNameTD').append('<input type="hidden" name="newImage" value="' + newImageName + '">');
+                    newImageAdded = true;
+    
+                }
+      
+                // Clear new image name from form
+                $('#newImageName').val('');
+                
+                $("#newImageDialog").dialog("close");
+*/                
+        
+            });
+
             /*
              * Map operations
              */
             $('.glm-geocodeAction').change( function() {
                 glmGeocode();  
             });
+            
+
 
         });
     </script>
index 7279dd6..0e4a33d 100644 (file)
@@ -6,7 +6,7 @@
 {if !$haveMemberTypes}
         <tr>
             <th class="glm-error">You do not have any Member Types setup.</th>
-            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=memberTypes">Click here to add Member Types.</a></td>
+            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=index">Click here to add Member Types.</a></td>
         </tr>
 {/if}                
 {if !$haveCategories}
             <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=categories">Click here to add Member Categories.</a></td>
         </tr>
 {/if}                
-{if !$haveRegions}
+{if !$haveAccommodationTypes}
         <tr>
-            <th><span class="glm-error">You do not have any Regions setup.</span></th>
-            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=regions">Click here to add Regions.</a></td>
+            <th><span class="glm-error">You do not have any Accommodation Types setup.</span></th>
+            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=accommodationTypes">Click here to add Accommodation Types.</a></td>
         </tr>
 {/if}                
-{if !$haveAccommodationTypes}
+{if !$haveAmenities}
+        <tr>
+            <th><span class="glm-error">You do not have any Amenities setup.</span></th>
+            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=amenities">Click here to add Amenities.</a></td>
+        </tr>
+{/if}                
+{if !$haveCities}
         <tr>
-            <th><span class="glm-error">You do not have any AccommodationTypes setup.</span></th>
-            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=accommodationTypes">Click here to add AccommodationTypes.</a></td>
+            <th><span class="glm-error">You do not have any Cities setup.</span></th>
+            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=cities">Click here to add Cities.</a></td>
+        </tr>
+{/if}                
+{if !$haveRegions}
+        <tr>
+            <th><span class="glm-error">You do not have any Regions setup.</span></th>
+            <td><a href="{$thisURL}?page=glm-members-admin-menu-configure&glm_action=regions">Click here to add Regions.</a></td>
         </tr>
 {/if}                
 {if $numbMembers == 0}
+        <tr><td colspan="2">&nbsp;</td></tr>
         <tr>
            <th> <span class="glm-error">You do not have any members listed.</span></th>
             <td><a href="{$thisURL}?page=glm-members-admin-menu-member&glm_action=index&member_id=">Click here to create your first member.</a></td>
index a2ac339..fdf136d 100644 (file)
@@ -4,6 +4,7 @@
        
     <h2 class="nav-tab-wrapper">
         <a href="{$thisURL}?page={$thisPage}&glm_action=index" class="nav-tab{if $thisAction==index}-active{/if}">General Settings</a>
+        <a href="{$thisURL}?page={$thisPage}&glm_action=terms" class="nav-tab{if $thisAction==terms}-active{/if}">Terms and Phrases</a>
         <a href="{$thisURL}?page={$thisPage}&glm_action=development" class="nav-tab{if $thisAction==development}-active{/if}">Development</a>
     </h2>
     <div id="glm-admin-content-container">
index 2799597..5e55233 100644 (file)
@@ -1,7 +1,296 @@
 {include file='admin/settings/header.html'}
     
-    <h2>General Settings</h2>
-    
-    <p>General settings go here.</p>
+    <h1>*** Not using these settings yet! ***</h1>
     
+    <form action="{$thisURL}?page={$thisPage}" method="post" enctype="multipart/form-data">
+        <input type="hidden" name="glm_action" value="index">
+        <input type="hidden" name="option" value="submit">
+        
+        <table class="glm-admin-table">
+        
+            <!-- Debug Settings -->
+        
+            <tr><td colspan="2"><h2>Debug Settings</h2></td></tr>
+            <tr>
+                <th>Admin Debug Information:</th>
+                <td>
+                    <input type="checkbox" name="admin_debug"{if $settings.fieldData.admin_debug.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Admin Debug Verbose:</th>
+                <td>
+                    <input type="checkbox" name="admin_debug_verbose"{if $settings.fieldData.admin_debug_verbose.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Front-End Debug Information:</th>
+                <td>
+                    <input type="checkbox" name="front_debug"{if $settings.fieldData.front_debug.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Front-End Debug Verbose:</th>
+                <td>
+                    <input type="checkbox" name="front_debug_verbose"{if $settings.fieldData.front_debug_verbose.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr><td colspan="2"><hr></td></tr>
+            <tr><td colspan="2"><h2>Misc. Settings</h2></td></tr>
+            <tr>
+                <th {if $settings.fieldRequired.google_maps_api_key}class="glm-required"{/if}>Google Maps API Key:</th>
+                <td {if $settings.fieldFail.google_maps_api_key}class="glm-form-bad-input"{/if}>
+                    <input type="text" name="google_maps_api_key" value="{$settings.fieldData.google_maps_api_key}" class="glm-form-text-input-medium">
+                    {if $settings.fieldFail.google_maps_api_key}<p>{$settings.fieldFail.google_maps_api_key}</p>{/if}
+                    <br>Optional: See Google Maps JAVAscript API V3 documentation for information.
+                </td>
+            </tr>
+            <tr>
+                <th {if $settings.fieldRequired.maps_default_lat}class="glm-required"{/if}>Default Map Location:</th>
+                <td {if $settings.fieldFail.maps_default_lat || $settings.fieldFail.maps_default_lon}class="glm-form-bad-input"{/if}>
+                    <label for="maps_default_lat">Lat:</label>
+                    <input type="text" name="maps_default_lat" value="{$settings.fieldData.maps_default_lat}" class="glm-form-text-input-small"><br>
+                    <label for="maps_default_lon">Lon:</label>
+                    <input type="text" name="maps_default_lon" value="{$settings.fieldData.maps_default_lon}" class="glm-form-text-input-small">
+                    <br>Please enter values in decimal degrees.
+                    {if $settings.fieldFail.maps_default_lat}<p>{$settings.fieldFail.maps_default_lat}</p>{/if}
+                    {if $settings.fieldFail.maps_default_lon}<p>{$settings.fieldFail.maps_default_lon}</p>{/if}
+                </td>
+            </tr>
+            <tr>
+                <th {if $settings.fieldRequired.time_zone}class="glm-required"{/if}>Time Zone:</th>
+                <td {if $settings.fieldFail.time_zone}class="glm-form-bad-input"{/if}>
+                    <select name="time_zone">
+        {foreach $timezones as $tz}
+                        <option value="{$tz}"{if $tz == $settings.fieldData.time_zone} selected="selected"{/if}>{$tz}</option>
+        {/foreach}
+                    </select>
+                    {if $settings.fieldFail.time_zone}<p>{$settings.fieldFail.time_zone}</p>{/if}
+                </td>
+            </tr>
+            
+            <!-- Member List Page Options -->
+            
+            <tr><td colspan="2"><hr></td></tr>
+            <tr><td colspan="2"><h2>Member List Page Options</h2></td></tr>
+            <tr>
+                <th>Show Map:</th>
+                <td>
+                    <input type="checkbox" name="list_show_map"{if $settings.fieldData.list_show_map.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Map Options:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr><th>Show Member Name as Link to Detail:</th><td><input type="checkbox" name="list_map_show_detaillink"{if $settings.fieldData.list_map_show_detaillink.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Logo:</th><td><input type="checkbox" name="list_map_show_logo"{if $settings.fieldData.list_map_show_logo.value} checked="checked"{/if}></td></tr>
+                        
+                        <tr>
+                            <th>Logo Size:</th>
+                            <td>
+                                <select name="list_map_logo_size">
+                    {foreach from=$settings.fieldData.list_map_logo_size.list item=v}
+                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                    {/foreach}
+                                </select>
+                            </td>
+                        </tr>
+                        
+                        <tr><th>Show Description:</th><td><input type="checkbox" name="list_map_show_descr"{if $settings.fieldData.list_map_show_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Short Description:</th><td><input type="checkbox" name="list_map_show_short_descr"{if $settings.fieldData.list_map_show_short_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Address:</th><td><input type="checkbox" name="list_map_show_address"{if $settings.fieldData.list_map_show_address.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Street:</th><td><input type="checkbox" name="list_map_show_street"{if $settings.fieldData.list_map_show_street.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show City, State, ZIP:</th><td><input type="checkbox" name="list_map_show_citystatezip"{if $settings.fieldData.list_map_show_citystatezip.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Country:</th><td><input type="checkbox" name="list_map_show_country"{if $settings.fieldData.list_map_show_country.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Region:</th><td><input type="checkbox" name="list_map_show_region"{if $settings.fieldData.list_map_show_region.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Phone:</th><td><input type="checkbox" name="list_map_show_phone"{if $settings.fieldData.list_map_show_phone.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Toll Free:</th><td><input type="checkbox" name="list_map_show_tollfree"{if $settings.fieldData.list_map_show_tollfree.value} checked="checked"{/if}></td></tr>
+                        <tr>
+                            <th>Show URL:</th>
+                            <td>
+                                <input type="checkbox" name="list_map_show_url"{if $settings.fieldData.list_map_show_url.value} checked="checked"{/if}>
+                                Display URL as a link: <input type="checkbox" name="list_map_show_url_newtarget"{if $settings.fieldData.list_map_show_url_newtarget.value} checked="checked"{/if}>
+                            </td>
+                        </tr>
+                        <tr><th>Show Categories:</th><td><input type="checkbox" name="list_map_show_categories"{if $settings.fieldData.list_map_show_categories.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Credit Cards:</th><td><input type="checkbox" name="list_map_show_creditcards"{if $settings.fieldData.list_map_show_creditcards.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Amenitiies:</th><td><input type="checkbox" name="list_map_show_amenities"{if $settings.fieldData.list_map_show_amenities.value} checked="checked"{/if}></td></tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th>Show Search Form:</th>
+                <td>
+                    <input type="checkbox" name="list_show_search"{if $settings.fieldData.list_show_search.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Search Form Options:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr><th>Text Search:</th><td><input type="checkbox" name="list_show_search_text"{if $settings.fieldData.list_show_search_text.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Category Search:</th><td><input type="checkbox" name="list_show_search_category"{if $settings.fieldData.list_show_search_category.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Amenities Search:</th><td><input type="checkbox" name="list_show_search_amenities"{if $settings.fieldData.list_show_search_amenities.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Alpha Index:</th><td><input type="checkbox" name="list_show_search_alpha"{if $settings.fieldData.list_show_search_alpha.value} checked="checked"{/if}></td></tr>
+                        
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th>Show Member List:</th>
+                <td>
+                    <input type="checkbox" name="list_show_list"{if $settings.fieldData.list_show_list.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Member List Options</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr><th>Show Member Name as Link to Detail:</th><td><input type="checkbox" name="list_show_detail_link"{if $settings.fieldData.list_show_detail_link.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Member Logo:</th><td><input type="checkbox" name="list_show_logo"{if $settings.fieldData.list_show_logo.value} checked="checked"{/if}></td></tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.list_logo_size}class="glm-required"{/if}>Logo Size:</th>
+                            <td {if $settings.fieldFail.list_logo_size}class="glm-form-bad-input"{/if}>
+                                <select name="list_logo_size">
+                    {foreach from=$settings.fieldData.list_logo_size.list item=v}
+                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                    {/foreach}
+                                </select>
+                                {if $settings.fieldFail.list_logo_size}<p>{$settings.fieldFail.list_logo_size}</p>{/if}
+                            </td>
+                        </tr>            
+                        <tr><th>Show Address:</th><td><input type="checkbox" name="list_show_address"{if $settings.fieldData.list_show_address.value} checked="checked"{/if}></td></tr>
+                        </tr>
+                            <tr>
+                            <th>Address Options:</th>
+                            <td>  
+                                <table class="glm-admin-table">
+                                    <tr><th>Show Street:</th><td><input type="checkbox" name="list_show_street"{if $settings.fieldData.list_show_street.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show City, State, ZIP:</th><td><input type="checkbox" name="list_show_citystatezip"{if $settings.fieldData.list_show_citystatezip.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show Country:</th><td><input type="checkbox" name="list_show_country"{if $settings.fieldData.list_show_country.value} checked="checked"{/if}></td></tr>                      
+                                </table>
+                            </td>
+                        </tr>
+                        <tr><th>Show Region:</th><td><input type="checkbox" name="list_show_region"{if $settings.fieldData.list_show_region.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Description:</th><td><input type="checkbox" name="list_show_descr"{if $settings.fieldData.list_show_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Short Description:</th><td><input type="checkbox" name="list_show_short_descr"{if $settings.fieldData.list_show_short_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Phone Number:</th><td><input type="checkbox" name="list_show_phone"{if $settings.fieldData.list_show_phone.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Toll Free Phone Number:</th><td><input type="checkbox" name="list_show_tollfree"{if $settings.fieldData.list_show_tollfree.value} checked="checked"{/if}></td></tr>
+                        <tr>
+                            <th>Show URL:</th>
+                            <td>
+                                <input type="checkbox" name="list_show_url"{if $settings.fieldData.list_show_url.value} checked="checked"{/if}>
+                                Display URL as a link: <input type="checkbox" name="list_show_url_newtarget"{if $settings.fieldData.list_show_url_newtarget.value} checked="checked"{/if}>
+                            </td>
+                        </tr>
+                        <tr><th>Show Categories:</th><td><input type="checkbox" name="list_show_categories"{if $settings.fieldData.list_show_categories.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Credit Cards Accepted:</th><td><input type="checkbox" name="list_show_creditcards"{if $settings.fieldData.list_show_creditcards.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Amenities:</th><td><input type="checkbox" name="list_show_amenities"{if $settings.fieldData.list_show_amenities.value} checked="checked"{/if}></td></tr>
+                    </table>
+                </td>
+            </tr>
+            
+            <!-- Member Detail Page Options -->
+            
+            <tr><td colspan="2"><hr></td></tr>
+            <tr><td colspan="2"><h2>Member Detail Page Options</h2></td></tr>
+            <tr>
+                <th>Show Map:</th>
+                <td>
+                    <input type="checkbox" name="detail_show_map"{if $settings.fieldData.detail_show_map.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Map Options:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr><th>Show Logo:</th><td><input type="checkbox" name="detail_map_show_logo"{if $settings.fieldData.detail_map_show_logo.value} checked="checked"{/if}></td></tr>
+                        <tr>
+                            <th>Logo Size:</th>
+                            <td>
+                                <select name="detail_map_logo_size">
+                    {foreach from=$settings.fieldData.detail_map_logo_size.list item=v}
+                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                    {/foreach}
+                                </select>
+                            </td>
+                        </tr>
+                        <tr><th>Show Description:</th><td><input type="checkbox" name="detail_map_show_descr"{if $settings.fieldData.detail_map_show_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Short Description:</th><td><input type="checkbox" name="detail_map_show_short_descr"{if $settings.fieldData.detail_map_show_short_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Address:</th><td><input type="checkbox" name="detail_map_show_address"{if $settings.fieldData.detail_map_show_address.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Street:</th><td><input type="checkbox" name="detail_map_show_street"{if $settings.fieldData.detail_map_show_street.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show City, State, ZIP:</th><td><input type="checkbox" name="detail_map_show_citystatezip"{if $settings.fieldData.detail_map_show_citystatezip.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Country:</th><td><input type="checkbox" name="detail_map_show_country"{if $settings.fieldData.detail_map_show_country.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Region:</th><td><input type="checkbox" name="detail_map_show_region"{if $settings.fieldData.detail_map_show_region.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Phone:</th><td><input type="checkbox" name="detail_map_show_phone"{if $settings.fieldData.detail_map_show_phone.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Toll Free:</th><td><input type="checkbox" name="detail_map_show_tollfree"{if $settings.fieldData.detail_map_show_tollfree.value} checked="checked"{/if}></td></tr>
+                        <tr>
+                            <th>Show URL:</th>
+                            <td>
+                                <input type="checkbox" name="detail_map_show_url"{if $settings.fieldData.detail_map_show_url.value} checked="checked"{/if}>
+                                Display URL as a link: <input type="checkbox" name="detail_map_show_url_newtarget"{if $settings.fieldData.detail_map_show_url_newtarget.value} checked="checked"{/if}>
+                            </td>
+                        </tr>
+                        <tr><th>Show Categories:</th><td><input type="checkbox" name="detail_map_show_categories"{if $settings.fieldData.detail_map_show_categories.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Credit Cards:</th><td><input type="checkbox" name="detail_map_show_creditcards"{if $settings.fieldData.detail_map_show_creditcards.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Amenitiies:</th><td><input type="checkbox" name="detail_map_show_amenities"{if $settings.fieldData.detail_map_show_amenities.value} checked="checked"{/if}></td></tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th>Show Directions:</th>
+                <td>
+                    <input type="checkbox" name="detail_show_directions"{if $settings.fieldData.detail_show_directions.value} checked="checked"{/if}>
+                </td>
+            </tr>
+            <tr>
+                <th>Member Detail Options:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr><th>Show Member Logo:</th><td><input type="checkbox" name="detail_show_logo"{if $settings.fieldData.detail_show_logo.value} checked="checked"{/if}></td></tr>
+                       <tr>
+                            <th {if $settings.fieldRequired.detail_logo_size}class="glm-required"{/if}>Logo Size:</th>
+                            <td {if $settings.fieldFail.detail_logo_size}class="glm-form-bad-input"{/if}>
+                                <select name="detail_logo_size">
+                    {foreach from=$settings.fieldData.detail_logo_size.list item=v}
+                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                    {/foreach}
+                                </select>
+                                {if $settings.fieldFail.detail_logo_size}<p>{$settings.fieldFail.detail_logo_size}</p>{/if}
+                            </td>
+                        </tr>            
+                        <tr><th>Show Address:</th><td><input type="checkbox" name="detail_show_address"{if $settings.fieldData.detail_show_address.value} checked="checked"{/if}></td></tr>
+                        </tr>
+                            <tr>
+                            <th>Address Options:</th>
+                            <td>  
+                                <table class="glm-admin-table">
+                                    <tr><th>Show Street:</th><td><input type="checkbox" name="detail_show_street"{if $settings.fieldData.detail_show_street.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show City, State, ZIP:</th><td><input type="checkbox" name="detail_show_citystatezip"{if $settings.fieldData.detail_show_citystatezip.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show Country:</th><td><input type="checkbox" name="detail_show_country"{if $settings.fieldData.detail_show_country.value} checked="checked"{/if}></td></tr>                      
+                                </table>
+                            </td>
+                        </tr>
+                        <tr><th>Show Region:</th><td><input type="checkbox" name="detail_show_region"{if $settings.fieldData.detail_show_region.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Description:</th><td><input type="checkbox" name="detail_show_descr"{if $settings.fieldData.detail_show_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Short Description:</th><td><input type="checkbox" name="detail_show_short_descr"{if $settings.fieldData.detail_show_short_descr.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Phone Number:</th><td><input type="checkbox" name="detail_show_phone"{if $settings.fieldData.detail_show_phone.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Toll Free Phone Number:</th><td><input type="checkbox" name="detail_show_tollfree"{if $settings.fieldData.detail_show_tollfree.value} checked="checked"{/if}></td></tr>
+                        <tr>
+                            <th>Show URL:</th>
+                            <td>
+                                <input type="checkbox" name="detail_show_url"{if $settings.fieldData.detail_show_url.value} checked="checked"{/if}>
+                                Display URL as a link: <input type="checkbox" name="detail_show_url_newtarget"{if $settings.fieldData.detail_show_url_newtarget.value} checked="checked"{/if}>
+                            </td>
+                        </tr>
+                        <tr><th>Show Categories:</th><td><input type="checkbox" name="detail_show_categories"{if $settings.fieldData.detail_show_categories.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Credit Cards Accepted:</th><td><input type="checkbox" name="detail_show_creditcards"{if $settings.fieldData.detail_show_creditcards.value} checked="checked"{/if}></td></tr>
+                        <tr><th>Show Amenities:</th><td><input type="checkbox" name="detail_show_amenities"{if $settings.fieldData.detail_show_amenities.value} checked="checked"{/if}></td></tr>
+                    </table>
+                </td>
+            </tr>
+        </table>
+        <input type="submit" value="Update Settings" class="button-primary">
+    </form>
 {include file='admin/footer.html'}
diff --git a/views/admin/settings/terms.html b/views/admin/settings/terms.html
new file mode 100644 (file)
index 0000000..5b239b0
--- /dev/null
@@ -0,0 +1,376 @@
+{include file='admin/settings/header.html'}
+    
+    <h1>*** Not using these settings yet! ***</h1>
+    
+    <form action="{$thisURL}?page={$thisPage}" method="post" enctype="multipart/form-data">
+        <input type="hidden" name="glm_action" value="terms">
+        <input type="hidden" name="option" value="submit">
+        
+        <table class="glm-admin-table">
+        
+            <!-- Admin Menus -->
+        
+            <tr><td colspan="2"><h2>Admin Menu and Tab Names</h2></td></tr>
+            <tr>
+                <th {if $settings.fieldRequired.term_admin_menu_members}class="glm-required"{/if}>Members Menu:</th>
+                <td {if $settings.fieldFail.term_admin_menu_members}class="glm-form-bad-input"{/if}>
+                    <input type="text" name="term_admin_menu_members" value="{$settings.fieldData.term_admin_menu_members}" class="glm-form-text-input-medium">
+                    {if $settings.fieldFail.term_admin_menu_members}<p>{$settings.fieldFail.term_admin_menu_members}</p>{/if}
+                </td>
+            </tr>
+            <tr>
+                <th>Members Menu Tabs:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_members_dashboard}class="glm-required"{/if}>Main Dashboard:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_members_dashboard}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_members_dashboard" value="{$settings.fieldData.term_admin_menu_members_dashboard}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_members_dashboard}<p>{$settings.fieldFail.term_admin_menu_members_dashboard}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_members_list}class="glm-required"{/if}>Member List:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_members_list}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_members_list" value="{$settings.fieldData.term_admin_menu_members_list}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_members_list}<p>{$settings.fieldFail.term_admin_menu_members_list}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_members_reports}class="glm-required"{/if}>Reports:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_members_reports}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_members_reports" value="{$settings.fieldData.term_admin_menu_members_reports}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_members_reports}<p>{$settings.fieldFail.term_admin_menu_members_reports}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th {if $settings.fieldRequired.term_admin_menu_member}class="glm-required"{/if}>Member Menu:</th>
+                <td {if $settings.fieldFail.term_admin_menu_member}class="glm-form-bad-input"{/if}>
+                    <input type="text" name="term_admin_menu_member" value="{$settings.fieldData.term_admin_menu_member}" class="glm-form-text-input-medium">
+                    {if $settings.fieldFail.term_admin_menu_member}<p>{$settings.fieldFail.term_admin_menu_member}</p>{/if}
+                </td>
+            </tr>
+            <tr>
+                <th>Member Menu Tabs:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_member_dashboard}class="glm-required"{/if}>Member Dashboard:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_member_dashboard}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_member_dashboard" value="{$settings.fieldData.term_admin_menu_member_dashboard}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_member_dashboard}<p>{$settings.fieldFail.term_admin_menu_member_dashboard}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_member_info}class="glm-required"{/if}>Member Info:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_member_info}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_member_info" value="{$settings.fieldData.term_admin_menu_member_info}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_member_info}<p>{$settings.fieldFail.term_admin_menu_member_info}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_member_locations}class="glm-required"{/if}>Locations:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_member_locations}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_member_locations" value="{$settings.fieldData.term_admin_menu_member_locations}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_member_locations}<p>{$settings.fieldFail.term_admin_menu_member_locations}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_member_facilities}class="glm-required"{/if}>Facilities:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_member_facilities}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_member_facilities" value="{$settings.fieldData.term_admin_menu_member_facilities}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_member_facilities}<p>{$settings.fieldFail.term_admin_menu_member_facilities}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_member_attractions}class="glm-required"{/if}>Attractions:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_member_attractions}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_member_attractions" value="{$settings.fieldData.term_admin_menu_member_attractions}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_member_attractions}<p>{$settings.fieldFail.term_admin_menu_member_attractions}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_member_contacts}class="glm-required"{/if}>Contacts:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_member_contacts}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_member_contacts" value="{$settings.fieldData.term_admin_menu_member_contacts}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_member_contacts}<p>{$settings.fieldFail.term_admin_menu_member_contacts}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th {if $settings.fieldRequired.term_admin_menu_configure}class="glm-required"{/if}>Configure Menu:</th>
+                <td {if $settings.fieldFail.term_admin_menu_configure}class="glm-form-bad-input"{/if}>
+                    <input type="text" name="term_admin_menu_configure" value="{$settings.fieldData.term_admin_menu_configure}" class="glm-form-text-input-medium">
+                    {if $settings.fieldFail.term_admin_menu_configure}<p>{$settings.fieldFail.term_admin_menu_configure}</p>{/if}
+                </td>
+            </tr>
+            <tr>
+                <th>Configure Menu Tabs:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_configure_member_types}class="glm-required"{/if}>Member Types:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_configure_member_types}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_configure_member_types" value="{$settings.fieldData.term_admin_menu_configure_member_types}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_configure_member_types}<p>{$settings.fieldFail.term_admin_menu_configure_member_types}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_configure_member_cats}class="glm-required"{/if}>Member Categories:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_configure_member_cats}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_configure_member_cats" value="{$settings.fieldData.term_admin_menu_configure_member_cats}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_configure_member_cats}<p>{$settings.fieldFail.term_admin_menu_configure_member_cats}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_configure_accom_types}class="glm-required"{/if}>Accommodation Types:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_configure_accom_types}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_configure_accom_types" value="{$settings.fieldData.term_admin_menu_configure_accom_types}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_configure_accom_types}<p>{$settings.fieldFail.term_admin_menu_configure_accom_types}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_configure_amenities}class="glm-required"{/if}>Amenities:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_configure_amenities}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_configure_amenities" value="{$settings.fieldData.term_admin_menu_configure_amenities}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_configure_amenities}<p>{$settings.fieldFail.term_admin_menu_configure_amenities}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_configure_cities}class="glm-required"{/if}>Cities:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_configure_cities}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_configure_cities" value="{$settings.fieldData.term_admin_menu_configure_cities}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_configure_cities}<p>{$settings.fieldFail.term_admin_menu_configure_cities}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_configure_regions}class="glm-required"{/if}>Regions:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_configure_regions}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_configure_regions" value="{$settings.fieldData.term_admin_menu_configure_regions}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_configure_regions}<p>{$settings.fieldFail.term_admin_menu_configure_regions}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th {if $settings.fieldRequired.term_admin_menu_settings}class="glm-required"{/if}>Settings Menu:</th>
+                <td {if $settings.fieldFail.term_admin_menu_settings}class="glm-form-bad-input"{/if}>
+                    <input type="text" name="term_admin_menu_settings" value="{$settings.fieldData.term_admin_menu_settings}" class="glm-form-text-input-medium">
+                    {if $settings.fieldFail.term_admin_menu_settings}<p>{$settings.fieldFail.term_admin_menu_settings}</p>{/if}
+                </td>
+            </tr>
+            <tr>
+                <th>Settings Menu Tabs:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_settings_general}class="glm-required"{/if}>General Settings:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_settings_general}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_settings_general" value="{$settings.fieldData.term_admin_menu_settings_general}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_settings_general}<p>{$settings.fieldFail.term_admin_menu_settings_general}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_settings_terms}class="glm-required"{/if}>Terms & Phrases:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_settings_terms}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_settings_terms" value="{$settings.fieldData.term_admin_menu_settings_terms}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_settings_terms}<p>{$settings.fieldFail.term_admin_menu_settings_terms}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_admin_menu_settings_development}class="glm-required"{/if}>Development:</th>
+                            <td {if $settings.fieldFail.term_admin_menu_settings_development}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_admin_menu_settings_development" value="{$settings.fieldData.term_admin_menu_settings_development}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_admin_menu_settings_development}<p>{$settings.fieldFail.term_admin_menu_settings_development}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr><td colspan="2"><hr></td></tr>
+            <tr><td colspan="2"><h2>Terms</h2></td></tr>
+            <tr>
+                <th>Member:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_member}class="glm-required"{/if}>Normal:</th>
+                            <td {if $settings.fieldFail.term_member}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_member" value="{$settings.fieldData.term_member}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_member}<p>{$settings.fieldFail.term_member}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_member_cap}class="glm-required"{/if}>Capitalized:</th>
+                            <td {if $settings.fieldFail.term_member_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_member_cap" value="{$settings.fieldData.term_member_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_member_cap}<p>{$settings.fieldFail.term_member_cap}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_member_plur}class="glm-required"{/if}>Plural:</th>
+                            <td {if $settings.fieldFail.term_member_plur}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_member_plur" value="{$settings.fieldData.term_member_plur}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_member_plur}<p>{$settings.fieldFail.term_member_plur}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_member_plur_cap}class="glm-required"{/if}>Plural Capitalized:</th>
+                            <td {if $settings.fieldFail.term_member_plur_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_member_plur_cap" value="{$settings.fieldData.term_member_plur_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_member_plur_cap}<p>{$settings.fieldFail.term_member_plur_cap}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th>Location:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_location}class="glm-required"{/if}>Normal:</th>
+                            <td {if $settings.fieldFail.term_location}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_location" value="{$settings.fieldData.term_location}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_location}<p>{$settings.fieldFail.term_location}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_location_cap}class="glm-required"{/if}>Capitalized:</th>
+                            <td {if $settings.fieldFail.term_location_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_location_cap" value="{$settings.fieldData.term_location_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_location_cap}<p>{$settings.fieldFail.term_location_cap}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_location_plur}class="glm-required"{/if}>Plural:</th>
+                            <td {if $settings.fieldFail.term_location_plur}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_location_plur" value="{$settings.fieldData.term_location_plur}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_location_plur}<p>{$settings.fieldFail.term_location_plur}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_location_plur_cap}class="glm-required"{/if}>Plural Capitalized:</th>
+                            <td {if $settings.fieldFail.term_location_plur_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_location_plur_cap" value="{$settings.fieldData.term_location_plur_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_location_plur_cap}<p>{$settings.fieldFail.term_location_plur_cap}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th>Facility:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_facility}class="glm-required"{/if}>Normal:</th>
+                            <td {if $settings.fieldFail.term_facility}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_facility" value="{$settings.fieldData.term_facility}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_facility}<p>{$settings.fieldFail.term_facility}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_facility_cap}class="glm-required"{/if}>Capitalized:</th>
+                            <td {if $settings.fieldFail.term_facility_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_facility_cap" value="{$settings.fieldData.term_facility_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_facility_cap}<p>{$settings.fieldFail.term_facility_cap}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_facility_plur}class="glm-required"{/if}>Plural:</th>
+                            <td {if $settings.fieldFail.term_facility_plur}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_facility_plur" value="{$settings.fieldData.term_facility_plur}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_facility_plur}<p>{$settings.fieldFail.term_facility_plur}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_facility_plur_cap}class="glm-required"{/if}>Plural Capitalized:</th>
+                            <td {if $settings.fieldFail.term_facility_plur_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_facility_plur_cap" value="{$settings.fieldData.term_facility_plur_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_facility_plur_cap}<p>{$settings.fieldFail.term_facility_plur_cap}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th>Attraction:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_attraction}class="glm-required"{/if}>Normal:</th>
+                            <td {if $settings.fieldFail.term_attraction}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_attraction" value="{$settings.fieldData.term_attraction}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_attraction}<p>{$settings.fieldFail.term_attraction}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_attraction_cap}class="glm-required"{/if}>Capitalized:</th>
+                            <td {if $settings.fieldFail.term_attraction_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_attraction_cap" value="{$settings.fieldData.term_attraction_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_attraction_cap}<p>{$settings.fieldFail.term_attraction_cap}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_attraction_plur}class="glm-required"{/if}>Plural:</th>
+                            <td {if $settings.fieldFail.term_attraction_plur}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_attraction_plur" value="{$settings.fieldData.term_attraction_plur}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_attraction_plur}<p>{$settings.fieldFail.term_attraction_plur}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_attraction_plur_cap}class="glm-required"{/if}>Plural Capitalized:</th>
+                            <td {if $settings.fieldFail.term_attraction_plur_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_attraction_plur_cap" value="{$settings.fieldData.term_attraction_plur_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_attraction_plur_cap}<p>{$settings.fieldFail.term_attraction_plur_cap}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            <tr>
+                <th>Contact:</th>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th {if $settings.fieldRequired.term_contact}class="glm-required"{/if}>Normal:</th>
+                            <td {if $settings.fieldFail.term_contact}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_contact" value="{$settings.fieldData.term_contact}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_contact}<p>{$settings.fieldFail.term_contact}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_contact_cap}class="glm-required"{/if}>Capitalized:</th>
+                            <td {if $settings.fieldFail.term_contact_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_contact_cap" value="{$settings.fieldData.term_contact_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_contact_cap}<p>{$settings.fieldFail.term_contact_cap}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_contact_plur}class="glm-required"{/if}>Plural:</th>
+                            <td {if $settings.fieldFail.term_contact_plur}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_contact_plur" value="{$settings.fieldData.term_contact_plur}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_contact_plur}<p>{$settings.fieldFail.term_contact_plur}</p>{/if}
+                            </td>
+                        </tr>
+                        <tr>
+                            <th {if $settings.fieldRequired.term_contact_plur_cap}class="glm-required"{/if}>Plural Capitalized:</th>
+                            <td {if $settings.fieldFail.term_contact_plur_cap}class="glm-form-bad-input"{/if}>
+                                <input type="text" name="term_contact_plur_cap" value="{$settings.fieldData.term_contact_plur_cap}" class="glm-form-text-input-medium">
+                                {if $settings.fieldFail.term_contact_plur_cap}<p>{$settings.fieldFail.term_contact_plur_cap}</p>{/if}
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+        </table>
+        <input type="submit" value="Update Settings" class="button-primary">
+    </form>
+{include file='admin/footer.html'}
diff --git a/views/admin/settingsPage-ISTHISNEEDED/index.html b/views/admin/settingsPage-ISTHISNEEDED/index.html
new file mode 100644 (file)
index 0000000..de804cf
--- /dev/null
@@ -0,0 +1,14 @@
+
+<div id="icon-themes" class="icon32"><br></div>
+<h2 class="nav-tab-wrapper">
+    <a class='{if $settingsTab=="tab1"}nav-tab-active{else}nav-tab{/if}' href='{$thisURL}?page=glm-member-db-settings&tab=tab1'>Tab 1</a>
+    <a class='{if $settingsTab=="tab2"}nav-tab-active{else}nav-tab{/if}' href='{$thisURL}?page=glm-member-db-settings&tab=tab2'>Tab 2</a>
+</h2>
+<div class="wrap">
+    <h2>My Plugin Options</h2>
+    <form action="options.php?tab={$settingsTab}" method="POST">
+        {php} settings_fields( 'glm-member-db-settings-group' ); {/php}
+       {php} do_settings_sections( 'glm-member-db-settings' ); {/php}
+       {php} submit_button(); {/php}
+    </form>
+</div>
diff --git a/views/admin/settingsPage/index.html b/views/admin/settingsPage/index.html
deleted file mode 100644 (file)
index de804cf..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-<div id="icon-themes" class="icon32"><br></div>
-<h2 class="nav-tab-wrapper">
-    <a class='{if $settingsTab=="tab1"}nav-tab-active{else}nav-tab{/if}' href='{$thisURL}?page=glm-member-db-settings&tab=tab1'>Tab 1</a>
-    <a class='{if $settingsTab=="tab2"}nav-tab-active{else}nav-tab{/if}' href='{$thisURL}?page=glm-member-db-settings&tab=tab2'>Tab 2</a>
-</h2>
-<div class="wrap">
-    <h2>My Plugin Options</h2>
-    <form action="options.php?tab={$settingsTab}" method="POST">
-        {php} settings_fields( 'glm-member-db-settings-group' ); {/php}
-       {php} do_settings_sections( 'glm-member-db-settings' ); {/php}
-       {php} submit_button(); {/php}
-    </form>
-</div>