/**
  * Render the view for this controller.
  *
  * @return void
  */
 public function render()
 {
     $report = Dispatch::get_report($_GET['report']);
     if (is_null($report)) {
         wp_redirect(Tab_Dispatch::get_tab_link('reports'));
         exit;
     }
     $this->enqueue();
     $view = new SingleV($report);
     $view->begin();
     $view->title();
     if (!$report) {
         $view->notice(__("Invalid report.", Plugin::SLUG), View::NOTICE_ERROR);
     }
     $view->tabs('reports');
     $view->render();
     $view->end();
 }
    /**
     * Render a report type preview.
     *
     * @since 1.0
     *
     * @param Report $report
     */
    protected function render_report(Report $report)
    {
        $link = add_query_arg(array('view' => 'single', 'report' => $report->get_slug()), Dispatch::get_tab_link('reports'));
        $desc = $report->get_description();
        if (strlen($desc) > 100) {
            $desc = substr($desc, 0, 97);
            $desc .= '…';
        }
        ?>

		<div class="report report-<?php 
        echo $report->get_slug();
        ?>
">

			<h3><?php 
        echo $report->get_title();
        ?>
</h3>

			<p><?php 
        echo $desc;
        ?>
</p>

			<a href="<?php 
        echo $link;
        ?>
"><?php 
        _e("View", Plugin::SLUG);
        ?>
</a>
		</div>

		<?php 
    }
/**
 * Get the admin edit link for a particular key.
 *
 * @api
 *
 * @since 1.0
 *
 * @param string $key
 *
 * @return string
 */
