Ejemplo n.º 1
0
 /**
  * @param FORM_RENDERER $renderer
  * @access private
  */
 protected function _draw_controls($renderer)
 {
     $renderer->start();
     $renderer->draw_text_line_row('title');
     $props = $renderer->make_list_properties();
     $props->show_descriptions = true;
     if ($this->visible('is_visible')) {
         $props->add_item($this->app->get_icon_with_text('{icons}indicators/invisible', Sixteen_px, 'Hidden'), Hidden, 'Only administrators can see this branch\'s contents.');
         $props->add_item($this->app->get_icon_with_text('{icons}buttons/view', Sixteen_px, 'Visible'), Visible, 'Jobs and changes can be added and removed.');
         $props->add_item($this->app->get_icon_with_text('{icons}indicators/locked', Sixteen_px, 'Locked'), Locked, 'Cannot add or remove jobs and changes (undoable).');
     } else {
         $props->add_item($this->app->get_icon_with_text('{icons}buttons/view', Sixteen_px, 'Unlocked'), Visible, 'Jobs and changes can be added and removed.');
         $props->add_item($this->app->get_icon_with_text('{icons}indicators/locked', Sixteen_px, 'Locked'), Locked, 'Cannot add or remove jobs and changes (undoable).');
     }
     $renderer->draw_radio_group_row('state', $props);
     /** @var PROJECT $project */
     $project = $this->_folder;
     /** @var PROJECT_RELEASE_QUERY $release_query */
     $release_query = $project->release_query();
     $release_query->restrict('rel.state = ' . Locked);
     /** @var RELEASE[] $releases */
     $releases = $release_query->objects();
     $props = $renderer->make_list_properties();
     $props->css_class = 'small-medium';
     $props->add_item('[None]', 0);
     foreach ($releases as $release) {
         $branch = $release->branch();
         $props->add_item($branch->title_as_plain_text() . $this->app->display_options->object_separator . $release->title_as_plain_text(), $release->id);
     }
     $renderer->draw_drop_down_row('parent_release_id', $props);
     $renderer->draw_text_box_row('description');
     $renderer->draw_submit_button_row();
     $this->_draw_history_item_controls($renderer);
     $renderer->finish();
 }
