fixing create pages bug where multiple pages got stuck if they had the same id
authorAnthony Talarico <talarico@gaslightmedia.com>
Fri, 17 Jun 2016 17:12:54 +0000 (13:12 -0400)
committerAnthony Talarico <talarico@gaslightmedia.com>
Fri, 17 Jun 2016 17:12:54 +0000 (13:12 -0400)
js/shortcodeBuilder.js
models/admin/management/index.php
views/admin/management/index.html

index 219d388..46b38ae 100644 (file)
@@ -113,7 +113,8 @@ jQuery(document).ready(function ($) {
         $("#showDetail").dialog().dialog("option", "width", 422);
     });
     
-    var regExp = /\[([^)]+)\]/;
+//    var regExp = /\[([^)]+)\]/;
+    var regExp = /glm_members_list_/g;
     function get_tinymce_content(){
         if (jQuery("#wp-content-wrap").hasClass("tmce-active")){
             
@@ -142,9 +143,12 @@ jQuery(document).ready(function ($) {
     editor_shortcodes = get_tinymce_content();
     
     if(editor_shortcodes){
+        
         var number_of_categories = (editor_shortcodes.match(/category="(.*?)"/g) || []).length;
+     
     }
     console.debug(number_of_categories);
+
     console.debug(editor_shortcodes);
     if(editor_shortcodes){
         if(editor_shortcodes.match(/category="(.*?)"/) !== null){
@@ -261,17 +265,17 @@ jQuery(document).ready(function ($) {
                 editor_content = editor_content.replace(ids, 'category="' + id_string + '"');
                 content.val(editor_content);
            } else {
-               editor_content = editor_content.replace(ids, id_string);
+               editor_content = editor_content.replace('category="' + ids, 'category="' + id_string);
                content.val(editor_content);
            }
        } else if(tinyMCE.activeEditor !== null){
            if(empty_space){
                 editor_content = tinyMCE.get('content').getContent({format: 'raw'});
-                editor_content = editor_content.replace(ids, 'category="' + id_string + '"');
+                editor_content = editor_content.replace(ids, 'category="' + id_string + '"' );
                 tinyMCE.activeEditor.setContent(editor_content);
            } else {
                 editor_content = tinyMCE.get('content').getContent({format: 'raw'});
-                editor_content = editor_content.replace(ids, id_string);
+                editor_content = editor_content.replace('category="' + ids, 'category="' + id_string);
                 tinyMCE.activeEditor.setContent(editor_content);
            }
        }
@@ -338,7 +342,7 @@ jQuery(document).ready(function ($) {
                 }
             }
             // start the shortcode string that will be added to the tinymce editor
-            shortcodeString = '<div class="previewCodes" id="' + count + '"> [' + shortcodeDropdown;
+            shortcodeString = '<div class="previewCodes" id="' + shortcodeDropdown + '_' + count + '"> [' + shortcodeDropdown;
             
             // populate the shortcode object
             for (var key in shortcodeValues) {
@@ -409,13 +413,13 @@ jQuery(document).ready(function ($) {
        if($("#content").css("display") !== "none"){
            
            editor_content = content.val();
-           editor_content = editor_content.replace(ids, id_string);
+           editor_content = editor_content.replace('category="' + ids, 'category="' + id_string );
            content.val(editor_content);
            
        } else if(tinyMCE.activeEditor !== null){
            
            editor_content = tinyMCE.get('content').getContent({format: 'raw'});
-           editor_content = editor_content.replace(ids, id_string);
+           editor_content = editor_content.replace('category="' + ids, 'category="' + id_string);
            tinyMCE.activeEditor.setContent(editor_content);
            
        }
index 8cfb535..9835501 100644 (file)
@@ -25,6 +25,7 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
 {
     public $prefixSlugs = array();
     public $requiredPages = array();
+// s
     /**
      * WordPress Database Object
      *
@@ -62,17 +63,20 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
         parent::__construct(false, false);
 
     }
-    public function updateRequiredPages(){
+     public function updateRequiredPages(){
         $this->requiredPages = array();
+//        $this->reqPageTitlesStatic = array();
         foreach ($this->config['addOns'] as $a) {
             if (isset($a['requiredPages'])) {
                 foreach($a['requiredPages'] as $pageName => $pageData) {
+//                    $this->reqPageTitlesStatic[] = strtolower(str_replace(" ","-",$pageName));
                     $pageID = get_option(GLM_MEMBERS_PLUGIN_OPTION_PREFIX.$pageData['underscored_title']);
                     $this->prefixSlugs[] = GLM_MEMBERS_PLUGIN_OPTION_PREFIX.$pageData['underscored_title'];
                     $this->requiredPages[$a['underscored_name']][$pageName]['id'] = $pageID;
                     $page = get_post($pageID);
                     $this->requiredPages[$a['underscored_name']][$pageName]['slug'] = $page->post_name;
                     $this->requiredPages[$a['underscored_name']][$pageName]['title'] = $page->post_title;
+                    $this->requiredPages[$a['underscored_name']][$pageName]['static_name'] = strtolower(str_replace(" ","-",$pageName));
                 }
             }
         }
@@ -117,8 +121,8 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
         $settingsUpdated = false;
         $settingsUpdateError = false;
         $requiredPagesUpdateError = false;
-        $idError = false;
-        $titleError = false;
+        $id_error = false;
+        $title_error = false;
         // General settings are always stored in a record with ID=1.
         $id = 1;
 
@@ -137,73 +141,75 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
    
         // Check for submission option
         $option = '';
-        if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') {
+        if ( isset( $_REQUEST[ 'option' ] ) && $_REQUEST[ 'option' ] == 'submit' ) {
             $option = $_REQUEST['option'];
         }
         
         $this->updateRequiredPages();
-        switch($option) {
+        switch( $option ) {
 
             // Update General Settings and redisplay the form
             case 'submit':
-                
-                // get all of the IDs from the form 
-               $requiredPagesIDs = array_intersect_key($_REQUEST, array_flip(preg_grep('/^glm_members_database_id/', array_keys($_REQUEST))));
+                foreach ( $this->config[ 'addOns' ] as $a ) {
+                    if ( isset( $a[ 'requiredPages' ] ) ) {
+                        foreach( $a[ 'requiredPages'] as $pageName => $pageData ) {
+                            
+                            $current_page_id_value = get_option( GLM_MEMBERS_PLUGIN_OPTION_PREFIX.$pageData[ 'underscored_title' ] );
 
-                foreach($requiredPagesIDs as $id){
-                    $page = get_post($id);
-                    $pageTitle = $page->post_title;
-                    $pageSlug= $page->post_name;
-                    $slug = 'glm_members_database_option_' . $pageSlug;
-                    $postValueTitle = filter_var($_POST[$slug], FILTER_SANITIZE_STRING);
-                    if($pageTitle != $postValueTitle && !empty($postValueTitle)){
-                        $args = array (
-                            'ID' => $id,
-                            'post_title' => $postValueTitle
-                        );
-                        wp_update_post($args);
-                    } else if($pageTitle == $postValueTitle) { 
-  
-                    } else if(empty($postValueTitle)){
-                        $settingsUpdateError = true;
-                        $settingsUpdated = false;
-                        $titleError = true;
-                    }
-                }
+                            $page_title_field_name = 'glm_members_database_title_' . $this->requiredPages[ $a[ 'underscored_name'] ][ $pageName ][ 'static_name' ];
+                            $page_id_field_name = 'glm_members_database_id_' . $this->requiredPages[ $a[ 'underscored_name' ] ][ $pageName ][ 'static_name' ];
+                            
+                            $page_option_slug = GLM_MEMBERS_PLUGIN_OPTION_PREFIX.$pageData['underscored_title'];
 
-                foreach($this->prefixSlugs as $slug){
-                    $id = get_option($slug);
-                    $pageTitle = $page->post_title;
-                    $page = get_post($id);
-                    $pageSlug = $page->post_name;
-                    $titleSlug = 'glm_members_database_option_' . $pageSlug;
-                    $pageSlug = 'glm_members_database_id_' . $pageSlug;
-                    $formID = filter_var($_POST[$pageSlug], FILTER_SANITIZE_STRING);
-                    $formTitle = filter_var($_POST[$titleSlug], FILTER_SANITIZE_STRING);
-                    if($id != $formID && get_post_status($formID) != false && is_numeric($formID)){
-                        update_option($slug, $formID);
-                    } else if($id == $formID && is_numeric($formID)) {
-                        update_option($slug, $id);
-                    } else {
-                       $settingsUpdateError = true;
-                       $settingsUpdated = false;
-                       $idError = true;
-                    }                 
+                            $current_page_title_value = $this->requiredPages[ $a[ 'underscored_name' ] ][ $pageName][ 'title' ];
+                            
+                            if( isset( $_POST[ $page_title_field_name ] ) && ! empty( $_POST[ $page_title_field_name ] ) ){
+                                $new_page_title_value = filter_var($_POST[$page_title_field_name], FILTER_SANITIZE_STRING);
+                            } else {
+                                $title_error = true;
+                            }
+                            
+                            if( isset( $_POST[ $page_id_field_name ] ) && !empty( $_POST[ $page_id_field_name ] ) && is_numeric( $_POST[ $page_id_field_name ] ) ){
+                                $new_page_id_value = filter_var( $_POST[ $page_id_field_name ], FILTER_SANITIZE_STRING );
+                            } else {
+                                $id_error = true;
+                            }
+                                             
+                            if( $current_page_title_value !== $new_page_title_value ){
+                                $args = array (
+                                    'ID' => $current_page_id_value,
+                                    'post_title' => $new_page_title_value,
+                                );
+                                wp_update_post( $args );
+                            }
+                            
+                            // ensure the new page id exists and the field is not empty
+                            if($current_page_id_value !== $new_page_id_value && get_post_status( $new_page_id_value ) ){
+                                update_option( $page_option_slug, $new_page_id_value );
+                            } else {
+       
+                            }                     
+                        }
+                    }
                 }
-
                 $this->updateRequiredPages();
-                
+  
                 // Required Pages
                 $requiredPagesUpdateError = false;
-                if (isset($_REQUEST[GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_LIST_ID]) ){
-                    $membersListIdOption = $requiredPages['glm-member-db']['members_list'][''];
-                    $newMembersListId = $_REQUEST[$membersListIdOption];
+                if ( isset( $_REQUEST[ GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_LIST_ID ] ) ){
+                    $membersListIdOption = $requiredPages[ 'glm-member-db' ][ 'members_list' ][''];
+                    $newMembersListId = $_REQUEST[ $membersListIdOption ];
+                } else {
+         
                 }
+                echo $_REQUEST[ 'glm_members_database_option_member-detail' ];
+                echo $newMembersListId;
                 $results = $this->wpdb->get_results( "SELECT ID FROM ".$this->wpdb->posts." WHERE ID = ".$newMembersListId);
-                if (get_option($membersListIdOption) == $newMembersListId) {
+                if ( get_option( $membersListIdOption) == $newMembersListId ) {
                     $requiredPagesUpdateError = false;
-                } else if (is_numeric($newMembersListId)) {
-                    if ($results) {
+                } else if ( is_numeric( $newMembersListId ) ) {
+                    if ( $results ) {
                         $requiredPagesUpdateError = false;
                     } else {
                         $requiredPagesUpdateError .= "\n Page ID $newMembersListId does not exist. ";
@@ -214,7 +220,7 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
                 
                // Update all general setttings
                 $generalSettings = $this->updateEntry(1);
-                if ($generalSettings['status']) {
+                if ( $generalSettings[ 'status' ]) {
                     $settingsUpdated = true;
                 } else {
                     $settingsUpdateError = true;
@@ -226,19 +232,18 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
             default:
 
                 // Try to get the first (should be only) entry for general settings.
-                $generalSettings = $this->editEntry($id);
+                $generalSettings = $this->editEntry( $id );
 
                 if ($generalSettings === false) {
 
-                    if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) {
+                    if ( GLM_MEMBERS_PLUGIN_ADMIN_DEBUG ) {
                         glmMembersAdmin::addNotice("<b>&nbsp;&nbsp;/modesl/admin/settings/index.php: Unable to load General Settings.", 'Alert');
                     }
-
                 }
 
                 break;
         }
-        if($settingsUpdateError){
+        if( $settingsUpdateError ){
             $settingsUpdated = false;
         }
         // Compile template data
@@ -249,8 +254,8 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
             'settingsUpdated' => $settingsUpdated,
             'settingsUpdateError' => $settingsUpdateError,
             'requiredPages' => $this->requiredPages,
-            'idError'         => $idError,
-            'titleError'    => $titleError,
+            'id_error'         => $id_error,
+            'title_error'    => $title_error,
             'requiredPagesUpdateError' => $requiredPagesUpdateError
         );
 
@@ -262,9 +267,7 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
             'view' => 'admin/management/index.html',
             'data' => $templateData
         );
-
     }
-
 }
 
 ?>
\ No newline at end of file
index 8edcb0c..cd6ef0a 100644 (file)
         <!-- Required Pages -->
         
         <table id="glm-table-required-page" class="glm-admin-table glm-settings-table glm-hidden">
-            {if $idError}<span class="glm-error">Page ID should be numerical and should not be empty</span>{/if}
-            {if $titleError}<span class="glm-error">Page Title should not be blank</span>{/if}
-            {foreach from=$requiredPages key=addon item=requiredPage}
+            {if $id_error}<span class="glm-error">'Page ID' input should be numerical, not empty and the page must exist</span>{/if}
+            {if $title_error}<span class="glm-error">'Page Name' should not be blank</span>{/if}
+            {foreach from=$requiredPages key=addon item=requiredPage  name=count}
             <tr><td colspan="2"><h2>Plugin: {$addon}</h2></td></tr>
+  
                 {foreach from=$requiredPage key=requiredPageName item=requiredPageData}
                 <tr>
                     <th>{$requiredPageName}</th>
                             <tr>
                                 <th>Page Name</th>
                                 <td>
-                                    <input type="text" name="glm_members_database_option_{$requiredPageData.slug}" value="{$requiredPageData.title}">
+                                    <input type="text" name="glm_members_database_title_{$requiredPageData.static_name}"  value="{$requiredPageData.title}">
                                 </td>
                             </tr>
                             <tr>
                                 <th>Page ID</th>
                                 <td>
-                                    <input name="glm_members_database_id_{$requiredPageData.slug}" type="text" value="{$requiredPageData.id}">
+                                    <input name="glm_members_database_id_{$requiredPageData.static_name}" type="text" value="{$requiredPageData.id}">
                                 </td>
                             </tr>
                             <tr>
@@ -79,6 +80,7 @@
                         </table>
                     </td>
                 </tr>
+
                 {/foreach}
             {/foreach}
         </table>