function itelic_get_admin_edit_key_link($key)
{
    return add_query_arg(array('view' => 'single', 'key' => (string) $key), \ITELIC\Admin\Tab\Dispatch::get_tab_link('licenses'));
}
    /**
     * This echos the feature metabox.
     *
     * @since 1.0
     *
     * @param \WP_Post $post
     */
    function print_metabox($post)
    {
        add_action('admin_footer', array($this, 'changelog_popup'));
        wp_enqueue_style('itelic-add-edit-product');
        wp_enqueue_script('itelic-add-edit-product');
        wp_localize_script('itelic-add-edit-product', 'ITELIC', array('ajax' => admin_url('admin-ajax.php'), 'product' => isset($post->ID) ? $post->ID : 0, 'df' => it_exchange_php_date_format_to_jquery_datepicker_format(get_option('date_format'))));
        $settings = it_exchange_get_option('addon_itelic');
        $downloads = it_exchange_get_product_feature(isset($post->ID) ? $post->ID : 0, 'downloads');
        if (!is_array($downloads)) {
            $downloads = array();
        }
        $data = it_exchange_get_product_feature(isset($post->ID) ? $post->ID : 0, $this->slug);
        $hidden = $data['enabled'] ? '' : ' hide-if-js';
        $hidden_variants = $data['enabled_variant_activations'] ? '' : ' hide-if-js';
        $hidden_simple = $hidden_variants ? '' : ' hide-if-js';
        $version_read = empty($data['version']) ? '' : 'readonly';
        ?>

		<p><?php 
        echo $this->description;
        ?>
</p>

		<p>
			<input type="checkbox" id="itelic-enable" name="itelic[enabled]" <?php 
        checked(true, $data['enabled']);
        ?>
>
			<label for="itelic-enable"><?php 
        _e("Enable Licensing for this product", Plugin::SLUG);
        ?>
</label>
		</p>

		<div class="itelic-settings<?php 
        echo esc_attr($hidden);
        ?>
">

			<?php 
        if ($settings['sell-online-software']) {
            ?>
				<p>
					<input type="checkbox" id="itelic-online-software" name="itelic[online-software]" <?php 
            checked(true, $data['online-software']);
            ?>
>
					<label for="itelic-online-software"><?php 
            _e("Enable online software tools for this product", Plugin::SLUG);
            ?>
</label>
					<span class="tip" title="
					<?php 
            _e("Online software tools allows for your customers to remotely activate and deactivate their license keys.", Plugin::SLUG);
            ?>
					<?php 
            _e("Remote activation and remote deactivation needs to be enabled in the add-on settings for this to take effect.", Plugin::SLUG);
            ?>
					">
						i
					</span>
				</p>
			<?php 
        }
        ?>

			<label for="itelic-update-file"><?php 
        _e("Update File", Plugin::SLUG);
        ?>
</label>

			<?php 
        if (empty($downloads)) {
            ?>
				<div class="notice notice-warning below-h2">
					<p><?php 
            _e("You need to upload a new file to the Product Files section and save the product before configuring the Update File.", Plugin::SLUG);
            ?>
</p>
				</div>
			<?php 
        } else {
            ?>
				<select id="itelic-update-file" name="itelic[update-file]">
					<?php 
            foreach ($downloads as $download) {
                ?>
						<option value="<?php 
                echo esc_attr($download['id']);
                ?>
" <?php 
                selected($data['update-file'], $download['id']);
                ?>
>
							<?php 
                echo $download['name'];
                ?>
						</option>
					<?php 
            }
            ?>
				</select>
			<?php 
        }
        ?>

			<p class="description">
				<?php 
        _e("Select a file to be used for automatic updates.", Plugin::SLUG);
        ?>
				<?php 
        _e("You shouldn't need to update this after the initial release.", Plugin::SLUG);
        ?>
			</p>

			<label for="itelic-version">

				<?php 
        if ($version_read) {
            ?>
					<?php 
            _e("Current Version", Plugin::SLUG);
            ?>
				<?php 
        } else {
            ?>
					<?php 
            _e("Initial Version", Plugin::SLUG);
            ?>
				<?php 
        }
        ?>
			</label>
			<input type="text" id="itelic-version" name="itelic[version]" <?php 
        echo $version_read;
        ?>
 value="<?php 
        echo esc_attr($data['version']);
        ?>
">

			<p class="description">
				<?php 
        if (!$version_read) {
            ?>
					<?php 
            _e("Set the initial version of this product.", Plugin::SLUG);
            ?>
&nbsp;
				<?php 
        } else {
            ?>
					<?php 
            printf(__('Create a new release from the <a href="%s">releases</a> tab.', Plugin::SLUG), add_query_arg('view', 'add-new', Dispatch::get_tab_link('releases')));
            ?>
				<?php 
        }
        ?>
			</p>

			<label for="itelic-changelog"><?php 
        _e("Changelog", Plugin::SLUG);
        ?>
</label>
			<button id="view-changelog" class="button"><?php 
        _e("View Changelog", Plugin::SLUG);
        ?>
</button>
			<p class="description"><?php 
        _e("View the compiled changelog from the last 10 releases.", Plugin::SLUG);
        ?>
</p>

			<label for="itelic-key-type"><?php 
        _e("Key Type", Plugin::SLUG);
        ?>
</label>
			<select id="itelic-key-type" name="itelic[key-type]">

				<option value=""><?php 
        _e("Select a Key Type", Plugin::SLUG);
        ?>
</option>

				<?php 
        foreach (itelic_get_key_types() as $slug => $type) {
            ?>
					<option value="<?php 
            echo esc_attr($slug);
            ?>
" <?php 
            selected($data['key-type'], $slug);
            ?>
>
						<?php 
            echo itelic_get_key_type_name($slug);
            ?>
					</option>
				<?php 
        }
        ?>
			</select>

			<p class="description"><?php 
        _e("How should license keys be generated for this product.", Plugin::SLUG);
        ?>
</p>

			<div id="itelic-key-type-settings">
				<?php 
        if (!empty($data['key-type'])) {
            ?>
					<?php 
            $this->get_key_type_settings($data['key-type'], isset($post->ID) ? $post->ID : 0);
            ?>
				<?php 
        }
        ?>
			</div>

			<?php 
        $controller = $this->get_variants_controller($post->ID);
        ?>

			<?php 
        if ($controller) {
            ?>
				<p>
					<input type="checkbox" id="itelic-enable-variant-activations" name="itelic[enabled_variant_activations]"
						<?php 
            checked(true, $data['enabled_variant_activations']);
            ?>
>
					<label for="itelic-enable-variant-activations"><?php 
            _e("Enable Variant Activation limits", Plugin::SLUG);
            ?>
</label>
				</p>
			<?php 
        }
        ?>

			<div class="itelic-activation-limit<?php 
        echo esc_attr($hidden_simple);
        ?>
">
				<label for="itelic-limit"><?php 
        _e("Activation Limit", Plugin::SLUG);
        ?>
</label>
				<input type="number" name="itelic[limit]" id="itelic-limit" min="0" value="<?php 
        echo esc_attr($data['limit']);
        ?>
">
			</div>

			<div class="notice-container <?php 
        echo $data['enabled_variant_activations'] ? '' : 'hide-if-js';
        ?>
">

				<?php 
        if ($controller && !$controller->all_variant_combos_for_product) {
            ?>
					<div class="notice notice-warning below-h2">
						<p><?php 
            _e("You need to create Product Variants and save the product before setting variant activation limits.", Plugin::SLUG);
            ?>
</p>
					</div>
				<?php 
        }
        ?>
			</div>

			<?php 
        if ($controller && $controller->all_variant_combos_for_product) {
            ?>
				<?php 
            $hashes = $data['activation_variant'];
            ?>

				<div class="itelic-variants-activation-limit-table<?php 
            echo esc_attr($hidden_variants);
            ?>
">

					<div class="itelic-activation-limit-variant-header-row">
						<div class="itelic-activation-limit-variant-header-cell"><?php 
            _e("Variant", Plugin::SLUG);
            ?>
</div>
						<div class="itelic-activation-limit-variant-header-cell itelic-activation-limit-variant-input-cell"><?php 
            _e("Limit", Plugin::SLUG);
            ?>
</div>
					</div>

					<?php 
            foreach ($controller->all_variant_combos_for_product as $combo) {
                ?>
						<?php 
                $hash = $this->combo_to_hash($combo);
                ?>
						<div class="itelic-activation-limit-variant-row">

							<div class="itelic-activation-limit-variant-cell"><?php 
                echo $controller->generate_title_from_combos($combo);
                ?>
</div>

							<div class="itelic-activation-limit-variant-cell itelic-activation-limit-variant-input-cell">
								<input class="itelic-activation-limit-variant-input" name="itelic[activation_variant][<?php 
                echo esc_attr($hash);
                ?>
]"
								       type="number" min="0" value="<?php 
                echo isset($hashes[$hash]) ? $hashes[$hash] : '';
                ?>
">
							</div>
						</div>
					<?php 
            }
            ?>
				</div>

			<?php 
        }
        ?>

			<p class="description"><?php 
        _e("How many times can this license be activated. Leave blank for unlimited.", Plugin::SLUG);
        ?>
