/** * @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(); }
/** * @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(); } }
/** * @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(); }
/** * 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); }
/** * 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(); }