Changeset 3352742
- Timestamp:
- 08/29/2025 04:20:51 PM (6 months ago)
- Location:
- constellation-client-portal
- Files:
-
- 136 added
- 1 deleted
- 7 edited
-
tags/2.1.1 (deleted)
-
tags/2.3.0 (added)
-
tags/2.3.0/LICENSE.txt (added)
-
tags/2.3.0/README.txt (added)
-
tags/2.3.0/admin (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-admin.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-client-pages.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-company.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-core-authorization.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-core-file-checks.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-data-management.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-file.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-invoice.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-settings.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-users.php (added)
-
tags/2.3.0/admin/class-ars-constellation-client-portal-wizards.php (added)
-
tags/2.3.0/admin/css (added)
-
tags/2.3.0/admin/css/ars-constellation-client-portal-admin.css (added)
-
tags/2.3.0/admin/css/jquery-ui (added)
-
tags/2.3.0/admin/css/jquery-ui/1.11.1 (added)
-
tags/2.3.0/admin/css/jquery-ui/1.11.1/themes (added)
-
tags/2.3.0/admin/css/jquery-ui/1.11.1/themes/cupertino (added)
-
tags/2.3.0/admin/css/jquery-ui/1.11.1/themes/cupertino/jquery-ui.css (added)
-
tags/2.3.0/admin/css/select2.min.css (added)
-
tags/2.3.0/admin/index.php (added)
-
tags/2.3.0/admin/js (added)
-
tags/2.3.0/admin/js/ars-constellation-client-portal-admin-wizard.js (added)
-
tags/2.3.0/admin/js/ars-constellation-client-portal-admin.js (added)
-
tags/2.3.0/admin/js/i18n (added)
-
tags/2.3.0/admin/js/i18n/af.js (added)
-
tags/2.3.0/admin/js/i18n/ar.js (added)
-
tags/2.3.0/admin/js/i18n/az.js (added)
-
tags/2.3.0/admin/js/i18n/bg.js (added)
-
tags/2.3.0/admin/js/i18n/bs.js (added)
-
tags/2.3.0/admin/js/i18n/ca.js (added)
-
tags/2.3.0/admin/js/i18n/cs.js (added)
-
tags/2.3.0/admin/js/i18n/da.js (added)
-
tags/2.3.0/admin/js/i18n/de.js (added)
-
tags/2.3.0/admin/js/i18n/dsb.js (added)
-
tags/2.3.0/admin/js/i18n/el.js (added)
-
tags/2.3.0/admin/js/i18n/en.js (added)
-
tags/2.3.0/admin/js/i18n/es.js (added)
-
tags/2.3.0/admin/js/i18n/et.js (added)
-
tags/2.3.0/admin/js/i18n/eu.js (added)
-
tags/2.3.0/admin/js/i18n/fa.js (added)
-
tags/2.3.0/admin/js/i18n/fi.js (added)
-
tags/2.3.0/admin/js/i18n/fr.js (added)
-
tags/2.3.0/admin/js/i18n/gl.js (added)
-
tags/2.3.0/admin/js/i18n/he.js (added)
-
tags/2.3.0/admin/js/i18n/hi.js (added)
-
tags/2.3.0/admin/js/i18n/hr.js (added)
-
tags/2.3.0/admin/js/i18n/hsb.js (added)
-
tags/2.3.0/admin/js/i18n/hu.js (added)
-
tags/2.3.0/admin/js/i18n/hy.js (added)
-
tags/2.3.0/admin/js/i18n/id.js (added)
-
tags/2.3.0/admin/js/i18n/is.js (added)
-
tags/2.3.0/admin/js/i18n/it.js (added)
-
tags/2.3.0/admin/js/i18n/ja.js (added)
-
tags/2.3.0/admin/js/i18n/km.js (added)
-
tags/2.3.0/admin/js/i18n/ko.js (added)
-
tags/2.3.0/admin/js/i18n/lt.js (added)
-
tags/2.3.0/admin/js/i18n/lv.js (added)
-
tags/2.3.0/admin/js/i18n/mk.js (added)
-
tags/2.3.0/admin/js/i18n/ms.js (added)
-
tags/2.3.0/admin/js/i18n/nb.js (added)
-
tags/2.3.0/admin/js/i18n/nl.js (added)
-
tags/2.3.0/admin/js/i18n/pl.js (added)
-
tags/2.3.0/admin/js/i18n/ps.js (added)
-
tags/2.3.0/admin/js/i18n/pt-BR.js (added)
-
tags/2.3.0/admin/js/i18n/pt.js (added)
-
tags/2.3.0/admin/js/i18n/ro.js (added)
-
tags/2.3.0/admin/js/i18n/ru.js (added)
-
tags/2.3.0/admin/js/i18n/sk.js (added)
-
tags/2.3.0/admin/js/i18n/sl.js (added)
-
tags/2.3.0/admin/js/i18n/sr-Cyrl.js (added)
-
tags/2.3.0/admin/js/i18n/sr.js (added)
-
tags/2.3.0/admin/js/i18n/sv.js (added)
-
tags/2.3.0/admin/js/i18n/th.js (added)
-
tags/2.3.0/admin/js/i18n/tr.js (added)
-
tags/2.3.0/admin/js/i18n/uk.js (added)
-
tags/2.3.0/admin/js/i18n/vi.js (added)
-
tags/2.3.0/admin/js/i18n/zh-CN.js (added)
-
tags/2.3.0/admin/js/i18n/zh-TW.js (added)
-
tags/2.3.0/admin/js/select2.full.min.js (added)
-
tags/2.3.0/admin/js/select2.min.js (added)
-
tags/2.3.0/ars-constellation-client-portal.php (added)
-
tags/2.3.0/assets (added)
-
tags/2.3.0/assets/css (added)
-
tags/2.3.0/assets/css/font-awesome (added)
-
tags/2.3.0/assets/css/font-awesome/css (added)
-
tags/2.3.0/assets/css/font-awesome/css/all.css (added)
-
tags/2.3.0/assets/css/font-awesome/css/all.min.css (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-brands-400.eot (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-brands-400.svg (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-brands-400.ttf (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-brands-400.woff (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-brands-400.woff2 (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-regular-400.eot (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-regular-400.svg (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-regular-400.ttf (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-regular-400.woff (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-regular-400.woff2 (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-solid-900.eot (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-solid-900.svg (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-solid-900.ttf (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-solid-900.woff (added)
-
tags/2.3.0/assets/css/font-awesome/webfonts/fa-solid-900.woff2 (added)
-
tags/2.3.0/assets/img (added)
-
tags/2.3.0/assets/img/accp-full-logo.png (added)
-
tags/2.3.0/includes (added)
-
tags/2.3.0/includes/ars-constellation-client-portal-install-uninstall.php (added)
-
tags/2.3.0/includes/class-ars-constellation-client-portal-activator.php (added)
-
tags/2.3.0/includes/class-ars-constellation-client-portal-deactivator.php (added)
-
tags/2.3.0/includes/class-ars-constellation-client-portal-i18n.php (added)
-
tags/2.3.0/includes/class-ars-constellation-client-portal-loader.php (added)
-
tags/2.3.0/includes/class-ars-constellation-client-portal-utility-functions.php (added)
-
tags/2.3.0/includes/class-ars-constellation-client-portal.php (added)
-
tags/2.3.0/includes/index.php (added)
-
tags/2.3.0/index.php (added)
-
tags/2.3.0/languages (added)
-
tags/2.3.0/languages/ars-constellation-client-portal.pot (added)
-
tags/2.3.0/public (added)
-
tags/2.3.0/public/assets (added)
-
tags/2.3.0/public/assets/index.php (added)
-
tags/2.3.0/public/class-ars-constellation-client-portal-public.php (added)
-
tags/2.3.0/public/css (added)
-
tags/2.3.0/public/css/ars-constellation-client-portal-list-shortcode-styles.css (added)
-
tags/2.3.0/public/css/ars-constellation-client-portal-public.css (added)
-
tags/2.3.0/public/index.php (added)
-
tags/2.3.0/public/js (added)
-
tags/2.3.0/public/js/ars-constellation-client-portal-public.js (added)
-
tags/2.3.0/public/shortcodes (added)
-
tags/2.3.0/public/shortcodes/class-ars-constellation-client-portal-list-shortcodes.php (added)
-
tags/2.3.0/uninstall.php (added)
-
trunk/README.txt (modified) (5 diffs)
-
trunk/admin/class-ars-constellation-client-portal-admin.php (modified) (2 diffs)
-
trunk/admin/class-ars-constellation-client-portal-company.php (modified) (16 diffs)
-
trunk/admin/class-ars-constellation-client-portal-settings.php (modified) (10 diffs)
-
trunk/admin/class-ars-constellation-client-portal-wizards.php (added)
-
trunk/admin/css/ars-constellation-client-portal-admin.css (modified) (4 diffs)
-
trunk/admin/js/ars-constellation-client-portal-admin-wizard.js (added)
-
trunk/ars-constellation-client-portal.php (modified) (2 diffs)
-
trunk/includes/class-ars-constellation-client-portal.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
constellation-client-portal/trunk/README.txt
r3330398 r3352742 5 5 Requires at least: 6.0.0 6 6 Tested up to: 6.8 7 Stable tag: 2. 2.07 Stable tag: 2.3.0 8 8 Requires PHP: 7.4 9 9 License: GPLv3 or later … … 32 32 * Automatically redirect clients to their private client page at login (optional login redirect setting). 33 33 * Integrate your invoices with WooCommerce and add a pay button to your unpaid invoices, and accept payments from your customers and clients (requires WooCommerce). 34 * Change the Client Page URL base name from "accp-client-page" to a nameof your choosing.34 * Change the Client Page, Client File, and Client Invoice URL base names ("accp-client-page," "accp_clientfile," and "accp_clientinvoice) to names of your choosing. 35 35 * Automatically send email notifications to clients when a new File or Invoice post is created. 36 36 * Automatically send reminder email notifications on a schedule. … … 210 210 211 211 == Changelog == 212 = 2.3.0 (Pro) - 2025-8-29 = 213 * Update: All core updates. 214 215 = 2.3.0 (Core) - 2025-8-29 = 216 * Update: Renamed the settings Documentation page to "Help," along with associated slugs and function names, to account for additional information and resources. 217 * Update: Added link to the initial setup wizard on the settings Documentation page. 218 * Fix: Corrected typo in several settings page function names. 219 * Feature: Created new initial set up wizard to improve usability at plugin activation. 220 * Fix: Fixed typo in label, in the company add new primary user form. 221 * Update: Updated the admin company client page select styling to improve the UI. 222 * Update: Updated the admin assign company select styling to improve the UI. 223 * Update: Updated the Primary user column data in the Company WP list table to display a notice if no primary user is assigned. 224 * Update: Added hyperlink to the Primary user column data in the Company WP list table. 225 212 226 = 2.2.0 (Pro) - 2025-7-18 = 213 227 * Update: Updated links within the plugin item in the WP plugin list, to point to the new constellationclientportal.com site. … … 293 307 * Update: Fixed typo in company reassignment error message text. 294 308 309 <<<<<<< HEAD 295 310 = 1.10.0 (Pro) - 2024-11-1 = 296 311 * Fix: Fixed nonce issue preventing new post notifications from being sent when posts are created via the Quick Create UI. … … 316 331 317 332 [Full changelog for previous versions](https://constellationclientportal.com/change-log-constellation-client-portal-pro/). 333 ======= 334 [View full changelog](https://constellationclientportal.com/change-log-constellation-client-portal-pro/). 335 >>>>>>> wsl-master/master -
constellation-client-portal/trunk/admin/class-ars-constellation-client-portal-admin.php
r3330398 r3352742 488 488 delete_option( 'accp_plugin_activation' ); 489 489 490 /** 491 * Load the setup wizard. 492 */ 493 $this->load_initial_setup_wizard(); 494 495 } 496 } 497 498 499 /** 500 * Redirect to the initial set up wizard on plugin activation. 501 */ 502 public function load_initial_setup_wizard() { 503 504 $admin_url = get_admin_url(); 505 506 if ( ! $admin_url || empty( $admin_url ) ) { 507 return; 508 } 509 510 $wizard_url = $admin_url . 'admin.php?page=accp-plugin-activation-wizard'; 511 512 if ( ! headers_sent() ) { 513 514 wp_safe_redirect( $wizard_url ); 515 exit; 516 517 } else { 518 519 ?> 520 <script type="text/javascript"> 521 window.location.href = <?php echo esc_url( $wizard_url ); ?>; 522 </script> 523 <?php 490 524 } 491 525 } … … 3191 3225 $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) ); 3192 3226 3193 if ( ! wp_verify_nonce( $nonce, 'accp_generate_new_user' ) ) { 3227 /** 3228 * Check for both the accp_generate_new_user nonce and 3229 * the wizard nonce. 3230 */ 3231 if ( ! wp_verify_nonce( $nonce, 'accp_generate_new_user' ) && ! wp_verify_nonce( $nonce, 'accp_wizard_form_nonce' ) ) { 3194 3232 die(); 3195 3233 } -
constellation-client-portal/trunk/admin/class-ars-constellation-client-portal-company.php
r3265190 r3352742 216 216 } 217 217 218 $primary_user_id = get_post_meta( $post_id, 'accp_company_primary_user', true ); 218 $primary_user_id = get_post_meta( $post_id, 'accp_company_primary_user', true ); 219 $no_user_assigned_notice = '<span class="accp-no-company-primary-user-assigned-notice">No primary user assigned.</span>'; 219 220 220 221 if ( ! empty( $primary_user_id ) ) { … … 224 225 if ( $user ) { 225 226 226 echo esc_html( $user->user_login ) . ' (ID: ' . (int) $primary_user_id . ')'; 227 $user_edit_link = get_edit_user_link( $primary_user_id ); 228 $user_link_html = '<a href="' . esc_url_raw( $user_edit_link ) . '">' . esc_html( $user->user_login ) . '</a>'; 229 230 echo wp_kses_post( $user_link_html ) . ' (ID: ' . (int) $primary_user_id . ')'; 231 232 } else { 233 234 echo wp_kses_post( $no_user_assigned_notice ); 227 235 228 236 } 237 } else { 238 239 echo wp_kses_post( $no_user_assigned_notice ); 240 229 241 } 230 242 } … … 902 914 <span class="accp-new-user-field"> 903 915 904 <label class="accp-set-width-label-85">Email Addres<abbr>*</abbr></label>916 <label class="accp-set-width-label-85">Email Address<abbr>*</abbr></label> 905 917 <input id="accp-new-user-email" class="accp-create-user-text-field" name="accp_new_user_email" type="email" value=""> 906 918 … … 909 921 <span class="accp-new-user-field"> 910 922 911 <label class="accp-set-width-label-85">Password<abbr>*</abbr></label>923 <label class="accp-set-width-label-85">Password<abbr>*</abbr></label> 912 924 <input id="accp-new-user-password" class="accp-create-user-text-field" name="accp_new_user_password" type="text" value=""><span id="accp-autogenerate-password" class="button" data-nonce="<?php echo esc_attr( $new_user_nonce ); ?>">Generate Password</span> 913 925 … … 916 928 <span class="accp-new-user-field"> 917 929 918 <label class="accp-set-width-label-85">First Name</label>930 <label class="accp-set-width-label-85">First Name</label> 919 931 <input id="accp-new-user-firstname" class="accp-create-user-text-field" name="accp_new_user_firstname" type="text" value=""> 920 932 … … 1263 1275 $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) ); 1264 1276 1265 if ( ! wp_verify_nonce( $nonce, 'accp_assign_primary_user' ) ) { 1277 /** 1278 * Check for both the company edit page nonce and the 1279 * wizard form nonce. 1280 */ 1281 if ( ! wp_verify_nonce( $nonce, 'accp_assign_primary_user' ) && ! wp_verify_nonce( $nonce, 'accp_wizard_form_nonce' ) ) { 1266 1282 die(); 1267 1283 } … … 1346 1362 $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) ); 1347 1363 1348 if ( ! wp_verify_nonce( $nonce, 'accp_generate_new_user' ) ) { 1364 /** 1365 * Check for both the company edit page nonce and the 1366 * wizard form nonce. 1367 */ 1368 if ( ! wp_verify_nonce( $nonce, 'accp_generate_new_user' ) && ! wp_verify_nonce( $nonce, 'accp_wizard_form_nonce' ) ) { 1349 1369 die(); 1350 1370 } … … 1371 1391 } 1372 1392 1373 $username = sanitize_user( wp_unslash( $_POST['username'] ) ); 1374 $role = sanitize_text_field( wp_unslash( $_POST['role'] ) ); 1375 $email = filter_var( wp_unslash( $_POST['email'] ), FILTER_SANITIZE_EMAIL ); 1376 $firstname = isset( $_POST['firstname'] ) ? sanitize_text_field( wp_unslash( $_POST['firstname'] ) ) : ''; 1377 $lastname = isset( $_POST['lastname'] ) ? sanitize_text_field( wp_unslash( $_POST['lastname'] ) ) : ''; 1378 $send_email = isset( $_POST['send_email'] ) ? sanitize_text_field( wp_unslash( $_POST['send_email'] ) ) : ''; 1379 $company_id = filter_var( wp_unslash( $_POST['company_id'] ), FILTER_SANITIZE_NUMBER_INT ); 1393 $username = sanitize_user( wp_unslash( $_POST['username'] ) ); 1394 $role = sanitize_text_field( wp_unslash( $_POST['role'] ) ); 1395 $email = filter_var( wp_unslash( $_POST['email'] ), FILTER_SANITIZE_EMAIL ); 1396 $firstname = isset( $_POST['firstname'] ) ? sanitize_text_field( wp_unslash( $_POST['firstname'] ) ) : ''; 1397 $lastname = isset( $_POST['lastname'] ) ? sanitize_text_field( wp_unslash( $_POST['lastname'] ) ) : ''; 1398 $send_email = isset( $_POST['send_email'] ) ? sanitize_text_field( wp_unslash( $_POST['send_email'] ) ) : ''; 1399 $company_id = filter_var( wp_unslash( $_POST['company_id'] ), FILTER_SANITIZE_NUMBER_INT ); 1400 $error_messages = array(); 1380 1401 1381 1402 if ( ! $username || empty( $username ) ) { 1382 1403 1383 echo 'Please enter a valid username.'; 1384 1385 wp_die(); 1404 $error_messages[] = 'Please enter a valid username.'; 1386 1405 1387 1406 } … … 1389 1408 if ( ! $role || empty( $role ) ) { 1390 1409 1391 echo 'You must select a role for the new user.'; 1392 1393 wp_die(); 1410 $error_messages[] = 'You must select a role for the new user.'; 1394 1411 1395 1412 } … … 1397 1414 if ( ! $company_id || empty( $company_id ) ) { 1398 1415 1399 echo 'Please save the post and try again.'; 1400 1401 wp_die(); 1416 $error_messages[] = 'Please save the post and try again.'; 1402 1417 1403 1418 } … … 1405 1420 if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { 1406 1421 1407 echo 'Please enter a valid email address.'; 1422 $error_messages[] = 'Please enter a valid email address.'; 1423 1424 } 1425 1426 /** 1427 * If there are errors, output them 1428 * and exit here. 1429 */ 1430 if ( $error_messages && ! empty( $error_messages ) && is_array( $error_messages ) ) { 1431 1432 $response = array( 1433 'status' => 'error', 1434 'user_id' => '', 1435 'username' => '', 1436 'email_status' => 'not_sent', 1437 'error_message' => $error_messages, 1438 ); 1439 1440 echo wp_json_encode( $response ); 1408 1441 1409 1442 wp_die(); … … 1455 1488 if ( isset( $error[0] ) ) { 1456 1489 1457 echo esc_html( str_replace( '!', '.', $error[0] ?? '' ) ); 1490 $error_messages[] = esc_html( str_replace( '!', '.', $error[0] ?? '' ) ); 1491 1458 1492 } 1459 1493 } 1460 1461 wp_die();1462 1463 1494 } 1495 } 1496 1497 /** 1498 * If there are errors, output them 1499 * and exit here. 1500 */ 1501 if ( $error_messages && ! empty( $error_messages ) && is_array( $error_messages ) ) { 1502 1503 $response = array( 1504 'status' => 'error', 1505 'user_id' => '', 1506 'username' => '', 1507 'email_status' => 'not_sent', 1508 'error_message' => $error_messages, 1509 ); 1510 1511 echo wp_json_encode( $response ); 1512 1513 wp_die(); 1514 1464 1515 } 1465 1516 … … 1483 1534 * Send notification email to new user. 1484 1535 */ 1536 $email_status = 'not_sent'; 1537 1485 1538 if ( 'send' === $send_email ) { 1486 1539 1487 $this->accp_send_new_account_notification_to_user( $new_user_id ); 1488 1540 $email_status = $this->accp_send_new_account_notification_to_user( $new_user_id ); 1541 1542 if ( true === $email_status ) { 1543 1544 $email_status = 'sent'; 1545 1546 } else { 1547 1548 $email_status = 'error'; 1549 1550 } 1489 1551 } 1490 1552 … … 1495 1557 1496 1558 $response = array( 1497 'status' => 'success', 1498 'user_id' => $new_user_id, 1499 'username' => $user->user_login, 1559 'status' => 'success', 1560 'user_id' => $new_user_id, 1561 'username' => $user->user_login, 1562 'email_status' => $email_status, 1563 'error_message' => '', 1500 1564 ); 1501 1565 … … 1514 1578 * 1515 1579 * @param int $new_user_id - The new user ID. 1580 * 1581 * @return bool $email_status - The status of wp_mail. True if successful or False if not. 1516 1582 */ 1517 1583 protected function accp_send_new_account_notification_to_user( $new_user_id ) { … … 1564 1630 * Send the email. 1565 1631 */ 1566 wp_mail( filter_var( $email, FILTER_SANITIZE_EMAIL ), esc_html( $subject ), wp_kses_post( $message ), $headers ); 1632 $email_status = wp_mail( filter_var( $email, FILTER_SANITIZE_EMAIL ), esc_html( $subject ), wp_kses_post( $message ), $headers ); 1633 1634 return $email_status; 1567 1635 } 1568 1636 -
constellation-client-portal/trunk/admin/class-ars-constellation-client-portal-settings.php
r3330398 r3352742 622 622 * Get the documentation settings page content. 623 623 */ 624 public function get_ documentation_settings_page_content() {624 public function get_help_settings_page_content() { 625 625 626 626 if ( ! is_admin() || ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { … … 635 635 * Add the core content. 636 636 */ 637 $html .= $this->get_core_con ent_for_documentation_settings_page();637 $html .= $this->get_core_content_for_help_settings_page(); 638 638 639 639 /** … … 670 670 * Add the core content. 671 671 */ 672 $html .= $this->get_core_con ent_for_site_info_settings_page();672 $html .= $this->get_core_content_for_site_info_settings_page(); 673 673 674 674 /** … … 765 765 $html = ''; 766 766 767 $html .= $this->get_core_con ent_for_upgrade_settings_page();767 $html .= $this->get_core_content_for_upgrade_settings_page(); 768 768 769 769 if ( ! empty( $html ) ) { … … 780 780 * @return string $html - The html content for the settings page. 781 781 */ 782 public function get_core_con ent_for_upgrade_settings_page() {782 public function get_core_content_for_upgrade_settings_page() { 783 783 784 784 if ( ! is_admin() || ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { … … 825 825 * @return string $html - The html content for the settings page. 826 826 */ 827 public function get_core_con ent_for_documentation_settings_page() {827 public function get_core_content_for_help_settings_page() { 828 828 829 829 $is_pro = $this->utilities->is_pro_plugin( $this->plugin_name ); 830 $list_settings_url = get_admin_url() . 'admin.php?page=accp-list-settings&title=Lists'; 830 $wp_admin_url = get_admin_url(); 831 $list_settings_url = $wp_admin_url . 'admin.php?page=accp-list-settings&title=Lists'; 832 $setup_wizard_url = $wp_admin_url . 'admin.php?page=accp-plugin-activation-wizard'; 831 833 832 834 $html = ''; … … 872 874 $html .= '</div>'; 873 875 876 $html .= '</div>'; // END .accp-shortcode-container. 877 878 $html .= '<div class="accp-shortcode-container">'; 879 880 $html .= '<h3>Invoice List Shortcodes</h3>'; 881 882 $html .= '<div class="shortcode-markup">'; 883 884 $html .= '<p>[accp_clientinvoices invoice_status="unpaid" display_number="20" order_by="title" order="ASC" show_excerpt="true" excerpt_length="50" show_thumbnail="true" thumbnail_size="portfolio" align_thumbnail="center" show_post_date="true" due_date="true" past_due_notice="true" display_pay_btn="true"]</p>'; 885 874 886 $html .= '</div>'; 875 887 876 $html .= '<div class="accp-shortcode-container">';877 878 $html .= '<h3>Invoice List Shortcodes</h3>';879 880 888 $html .= '<div class="shortcode-markup">'; 881 889 882 $html .= '<p>[accp_clientinvoices invoice_status=" unpaid" display_number="20" order_by="title" order="ASC" show_excerpt="true" excerpt_length="50" show_thumbnail="true" thumbnail_size="portfolio" align_thumbnail="center" show_post_date="true" due_date="true" past_due_notice="true" display_pay_btn="true"]</p>';890 $html .= '<p>[accp_clientinvoices invoice_status="paid" display_number="20" order_by="title" order="ASC" show_excerpt="true" excerpt_length="50" show_thumbnail="true" thumbnail_size="portfolio" align_thumbnail="center" show_post_date="true"]</p>'; 883 891 884 892 $html .= '</div>'; 885 893 886 $html .= '<div class="shortcode- markup">';887 888 $html .= '<p> [accp_clientinvoices invoice_status="paid" display_number="20" order_by="title" order="ASC" show_excerpt="true" excerpt_length="50" show_thumbnail="true" thumbnail_size="portfolio" align_thumbnail="center" show_post_date="true"]</p>';894 $html .= '<div class="shortcode-description">'; 895 896 $html .= '<p>The accp_clientinvoices shortcode displays a list of invoices that are assigned to the respective company (of the logged in user). Separate lists can be created for paid and unpaid invoices, and each list can be further filtered by category (as well as by other filtering options). Multiple lists can also be placed on the same page (example: an "unpaid" invoice shortcode can be placed at the top of a page to display the current invoice, and a "paid" invoice shortcode can be placed below that to display a list of past/paid invoices).</p>'; 889 897 890 898 $html .= '</div>'; 891 899 900 $html .= '</div>'; // END .accp-shortcode-container. 901 902 else : 903 892 904 $html .= '<div class="shortcode-description">'; 893 905 894 $html .= '<p> The accp_clientinvoices shortcode displays a list of invoices that are assigned to the respective company (of the logged in user). Separate lists can be created for paid and unpaid invoices, and each list can be further filtered by category (as well as by other filtering options). Multiple lists can also be placed on the same page (example: an "unpaid" invoice shortcode can be placed at the top of a page to display the current invoice, and a "paid" invoice shortcode can be placed below that to display a list of past/paid invoices).</p>';906 $html .= '<p>File and invoice shortcodes can be created in the <a href="' . esc_url( $list_settings_url ) . '">List Settings</a>. The shortcodes can then be pasted into client pages to display file and invoice lists on the front-end.</p>'; 895 907 896 908 $html .= '</div>'; 897 909 898 else :899 900 $html .= '<div class="shortcode-description">';901 902 $html .= '<p>File and invoice shortcodes can be created in the <a href="' . esc_url( $list_settings_url ) . '">List Settings</a>. The shortcodes can then be pasted into client pages to display file and invoice lists on the front-end.</p>';903 904 $html .= '</div>';905 906 910 endif; 907 911 912 $html .= '</div>'; // END .accp-settings-section. 913 914 /** 915 * Setup Wizard 916 */ 917 $html .= '<div class="accp-settings-section">'; 918 919 $html .= '<h2>Setup Wizard</h2>'; 920 921 $html .= '<p>Launch the <a href="' . esc_url( $setup_wizard_url ) . '">setup wizard</a>. This is the wizard that is launched when the plugin is activated, and walks you through the initial basic setup.</p>'; 922 908 923 $html .= '</div>'; 909 924 910 $html .= '</div>';911 912 925 return $html; 913 926 } … … 919 932 * @return string $html - The html content for the settings page. 920 933 */ 921 public function get_core_con ent_for_site_info_settings_page() {934 public function get_core_content_for_site_info_settings_page() { 922 935 923 936 /** … … 1094 1107 } 1095 1108 1096 $page_list['accp- documentation-settings'] = 'Documentation';1097 $page_list['accp- site-info-settings'] = 'Site Info';1109 $page_list['accp-site-info-settings'] = 'Site Info'; 1110 $page_list['accp-help-settings'] = 'Help'; 1098 1111 1099 1112 /** … … 1308 1321 1309 1322 $default_atts = array( 1310 'align' => array(), 1311 'class' => array(), 1312 'type' => array(), 1313 'id' => array(), 1314 'dir' => array(), 1315 'lang' => array(), 1316 'style' => array(), 1317 'readonly' => array(), 1318 'src' => array(), 1319 'alt' => array(), 1320 'href' => array(), 1321 'rel' => array(), 1322 'rev' => array(), 1323 'target' => array(), 1324 'novalidate' => array(), 1325 'value' => array(), 1326 'name' => array(), 1327 'tabindex' => array(), 1328 'action' => array(), 1329 'method' => array(), 1330 'for' => array(), 1331 'width' => array(), 1332 'height' => array(), 1333 'data' => array(), 1334 'title' => array(), 1335 'checked' => array(), 1336 'enctype' => array(), 1337 'selected' => array(), 1338 'placeholder' => array(), 1339 'multiple' => array(), 1340 'required' => array(), 1341 'disabled' => array(), 1342 'size' => array(), 1343 'min' => array(), 1344 'max' => array(), 1345 'data-term-slug' => array(), 1346 'step' => array(), 1347 'maxlength' => array(), 1348 'data-post-type' => array(), 1349 'media' => array(), 1323 'align' => array(), 1324 'class' => array(), 1325 'type' => array(), 1326 'id' => array(), 1327 'dir' => array(), 1328 'lang' => array(), 1329 'style' => array(), 1330 'readonly' => array(), 1331 'src' => array(), 1332 'alt' => array(), 1333 'href' => array(), 1334 'rel' => array(), 1335 'rev' => array(), 1336 'target' => array(), 1337 'novalidate' => array(), 1338 'value' => array(), 1339 'name' => array(), 1340 'tabindex' => array(), 1341 'action' => array(), 1342 'method' => array(), 1343 'for' => array(), 1344 'width' => array(), 1345 'height' => array(), 1346 'data' => array(), 1347 'title' => array(), 1348 'checked' => array(), 1349 'enctype' => array(), 1350 'selected' => array(), 1351 'placeholder' => array(), 1352 'multiple' => array(), 1353 'required' => array(), 1354 'disabled' => array(), 1355 'size' => array(), 1356 'min' => array(), 1357 'max' => array(), 1358 'data-term-slug' => array(), 1359 'step' => array(), 1360 'maxlength' => array(), 1361 'data-post-type' => array(), 1362 'media' => array(), 1363 'data-assignment' => array(), 1350 1364 ); 1351 1365 -
constellation-client-portal/trunk/admin/css/ars-constellation-client-portal-admin.css
r3305015 r3352742 757 757 758 758 .accp-boxed-container.accp-specify-company-field-container .select2-container{ 759 padding-bottom: 15px; 759 padding-bottom: 15px !important; 760 } 761 762 .accp-specify-company-field-container .select2-selection.select2-selection--single { 763 height: 44px; 764 } 765 766 .accp-specify-company-field-container .select2-container--default .select2-selection--single .select2-selection__arrow { 767 height: 44px; 768 } 769 770 #company-home-page .select2-selection.select2-selection--single { 771 height: 44px; 772 } 773 774 #company-home-page .select2-container--default .select2-selection--single .select2-selection__arrow { 775 height: 44px; 760 776 } 761 777 … … 798 814 } 799 815 800 #accp-autogenerate-password{ 816 #accp-autogenerate-password, 817 #accp-wizard-autogenerate-password{ 801 818 margin-left: 10px; 802 819 } … … 979 996 } 980 997 998 .accp-no-company-primary-user-assigned-notice { 999 font-weight: 600; 1000 } 1001 1002 .wp-admin.accp-wizard-admin-full-screen { 1003 background-color: #fff; 1004 } 1005 1006 .wp-admin.accp-wizard-admin-full-screen #wpwrap { 1007 top: 0; 1008 } 1009 1010 .accp-wizard-content-container img { 1011 max-width: 98%; 1012 } 1013 1014 .wp-admin.accp-wizard-admin-full-screen #wpbody-content { 1015 min-height: 100vh; 1016 } 1017 1018 .wp-admin.accp-wizard-admin-full-screen #wpcontent { 1019 margin-left: 0 !important; 1020 padding-left: 0; 1021 } 1022 1023 .wp-admin.accp-wizard-admin-full-screen #wpbody { 1024 display: block; 1025 margin-top: 0; 1026 } 1027 1028 .wp-admin.accp-wizard-admin-full-screen.has-woocommerce-navigation #wpbody { 1029 padding-left: 0; 1030 } 1031 1032 .accp-wizard-admin-full-screen #wpadminbar, 1033 .accp-wizard-admin-full-screen #adminmenumain { 1034 display: none; 1035 } 1036 1037 .accp-wizard-status-container { 1038 display: flex; 1039 } 1040 1041 .accp-wizard-status-step-item { 1042 display: inline-block; 1043 height: 10px; 1044 background-color: #2d88ff; 1045 } 1046 1047 .accp-wizard-content-container { 1048 width: 600px; 1049 margin-left: auto; 1050 margin-right: auto; 1051 max-width: 98%; 1052 color: #777; 1053 } 1054 1055 .accp-wizard-button-container { 1056 text-align: center; 1057 margin-top: 30px; 1058 } 1059 1060 .accp-wizard-button-container.accp-wizard-next-setup-button-container { 1061 margin-top: 40px; 1062 } 1063 1064 .accp-wizard-button-container a { 1065 text-decoration: none; 1066 } 1067 1068 .accp-wizard-continue-button a { 1069 background-color: #2d88ff; 1070 color: #fff; 1071 padding-top: 12px; 1072 padding-bottom: 12px; 1073 padding-left: 14px; 1074 padding-right: 14px; 1075 } 1076 1077 .accp-wizard-continue-button a:hover { 1078 background-color: #1f7af1; 1079 } 1080 1081 .accp-wizard-continue-button a[disabled] { 1082 color: #a7aaad !important; 1083 border-color: #dcdcde !important; 1084 background: #e6e7e7 !important; 1085 box-shadow: none !important; 1086 cursor: default; 1087 transform: none !important; 1088 pointer-events: none !important; 1089 } 1090 1091 .accp-wizard-content-container h1 { 1092 text-align: center; 1093 margin-bottom: 30px; 1094 color: #5D5D5D; 1095 } 1096 1097 .accp-wizard-content-container h2 { 1098 text-align: center; 1099 color: #5D5D5D; 1100 } 1101 1102 html.wp-toolbar.accp-wizard-html-container { 1103 margin-top: 0 !important; 1104 padding-top: 0 !important; 1105 } 1106 1107 .accp-wizard-logo-container { 1108 text-align: center; 1109 margin-bottom: 40px; 1110 } 1111 1112 .accp-wizard-input-field, 1113 .accp-wizard-field-container .select2-selection.select2-selection--single, 1114 .accp-wizard-full-length-field { 1115 width: 100%; 1116 border-radius: 2px !important; 1117 height: 40px; 1118 border-color: #d0d0d0 !important; 1119 max-width: 98% !important; 1120 } 1121 1122 .accp-wizard-half-length-field { 1123 border-radius: 2px !important; 1124 height: 40px; 1125 border-color: #d0d0d0 !important; 1126 min-width: 50%; 1127 } 1128 1129 .accp-wizard-password-field-with-button-container #accp-wizard-autogenerate-password { 1130 height: 40px; 1131 line-height: 35px; 1132 } 1133 1134 #accp-wizard-company-status-select { 1135 height: 40px; 1136 border-radius: 2px !important; 1137 width: 100%; 1138 max-width: 100%; 1139 border-color: #d0d0d0 !important; 1140 } 1141 1142 .accp-wizard-field-container .select2.select2-container.select2-container--default { 1143 width: 100% !important; 1144 } 1145 1146 .accp-wizard-field-container .select2-container--default .select2-selection--single .select2-selection__rendered { 1147 line-height: 40px; 1148 } 1149 1150 .accp-wizard-field-container .select2-selection__arrow { 1151 height: 40px !important; 1152 } 1153 1154 #accp-enable-use-existing-client-page, 1155 #accp-enable-make-client-page-global, 1156 #accp-wizard-create-new-user { 1157 border-radius: 2px; 1158 width: 20px; 1159 height: 20px; 1160 border-color: #d0d0d0 !important; 1161 } 1162 1163 .accp-wizard-field-container { 1164 margin-bottom: 20px; 1165 } 1166 1167 #accp-enable-use-existing-client-page[type="checkbox"]:checked::before, 1168 #accp-enable-make-client-page-global[type="checkbox"]:checked::before, 1169 #accp-wizard-create-new-user[type="checkbox"]:checked::before { 1170 height: 18px; 1171 width: 18px; 1172 margin: 0; 1173 } 1174 1175 .accp-wizard-field-container label { 1176 margin-bottom: 7px; 1177 display: block; 1178 color: #333; 1179 } 1180 1181 .accp-center-h3 { 1182 text-align: center; 1183 } 1184 1185 p.accp-wizard-field-description { 1186 margin-top: 4px; 1187 font-size: 12px; 1188 } 1189 1190 .accp-wizard-spinner.spinner { 1191 margin-left: 10px; 1192 margin-right: -30px; 1193 display: inline-block; 1194 position: relative; 1195 top: -6px; 1196 margin-bottom: -11px; 1197 } 1198 1199 .accp-wizard-error { 1200 background-color: #db00002e; 1201 color: #c10a0a; 1202 padding: 10px; 1203 } 1204 1205 .accp-wizard-message { 1206 padding: 10px; 1207 background-color: #9191bb3b; 1208 color: #737375; 1209 } 1210 1211 .accp-wizard-next-steps-item { 1212 border: 2px solid #efefef; 1213 padding: 15px; 1214 margin-bottom: 20px; 1215 } 1216 1217 .accp-wizard-shortcode-item-inner-description { 1218 display: block; 1219 } 1220 1221 .accp-wizard-next-steps-item li { 1222 font-weight: bold; 1223 margin-bottom: 12px; 1224 color: #2d88ff; 1225 } 1226 1227 .accp-wizard-next-step-heading { 1228 color: #2d88ff; 1229 font-size: 1.2em; 1230 } 1231 1232 .accp-wizard-container.wrap .notice { 1233 display: none; 1234 } 1235 981 1236 @media screen and (min-width: 980px){ 982 1237 … … 1012 1267 1013 1268 } 1269 1270 @media screen and (min-width: 530px){ 1271 1272 .accp-wizard-half-length-field { 1273 width: 100%; 1274 max-width: 98%; 1275 } 1276 1277 .accp-wizard-password-field-with-button-container #accp-wizard-autogenerate-password { 1278 width: 100%; 1279 margin-left: 0; 1280 margin-top: 10px; 1281 max-width: 98%; 1282 text-align: center; 1283 } 1284 } -
constellation-client-portal/trunk/ars-constellation-client-portal.php
r3330398 r3352742 7 7 * Plugin URI: https://adrianrodriguezstudios.com/constellation-client-portal/ 8 8 * 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. 9 * Version: 2. 2.09 * Version: 2.3.0 10 10 * Author: ARS 11 11 * Author URI: https://adrianrodriguezstudios.com … … 57 57 */ 58 58 define('ACCP_PLUGIN_NAME', 'ARS_CONSTELLATION_CLIENT_PORTAL'); 59 define('ACCP_PLUGIN_VERSION', '2. 2.0'); // Change the version in the header as well.59 define('ACCP_PLUGIN_VERSION', '2.3.0'); // Change the version in the header as well. 60 60 define( ACCP_PLUGIN_NAME, ACCP_PLUGIN_VERSION ); 61 61 define( 'ACCP_PLUGIN_FILE_NAME', __FILE__ ); -
constellation-client-portal/trunk/includes/class-ars-constellation-client-portal.php
r3288605 r3352742 122 122 require_once plugin_dir_path( __DIR__ ) . 'public/shortcodes/class-ars-constellation-client-portal-list-shortcodes.php'; 123 123 require_once plugin_dir_path( __DIR__ ) . 'admin/class-ars-constellation-client-portal-data-management.php'; 124 require_once plugin_dir_path( __DIR__ ) . 'admin/class-ars-constellation-client-portal-wizards.php'; 124 125 125 126 /** … … 191 192 $core_settings = new ARS_Constellation_Client_Portal_Settings(); 192 193 $core_data_management = new ARS_Constellation_Client_Portal_Data_Management(); 194 $core_wizards = new ARS_Constellation_Client_Portal_Wizards(); 193 195 194 196 /**
Note: See TracChangeset
for help on using the changeset viewer.