Plugin Directory

Changeset 3352742


Ignore:
Timestamp:
08/29/2025 04:20:51 PM (6 months ago)
Author:
arstudios
Message:

Constellation Client Portal release 2.3.0.

Location:
constellation-client-portal
Files:
136 added
1 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • constellation-client-portal/trunk/README.txt

    r3330398 r3352742  
    55Requires at least: 6.0.0
    66Tested up to: 6.8
    7 Stable tag: 2.2.0
     7Stable tag: 2.3.0
    88Requires PHP: 7.4
    99License: GPLv3 or later
     
    3232* Automatically redirect clients to their private client page at login (optional login redirect setting).
    3333* 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 name of 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.
    3535* Automatically send email notifications to clients when a new File or Invoice post is created.
    3636* Automatically send reminder email notifications on a schedule.
     
    210210
    211211== 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
    212226= 2.2.0 (Pro) - 2025-7-18 =
    213227* Update: Updated links within the plugin item in the WP plugin list, to point to the new constellationclientportal.com site.
     
    293307* Update: Fixed typo in company reassignment error message text.
    294308
     309<<<<<<< HEAD
    295310= 1.10.0 (Pro) - 2024-11-1 =
    296311* Fix: Fixed nonce issue preventing new post notifications from being sent when posts are created via the Quick Create UI.
     
    316331
    317332[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  
    488488            delete_option( 'accp_plugin_activation' );
    489489
     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
    490524        }
    491525    }
     
    31913225        $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) );
    31923226
    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' ) ) {
    31943232            die();
    31953233        }
  • constellation-client-portal/trunk/admin/class-ars-constellation-client-portal-company.php

    r3265190 r3352742  
    216216        }
    217217
    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>';
    219220
    220221        if ( ! empty( $primary_user_id ) ) {
     
    224225            if ( $user ) {
    225226
    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 );
    227235
    228236            }
     237        } else {
     238
     239            echo wp_kses_post( $no_user_assigned_notice );
     240
    229241        }
    230242    }
     
    902914                        <span class="accp-new-user-field">
    903915
    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>
    905917                            <input id="accp-new-user-email" class="accp-create-user-text-field" name="accp_new_user_email" type="email" value="">
    906918
     
    909921                        <span class="accp-new-user-field">
    910922
    911                             <label  class="accp-set-width-label-85">Password<abbr>*</abbr></label>
     923                            <label class="accp-set-width-label-85">Password<abbr>*</abbr></label>
    912924                            <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>
    913925
     
    916928                        <span class="accp-new-user-field">
    917929
    918                             <label  class="accp-set-width-label-85">First Name</label>
     930                            <label class="accp-set-width-label-85">First Name</label>
    919931                            <input id="accp-new-user-firstname" class="accp-create-user-text-field" name="accp_new_user_firstname" type="text" value="">
    920932
     
    12631275        $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) );
    12641276
    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' ) ) {
    12661282            die();
    12671283        }
     
    13461362        $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) );
    13471363
    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' ) ) {
    13491369            die();
    13501370        }
     
    13711391        }
    13721392
    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();
    13801401
    13811402        if ( ! $username || empty( $username ) ) {
    13821403
    1383             echo 'Please enter a valid username.';
    1384 
    1385             wp_die();
     1404            $error_messages[] = 'Please enter a valid username.';
    13861405
    13871406        }
     
    13891408        if ( ! $role || empty( $role ) ) {
    13901409
    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.';
    13941411
    13951412        }
     
    13971414        if ( ! $company_id || empty( $company_id ) ) {
    13981415
    1399             echo 'Please save the post and try again.';
    1400 
    1401             wp_die();
     1416            $error_messages[] = 'Please save the post and try again.';
    14021417
    14031418        }
     
    14051420        if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
    14061421
    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 );
    14081441
    14091442            wp_die();
     
    14551488                    if ( isset( $error[0] ) ) {
    14561489
    1457                         echo esc_html( str_replace( '!', '.', $error[0] ?? '' ) );
     1490                        $error_messages[] = esc_html( str_replace( '!', '.', $error[0] ?? '' ) );
     1491
    14581492                    }
    14591493                }
    1460 
    1461                 wp_die();
    1462 
    14631494            }
     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
    14641515        }
    14651516
     
    14831534         * Send notification email to new user.
    14841535         */
     1536        $email_status = 'not_sent';
     1537
    14851538        if ( 'send' === $send_email ) {
    14861539
    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            }
    14891551        }
    14901552
     
    14951557
    14961558        $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' => '',
    15001564        );
    15011565
     
    15141578     *
    15151579     * @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.
    15161582     */
    15171583    protected function accp_send_new_account_notification_to_user( $new_user_id ) {
     
    15641630         * Send the email.
    15651631         */
    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;
    15671635    }
    15681636
  • constellation-client-portal/trunk/admin/class-ars-constellation-client-portal-settings.php

    r3330398 r3352742  
    622622     * Get the documentation settings page content.
    623623     */
    624     public function get_documentation_settings_page_content() {
     624    public function get_help_settings_page_content() {
    625625
    626626        if ( ! is_admin() || ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
     
    635635         * Add the core content.
    636636         */
    637         $html .= $this->get_core_conent_for_documentation_settings_page();
     637        $html .= $this->get_core_content_for_help_settings_page();
    638638
    639639        /**
     
    670670         * Add the core content.
    671671         */
    672         $html .= $this->get_core_conent_for_site_info_settings_page();
     672        $html .= $this->get_core_content_for_site_info_settings_page();
    673673
    674674        /**
     
    765765        $html         = '';
    766766
    767         $html .= $this->get_core_conent_for_upgrade_settings_page();
     767        $html .= $this->get_core_content_for_upgrade_settings_page();
    768768
    769769        if ( ! empty( $html ) ) {
     
    780780     * @return string $html - The html content for the settings page.
    781781     */
    782     public function get_core_conent_for_upgrade_settings_page() {
     782    public function get_core_content_for_upgrade_settings_page() {
    783783
    784784        if ( ! is_admin() || ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
     
    825825     * @return string $html - The html content for the settings page.
    826826     */
    827     public function get_core_conent_for_documentation_settings_page() {
     827    public function get_core_content_for_help_settings_page() {
    828828
    829829        $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';
    831833
    832834        $html = '';
     
    872874            $html .= '</div>';
    873875
     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
    874886            $html .= '</div>';
    875887
    876             $html .= '<div class="accp-shortcode-container">';
    877 
    878             $html .= '<h3>Invoice List Shortcodes</h3>';
    879 
    880888            $html .= '<div class="shortcode-markup">';
    881889
    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>';
    883891
    884892            $html .= '</div>';
    885893
    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>';
    889897
    890898            $html .= '</div>';
    891899
     900            $html .= '</div>'; // END .accp-shortcode-container.
     901
     902        else :
     903
    892904            $html .= '<div class="shortcode-description">';
    893905
    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>';
    895907
    896908            $html .= '</div>';
    897909
    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 
    906910        endif;
    907911
     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
    908923        $html .= '</div>';
    909924
    910         $html .= '</div>';
    911 
    912925        return $html;
    913926    }
     
    919932     * @return string $html - The html content for the settings page.
    920933     */
    921     public function get_core_conent_for_site_info_settings_page() {
     934    public function get_core_content_for_site_info_settings_page() {
    922935
    923936        /**
     
    10941107        }
    10951108
    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';
    10981111
    10991112        /**
     
    13081321
    13091322        $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(),
    13501364        );
    13511365
  • constellation-client-portal/trunk/admin/css/ars-constellation-client-portal-admin.css

    r3305015 r3352742  
    757757
    758758.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;
    760776}
    761777
     
    798814}
    799815
    800 #accp-autogenerate-password{
     816#accp-autogenerate-password,
     817#accp-wizard-autogenerate-password{
    801818    margin-left: 10px;
    802819}
     
    979996}
    980997
     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
     1102html.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
     1185p.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
    9811236@media screen and (min-width: 980px){
    9821237
     
    10121267
    10131268}
     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  
    77 * Plugin URI:        https://adrianrodriguezstudios.com/constellation-client-portal/
    88 * 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.0
     9 * Version:           2.3.0
    1010 * Author:            ARS
    1111 * Author URI:        https://adrianrodriguezstudios.com
     
    5757     */
    5858    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.
    6060    define( ACCP_PLUGIN_NAME, ACCP_PLUGIN_VERSION );
    6161    define( 'ACCP_PLUGIN_FILE_NAME', __FILE__ );
  • constellation-client-portal/trunk/includes/class-ars-constellation-client-portal.php

    r3288605 r3352742  
    122122        require_once plugin_dir_path( __DIR__ ) . 'public/shortcodes/class-ars-constellation-client-portal-list-shortcodes.php';
    123123        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';
    124125
    125126        /**
     
    191192        $core_settings         = new ARS_Constellation_Client_Portal_Settings();
    192193        $core_data_management  = new ARS_Constellation_Client_Portal_Data_Management();
     194        $core_wizards          = new ARS_Constellation_Client_Portal_Wizards();
    193195
    194196        /**
Note: See TracChangeset for help on using the changeset viewer.