</p>
		</div>
		<?php 
    }
 /**
  * Process a request to delete a key as a row action.
  *
  * @since 1.0
  */
 public function process_delete_row_action()
 {
     if (!Dispatch::is_current_view('list')) {
         return;
     }
     if (!isset($_GET['itelic_action']) || $_GET['itelic_action'] != 'delete') {
         return;
     }
     if (!current_user_can('manage_options')) {
         return;
     }
     $key = $_GET['key'];
     if (!wp_verify_nonce($_GET['nonce'], 'itelic-delete-license-' . $key)) {
         return;
     }
     try {
         itelic_get_key($key)->delete();
         wp_redirect(add_query_arg('msg', 'deleted', Tab_Dispatch::get_tab_link('licenses')));
         exit;
     } catch (\Exception $e) {
         return;
     }
 }
 /**
  * Override title display to show an add new button.
  *
  * @since 1.0
  */
 public function title()
 {
     echo '<h1>' . $this->get_title() . ' ';
     echo '<a href="' . add_query_arg('view', 'add-new', Dispatch::get_tab_link('releases')) . '" class="page-title-action">';
     echo __("Add New", Plugin::SLUG);
     echo '</a>';
     echo '</h1>';
 }
    /**
     * Render the view.
     */
    public function render()
    {
        $selected = isset($_POST['type-select']) ? $_POST['type-select'] : '';
        if (!array_key_exists($selected, Release::get_types())) {
            $selected = '';
        }
        if (!$selected) {
            $style = 'style="opacity: 0;"';
        } else {
            $style = '';
        }
        $security_msg_hidden = $selected == Release::TYPE_SECURITY ? '' : ' hidden';
        ?>
		<form method="POST" action="<?php 
        echo esc_attr(add_query_arg('view', 'add-new', Dispatch::get_tab_link('releases')));
        ?>
">

			<?php 
        do_action('itelic_add_new_release_screen_before_types');
        ?>
			<?php 
        $this->render_types_tab($selected);
        ?>

			<?php 
        if ($this->show_help) {
            ?>
				<div class="release-help">
					<p class="release-help-major">
						<?php 
            echo \ITELIC\Admin\Help\get_major_release_help_text();
            ?>
					</p>

					<p class="release-help-minor">
						<?php 
            echo \ITELIC\Admin\Help\get_minor_release_help_text();
            ?>
					</p>

					<p class="release-help-security">
						<?php 
            echo \ITELIC\Admin\Help\get_security_release_help_text();
            ?>
					</p>

					<p class="release-help-pre-release">
						<?php 
            echo \ITELIC\Admin\Help\get_pre_release_help_text();
            ?>
					</p>
				</div>
			<?php 
        }
        ?>

			<?php 
        do_action('itelic_add_new_release_screen_after_types');
        ?>

			<?php 
        do_action('itelic_add_new_release_screen_before');
        ?>

			<div class="main-editor" <?php 
        echo $style;
        ?>
>

				<?php 
        do_action('itelic_add_new_release_screen_begin');
        ?>

				<div class="row row-one">

					<div class="product-select-container">
						<?php 
        $this->render_product_select(isset($_POST['product']) ? $_POST['product'] : 0);
        ?>
					</div>

					<div class="version-number-container">
						<?php 
        $this->render_version_number(isset($_POST['version']) ? $_POST['version'] : 0);
        ?>
					</div>
				</div>

				<div class="row row-two">
					<div class="upload-container dropzone">
						<?php 
        $this->render_upload();
        ?>
					</div>
				</div>

				<div class="row row-three">
					<div class="whats-changed-container">
						<?php 
        $this->render_whats_changed(isset($_POST['whats-changed']) ? $_POST['whats-changed'] : '');
        ?>
					</div>
				</div>

				<div class="row row-five <?php 
        echo $security_msg_hidden;
        ?>
" id="security-message-row">
					<div class="security-message">
						<?php 
        $this->render_security_message(isset($_POST['security-message']) ? $_POST['security-message'] : '');
        ?>
					</div>
				</div>

				<div class="row row-four">
					<div class="buttons">
						<?php 
        $this->render_buttons();
        ?>
					</div>
				</div>

				<?php 
        do_action('itelic_add_new_release_screen_end');
        ?>

			</div>

			<input type="hidden" name="itelic-action" value="add-new-release">

			<?php 
        wp_nonce_field('itelic-add-new-release');
        ?>

			<?php 
        do_action('itelic_add_new_release_screen_after');
        ?>
		</form>

		<?php 
    }
    /**
     * Render the page.
     *
     * @since 1.0
     */
    public function render()
    {
        $df = it_exchange_php_date_format_to_jquery_datepicker_format(get_option('date_format'));
        $options = it_exchange_get_option('settings_general');
        $position = $options['currency-symbol-position'];
        $decimals = $options['currency-decimals-separator'];
        $thousands = $options['currency-thousands-separator'];
        $symbol = it_exchange_get_currency_symbol($options['default-currency']);
        $form = \ITUtility::merge_defaults($_POST, array('product' => '', 'customer' => '', 'username' => '', 'email' => '', 'first' => '', 'last' => '', 'activations' => '', 'expiration' => '', 'license' => '', 'paid' => '', 'customer-type' => 'existing'));
        ?>

		<form method="POST" action="<?php 
        echo esc_attr(add_query_arg('view', 'add-new', Dispatch::get_tab_link('licenses')));
        ?>
">
			<div class="main-editor">

				<?php 
        do_action('itelic_add_new_license_screen_before_steps');
        ?>

				<ol>
					<?php 
        do_action('itelic_add_new_license_screen_begin_steps');
        ?>

					<li>
						<label for="product"><?php 
        _e("Select a Product", Plugin::SLUG);
        ?>
</label>

						<div class="product-container">
							<select id="product" name="product">
								<?php 
        foreach ($this->products as $product) {
            ?>
									<option value="<?php 
            echo $product->ID;
            ?>
" <?php 
            selected($form['product'], $product->ID);
            ?>
>
										<?php 
            echo $product->post_title;
            ?>
									</option>
								<?php 
        }
        ?>
							</select>
						</div>
					</li>

					<li>
						<fieldset id="customer-type">
							<label><?php 
        _e("Select a Customer", Plugin::SLUG);
        ?>
</label>

							<div class="new-customer-container">
								<p>
									<input type="radio" id="new-customer" name="customer-type" value="new" <?php 
        checked($form['customer-type'], 'new');
        ?>
>
									<label for="new-customer"><?php 
        _e("New Customer", Plugin::SLUG);
        ?>
</label>
								</p>
							</div>

							<div class="existing-customer-container">
								<p>
									<input type="radio" id="existing-customer" name="customer-type" value="existing" <?php 
        checked($form['customer-type'], 'existing');
        ?>
>
									<label for="existing-customer"><?php 
        _e("Existing Customer", Plugin::SLUG);
        ?>
</label>
								</p>
							</div>
						</fieldset>

						<fieldset class="new-customer-form <?php 
        echo $form['customer-type'] == 'new' ? '' : 'hide-if-js';
        ?>
">
							<p>
								<label for="username"><?php 
        _e("Username", Plugin::SLUG);
        ?>
</label>
								<input type="text" id="username" name="username" value="<?php 
        echo $form['username'];
        ?>
">
							</p>

							<p>
								<label for="email"><?php 
        _e("Email", Plugin::SLUG);
        ?>
</label>
								<input type="email" id="email" name="email" value="<?php 
        echo $form['email'];
        ?>
">
							</p>

							<p>
								<label for="first"><?php 
        _e("First Name", Plugin::SLUG);
        ?>
</label>
								<input type="text" id="first" name="first" value="<?php 
        echo $form['first'];
        ?>
">
							</p>

							<p>
								<label for="last"><?php 
        _e("Last Name", Plugin::SLUG);
        ?>
</label>
								<input type="text" id="last" name="last" value="<?php 
        echo $form['last'];
        ?>
">
							</p>
						</fieldset>

						<fieldset class="existing-customer-form <?php 
        echo $form['customer-type'] == 'existing' ? '' : 'hide-if-js';
        ?>
">
							<p>
								<label for="customer" class="screen-reader-text"><?php 
        _e('Customer', Plugin::SLUG);
        ?>
</label>
								<select id="customer" name="customer">
									<?php 
        foreach (get_users() as $user) {
            ?>
										<option value="<?php 
            echo $user->ID;
            ?>
" <?php 
            selected($form['customer'], $user->ID);
            ?>
>
											<?php 
            echo $user->user_login;
            ?>
										</option>
									<?php 
        }
        ?>
								</select>
							</p>
						</fieldset>
					</li>
					<li>
						<div class="activations-container">
							<label for="activations"><?php 
        _e("Activation Limit", Plugin::SLUG);
        ?>
</label>
							<input type="number" id="activations" name="activations" min="0" value="<?php 
        echo $form['activations'];
        ?>
">

							<p class="description"><?php 
        _e("Leave blank for unlimited activations.");
        ?>
</p>
						</div>
					</li>
					<li>
						<div class="expiration-container">

							<label for="expiration"><?php 
        _e("Expiration Date", Plugin::SLUG);
        ?>
</label>
							<input type="date" id="expiration" name="expiration" value="<?php 
        echo $form['expiration'];
        ?>
" data-format="<?php 
        echo esc_attr($df);
        ?>
">

						</div>
					</li>

					<li>
						<div class="key-container">
							<label for="license"><?php 
        _e('License Key', Plugin::SLUG);
        ?>
</label>

							<p>
								<a href="javascript:" id="trigger-manual-key" class="<?php 
        echo empty($form['license']) ? '' : 'hide-if-js';
        ?>
">
									<?php 
        _e("Set the license key manually.", Plugin::SLUG);
        ?>
								</a>

								<a href="javascript:" id="trigger-automatic-key" class="<?php 
        echo empty($form['license']) ? 'hide-if-js' : '';
        ?>
">
									<?php 
        _e("Let Exchange automatically generate a license key for you.", Plugin::SLUG);
        ?>
								</a>
							</p>

							<input type="text" name="license" id="license" value="<?php 
        echo $form['license'];
        ?>
" class="<?php 
        echo empty($form['license']) ? 'hide-if-js' : '';
        ?>
">

						</div>
					</li>

					<li>
						<div class="paid-container">

							<label for="paid"><?php 
        _e("Amount Paid", Plugin::SLUG);
        ?>
</label>
							<input type="text" name="paid" id="paid" value="<?php 
        echo $form['paid'];
        ?>
"
							       data-symbol="<?php 
        echo $symbol;
        ?>
" data-symbol-position="<?php 
        echo $position;
        ?>
"
							       data-thousands-separator="<?php 
        echo $thousands;
        ?>
"
							       data-decimals-separator="<?php 
        echo $decimals;
        ?>
">

						</div>
					</li>

					<?php 
        do_action('itelic_add_new_license_screen_end_steps');
        ?>
				</ol>

				<?php 
        do_action('itelic_add_new_license_screen_after_steps');
        ?>

				<p class="buttons">
					<?php 
        submit_button(__("Create", Plugin::SLUG), 'primary', 'itelic-add-new-key', false);
        ?>
				</p>
			</div>

			<?php 
        wp_nonce_field('itelic-add-new-key');
        ?>

		</form>

		<?php 
    }
