Changeset 2893071
- Timestamp:
- 04/03/2023 07:22:31 PM (3 years ago)
- Location:
- constellation-client-portal/trunk
- Files:
-
- 8 edited
-
README.txt (modified) (2 diffs)
-
admin/class-ars-constellation-client-portal-admin.php (modified) (6 diffs)
-
admin/includes/accp-settings-page.php (modified) (2 diffs)
-
ars-constellation-client-portal.php (modified) (4 diffs)
-
includes/class-ars-constellation-client-portal-activator.php (modified) (2 diffs)
-
includes/class-ars-constellation-client-portal-deactivator.php (modified) (1 diff)
-
includes/class-ars-constellation-client-portal.php (modified) (3 diffs)
-
public/class-ars-constellation-client-portal-public.php (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
constellation-client-portal/trunk/README.txt
r2873186 r2893071 4 4 Tags: client portal, customer portal, business portal, client management, private files, private pages, invoice clients, invoicing, business managemenet 5 5 Requires at least: 5.0.0 6 Tested up to: 6. 17 Stable tag: 1.5. 56 Tested up to: 6.2 7 Stable tag: 1.5.6 8 8 Requires PHP: 7.4 9 9 License: GPLv3 or later … … 203 203 204 204 == Changelog == 205 = 1.5.6 (Pro) - 2023-4-3 = 206 * Update: Minor update to a plugin update notice that is returned if plugin data is not returned via api. 207 * Improvement: Updated the code associated with the excluded users and excluded roles sections within Client File, Client Invoice, and Client Page edit screens for better organization and maintainability. 208 * Fix: Fixed issue preventing saved excluded role values from being displayed correctly within the Select2 select field within Client File, Client Invoice, and Client Page edit screens. 209 * Update: Added note to the Email Notifications settings page. 210 * Update: Added functionality to display a UI prompt on the license tab if the license key is not entered. 211 * Update: Added functionality to check if the license key has been entered and display a reminder in the plugin list if not. 212 * Update: Updated the license settings functionality to clear notices in cases where no license_data is present. 213 * Fix: Updated the accp_change_invoice_status_on_woocommerce_payment_complete function to ensure that the invoice post link referenced in order notes works as expected in environments where get_edit_post_link does not work as expected. 214 215 = 1.5.6 (Core) - 2023-4-3 = 216 * Fix: Updated the accp_generate_invoice_query_args and accp_generate_files_query_args tax_query field values to "id" instead of "slug" as the $categories var is passed in as an array of category ID's rather than category slugs in each of those functions. 217 * Fix: Updated the accp_categories_var function to properly convert the $atts['categories'] value to an array if it is set in the shortcode. 218 * Update: Created a new function to generate the client file upload dir rewrite regex path for better organization and easier use within the main admin file and within the deactivate function. 219 * Update: Updated the plugin activation rewrite addition and flush_rewrite_rules functionality for better reliability. 220 * Update: Updated the plugin deactivation flush_rewrite_rules functionality for better reliability. 221 * Update: Updated the functionality that adds the client role on plugin activation to ensure that the role is added properly if it does not already exist. 222 * Improvement: Updated the activation process to check for another active version of Constellation Client Portal before activating the plugin to improve the upgrade process. Also added functionality to display a nicer message indicating that the duplicate plugin needs to be deactivated before proceeding. 223 205 224 = 1.5.5 (Pro) - 2023-3-1 = 206 225 * Improvement: Updated the plugin activation functionality to check for active scheduled emails and reschedule the accp_automated_email_cron cron job on plugin activation if any are enabled. -
constellation-client-portal/trunk/admin/class-ars-constellation-client-portal-admin.php
r2862820 r2893071 12 12 13 13 if ( ! defined( 'ABSPATH' ) ) { 14 14 15 exit; // Exit if accessed directly 16 15 17 } 16 18 … … 109 111 110 112 /** 113 * Define the query string that coincides with the query_var. 114 */ 115 $page_with_query_string = 'index.php/?accp_direct_access=1'; 116 117 118 /** 119 * Prep the regex (Example: value should look like - '^wp-content\/uploads\/accp-clientfiles\/.*?\/.*?\..*?$'). 120 */ 121 $regex_path = $this->accp_get_clientfile_dir_rewrite_regex_path(); 122 123 124 /** 125 * Add the rewrite rule for direct file access. 126 */ 127 add_rewrite_rule( $regex_path, $page_with_query_string, 'top' ); 128 129 } 130 131 132 /** 133 * Get the accp-clientfiles dir rewrite regex path. 134 * 135 * @return string $regex_path - Example: '^wp-content\/uploads\/accp-clientfiles\/.*?\/.*?\..*?$'. 136 */ 137 function accp_get_clientfile_dir_rewrite_regex_path(){ 138 139 $default_regex_path = '^wp-content\/uploads\/accp-clientfiles\/.*?\/.*?\..*?$'; 140 141 /** 111 142 * Don't specify the plugin directory name to account for different 112 143 * dir names based on the plugin tier - Basic, Pro, etc. … … 114 145 * Account for WP being installed in a sub directory, and the wp-content 115 146 * and/or /uploads directories being renamed. 116 */ 117 $page_with_query_string = 'index.php/?accp_direct_access=1'; 147 */ 118 148 $wp_content_dir_name = $this->accp_utility_functions->accp_get_wp_content_dir_name(); 149 150 if(!$wp_content_dir_name) 151 return $default_regex_path; 152 119 153 $accp_clientfiles_full_dir_path = $this->accp_utility_functions->accp_get_clientfiles_path(); 154 155 if(!$accp_clientfiles_full_dir_path) 156 return $default_regex_path; 120 157 121 158 … … 132 169 $regex_path = '^'.$accp_clientfiles_partial_dir_path_slashed.'\/.*?\/.*?\..*?$'; 133 170 134 135 /** 136 * Add the rewrite rule for direct file access. 137 */ 138 add_rewrite_rule( $regex_path, $page_with_query_string, 'top' ); 139 140 } 171 return $regex_path; 172 173 } 174 141 175 142 176 … … 374 408 } 375 409 376 /* End File Check Redirects */ 377 410 /* End File Check Redirects */ 378 411 379 412 380 413 /** 381 * Flush rewrite rules on plugin activation after the rules are inited.414 * Run plugin initialization functions. 382 415 */ 383 416 function accp_plugin_initialize() { 384 417 385 if( is_admin() && get_option( 'accp_plugin_activation' ) == 'just-activated' ) { 386 418 if( is_admin() && get_option( 'accp_plugin_activation' ) == 'just-activated' ) { 419 420 /** 421 * Check for the "client" role and add it 422 * if it does not already exist. 423 */ 424 $this->add_roles_on_plugin_activation(); 425 426 427 /** 428 * Flush the rewrite rules. 429 */ 430 flush_rewrite_rules(); 431 432 433 /** 434 * Clear the 'accp_plugin_activation' option, 435 * which should only exist temporarily, immediately 436 * after plugin activation. 437 */ 387 438 delete_option( 'accp_plugin_activation' ); 388 flush_rewrite_rules();389 439 390 440 } 441 442 } 443 444 445 /** 446 * Add Client role when the plugin is activated. 447 */ 448 function add_roles_on_plugin_activation() { 449 450 global $wp_roles; 451 452 $client_role = wp_roles()->is_role( 'client' ); 453 454 if ( true !== $client_role || !$client_role ){ 455 456 add_role( 'client', 'Client', get_role( 'subscriber' )->capabilities ); 457 458 } 391 459 392 460 } … … 421 489 function accp_add_plugin_row_meta( $links, $file ) { 422 490 423 if ( strpos( $file, plugin_basename( dirname(__DIR__) ) ) !== false ) {491 if ( strpos( $file, plugin_basename( dirname(__DIR__) ) ) !== false ) { 424 492 $new_links = array( 425 493 '<a href="https://adrianrodriguezstudios.com/documentation-constellation-client-portal/" target="_blank">Documentation</a>' -
constellation-client-portal/trunk/admin/includes/accp-settings-page.php
r2845715 r2893071 45 45 endif; 46 46 ?> 47 48 47 49 48 <li id="accp-shortcodes-tab" data-tab-id="3"><a href="#3">Documentation</a></li> … … 52 51 <?php 53 52 if ($this->plugin_name == 'ars-constellation-client-portal-premium' || $this->plugin_name == 'ars-constellation-client-portal-pro'): 54 ?> 55 <li id="accp-siteinfo-tab" data-tab-id="5"><a href="#5">License</a></li> 53 54 $license_data = get_option('arscp_license_key'); 55 56 if( !$license_data || empty($license_data) ){ 57 58 $license_alert = '<span class="accp-license-tab-alert" title="Enter license key" alt="Enter license key"></span>'; 59 60 }else{ 61 62 $license_alert = ''; 63 64 } 65 ?> 66 67 68 <li id="accp-siteinfo-tab" class="accp-license-tab" data-tab-id="5"> 69 70 <a href="#5">License</a> 71 72 <?php echo wp_kses_post($license_alert); ?> 73 74 </li> 56 75 <?php 57 76 endif; -
constellation-client-portal/trunk/ars-constellation-client-portal.php
r2873186 r2893071 5 5 * Plugin URI: https://adrianrodriguezstudios.com/constellation-client-portal/ 6 6 * Description: Create private pages for each of your clients, post private files, and protect your client files from unauthorized users and search engines. <strong>Important:</strong> All Site-level File Protection features will cease to function if the plugin is disabled or uninstalled. 7 * Version: 1.5. 57 * Version: 1.5.6 8 8 * Author: ARS 9 9 * Author URI: https://adrianrodriguezstudios.com … … 13 13 * Domain Path: /languages 14 14 * 15 * Copyright: (c) 2020-202 1, Adrian Rodriguez Studios LLC ([email protected])15 * Copyright: (c) 2020-2023, Adrian Rodriguez Studios LLC ([email protected]) 16 16 * 17 17 * @package ARS_Constellation_Client_Portal … … 19 19 * @link https://adrianrodriguezstudios.com 20 20 * @since 1.0.0 21 * @copyright Copyright (c) 2020-202 1, Adrian Rodriguez Studios LLC21 * @copyright Copyright (c) 2020-2023, Adrian Rodriguez Studios LLC 22 22 * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 23 23 * … … 31 31 */ 32 32 33 // If this file is called directly, abort. 33 /** 34 * Exit if accessed directly. 35 */ 34 36 if ( ! defined( 'WPINC' ) ) { 35 37 die; 36 38 } 37 39 40 /** 41 * Stop and display an admin message 42 * if another version of the plugin is active 43 * when attempting to activate this plugin. 44 */ 45 if( function_exists('activate_ars_constellation_client_portal') ){ 38 46 39 /** 40 * Current plugin name and version. 41 */ 42 define('ACCP_PLUGIN_NAME', 'ARS_CONSTELLATION_CLIENT_PORTAL'); 43 define('ACCP_PLUGIN_VERSION', '1.5.5'); // Change the version in the header as well. 44 define( ACCP_PLUGIN_NAME, ACCP_PLUGIN_VERSION ); 47 $notice = '<p style="color: #3c434a; font-size: 13px; font-family: sans-serif; line-height: 1.5;"><strong>Duplicate Plugins:</strong> It looks like you already have another version of Constellation Client Portal active. Please deactivate that plugin before attempting to activate this one.</p>'; 48 49 exit( wp_kses_post($notice) ); 50 51 }else{ 52 53 /** 54 * Current plugin name and version. 55 */ 56 define('ACCP_PLUGIN_NAME', 'ARS_CONSTELLATION_CLIENT_PORTAL'); 57 define('ACCP_PLUGIN_VERSION', '1.5.6'); // Change the version in the header as well. 58 define( ACCP_PLUGIN_NAME, ACCP_PLUGIN_VERSION ); 59 define('ACCP_PLUGIN_FILE_NAME', __FILE__); 45 60 46 61 47 /** 48 * Plugin Activation. 49 * includes/class-ars-constellation-client-portal-activator.php 50 */ 51 function activate_ars_constellation_client_portal() { 52 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ars-constellation-client-portal-activator.php'; 53 ARS_Constellation_Client_Portal_Activator::activate(); 54 } 62 /** 63 * Proceed with the install or uninstall 64 * if another version of the plugin is not 65 * already active. 66 */ 67 require_once plugin_dir_path( __FILE__ ) . 'includes/ars-constellation-client-portal-install-uninstall.php'; 55 68 56 57 /** 58 * Plugin deactivation. 59 * includes/class-ars-constellation-client-portal-deactivator.php 60 */ 61 function deactivate_ars_constellation_client_portal() { 62 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ars-constellation-client-portal-deactivator.php'; 63 ARS_Constellation_Client_Portal_Deactivator::deactivate(); 64 } 65 66 register_activation_hook( __FILE__, 'activate_ars_constellation_client_portal' ); 67 register_deactivation_hook( __FILE__, 'deactivate_ars_constellation_client_portal' ); 68 69 /** 70 * Core class 71 */ 72 require plugin_dir_path( __FILE__ ) . 'includes/class-ars-constellation-client-portal.php'; 73 74 75 /** 76 * Add Client role when the plugin is activated 77 */ 78 function add_roles_on_plugin_activation() { 79 80 global $wp_roles; 81 82 $client_role = wp_roles()->is_role( 'client' ); 83 84 if (!isset($client_role)){ 85 86 add_role( 'client', 'Client', get_role( 'subscriber' )->capabilities ); 87 88 } 89 } 90 register_activation_hook( __FILE__, 'add_roles_on_plugin_activation' ); 91 92 93 /** 94 * Flush the rewrite rules on plugin activation. 95 * 96 * Important: needed for file protection rewrite rules. 97 */ 98 register_deactivation_hook( __FILE__, 'flush_rewrite_rules' ); 99 register_activation_hook( __FILE__, 'accp_flush_rewrites' ); 100 function accp_flush_rewrites() { 101 102 flush_rewrite_rules(); 103 104 } 105 106 107 /** 108 * Add default Company Status options 109 * on plugin activation - leave the options/statuses 110 * in place on plugin deactivation in case the plugin is 111 * reactivated. 112 */ 113 function add_default_company_statuses(){ 114 115 $company_status_rows = get_option('accp_company_status_repeater'); 116 117 // If there are no existing options from a previous activation just 118 // add the three default statuses 119 if( empty($company_status_rows) ){ 120 121 $new[] = array( 'label' => sanitize_text_field('Active'), 'value' => sanitize_text_field('active'), 'status_action' => sanitize_text_field('vis_no_action') ); 122 $new[] = array( 'label' => sanitize_text_field('Pending'), 'value' => sanitize_text_field('pending'), 'status_action' => sanitize_text_field('vis_no_action') ); 123 $new[] = array( 'label' => sanitize_text_field('Inactive'), 'value' => sanitize_text_field('inactive'), 'status_action' => sanitize_text_field('vis_no_action') ); 124 125 update_option('accp_company_status_repeater', $new); 126 } 127 128 // If there are existing statuses from a previous activation 129 // check for the existence of each default value in the saved options 130 if( !empty($company_status_rows) && $company_status_rows != null ){ 131 132 $new = array(); 133 134 // Function to search multidimensional array 135 function in_array_r($needle, $haystack, $strict = false) { 136 foreach ($haystack as $item) { 137 if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 138 return true; 139 } 140 } 141 142 return false; 143 } 144 145 // Only add if the value is not already present 146 if( !in_array_r('active', $company_status_rows)){ 147 $new[] = array( 'label' => sanitize_text_field('Active'), 'value' => sanitize_text_field('active'), 'status_action' => sanitize_text_field('vis_no_action') ); 148 } 149 150 // Only add if the value is not already present 151 if( !in_array_r('pending', $company_status_rows)){ 152 $new[] = array( 'label' => sanitize_text_field('Pending'), 'value' => 'pending', sanitize_text_field('status_action') => sanitize_text_field('vis_no_action') ); 153 } 154 155 // Only add if the value is not already present 156 if( !in_array_r('inactive', $company_status_rows)){ 157 $new[] = array( 'label' => sanitize_text_field('Inactive'), 'value' => sanitize_text_field('inactive'), 'status_action' => sanitize_text_field('vis_no_action') ); 158 } 159 160 // Combine the existing array values with the default array values 161 $combined_array = array_merge($new, $company_status_rows); 162 163 // Update the status list if the default($new) status array 164 // is not empty - not empty means that there are missing default 165 // statuses that need to be added 166 if (!empty($new)){ 167 update_option('accp_company_status_repeater', $combined_array ); 168 } 169 } 170 171 } 172 register_activation_hook( __FILE__, 'add_default_company_statuses' ); 173 174 175 /** 176 * Start the plugin 177 * @since 1.0.0 178 */ 179 function run_ars_constellation_client_portal() { 180 181 $plugin = new ARS_Constellation_Client_Portal(); 182 $plugin->run(); 183 184 } 185 run_ars_constellation_client_portal(); 69 } -
constellation-client-portal/trunk/includes/class-ars-constellation-client-portal-activator.php
r2873186 r2893071 12 12 } 13 13 14 class ARS_Constellation_Client_Portal_Activator { 14 class ARS_Constellation_Client_Portal_Activator { 15 15 16 public static function activate() { 16 public static function activate() { 17 18 /** 19 * Add file protection rewrite rules 20 * and flush the rules. We define the rules 21 * once on activation, then on init with ARS_Constellation_Client_Portal_Admin. 22 * We also flush the rewrite rules once on plugin activation. 23 */ 24 self::accp_add_and_flush_rewrites_on_activate(); 25 17 26 18 27 /** 19 * Add plugin activation options to trigger20 * plugin initialization functions.28 * Add an option to indicate that the plugin was just activated. 29 * This triggers plugin initialization functions. 21 30 */ 22 add_option( 'accp_plugin_activation','just-activated' ); 31 update_option( 'accp_plugin_activation','just-activated' ); 32 23 33 24 34 /** 25 35 * Check for enabled scheduled emails, and schedule 26 * the cron job if needed. 36 * the cron job if needed. Needed in cases where the plugin 37 * was deactivated, then reactivated. 27 38 */ 28 if( class_exists('ARS_Constellation_Client_Portal_Pro_Email') ){39 if( class_exists('ARS_Constellation_Client_Portal_Pro_Email') ){ 29 40 30 41 $pro_emails = new ARS_Constellation_Client_Portal_Pro_Email(ACCP_PLUGIN_VERSION, ACCP_PLUGIN_NAME); … … 44 55 } 45 56 46 } 57 } 47 58 48 59 } 60 61 62 /** 63 * Add the file protection rewrite rules 64 * and flush the rules. 65 */ 66 public static function accp_add_and_flush_rewrites_on_activate() { 67 68 $accp_admin = new ARS_Constellation_Client_Portal_Admin(ACCP_PLUGIN_VERSION, ACCP_PLUGIN_NAME); 69 70 /** 71 * Add the file protection rewrite rules. 72 */ 73 $accp_admin->accp_file_redirect_init(); 74 75 76 /** 77 * Flush the rewrite rules if the 78 * accp_plugin_activation option is 79 * still set. 80 */ 81 if( get_option( 'accp_plugin_activation' ) == 'just-activated' ) { 82 flush_rewrite_rules(); 83 } 84 85 } 86 49 87 50 88 } // END ARS_Constellation_Client_Portal_Activator -
constellation-client-portal/trunk/includes/class-ars-constellation-client-portal-deactivator.php
r2873186 r2893071 25 25 26 26 /** 27 * Flush the rewrite rules 27 * Flush the rewrite rules. 28 * 29 * Unset the rewrite rule associated with the 30 * accp-clientfiles dir (needed as using only flush_rewrite_rules 31 * will not work during the deactivation process), then 32 * flush the rewrite rules. 28 33 */ 34 global $wp_rewrite; 35 36 $accp_admin = new ARS_Constellation_Client_Portal_Admin(ACCP_PLUGIN_VERSION, ACCP_PLUGIN_NAME); 37 $regex_path = $accp_admin->accp_get_clientfile_dir_rewrite_regex_path(); 38 39 unset($wp_rewrite->non_wp_rules[$regex_path]); 40 29 41 flush_rewrite_rules(); 30 42 -
constellation-client-portal/trunk/includes/class-ars-constellation-client-portal.php
r2845715 r2893071 228 228 */ 229 229 230 // Prevent direct access to accp-clientfiles. 231 $this->loader->add_action( 'init', $plugin_admin, 'accp_file_redirect_init'); 232 230 233 // Add accp query_vars. 231 234 $this->loader->add_filter( 'query_vars', $plugin_admin, 'accp_query_vars' ); 232 235 233 236 // Parse accp query_vars. 234 $this->loader->add_action( 'parse_request', $plugin_admin, 'accp_parse_request' ); 235 237 $this->loader->add_action( 'parse_request', $plugin_admin, 'accp_parse_request' ); 236 238 237 239 // Plugin upgrade complete actions. 238 240 $this->loader->add_action( 'upgrader_process_complete', $plugin_admin, 'accp_upgrade_completed', 10, 2 ); 241 242 // Run plugin initialization functions. 243 $this->loader->add_action( 'admin_init', $plugin_admin, 'accp_plugin_initialize'); 239 244 240 245 … … 425 430 //Client Pages - WP list table columns 426 431 $this->loader->add_filter( 'manage_accp_client_pages_posts_columns', $plugin_client_pages, 'accp_client_pages_column_register'); 427 $this->loader->add_action( 'manage_accp_client_pages_posts_custom_column', $plugin_client_pages, 'accp_client_pages_column_display_company_name', 10, 2 ); 428 429 // Prevent direct access to accp-clientfiles 430 $this->loader->add_action( 'init', $plugin_admin, 'accp_file_redirect_init'); 431 //$this->loader->add_action( 'query_vars', $plugin_admin, 'wpse6891_query_vars'); 432 //$this->loader->add_action( 'parse_request', $plugin_admin, 'wpse6891_parse_request'); 433 434 // Flush rewrite rules after they are inited 435 $this->loader->add_action( 'admin_init', $plugin_admin, 'accp_plugin_initialize'); 432 $this->loader->add_action( 'manage_accp_client_pages_posts_custom_column', $plugin_client_pages, 'accp_client_pages_column_display_company_name', 10, 2 ); 436 433 437 434 // Reassign accp_clientfile ajax function … … 469 466 470 467 // Add items to the plugin row meta. 471 $this->loader->add_filter( 'plugin_row_meta', $plugin_admin, 'accp_add_plugin_row_meta', 10, 4 ); 468 $this->loader->add_filter( 'plugin_row_meta', $plugin_admin, 'accp_add_plugin_row_meta', 10, 4 ); 472 469 473 470 /* END Core (Basic tier) hooks */ -
constellation-client-portal/trunk/public/class-ars-constellation-client-portal-public.php
r2862820 r2893071 543 543 $tax_query[] = array( 544 544 'taxonomy' => 'accp_file_categories', 545 'field' => ' slug',545 'field' => 'id', 546 546 'terms' => $categories, 547 547 ); … … 712 712 // Category Filter 713 713 $taxonomy = 'accp_invoice_categories'; 714 $categories = $this->accp_categories_var($atts, $taxonomy); 714 $categories = $this->accp_categories_var($atts, $taxonomy); 715 715 716 716 // Posts per page … … 1131 1131 $tax_query[] = array( 1132 1132 'taxonomy' => 'accp_invoice_categories', 1133 'field' => ' slug',1133 'field' => 'id', 1134 1134 'terms' => $categories, 1135 1135 ); … … 1354 1354 * $taxonomy = either 'accp_file_categories' or 'accp_invoice_categories'. 1355 1355 */ 1356 function accp_categories_var($atts, $taxonomy){ 1357 1358 if( $atts['categories'] != null){ 1359 1360 $categories_list = trim($atts['categories']); 1356 function accp_categories_var($atts, $taxonomy){ 1357 1358 $categories = array(); 1359 1360 if( isset($atts['categories']) ){ 1361 1362 $categories_list = explode(',', trim($atts['categories']) ); 1361 1363 $categories = array(); 1362 1364 … … 1380 1382 }else{ 1381 1383 1382 $category = get_term_by('ID', $category_item, $taxonomy);1384 $category = get_term_by('ID', (int)$category_item, $taxonomy); 1383 1385 1384 1386 if($category){ … … 1403 1405 1404 1406 } 1405 1406 }else{1407 1408 $categories = array();1409 1407 1410 1408 }
Note: See TracChangeset
for help on using the changeset viewer.