Ejemplo n.º 2
0
    /**
     * @param FORM_RENDERER $renderer
     * @access private
     */
    protected function _draw_controls($renderer)
    {
        ?>
    <div class="columns text-flow">
      <div class="left-sidebar">
        <?php 
        $folder_query = $this->login->folder_query();
        /** @var PROJECT[] $folders */
        $folders = $folder_query->tree();
        include_once 'projects/gui/project_tree_node_info.php';
        $tree_node_info = new PROJECT_TREE_NODE_INFO($this->app);
        $tree_node_info->page_link = $this->env->url(Url_part_file_name);
        $tree_node_info->set_visible_node($this->_folder);
        $tree_node_info->set_selected_node($this->_folder);
        $tree_node_info->set_defined_nodes_visible($folders);
        /* Make a copy (not a reference). */
        $tree = $this->app->make_tree_renderer();
        $tree->node_info = $tree_node_info;
        $tree->display($folders);
        ?>
      </div>
      <div>
<?php 
        $renderer->start();
        $renderer->draw_text_line_row('title');
        $renderer->draw_icon_browser_row('icon_url');
        $renderer->draw_check_box_row('is_visible');
        $item = $renderer->make_check_properties();
        $item->on_click_script = 'on_organizational_changed (this)';
        $renderer->draw_check_box_row('is_organizational', $item);
        if (!$this->object_exists() || !$this->_object->is_root()) {
            if (!$this->object_exists()) {
                $renderer->draw_text_line_row('branch_title');
            } elseif (!$this->_object->is_root()) {
                /** @var PROJECT_BRANCH_QUERY $branch_query */
                $branch_query = $this->_object->branch_query();
                /** @var BRANCH[] $branches */
                $branches = $branch_query->objects();
                $props = $renderer->make_list_properties();
                $props->css_class = 'small';
                foreach ($branches as $branch) {
                    $props->add_item($branch->title_as_plain_text(), $branch->id);
                }
                $renderer->draw_drop_down_row('trunk_id', $props);
            }
        }
        // if this folder has a parent, then show the inheritance options
        /** @var PROJECT $parent */
        $parent = null;
        if (!$this->object_exists()) {
            $parent = $this->_folder;
        } else {
            $parent = $this->_folder->parent_folder();
        }
        if ($parent) {
            $renderer->start_block('Options');
            /** @var FOLDER $options_folder */
            $options_folder = $folder_query->object_at_id($parent->options_id);
            $props = $renderer->make_list_properties();
            $props->css_class = 'medium';
            $props->on_click_script = 'on_inherit_changed (this)';
            if ($this->login->is_allowed(Privilege_set_folder, Privilege_modify, $options_folder)) {
                $t = $options_folder->title_formatter();
                $t->set_name($this->env->url(Url_part_file_name));
                $title = 'Inherit options from ' . $options_folder->title_as_link($t);
            } else {
                $title = 'Inherit options from ' . $options_folder->title_as_html();
            }
            $props->add_item($title, 0);
            $props->add_item('Define options below.', 1);
            echo $renderer->radio_group_as_HTML('defines_options', $props);
        } else {
            $renderer->start_block('');
            $renderer->draw_hidden('defines_options');
        }
        $props = $renderer->make_list_properties();
        $props->css_class = 'small';
        $props->add_item('[No warning]', 0);
        $props->add_item('1 day', 86400);
        $props->add_item('2 days', 2 * 86400);
        $props->add_item('3 days', 3 * 86400);
        $props->add_item('5 days', 5 * 86400);
        $props->add_item('1 week', 7 * 86400);
        $props->add_item('2 weeks', 14 * 86400);
        $props->add_item('1 month', 30 * 86400);
        $renderer->draw_drop_down_row('seconds_until_deadline', $props);
        /* Prepare the option and group lists for assignees and reporters. */
        $props = $this->_make_user_list_properties_for($renderer, 'assignee_group_id');
        $renderer->draw_radio_group_row('assignee_group_type', $props);
        $props = $this->_make_user_list_properties_for($renderer, 'reporter_group_id');
        $renderer->draw_radio_group_row('reporter_group_type', $props);
        if (isset($this->_user_list_error_message)) {
            $renderer->draw_caution_row(' ', $this->_user_list_error_message);
        }
        $renderer->finish_block();
        $renderer->draw_text_box_row('summary');
        $renderer->draw_text_box_row('description');
        $renderer->draw_submit_button_row();
        $this->_draw_history_item_controls($renderer);
        $renderer->finish();
        ?>
        </div>
      </div>
<?php 
    }
 /**
  * @param FORM_RENDERER $renderer
  * @access private
  */
 protected function _draw_controls($renderer)
 {
     $renderer->labels_css_class = 'top right';
     $renderer->start();
     $props = $renderer->make_list_properties();
     $props->on_click_script = 'this.form.submit()';
     $props->add_item('[Default]', '');
     foreach ($this->_themes as $theme) {
         $props->add_item($theme->title_as_plain_text(), $theme->id);
     }
     $renderer->draw_drop_down_row('main_CSS_file_name', $props);
     $props = $renderer->make_list_properties();
     $props->on_click_script = 'this.form.submit()';
     $props->add_item('[Default]', '');
     $theme_font_names = $this->page->theme_options->font_names();
     foreach ($theme_font_names as $name => $url) {
         $props->add_item($name, $url);
     }
     $renderer->draw_drop_down_row('font_name_CSS_file_name', $props);
     $props = $renderer->make_list_properties();
     $props->on_click_script = 'this.form.submit()';
     $props->add_item('[Default]', '');
     $theme_font_sizes = $this->page->theme_options->font_sizes();
     foreach ($theme_font_sizes as $name => $url) {
         $props->add_item($name, $url);
     }
     $renderer->draw_drop_down_row('font_size_CSS_file_name', $props);
     $check_props = $renderer->make_check_properties();
     $check_props->on_click_script = 'this.form.submit ()';
     $renderer->draw_check_box_row('dont_apply_to_forms', $check_props);
     $renderer->finish();
 }
 /**
  * @param FORM_RENDERER $renderer
  * @access private
  */
 protected function _draw_controls($renderer)
 {
     $renderer->start();
     $renderer->draw_text_row('', 'Are you sure you want to purge ' . $this->_object->title_as_link() . '?');
     $props = $renderer->make_list_properties();
     $props->show_descriptions = true;
     $props->add_item('Publish branch only', History_item_silent, 'Generate a single notification indicating that the branch was purged.');
     $props->add_item('Publish all', History_item_needs_send, 'Generate individual notifications for affected jobs and changes.');
     $renderer->draw_radio_group_row('sub_history_item_publication_state', $props);
     $folder = $this->_object->parent_folder();
     $component_query = $folder->component_query();
     $other_comps = $component_query->objects_at_ids($this->_object->id, true);
     $props = $renderer->make_list_properties();
     $props->add_item('[None]', 0);
     foreach ($other_comps as $comp) {
         $props->add_item($comp->title_as_plain_text(), $comp->id);
     }
     $renderer->draw_drop_down_row('replacement_component_id', $props);
     $buttons[] = $renderer->button_as_HTML('No', $this->_object->home_page());
     $buttons[] = $renderer->submit_button_as_HTML();
     $renderer->draw_buttons_in_row($buttons);
     $renderer->draw_text_row('', '*Purging an branch removes all connections to it and permanently removes it from the database.', 'notes');
     $renderer->finish();
 }
 /**
  * @param FORM_RENDERER $renderer
  * @access private
  */
 protected function _draw_controls($renderer)
 {
     if (!isset($this->_search)) {
         $renderer->labels_css_class = 'top';
         $this->button = 'Go';
         $renderer->start();
         $renderer->draw_text_line_with_button_row('search_text', $renderer->submit_button_as_html(), null, 'search');
         $props = $renderer->make_list_properties();
         /* Fill with all the registered search types. */
         $type_infos = $this->app->search_type_infos();
         foreach ($type_infos as $t) {
             $props->add_item($t->plural_title, $t->id);
         }
         $renderer->draw_drop_down_row('type', $props);
         $renderer->finish();
     } else {
         $renderer->start();
         $this->_search->fields->draw_fields($this, $renderer);
         $renderer->start_row();
         echo $renderer->submit_button_as_HTML();
         $renderer->finish_row();
         $renderer->finish();
     }
 }