/**
 * Get the admin edit link for a particular release.
 *
 * @api
 *
 * @since 1.0
 *
 * @param int $release Release ID
 *
 * @return string
 */
function itelic_get_admin_edit_release_link($release)
{
    return add_query_arg(array('view' => 'single', 'ID' => (string) $release), \ITELIC\Admin\Tab\Dispatch::get_tab_link('releases'));
}
 /**
  * Get the view link.
  *
  * @since 1.0
  *
  * @param string $status
  *
  * @return string
  */
 protected function get_view_link($status)
 {
     $link = Dispatch::get_tab_link('releases');
     $white_list = array('prod', 's');
     foreach ($white_list as $var) {
         if (isset($_GET[$var])) {
             $link = add_query_arg($var, $_GET[$var], $link);
         }
     }
     return add_query_arg('status', $status, $link);
 }
 /**
  * Override title display to show an add new button.
  *
  * @since 1.0
  */
 public function title()
 {
     echo '<h1>' . $this->get_title() . ' ';
     if (function_exists('it_exchange_register_manual_purchases_addon')) {
         echo '<a href="' . add_query_arg('view', 'add-new', Dispatch::get_tab_link('licenses')) . '" class="page-title-action">';
         echo __("Add New", Plugin::SLUG);
         echo '</a>';
     }
     echo '</h1>';
 }