Update to edit active process for moderated members.
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 22 Jun 2018 13:05:04 +0000 (09:05 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 22 Jun 2018 13:05:04 +0000 (09:05 -0400)
Moderated members should not be allowed to edit the active record.
Cloning the record for them to edit.

classes/glmMemberInfoClone.php
models/admin/member/memberInfo.php
views/admin/dashboard/index.html
views/admin/member/memberEdit.html
views/admin/member/memberInfo.html
views/admin/member/memberInfo/editProfileStatus.html

index e630e7b..e88c249 100644 (file)
@@ -70,7 +70,7 @@ class GlmMemberInfoClone
      * @return void
      * @access public
      */
-    public function cloneMemberInfo($id)
+    public function cloneMemberInfo( $id, $cloneType = 'CLONED' )
     {
 
         // Load Member Info Data Class and get info data for later use
@@ -89,7 +89,7 @@ class GlmMemberInfoClone
 
             // Update create and update times to now and set info record to pending
             $t = date('Y-m-d H:i:s', time());
-            $newReferenceName = "CLONED - ".$memberInfo['reference_name'];
+            $newReferenceName = $cloneType . " - ".$memberInfo['reference_name'];
             $sql = "
                 UPDATE ".$MemberInfo->table."
                    SET create_time = '$t', modify_time = '$t', status = ".$this->config['status_numb']['Pending'].", reference_name = '".addslashes($newReferenceName)."'
index e8e99c3..65ed8d4 100644 (file)
@@ -218,6 +218,7 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
         $errorMessage                      = false;
         $customFieldResults                = false;
         $multipleProfileEnabeled           = $this->config['settings']['enable_multiple_profiles'];
+        $cloneType                         = 'CLONED';
 
         // Check for action option - Should be one of the values in the "switch" statement below
         $option = false;
@@ -266,6 +267,13 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
         // Determine if the current member info record active?
         $this->isActive = $this->isActive();
 
+        // If the current record is active and the member editing is moderated.
+        // Then we need to clone the active record instead of editing it.
+        if ( $this->isActive && $lockedToMember && apply_filters( 'glm_user_is_moderated', $lockedToMember ) ) {
+            $option    = 'clone';
+            $cloneType = 'PENDING';
+        }
+
         // Get member base data
         require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMembers.php';
         $Members = new GlmDataMembers($this->wpdb, $this->config);
@@ -358,7 +366,7 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
                             $memberUpdated = true;
                             $memberUpdateError = false;
                         }
-                        
+
                     } else {
                         $memberUpdateError = true;
                     }
@@ -419,7 +427,7 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
 
                 $oldId = $this->memberInfoID;
                 // Clone the current member info
-                $this->memberInfoID = $CloneMemberInfo->cloneMemberInfo($this->memberInfoID);
+                $this->memberInfoID = $CloneMemberInfo->cloneMemberInfo( $this->memberInfoID, $cloneType );
 
                 do_action( 'glm-member-db-clone-custom-fields', $oldId, $this->memberInfoID );
 
index 010c0d7..dd77092 100644 (file)
@@ -1,3 +1,4 @@
+{* Dashboard for members (own entity) *}
 <div class="glm-widget-container">
     <div class="glm-widget">
         <h2>
@@ -5,53 +6,54 @@
             <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}" class="button glm-button glm-right">Add New {$terms.term_member_cap} Information Version</a>
         </h2>
         <div class="glm-widget-content">
-
     {if apply_filters('glm_members_permit_admin_member_index_view_member_info_version', true)}
