Adding custom fields to individual contacts profile admin pages
authorLaury GvR <laury@gaslightmedia.com>
Tue, 7 Nov 2017 19:27:36 +0000 (14:27 -0500)
committerLaury GvR <laury@gaslightmedia.com>
Tue, 7 Nov 2017 19:27:36 +0000 (14:27 -0500)
models/admin/contacts/index.php
models/admin/profile/index.php
views/admin/contacts/edit.html

index 45cc4bd..9d295fd 100644 (file)
@@ -136,6 +136,7 @@ class GlmMembersAdmin_contacts_index extends GlmDataContacts
         $start = 1;
         $limit = 20;        // Set to the number of listings per page
         $namesList = false;
+        $customFieldResults = false;
 
         $where = '';
 
@@ -266,6 +267,8 @@ class GlmMembersAdmin_contacts_index extends GlmDataContacts
 
                 // If that was successful
                 if ($contactInfo['status'] && !$newContactEmailExists && !$newContactUsernameExists && !$misMatchedWpUsers) {
+                    $contactInfoID = $contactInfo['fieldData']['id'];
+                    $customFieldResults = apply_filters( 'glm-member-db-save-custom-fields', $contactInfoID );
 
                     // If there's an existing WordPress user matching the E-Mail address but that has a different username
                     if ($contactCheck['wordpressEmail']
@@ -442,7 +445,14 @@ class GlmMembersAdmin_contacts_index extends GlmDataContacts
 
                 if ($contactInfo['status']) {
                     $contactInfo = $this->editEntry(($_REQUEST['id']-0));
-                    $contactUpdated = true;
+                    $customFieldResults = apply_filters( 'glm-member-db-save-custom-fields', $_REQUEST['id']-0 );
+                    if(is_array($customFieldResults)){
+                        $contactUpdated = false;
+                        $contactUpdateError = true;
+                    } else {
+                        $contactUpdated = true;
+                        $contactUpdateError = false;
+                    }
 
                     // Get the wordpress user ID
                     $wpUser = get_user_by('email', $contactInfo['fieldData']['email']);
@@ -625,44 +635,45 @@ class GlmMembersAdmin_contacts_index extends GlmDataContacts
 
         // Compile template data
         $templateData = array(
-            'option' => $option,
-            'loggedInMember' => $loggedInMember,
-            'fromMemberMenu' => $fromMemberMenu,
-            'haveMember' => $haveMember,
-            'memberID' => $this->memberID,
-            'memberData' => $memberData,
-            'memberName' => $memberName,
-            'membersList' => $membersList,
-            'refType' => $refType,
-            'refTypeName' => $refTypeName,
-            'haveContacts' => $haveContacts,
-            'contactsList' => $contactsList['list'],
-            'numbContacts' => $numbContacts,
-            'contactID' => $contactID,
-            'contactInfo' => $contactInfo,
-            'newContactEmailExists' => $newContactEmailExists,
-            'newContactUsernameExists' => $newContactUsernameExists,
-            'misMatchedWpUsers' => $misMatchedWpUsers,
-            'usernameChangedToWP' => $usernameChangedToWP,
-            'newContactCreated' => $newContactCreated,
-            'usingExistingWPContact' => $usingExistingWPContact,
-            'contactUpdated' => $contactUpdated,
-            'filterArchived' => $filterArchived,
-            'filterText' => $filterText,
-            'haveFilter' => $haveFilter,
-            'userDeleted' => $userDeleted,
-            'wpUserDeleted' => $wpUserDeleted,
-            'contactMembers' => $contactMembers,
-
-            'numbDisplayed' => $numbDisplayed,
-            'lastDisplayed' => $lastDisplayed,
-            'paging' => $paging,
-            'prevStart' => $prevStart,
-            'nextStart' => $nextStart,
-            'start' => $start = 1,
-            'limit' => $limit,
-            'namesList' => $namesList,
-            'EntityManagerRole' => $this->config['contact_role_numb']['EntityManager']
+            'option'                    => $option,
+            'loggedInMember'            => $loggedInMember,
+            'fromMemberMenu'            => $fromMemberMenu,
+            'haveMember'                => $haveMember,
+            'memberID'                  => $this->memberID,
+            'memberData'                => $memberData,
+            'memberName'                => $memberName,
+            'membersList'               => $membersList,
+            'refType'                   => $refType,
+            'refTypeName'               => $refTypeName,
+            'haveContacts'              => $haveContacts,
+            'contactsList'              => $contactsList['list'],
+            'numbContacts'              => $numbContacts,
+            'contactID'                 => $contactID,
+            'contactInfo'               => $contactInfo,
+            'newContactEmailExists'     => $newContactEmailExists,
+            'newContactUsernameExists'  => $newContactUsernameExists,
+            'misMatchedWpUsers'         => $misMatchedWpUsers,
+            'usernameChangedToWP'       => $usernameChangedToWP,
+            'newContactCreated'         => $newContactCreated,
+            'usingExistingWPContact'    => $usingExistingWPContact,
+            'contactUpdated'            => $contactUpdated,
+            'filterArchived'            => $filterArchived,
+            'filterText'                => $filterText,
+            'haveFilter'                => $haveFilter,
+            'userDeleted'               => $userDeleted,
+            'wpUserDeleted'             => $wpUserDeleted,
+            'contactMembers'            => $contactMembers,
+            'numbDisplayed'             => $numbDisplayed,
+            'lastDisplayed'             => $lastDisplayed,
+            'paging'                    => $paging,
+            'prevStart'                 => $prevStart,
+            'nextStart'                 => $nextStart,
+            'start'                     => $start = 1,
+            'limit'                     => $limit,
+            'namesList'                 => $namesList,
+            'EntityManagerRole'         => $this->config['contact_role_numb']['EntityManager'],
+            'slug'                      => GLM_MEMBERS_CONTACTS_PLUGIN_SLUG,
+            'customFieldResults'        => $customFieldResults
 
         );
 
@@ -741,7 +752,7 @@ class GlmMembersAdmin_contacts_index extends GlmDataContacts
             if (apply_filters('glm_members_menu_members', $update)) {
 
                 // And if there's contact member data
-                if ($_REQUEST['contactMembers'] && count($_REQUEST['contactMembers'])) {
+                if (isset($_REQUEST['contactMembers']) && count($_REQUEST['contactMembers'])) {
 
                     // Update the contact members selection
                     $contactMembersList = implode(',', $_REQUEST['contactMembers']);
index cef0d9e..3a38ddb 100644 (file)
@@ -117,11 +117,12 @@ class GlmMembersAdmin_profile_index extends GlmDataContacts
     public function modelAction($actionData = false)
     {
 
-        $option = 'edit';
-        $contactUpdated = false;
-        $contactMembers = false;
-        $membersList  = false;
-        $view = 'admin/profile/index.html';
+        $option             = 'edit';
+        $contactUpdated     = false;
+        $contactMembers     = false;
+        $membersList        = false;
+        $customFieldResults = false;
+        $view               = 'admin/profile/index.html';
 
 
         $validOptions = array(
index 8cffdd1..c7eb8d9 100644 (file)
@@ -74,7 +74,7 @@
       {/if}
 
       {if $option == 'create'}
-        <h2 class="glm-left">Add New Contact</h2>
+        <h2>Add New Contact</h2>
       {else}
         {if $contactUpdated}<h2 class="glm-notice glm-flash-updated">Contact Updated</h2>{/if}
         <a id="deleteContactButton" class="button button-primary glm-button glm-right">Delete this Contact</a>
             <input type="hidden" name="id" value="{$contactInfo.fieldData.id}">
             <input type="hidden" name="modify_time" value="now">
         {/if}
-
-            <table class="glm-admin-table glm-shrink">
+        <h2 class="nav-tab-wrapper" style="margin-bottom: 1em;">
+        <a id="glm-contact-info-profile" data-show-table="glm-table-profile" class="glm-contact-info-tab nav-tab nav-tab-active">Profile Data</a>
+        {apply_filters('glm-member-db-custom-fields-nav', '', 'contact-info')}
+        
+        <!--{if $contactUpdateError}<span class="glm-error glm-flash-updated glm-right">{$terms.term_contact_cap} Profile Update Error</span>{/if}-->
+        <!--{if $errorMessage}<span class="glm-error glm-flash-updated glm-right">{$errorMessage}</span>{/if}-->
+        </h2>
+
+        <div id="glm-table-custom-fields" class="glm-hidden glm-admin-table glm-table glm-contact-info-table">
+            
+        
+        {if $option == 'create'}
+          {apply_filters('glm-members-custom-fields-form', '', $slug,'','')}
+        {else}
+          {$prefix = $slug|cat:'_'}
+          {$uid = $prefix|cat:$contactInfo.fieldData.id}
+          {apply_filters('glm-members-custom-fields-form', '', $slug,$contactInfo.fieldData.id,'')}
+          {apply_filters('glm-members-custom-fields-form', '', $uid,$contactInfo.fieldData.id,'')}
+        {/if}
+        </div>
+            <table id="glm-table-profile" class="glm-admin-table glm-admin-table-outer glm-hidden glm-contact-info-table">
+<!--            <table class="glm-admin-table glm-shrink">-->
                 <tr>
         {if $haveMember}
                     <th>Contact For:</th>
     <script type="text/javascript">
         jQuery(document).ready(function($) {
 
+            /*
+             * Edit area tabs
+             */
+            $('.glm-contact-info-tab').click( function() {
+                glmSetupAreaTab($(this));
+            });
+
+            // Do inital setup on load for first tab
+            glmSetupAreaTab($('#glm-contact-info-profile'));
+
+            // Setup edit area selected
+            function glmSetupAreaTab(t) {
+
+                // Clear table highlights and hide all tables
+                $('.glm-contact-info-tab').removeClass('nav-tab-active');
+                $('.glm-contact-info-table').addClass('glm-hidden');
+
+                // Highlight selected tab
+                t.addClass('nav-tab-active');
+
+                // Show selected table
+                var table = t.attr('data-show-table');
+                $('#' + table).removeClass('glm-hidden');
+
+                // Count remaining characters in field
+                $('.glm-char-count').keyup( function() {
+                    glmCharsRemaining($(this));
+                });
+
+                $('.glm-char-count').each( function() {
+                    glmCharsRemaining($(this));
+                });
+
+            }
+
             // Filter triggers
             $(".listFilter" ).change( function() {