Ejemplo n.º 6
0
 /**
  * @param FORM_RENDERER $renderer
  * @access private
  */
 protected function _draw_controls($renderer)
 {
     $renderer->start();
     $renderer->draw_text_line_row('title');
     if ($this->visible('branch_id')) {
         $props = $renderer->make_list_properties();
         $props->css_class = 'small';
         foreach ($this->_branches as $branch) {
             $props->add_item($branch->title_as_plain_text(), $branch->id);
         }
         $renderer->draw_drop_down_row('branch_id', $props);
     }
     if (!$this->object_exists() || !$this->_object->shipped()) {
         $renderer->draw_date_row('time_testing_scheduled');
         $renderer->draw_date_row('time_scheduled');
     }
     $renderer->start_block('Status');
     if (!$this->object_exists() || $this->_object->planned()) {
         $props = $renderer->make_list_properties();
         $props->show_descriptions = true;
         if ($this->visible('is_visible')) {
             $props->add_item($this->app->resolve_icon_as_html('{icons}indicators/invisible', Sixteen_px, ' ') . ' Hidden', Hidden, 'Prevent searching or browsing by non-admin users.');
         }
         $props->add_item($this->app->resolve_icon_as_html('{icons}buttons/calendar', Sixteen_px, ' ') . ' Planned', Planned, 'Release is in development.');
         $props->add_item($this->app->resolve_icon_as_html('{app_icons}statuses/working', Sixteen_px, ' ') . ' Testing', Testing, 'Release is feature-complete and in testing.');
         $renderer->draw_radio_group_row('state', $props);
     } else {
         $props = $renderer->make_list_properties();
         $props->show_descriptions = true;
         if ($this->visible('is_visible')) {
             $props->add_item($this->app->resolve_icon_as_html('{icons}indicators/invisible', Sixteen_px, ' ') . ' Hidden', Hidden, 'Prevent searching or browsing by non-admin users.');
         }
         $props->add_item($this->app->resolve_icon_as_html('{icons}buttons/ship', Sixteen_px, ' ') . ' Shipped', Shipped, 'Jobs and changes can still be added and removed.');
         $props->add_item($this->app->resolve_icon_as_html('{icons}indicators/locked', Sixteen_px, ' ') . ' Locked', Locked, 'Changes and jobs cannot be added or removed.');
         $renderer->draw_radio_group_row('state', $props);
     }
     $renderer->finish_block();
     $renderer->draw_text_box_row('summary');
     $renderer->draw_text_box_row('description');
     $renderer->draw_submit_button_row();
     $this->_draw_history_item_controls($renderer);
     $renderer->finish();
 }
 /**
  * @param FORM_RENDERER $renderer
  * @access private
  */
 protected function _draw_controls($renderer)
 {
     $user_query = $this->app->user_query();
     $email = $this->value_for('email');
     if (!empty($email)) {
         $user = $user_query->object_at_email($email);
     }
     if (isset($user)) {
         $field = $this->field_at('new_email');
         $field->description = 'Linked to the email address for ' . $user->title_as_link();
     }
     $renderer->start();
     $options = new FORM_TEXT_CONTROL_OPTIONS();
     $options->css_class = 'medium';
     $renderer->draw_text_line_row('new_email', $options);
     $props = $renderer->make_list_properties();
     $props->on_click_script = 'on_min_hours_to_wait (this)';
     $props->add_item('Never', Subscriptions_disabled);
     $props->add_item('Immediately', 0);
     $props->add_item('Once an hour', 1);
     $props->add_item('Twice per day', 12);
     $props->add_item('Once per day', 24);
     $props->add_item('Every 2 days', 48);
     $props->add_item('Every 3 days', 72);
     $props->add_item('Once per week', 168);
     $props->add_item('Once per month', 720);
     $renderer->draw_drop_down_row('min_hours_to_wait', $props);
     $props = $renderer->make_list_properties();
     $props->add_item('HTML', 1);
     $props->add_item('Plain text', 0);
     $renderer->draw_radio_group_row('send_as_html', $props);
     $renderer->start_block('');
     $options->css_class = 'tiny';
     $props = $renderer->make_list_properties();
     $props->on_click_script = 'on_change_text_option (this)';
     $props->add_item('Send all available text.', 0);
     // TODO add ability to send CSS class 'text-line' here
     $item = $props->add_item('Send at most ', 1, '', true, $renderer->text_line_as_HTML('preferred_text_length', $options) . ' characters.');
     $item->css_class = 'text-line';
     $renderer->draw_radio_group_row('text_options', $props);
     $renderer->draw_error_row('preferred_text_length');
     $props = $renderer->make_list_properties();
     $props->on_click_script = 'on_group_objects (this)';
     $props->add_item('One item per message.', 0);
     $item = $props->add_item('Group items if there are more than ', 1, '', true, $renderer->text_line_as_HTML('max_individual_messages', $options) . ' at once.');
     $item->css_class = 'text-line';
     $renderer->draw_radio_group_row('group_objects', $props);
     $renderer->draw_error_row('max_individual_messages');
     $props = $renderer->make_list_properties();
     $props->on_click_script = 'on_split_objects (this)';
     $props->add_item('Send only one message.', 0);
     $item = $props->add_item('Send at most ', 1, '', true, $renderer->text_line_as_HTML('max_items_per_message', $options) . ' items per message.');
     $item->css_class = 'text-line';
     $renderer->draw_radio_group_row('split_objects', $props);
     $renderer->draw_error_row('max_items_per_message');
     $check_props = $renderer->make_check_properties();
     $check_props->on_click_script = 'on_show_history_items (this)';
     $renderer->draw_check_box_row('send_own_changes');
     $renderer->draw_check_box_row('show_history_items', $check_props);
     $renderer->draw_check_box_row('group_history_items');
     $renderer->draw_check_box_row('show_history_item_as_subject');
     $renderer->finish_block();
     $renderer->draw_submit_button_row();
     $renderer->finish();
 }
