/** * Render the release view. */ public function render() { if (!$this->release) { return; } $df = str_replace('F', 'M', get_option('date_format')); $tf = get_option('time_format'); $dtf = "{$df} {$tf}"; if ($this->release->get_status() == Release::STATUS_DRAFT) { $click_edit = ' title="' . __("Click to Edit", Plugin::SLUG) . '"'; } else { $click_edit = ''; } ?> <div id="release-details"> <div class="spacing-wrapper bottom-border header-block"> <div class="status status-<?php echo esc_attr($this->release->get_status()); ?> "> <span data-value="<?php echo esc_attr($this->release->get_status()); ?> "<?php echo $click_edit; ?> > <?php echo $this->release->get_status(true); ?> </span> </div> <div class="name-block"> <h2 class="product-name"><?php echo $this->release->get_product()->post_title; ?> </h2> <h2 class="version-name"><?php echo $this->release->get_version(); ?> </h2> </div> </div> <div class="spacing-wrapper bottom-border third-row misc-block"> <div class="third type"> <h4><?php _e("Type", Plugin::SLUG); ?> </h4> <h3 data-value="<?php echo $this->release->get_type(); ?> "<?php echo $click_edit; ?> > <?php echo $this->release->get_type(true); ?> </h3> </div> <div class="third release-date"> <h4><?php _e("Released", Plugin::SLUG); ?> </h4> <h3> <?php if (null === $this->release->get_start_date()) { ?> <?php echo '—'; ?> <?php } else { ?> <?php echo \ITELIC\convert_gmt_to_local($this->release->get_start_date())->format($df); ?> <?php } ?> </h3> </div> <div class="third version"> <h4><?php _e("Version", Plugin::SLUG); ?> </h4> <h3 data-value="<?php echo $this->release->get_version(); ?> "<?php echo $click_edit; ?> > <?php echo $this->release->get_version(); ?> </h3> </div> </div> <?php if (get_post_meta($this->release->get_product()->ID, '_itelic_first_release', true) == $this->release->get_pk()) { ?> <div class="spacing-wrapper"> <p class="initial-release-notice"> <?php printf(__("Congratulations on releasing %s; there isn't any data to display for your first release, though.", Plugin::SLUG), $this->release->get_product()->post_title); ?> </p> </div> </div> <?php return; ?> <?php } ?> <?php if ($this->release->get_status() == Release::STATUS_DRAFT) { ?> <?php $this->render_replace_file_section(); ?> <?php } ?> <?php $this->render_security_message(); $this->render_upgrades_bar(); $this->render_whats_changed(); if ($this->release->get_status() != Release::STATUS_ARCHIVED) { $this->render_notification_editor(); } $this->render_progress_line_chart(); $this->render_versions_pie_chart(); $this->render_notify_button_section(); ?> </div> <?php /** * Fires after the main single release screen. * * @since 1.0 * * @param Release $release */ do_action('itelic_single_release_screen_after', $this->release); }
/** * When a release is paused, set the last updated value to the previous release * in the readme product feature. * * @internal * * @since 1.0 * * @param Release $release * @param Release|null $prev_release */ function set_last_updated_value_in_readme_on_pause(Release $release, Release $prev_release = null) { if ($prev_release && $release->get_product()->has_feature('licensing-readme')) { $release->get_product()->update_feature('licensing-readme', array('last_updated' => $prev_release->get_start_date()->getTimestamp())); } }
/** * Get data to display for a single key. * * @param \ITELIC\Activation|\ITELIC\Release $release * @param bool $raw * * @return array */ protected function get_fields_for_object(\ITELIC\Release $release, $raw = false) { if ($release->get_start_date()) { $started = $release->get_start_date()->format(DateTime::ISO8601); } else { $started = '-'; } return array('ID' => $release->get_ID(), 'product' => $raw ? $release->get_product()->ID : $release->get_product()->post_title, 'version' => $release->get_version(), 'type' => $release->get_type(!$raw), 'status' => $release->get_status(!$raw), 'download' => $raw ? $release->get_download()->ID : $release->get_download()->post_title, 'started' => $started, 'changelog' => $release->get_changelog()); }
/** * Prepare an individual key view. * * @since 1.0 * * @param Release $release * * @return array */ protected function prepare_record(Release $release) { if ($release->get_start_date()) { $start_date = $release->get_start_date()->format(get_option('date_format')); } else { $start_date = '-'; } $updated = $release->get_total_updated(); $total_activations = $release->get_total_active_activations(); $total_activations = max(1, $total_activations); $percent = min(number_format($updated / $total_activations * 100, 0), 100); $data = array('ID' => $release->get_ID(), 'release' => (string) $release, 'status' => $release->get_status(false), 'type' => $release->get_type(true), 'updated' => "{$percent}%", 'start_date' => $start_date); /** * Filter the columns on the releases list table. * * @since 1.0 * * @param array $data * @param Release $release */ $data = apply_filters('itelic_releases_list_table_columns', $data, $release); return $data; }
/** * Get the progress line chart. * * @since 1.0 * * @param Release $release * * @return Chart\Base */ private function get_progress_chart(Release $release) { if ($release->get_status() == Release::STATUS_DRAFT) { return null; } $raw = $release->get_first_14_days_of_upgrades(); $now = new \DateTime(); $diff = $release->get_start_date()->diff($now); $days = min(14, max($diff->days + 1, 1)); $data = array(); $day = \ITELIC\convert_gmt_to_local(clone $release->get_start_date()); $sql_df = 'Y-m-d'; for ($i = 0; $i < $days; $i++) { $key = $day->format($sql_df); if (isset($raw[$key])) { $data[$key] = $raw[$key]; } else { $data[$key] = 0; } $day = $day->add(new \DateInterval('P1D')); } $df = 'M j'; $labels = array_map(function ($day) use($df) { $day = new \DateTime($day); return $day->format($df); }, array_keys($data)); $chart = new Chart\Line($labels, 698, 200, array('scaleIntegersOnly' => true, 'scaleBeginAtZero' => true, 'ibdLoadOn' => 'loadProgressChart', 'responsive' => true)); $chart->add_data_set(array_values($data), '', array('fillColor' => "rgba(151,187,205,0.2)", 'strokeColor' => "rgba(151,187,205,1)", 'pointColor' => "rgba(151,187,205,1)", 'pointStrokeColor' => "#fff", 'pointHighlightFill' => "#fff", 'pointHighlightStroke' => "rgba(151,187,205,1)")); return $chart; }