'capability_here' * To add a page to the network admin (wp-admin/network), use: 'network_admin_menu' => 'capability_here' * To add a page to the user (wp-admin/user) admin, use: 'user_admin_menu' => 'capability_here' * * @since 2.0.0 * @var array */ protected $supported_panels = array( 'network_admin_menu' => 'wu_customize_invoice_template', ); /** * Overrides the original init to add the required ajax endpoints. * * @since 2.0.0 * @return void */ public function init() { parent::init(); add_action('wp_ajax_wu-preview-invoice', array($this, 'generate_invoice_preview')); } /** * Ajax endpoint to generate the Ajax Preview. * * @since 2.0.0 * @return void */ public function generate_invoice_preview() { if ( ! current_user_can('wu_manage_invoice')) { return; } $order = false; $payment = wu_mock_payment(); $invoice = new Invoice($payment, $_REQUEST); $invoice->print_file(); die; } /** * Returns the preview URL. This is then added to the iframe. * * @since 2.0.0 * @return string */ public function get_preview_url() { $url = get_admin_url(wu_get_main_site_id(), 'admin-ajax.php'); return add_query_arg( array( 'action' => 'wu-preview-invoice', 'customizer' => 1, 'invoice-customize' => 1, ), $url ); } /** * Allow child classes to register widgets, if they need them. * * @since 1.8.2 * @return void */ public function register_widgets() { $settings = Invoice::get_settings(); $this->add_save_widget( 'save', array( 'fields' => array( 'note' => array( 'type' => 'note', 'desc' => __('Changes to this template will be applied to all PDF invoices generated after the change.

Existing PDF Invoices will not be affected unless explicitly re-generated', 'wp-ultimo'), ), ), ) ); $custom_logo = wu_get_isset($settings, 'custom_logo'); $custom_logo_args = wp_get_attachment_image_src($custom_logo, 'full'); $custom_logo_url = $custom_logo_args ? $custom_logo_args[0] : ''; $fields = array( 'tab' => array( 'type' => 'tab-select', 'wrapper_classes' => '', 'wrapper_html_attr' => array( 'v-cloak' => 1, ), 'html_attr' => array( 'v-model' => 'tab', ), 'options' => array( 'general' => __('General', 'wp-ultimo'), 'colors' => __('Colors', 'wp-ultimo'), 'images' => __('Images', 'wp-ultimo'), ), ), 'paid_tag_text' => array( 'type' => 'text', 'title' => __('Paid Tag', 'wp-ultimo'), 'placeholder' => __('e.g. Paid.', 'wp-ultimo'), 'value' => wu_get_isset($settings, 'paid_tag_text', __('Paid', 'wp-ultimo')), 'wrapper_html_attr' => array( 'v-show' => 'require("tab", "general")', 'v-cloak' => 1, ), 'html_attr' => array( 'v-model.lazy' => 'paid_tag_text', ), ), 'font' => array( 'type' => 'select', 'title' => __('Font-Family', 'wp-ultimo'), 'value' => wu_get_isset($settings, 'font', ''), 'options' => array( 'DejaVuSansCondensed' => __('Sans-Serif', 'wp-ultimo'), 'FreeSerif' => __('Serif', 'wp-ultimo'), 'FreeMono' => __('Mono', 'wp-ultimo'), ), 'wrapper_html_attr' => array( 'v-show' => 'require("tab", "general")', 'v-cloak' => 1, ), 'html_attr' => array( 'v-model.lazy' => 'font', ), ), 'footer_message' => array( 'type' => 'textarea', 'title' => __('Footer Content', 'wp-ultimo'), 'placeholder' => __('e.g. Extra Info about the Invoice.', 'wp-ultimo'), 'value' => wu_get_isset($settings, 'footer_message', ''), 'wrapper_html_attr' => array( 'v-show' => 'require("tab", "general")', 'v-cloak' => 1, ), 'html_attr' => array( 'v-model.lazy' => 'footer_message', ), ), 'primary_color' => array( 'type' => 'color-picker', 'title' => __('Primary Color', 'wp-ultimo'), 'value' => '#00a1ff', 'wrapper_html_attr' => array( 'v-show' => 'require("tab", "colors")', 'v-cloak' => 1, ), 'html_attr' => array( 'v-model' => 'primary_color', ), ), 'use_custom_logo' => array( 'type' => 'toggle', 'title' => __('Use Custom Logo', 'wp-ultimo'), 'desc' => __('You can set a different logo to be used on the invoice.', 'wp-ultimo'), 'wrapper_html_attr' => array( 'v-show' => 'require("tab", "images")', 'v-cloak' => 1, ), 'html_attr' => array( 'v-model' => 'use_custom_logo', ), ), 'custom_logo' => array( 'type' => 'image', 'title' => __('Custom Logo', 'wp-ultimo'), 'desc' => __('This will be added to the top of the generated PDF.', 'wp-ultimo'), 'value' => '', 'img' => $custom_logo_url, 'stacked' => true, 'wrapper_html_attr' => array( 'v-show' => 'require("tab", "images") && require("use_custom_logo", true)', 'v-cloak' => 1, ), 'html_attr' => array( 'v-model' => 'custom_logo', ), ), ); $settings = array( 'footer_message' => wu_get_isset($settings, 'footer_message', ''), 'paid_tag_text' => wu_get_isset($settings, 'paid_tag_text', __('Paid', 'wp-ultimo')), 'primary_color' => wu_get_isset($settings, 'primary_color', '00a1ff'), 'use_custom_logo' => wu_get_isset($settings, 'use_custom_logo'), 'custom_logo' => wu_get_isset($settings, 'custom_logo'), 'font' => wu_get_isset($settings, 'font', 'DejaVuSansCondensed'), ); $state = array_merge( $settings, array( 'tab' => 'general', 'refresh' => true, ) ); $this->add_fields_widget( 'customizer', array( 'title' => __('Customizer', 'wp-ultimo'), 'position' => 'side', 'fields' => $fields, 'html_attr' => array( 'style' => 'margin-top: -6px;', 'data-wu-app' => 'invoice_customizer', 'data-wu-customizer-panel' => true, 'data-state' => json_encode($state), ), ) ); } /** * Returns the title of the page. * * @since 2.0.0 * @return string Title of the page. */ public function get_title() { return __('Customize Invoice Template', 'wp-ultimo'); } /** * Returns the title of menu for this page. * * @since 2.0.0 * @return string Menu label of the page. */ public function get_menu_title() { return __('Customize Invoice Template', 'wp-ultimo'); } /** * Returns the action links for that page. * * @since 1.8.2 * @return array */ public function action_links() { return array(); } /** * Returns the labels to be used on the admin page. * * @since 2.0.0 * @return array */ public function get_labels() { return array( 'customize_label' => __('Customize Invoice Template', 'wp-ultimo'), 'add_new_label' => __('Customize Invoice Template', 'wp-ultimo'), 'edit_label' => __('Edit Invoice Template', 'wp-ultimo'), 'updated_message' => __('Invoice Template updated with success!', 'wp-ultimo'), 'title_placeholder' => __('Enter Invoice Template Name', 'wp-ultimo'), 'title_description' => __('This name is used for internal reference only.', 'wp-ultimo'), 'save_button_label' => __('Save Invoice Template', 'wp-ultimo'), 'save_description' => __('Save Invoice Template', 'wp-ultimo'), ); } /** * Should implement the processes necessary to save the changes made to the object. * * @since 2.0.0 * @return void */ public function handle_save() { Invoice::save_settings($_POST); $url = add_query_arg('updated', '1'); wp_redirect($url); exit; } }