-    {if apply_filters('glm_members_permit_admin_member_index_add_member_info_version', true)}
-    {/if}
-    <br clear="all">
-    <table class="striped glm-admin-table">
-        <thead>
-            <tr>
-                <th>Status</th>
-                <th>Reference Name</th>
-                <th> </th>
-            </tr>
-        </thead>
-        <tbody>
-
-      {if $haveInfoRecords}
-        {assign var="i" value="0"}
-        {foreach $memberInfoRecords as $m}
-
-         {if $m.status.value == $statusTypeNumbers.Active || apply_filters('glm_members_permit_admin_member_index_list_inactive_info', true)}
-          {if $i++ is odd by 1}
-            <tr>
-          {else}
-            <tr class="alternate{if $m.status.name == 'Active'} glm-admin-table-active{/if}">
-          {/if}
-                <td>
-                    <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}&memberInfo={$m.id}"{if $m.status.value == $statusPending} class="glm-notice"{/if}>{$m.status.name}</a>
-                </td>
-                <td>{$m.reference_name}</td>
-                <td>
-                    {if $m.bad_lat_lon}<span class="glm-error">Bad Map Location</span>{/if}
-          {if apply_filters('glm_members_permit_admin_member_index_clone_activate_info_version', true)}
-                    <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}&memberInfo={$m.id}&option=clone" class="button button-secondary glm-button-small glm-right">Clone</a>&nbsp;
-                    {if $m.status.name != 'Active'}<a href="{$thisUrl}?page={$thisPage}&glm_action=index&member={$memberID}&activateID={$m.id}" class="button button-secondary glm-button-small glm-right">Activate</a>{/if}
-          {/if}
-                </td>
-            </tr>
+        {if apply_filters('glm_members_permit_admin_member_index_add_member_info_version', true)}
+        {/if}
+        <br clear="all">
+        <table class="striped glm-admin-table">
+            <thead>
+                <tr>
+                    <th>Status</th>
+                    <th>Reference Name</th>
+                    <th> </th>
+                </tr>
+            </thead>
+            <tbody>
 
+                {if $haveInfoRecords}
+                    {assign var="i" value="0"}
+                    {foreach $memberInfoRecords as $m}
 
-         {/if}
-        {/foreach}
-      {else} <!-- haveInfoRecords -->
-            <tr><td colspan="5"><a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}">Click here to start entering information for this {$terms.term_member}.</a></td></tr>
-      {/if}
-        </tbody>
-    </table>
-   {/if} <!-- apply_filters -->
+                        {if $m.status.value == $statusTypeNumbers.Active || apply_filters('glm_members_permit_admin_member_index_list_inactive_info', true)}
+                            {if $i++ is odd by 1}
+                                <tr>
+                            {else}
+                                <tr class="alternate{if $m.status.name == 'Active'} glm-admin-table-active{/if}">
+                            {/if}
+                            <td>
+                                <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}&memberInfo={$m.id}"{if $m.status.value == $statusPending} class="glm-notice"{/if}>{$m.status.name}</a>
+                            </td>
+                            <td>{$m.reference_name}</td>
+                            <td>
+                                {if $m.bad_lat_lon}<span class="glm-error">Bad Map Location</span>{/if}
+                                {if apply_filters('glm_members_permit_admin_member_index_clone_activate_info_version', true)}
+                                    <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}&memberInfo={$m.id}&option=clone" class="button button-secondary glm-button-small glm-right">Clone</a>&nbsp;
+                                    {* Adding a check for moderated. If locked to member and moderated they should not be able to activate an inactive profile. *}
+                                    {if $lockedToMember && apply_filters('glm_user_is_moderated', $lockedToMember)}
+                                    {else}
+                                        {if $m.status.name != 'Active'}<a href="{$thisUrl}?page={$thisPage}&glm_action=index&member={$memberID}&activateID={$m.id}" class="button button-secondary glm-button-small glm-right">Activate</a>{/if}
+                                    {/if}
+                                {/if}
+                                </td>
+                            </tr>
+                        {/if}
+                    {/foreach}
+                {else} <!-- haveInfoRecords -->
+                    <tr><td colspan="5"><a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}">Click here to start entering information for this {$terms.term_member}.</a></td></tr>
+                {/if}
+            </tbody>
+        </table>
+    {/if} <!-- apply_filters -->
 
         </div>
     </div>
index bb06ac6..8445437 100644 (file)
@@ -83,7 +83,7 @@
                       <textarea name="notes" class="glm-form-textarea">{$member.fieldData.notes}</textarea>
                       {if $member.fieldFail.notes}<p>{$member.fieldFail.notes}</p>{/if}<br>
                       This "Notes" field is not displayed anywhere else. It is strictly for making and keeping
-                      notes related to this {$terms.term_member} profile. 
+                      notes related to this {$terms.term_member} profile.
                   </td>
               </div>
           </div>
@@ -96,7 +96,7 @@
       </form>
     {/if}
 