Ejemplo n.º 8
0
 /**
  * Store properties from form into object.
  * @param FORM $form
  * @param FORM_RENDERER $renderer
  */
 public function draw_fields($form, $renderer)
 {
     $props = $renderer->make_list_properties();
     $props->add_item('Today', Search_date_today);
     $props->add_item('This week', Search_date_this_week);
     $props->add_item('This month', Search_date_this_month);
     $props->add_item('Selected dates', Search_date_constant);
     $props->css_class = 'small-medium';
     $renderer->draw_drop_down_row($this->search_type_name(), $props);
     $renderer->draw_date_row($this->after_name());
     $renderer->draw_date_row($this->before_name());
     $renderer->draw_error_row($this->base_name);
 }
Ejemplo n.º 9
0
 /**
  * Draw the selectors for branch properties.
  * If the branch or release is locked, the values should be displayed as read-only.
  * @param BRANCH $branch
  * @param FORM_RENDERER $renderer
  * @param boolean $visible Is this branch enabled for this project entry?
  * @param RELEASE $release Release in this branch (may be empty).
  * @access private
  */
 protected function _draw_branch_info_controls($branch, $renderer, $visible, $release)
 {
     /* Get the list of statuses for this branch. */
     $selected_status = $this->value_for("branch_{$branch->id}_status");
     /** @var $display_options PROJECT_APPLICATION_DISPLAY_OPTIONS */
     $display_options = $this->app->display_options;
     if ($this->cloning() || !$this->object_exists()) {
         $statuses = $display_options->job_statuses();
     } else {
         $statuses = $display_options->job_statuses_for($selected_status);
     }
     if ($this->_branch_is_locked($branch, $release)) {
         if ($visible) {
             $renderer->draw_hidden("branch_{$branch->id}_status");
             $renderer->draw_hidden("branch_{$branch->id}_priority");
             $status = $statuses[$selected_status];
             $renderer->draw_text_row('Status', $this->context->get_icon_with_text($status->icon, Sixteen_px, $status->title));
             $renderer->draw_error_row("branch_{$branch->id}_status");
             $priorities = $display_options->job_priorities();
             $priority = $priorities[$this->value_for("branch_{$branch->id}_priority")];
             $renderer->draw_text_row('Priority', $this->context->get_icon_with_text($priority->icon, Sixteen_px, $priority->title));
             $renderer->draw_error_row("branch_{$branch->id}_priority");
         }
     } else {
         // Draw statuses
         $props = $renderer->make_list_properties();
         $props->css_class = 'medium';
         foreach ($statuses as $status) {
             $props->add_item($status->title, $status->value);
         }
         $renderer->draw_drop_down_row("branch_{$branch->id}_status", $props);
         // Draw priorities
         $props = $renderer->make_list_properties();
         $props->css_class = 'medium';
         $priorities = $display_options->job_priorities();
         foreach ($priorities as $priority) {
             $props->add_item($priority->title, $priority->value);
         }
         $renderer->draw_drop_down_row("branch_{$branch->id}_priority", $props);
     }
     // Draw inherited properties
     parent::_draw_branch_info_controls($branch, $renderer, $visible, $release);
 }
 /**
  * Draw the selector's for branch properties.
  * If the branch or release is locked, the values should be displayed as read-only.
  * @param BRANCH $branch
  * @param FORM_RENDERER $renderer
  * @param boolean $visible Is this branch enabled for this project entry?
  * @param RELEASE $release Release in this branch (may be empty).
  * @access private
  */
 protected function _draw_branch_info_controls($branch, $renderer, $visible, $release)
 {
     if ($this->_branch_is_locked($branch, $release)) {
         $renderer->draw_hidden("branch_{$branch->id}_release_id");
         if (isset($release)) {
             $title = $release->title_as_link();
             if ($release->locked()) {
                 $title = $this->context->get_icon_with_text('{icons}indicators/locked', Sixteen_px, $title);
             }
             $renderer->draw_text_row('Release', $title);
         } else {
             $renderer->draw_text_row('Release', 'Not released');
         }
         $renderer->draw_error_row("branch_{$branch->id}_release_id");
     } else {
         $props = $renderer->make_list_properties();
         $props->css_class = 'medium';
         $props->add_item('[Next release]', 0);
         $release_query = $branch->pending_release_query(Release_not_locked);
         /** @var $releases RELEASE[] */
         $releases = $release_query->objects();
         $planned_release = null;
         if (sizeof($releases)) {
             foreach ($releases as $release) {
                 /** @var $nd DATE_TIME */
                 $nd = $release->time_next_deadline;
                 if ($nd->is_valid()) {
                     $df = $nd->formatter();
                     $df->set_type_and_clear_flags(Date_time_format_short_date);
                     $status = $nd->format($df);
                 } else {
                     $status = $release->state_as_string();
                 }
                 $title = $release->title_as_plain_text() . ' (' . $status . ')';
                 $props->add_item($title, $release->id);
                 if ($release->planned() && !isset($planned_release)) {
                     $planned_release = $release;
                 }
             }
         }
         if (!$this->value_for("branch_{$branch->id}_release_id")) {
             /* If the branch isn't selected or the object is new, then set the
                first planned release as the default instead of '[Next release]'. */
             if ((!$this->object_exists() || !$visible || $this->cloning()) && isset($planned_release)) {
                 $this->set_value("branch_{$branch->id}_release_id", $planned_release->id);
             }
         }
         $renderer->draw_drop_down_row("branch_{$branch->id}_release_id", $props);
     }
     $renderer->start_row(' ');
     $props = $renderer->make_list_properties();
     $props->add_item('Use for non-branch-specific lists.', $branch->id, '', $visible);
     echo $renderer->radio_group_as_html('main_branch_id', $props);
     $renderer->finish_row();
 }