Cleanup image dir directory and storage issues, added E-Mail address to base member...
authorChuck Scott <cscott@gaslightmedia.com>
Wed, 2 Sep 2015 18:52:06 +0000 (14:52 -0400)
committerChuck Scott <cscott@gaslightmedia.com>
Wed, 2 Sep 2015 18:52:06 +0000 (14:52 -0400)
12 files changed:
activate.php
classes/data/dataMemberInfo.php
classes/data/dataMembers.php
defines.php
js/imageUpload/imageUpload.js
lib/GlmDataAbstract/DataAbstract.php
misc/databaseScripts/create_database_V0.1.sql
models/admin/ajax/imageUpload.php
views/admin/member/memberInfo.html
views/admin/members/list.html
views/front/members/detail.html
views/front/members/list.html

index e02c6db..8320e21 100644 (file)
@@ -97,6 +97,9 @@ class glmMembersPluginActivate extends glmPluginSupport
 
             }
 
+            // Check for plugin uploads directory
+            $this->checkUploadsDir();
+
             // Add user capabilties
             $this->addRoleCapability('glm_members_edit',
                 array(
@@ -132,6 +135,29 @@ class glmMembersPluginActivate extends glmPluginSupport
         }
     }
 
+    /*
+     * Check if a directory for the plugin exists in the uploads directory
+     *
+     * @return void
+     * @access private
+     */
+    private function checkUploadsDir ()
+    {
+
+        // Check if uploads directory has a subdirectory for this plugin
+        if (!file_exists(GLM_MEMBERS_PLUGIN_MEDIA_PATH)) {
+            mkdir(GLM_MEMBERS_PLUGIN_MEDIA_PATH);
+        }
+
+        // Check if media directory has a subdirectory for images
+        if (!file_exists(GLM_MEMBERS_PLUGIN_IMAGES_PATH)) {
+            mkdir(GLM_MEMBERS_PLUGIN_IMAGES_PATH);
+        }
+
+        return;
+
+    }
+
     /*
      * Check if database is installed and if it matches the current version
      *
index 5ff5ea2..2c75c6a 100644 (file)
@@ -282,6 +282,13 @@ class GlmDataMemberInfo extends GlmDataAbstract
                                'use'      => 'a'
                        ),
 
+                       // E-Mail Address
+                       'email' => array(
+                               'field'    => 'email',
+                               'type'     => 'email',
+                               'use'      => 'a'
+                       ),
+
                        // URL
                        'url' => array(
                                'field'    => 'url',
index 409102e..5a2efb7 100644 (file)
@@ -153,6 +153,19 @@ class GlmDataMembers extends GlmDataAbstract {
                                'use' => 'a'
                        ),
 
+                       // Active Version
+                       'active_id' => array (
+                               'field' => 'id',
+                        'as' => 'active_id',
+                               'type' => 'pointer',
+                                 'p_table' => GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_info',
+                                 'p_field' => 'id',
+                                 'p_id' => 'member',
+                                 'p_where' => 'status = '.$this->config['status_numb']['Active'],
+                               'p_static' => true,
+                               'use' => 'gl'
+                       ),
+
                        /*
                         *  Has pending information
                         *
index 38e1ff9..16e25ff 100644 (file)
@@ -30,20 +30,23 @@ define('GLM_MEMBERS_PLUGIN_DB_VERSION', 0.1);
 $urlParts = parse_url(get_bloginfo('url'));
 $pageUri = explode('?', $_SERVER['REQUEST_URI']);               // Bust this up to access URL path and script name only
 
-// URLs
 $adminURL = admin_url('admin.php');
+$WPUploadDir = wp_upload_dir();
+
+// URLs
 define('GLM_MEMBERS_PLUGIN_ADMIN_URL', $adminURL);
 define('GLM_MEMBERS_PLUGIN_URL', plugin_dir_url(__FILE__));
 define('GLM_MEMBERS_PLUGIN_BASE_URL', WP_PLUGIN_URL.'/'.GLM_MEMBERS_PLUGIN_DIR);
 define('GLM_MEMBERS_PLUGIN_CURRENT_URL', $urlParts['scheme'].'://'.$urlParts['host'].$pageUri[0]);
-define('GLM_MEMBERS_PLUGIN_MEDIA_URL', WP_CONTENT_URL.'/plugins/'.GLM_MEMBERS_PLUGIN_DIR.'/media');
+define('GLM_MEMBERS_PLUGIN_MEDIA_URL', $WPUploadDir['baseurl'].'/'.GLM_MEMBERS_PLUGIN_DIR);
 
 // Directories
 define('GLM_MEMBERS_PLUGIN_PATH', dirname(__FILE__));
 define('GLM_MEMBERS_PLUGIN_DB_SCRIPTS', dirname(__FILE__).'/misc/databaseScripts');
 define('GLM_MEMBERS_PLUGIN_CLASS_PATH', GLM_MEMBERS_PLUGIN_PATH.'/classes');
 define('GLM_MEMBERS_PLUGIN_LIB_PATH', GLM_MEMBERS_PLUGIN_PATH.'/lib');
-define('GLM_MEMBERS_PLUGIN_IMAGES_PATH', GLM_MEMBERS_PLUGIN_PATH.'/media/images');
+define('GLM_MEMBERS_PLUGIN_MEDIA_PATH', $WPUploadDir['basedir'].'/'.GLM_MEMBERS_PLUGIN_DIR);
+define('GLM_MEMBERS_PLUGIN_IMAGES_PATH', GLM_MEMBERS_PLUGIN_MEDIA_PATH.'/images');
 define('GLM_MEMBERS_PLUGIN_CONFIG_PATH', GLM_MEMBERS_PLUGIN_PATH.'/config');
 
 // Database table prefixes
index ed7a728..9fdf5f5 100644 (file)
@@ -312,7 +312,7 @@ jQuery(document).ready(function($) {
 
                                // Parse returned data
                                fileData = JSON.parse(data);
-                               
+
                                // Check for success
                                if (fileData.status) {                  
 
@@ -334,7 +334,7 @@ jQuery(document).ready(function($) {
                                }
 
                                } else {
-                                       alert('Upload failed');                                 
+                                       alert("Upload Failed\nReason: " + fileData.message);                                    
                                }
                        
                },
index 6fb551e..bb23efe 100755 (executable)
@@ -159,7 +159,7 @@ abstract class GlmDataAbstract
         $in = $_REQUEST[$as];
 
         // Check for required field
-        if ($f['required'] && trim($in) == '') {
+        if (isset($f['required']) && $f['required'] && trim($in) == '') {
             $this->inputFieldStatus = false;
             $this->inputErrorReason = 'Required input not provided.';
             return $in;
@@ -363,7 +363,7 @@ abstract class GlmDataAbstract
         $in = $_REQUEST[$as];
 
         // Check for required field
-        if ($f['required'] && trim($in) == '') {
+        if (isset($f['required']) && $f['required'] && trim($in) == '') {
             $this->inputFieldStatus = false;
             $this->inputErrorReason = 'Required input not provided.';
             return $in;
@@ -460,7 +460,7 @@ abstract class GlmDataAbstract
         $in = $_REQUEST[$as];
 
         // Check for required field
-        if ($f['required'] && trim($in) == '') {
+        if (isset($f['required']) && $f['required'] && trim($in) == '') {
             $this->inputFieldStatus = false;
             $this->inputErrorReason = 'Required input not provided.';
             return $in;
@@ -556,6 +556,7 @@ abstract class GlmDataAbstract
     }
     function pointerOutput($f, $d, $forEdit = false, $id = false, $idfield = 'id')
     {
+
         /*
          * This function will only return the value of the pointer field unless one
          * of the following situations occurs.
@@ -575,7 +576,7 @@ abstract class GlmDataAbstract
         }
 
         // Check for WHERE option
-        $where = '';
+        $where = 'WHERE true';
         if (isset($f['p_where']) && $f['p_where'] != '') {
             $where = 'WHERE '.$f['p_where'];
         }
@@ -605,11 +606,14 @@ abstract class GlmDataAbstract
                 ";
                 $res = $this->wpdb->get_row($sql, ARRAY_A);
 
+                if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                    glmMembersAdmin::addNotice($sql, 'DataBlock', "pointerOutput() value data query ".$f['field'].(isset($f['as']) ? ' as '.$f['as'] : ''));
+                }
+
                 return $res['p_sum'];
 
             } else {
 
-
                 $sql = "
                     SELECT ".$p_id." AS p_id,
                            ".$f['p_field']." AS p_value
@@ -619,6 +623,9 @@ abstract class GlmDataAbstract
                 ";
                 $p_list = $this->wpdb->get_results($sql, ARRAY_A);
 
+                if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                    glmMembersAdmin::addNotice($sql, 'DataBlock', "pointerOutput() value data query ".$f['field'].(isset($f['as']) ? ' as '.$f['as'] : ''));
+                }
 
                 // Build pick select table
                 $pick_select = false;
@@ -683,10 +690,16 @@ abstract class GlmDataAbstract
             $sql = "
                 SELECT ".$f['p_field']."
                   FROM ".$f['p_table']."
-                 WHERE $p_id = $d
+                        $where
+                   AND $p_id = $d
             ";
             $res = $this->wpdb->get_row($sql, ARRAY_A);
 
+
+            if (is_admin() && GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) {
+                glmMembersAdmin::addNotice($sql, 'DataBlock', "pointerOutput() value data query ".$f['field'].(isset($f['as']) ? ' as '.$f['as'] : ''));
+            }
+
             return $res[$f['p_field']];
 
         }
@@ -1294,14 +1307,14 @@ abstract class GlmDataAbstract
        $filter_options = FILTER_FLAG_NO_ENCODE_QUOTES;\r
 \r
        $in = filter_input(INPUT_POST, $as, $filter, $filter_options);\r
-       if ($f['required'] && trim($in) == '') {\r
+       if (isset($f['required']) && $f['required'] && trim($in) == '') {\r
                $this->inputFieldStatus = false;\r
                $this->inputErrorReason = 'Required input not provided.';\r
                return $in;\r
        }\r
 \r
        // Check for required field\r
-       if ($f['required'] && trim($in) == '') {\r
+       if (isset($f['required']) && $f['required'] && trim($in) == '') {\r
                $this->inputFieldStatus = false;\r
                $this->inputErrorReason = 'Required input not provided.';\r
                return $in;\r
@@ -1501,14 +1514,14 @@ abstract class GlmDataAbstract
         $this->inputFieldStatus = true;
 
         $in = filter_input(INPUT_POST, $as, FILTER_VALIDATE_EMAIL);
-        if ($f['required'] && trim($in) == '') {
+        if (isset($f['required']) && $f['required'] && trim($in) == '') {
             $this->inputFieldStatus = false;
             $this->inputErrorReason = 'E-Mail address does not appear to be valid.';
             return $in;
         }
 
         // Check for required field
-        if ($f['required'] && trim($in) == '') {
+        if (isset($f['required']) && $f['required'] && trim($in) == '') {
             $this->inputFieldStatus = false;
             $this->inputErrorReason = 'Required input not provided.';
             return $in;
@@ -1684,7 +1697,7 @@ abstract class GlmDataAbstract
         }
 
         // Check for required input - Can't be 0 (epoch)
-        if ($f['required']) {
+        if (isset($f['required']) && $f['required']) {
             if ($in == 0) {
                 $this->inputErrorReason = 'Required date not supplied.';
                 $this->inputFieldStatus = false;
@@ -2449,7 +2462,7 @@ abstract class GlmDataAbstract
         );
 
         // Check for required field - A min of at least deg is required
-        if ($f['required'] && $in['deg'] == '') {
+        if (isset($f['required']) && $f['required'] && $in['deg'] == '') {
             $this->inputFieldStatus = false;
             $this->inputErrorReason = 'Required latitude input not provided.';
             return $in;
@@ -2577,7 +2590,7 @@ abstract class GlmDataAbstract
         );
 
         // Check for required field - A min of at least deg is required
-        if ($f['required'] && $in['deg'] == '') {
+        if (isset($f['required']) && $f['required'] && $in['deg'] == '') {
             $this->inputFieldStatus = false;
             $this->inputErrorReason = 'Required longitude input not provided.';
             return $in;
index 29ffa65..78abc13 100644 (file)
@@ -399,6 +399,7 @@ CREATE TABLE {prefix}member_info (
   phone TINYTEXT NULL,
   toll_free TINYTEXT NULL,
   url TINYTEXT NULL,
+  email TINYTEXT NULL,
   logo TINYTEXT NULL,
   cc_type INT NULL,
   notes TEXT NULL,
index d765e3e..a5d2d0e 100644 (file)
@@ -94,7 +94,7 @@ class GlmMembersAdmin_ajax_imageUpload extends GlmDataImages
 
         // Check for valid refType - See glmMembersAdminValidActions in Admin Controller
         if (!isset($_REQUEST['glm_refType']) || !isset($this->config['ref_type_table'][$_REQUEST['glm_refType']])) {
-            $return['message'] = 'Invalid target table specified in AJAX call to imageUpload!';
+            $return['message'] = 'Invalid target table does not exists!';
             echo json_encode($return);
             die();
         }
@@ -110,7 +110,7 @@ class GlmMembersAdmin_ajax_imageUpload extends GlmDataImages
 
         // Check for valid target record ID
         if (!isset($_REQUEST['glm_refDest']) || ($_REQUEST['glm_refDest']-0) <= 0) {
-            $return['message'] = 'Invalid target ID specified in AJAX call to imageUpload!';
+            $return['message'] = 'Invalid target ID!';
             echo json_encode($return);
             die();
         }
@@ -119,8 +119,8 @@ class GlmMembersAdmin_ajax_imageUpload extends GlmDataImages
         // Make sure the record actually exists
         $sql = "SELECT id FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX ."$refTable WHERE id = $refDest;";
         $record = $this->wpdb->get_row($sql, ARRAY_A);
-        if ($record['id'] != 1) {
-            $return['message'] = 'Specified target ID does not exist in AJAX call to imageUpload!';
+        if (count($record['id']) != 1) {
+            $return['message'] = "Specified target record (".$record['id'].") does not exist in table (".$refTable.")!\n\n".$sql;
             echo json_encode($return);
             die();
         }
index 03fab00..e7a4aed 100644 (file)
                     {if $memberInfo.fieldFail.url}<p>{$memberInfo.fieldFail.url}</p>{/if}
                 </td>
             </tr>
+            <tr>
+                <th {if $memberInfo.fieldRequired.email}class="glm-required"{/if}>E-Mail Address:</th>
+                <td {if $memberInfo.fieldFail.email}class="glm-form-bad-input"{/if}>
+                    <input type="text" name="email" value="{$memberInfo.fieldData.email}" class="glm-form-text-input-short" placeholder="ex: name@domain.com">
+                    {if $memberInfo.fieldFail.email}<p>{$memberInfo.fieldFail.email}</p>{/if}
+                </td>
+            </tr>
             <tr>
                 <th {if $memberInfo.fieldRequired.logo}class="glm-required"{/if}>Logo:</th>
                 <td {if $memberInfo.fieldFail.logo}class="glm-form-bad-input"{/if}>
index 7c64ec1..d2772d3 100644 (file)
@@ -49,7 +49,8 @@
                     {if $m.pending > 0}<span class="glm-notice">Pending</span>{/if}
                 </td>
                 <td>
-                    <a href="{$thisURL}?page=glm-members-admin-menu-member&glm_action=index&member={$m.id}" class="button-primary glm-right">Manage</a>
+                    <a href="{$thisURL}?page=glm-members-admin-menu-member&glm_action=memberInfo&member={$m.id}&id={$m.active_id}" class="button-primary glm-right" style="margin: 0 .2em 0 .2em;">Active Version</a>
+                    <a href="{$thisURL}?page=glm-members-admin-menu-member&glm_action=index&member={$m.id}" class="button-primary glm-right" style="margin: 0 .2em 0 .2em;">Manage</a>
                 </td>
             </tr>
     {/foreach}
index 51a5e00..edc0e16 100644 (file)
@@ -70,6 +70,7 @@
                     {if $member.phone && $detail_show_phone}<br><b>Phone:</b> {$member.phone}{/if}
                     {if $member.toll_free && $detail_show_tollfree}<br><b>Toll Free:</b> {$member.toll_free}{/if}
                     {if $member.url && $detail_show_url}<br><b>Web site:</b> <a href="{$member.url}"{if $detail_show_url_newtarget} target="_blank"{/if}>{$member.url}</a>{/if}
+                    {if $member.email}<br><b>E-Mail Address:</b> <a href="mailto:{$m.email}">{$member.email}</a>{/if}
                     {if $member.region.value && $detail_show_region}<br><b>Region:</b> {$member.region.name}{/if}
                 </div>                    
 <!-- Member Logo - Medium and up-->                    
index b16ab95..7e76e0d 100644 (file)
@@ -87,6 +87,7 @@
                         {if $m.phone && $list_show_phone}<br><b>Phone:</b> {$m.phone}{/if}
                         {if $m.toll_free && $list_show_tollfree}<br><b>Toll Free:</b> {$m.toll_free}{/if}
                         {if $m.url && $list_show_url}<br><b>Web site:</b> <a href="{$m.url}"{if $list_show_url_newtarget} target="_blank"{/if}>{$m.url}</a>{/if}
+                        {if $m.email}<br><b>E-Mail Address:</b> <a href="mailto:{$m.email}">{$m.email}</a>{/if}
                         {if $m.region.value && $list_show_region}<br><p><b>Region:</b> {$m.region.name}{/if}
                     </div>
 <!-- Member Logo - Medium and up-->                    
                     {if $m.phone && $list_map_show_phone}<b>Phone:</b> {$m.phone}<br>{/if}
                     {if $m.toll_free && $list_map_show_tollfree}<b>Toll Free:</b> {$m.toll_free}<br>{/if}
                     {if $m.url && $list_map_show_url}<b>Web site:</b> <a href="{$m.url}"{if $list_map_show_url_newtarget} target="_blank"{/if}>{$m.url}</a><br>{/if}
+                    {if $m.email}<b>E-Mail Address:</b> <a href="mailto:{$m.email}">{$m.email}</a><br>{/if}
                     {if $m.region.value && $list_map_show_region}<p><b>Region:</b> {$m.region.name}</p>{/if}
                 </p>
                 {if $m.descr && $list_map_show_description}{$m.descr}<br>{/if}