-   {else}        
+   {else}
       <h3 class="glm-error">You do not have any {$terms.term_member_cap} Types setup.</h3>
       <p>You must have at least one {$terms.term_member_cap} Type to add a new {$terms.term_member}.</p>
       <td><a href="{$thisUrl}?page=glm-members-admin-menu-settings&glm_action=index">Click here to add {$terms.term_member_cap} Types.</a></td>
 </div>
 
     <script type="text/javascript">
-        jQuery(document).ready(function($) {            
+        jQuery(document).ready(function($) {
 
-            // Flash certain elements for a short time after display      
+            // Flash certain elements for a short time after display
             $(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500);
 
             /*
             var glmSubmitRequired = false;
             $('input, textarea, select').on( 'change', function() {
                 glmPageUpdateRequired();
-            }); 
-            
+            });
+
             /*
              * Checks for leaving the page
              */
-             
+
             // Flag submit button when updates are required.
             function glmPageUpdateRequired() {
                 $('#updateMember').addClass('glm-bad-input-area');
                 glmSubmitRequired = false;
                 return true;
             });
-            
+
             // If submit is required and we're laving the page, alert the user
             $(window).bind('beforeunload', function() {
                 if (glmSubmitRequired) {
                     return true;
                 }
             });
-            
+
 
         });
     </script>
 
-    
+
 {include file='admin/footer.html'}
index 06d6091..e64a7b2 100644 (file)
@@ -1,3 +1,6 @@
+{* View File: memberInfo.html *}
+{* glm_action: memberinfo *}
+{* Used for editing member profile records by members_manager or Own Enttity Manager *}
 {include file='admin/member/header.html'}
 
     <script src="//maps.googleapis.com/maps/api/js?&key={$settings.google_maps_api_key}"></script>
         {if $errorMessage}<span class="glm-error glm-flash-updated glm-right">{$errorMessage}</span>{/if}
     </h2>
 
-        <input class="updateMemberProfile button-primary glm-right" type="submit" value="{if $memberInfoID && $memberInfo}Update {$terms.term_member} profile{else}Add new {$terms.term_member} profile{/if}">
+        {if $lockedToMember && apply_filters( 'glm_user_is_moderated', $lockedToMember )}
+            <input class="updateMemberProfile button-primary glm-right" type="submit"
+                value="{if $memberInfoID && $memberInfo}Save {$terms.term_member} profile as Draft{else}Save as Draft{/if}">
+            <input class="updateMemberProfile button-primary glm-right" type="submit"
+                value="{if $memberInfoID && $memberInfo}Request Update to {$terms.term_member} profile{else}Request Add new {$terms.term_member} profile{/if}">
+        {else}
+            <input class="updateMemberProfile button-primary glm-right" type="submit" value="{if $memberInfoID && $memberInfo}Update {$terms.term_member} profile{else}Add new {$terms.term_member} profile{/if}">
+        {/if}
         <br>
         <br>
         <!-- **** Status, Address and Location **** -->
index 51fbcf1..bd5f3ae 100644 (file)
@@ -1,17 +1,19 @@
         <div class="glm-admin-table glm-admin-table-inner">
-            <div class="glm-row">
-                <h2>Profile Status:</h2>
-                <div class="glm-small-12">
-                    <select name="status">
-                        {foreach from=$memberInfo.fieldData.status.list item=v}
-                            <option value="{$v.value}"{if $v.default} selected{/if}>{$v.name}</option>
-                        {/foreach}
-                    </select>
-                    {if $memberInfo.fieldFail.status}<p>{$memberInfo.fieldFail.status}</p>{/if}
-                    <input type="checkbox" name="has_no_profile"{if $memberInfo.fieldData.has_no_profile.value} checked{/if}>
-                    Has no profile page
+            {if !$lockedToMember}
+                <div class="glm-row">
+                    <h2>Profile Status:</h2>
+                    <div class="glm-small-12">
+                        <select name="status">
+                            {foreach from=$memberInfo.fieldData.status.list item=v}
+                                <option value="{$v.value}"{if $v.default} selected{/if}>{$v.name}</option>
+                            {/foreach}
+                        </select>
+                        {if $memberInfo.fieldFail.status}<p>{$memberInfo.fieldFail.status}</p>{/if}
+                        <input type="checkbox" name="has_no_profile"{if $memberInfo.fieldData.has_no_profile.value} checked{/if}>
+                        Has no profile page
+                    </div>
                 </div>
-            </div>
+            {/if}
             <div class="glm-row">
                 <div class="glm-small-12">
                 </div>