/** * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { $renderer->start(); $props = $renderer->make_list_properties(); $names = $this->_object->test_names(); if (!empty($names)) { reset($names); do { $props->add_item(current($names), current($names)); } while (next($names) !== false); } $renderer->draw_radio_group_row('test_name', $props); $renderer->draw_submit_button_row(); $renderer->finish(); }
/** * @param FORM $form * @param FORM_RENDERER $renderer * @access private */ protected function _draw_date_fields($form, $renderer) { $renderer->draw_check_box_row('not_kind'); /** @var $display_options PROJECT_APPLICATION_DISPLAY_OPTIONS */ $display_options = $this->app->display_options; $kinds = $display_options->entry_kinds(); if (sizeof($kinds)) { $props = $renderer->make_list_properties(); $index = 0; foreach ($kinds as $kind) { $props->add_item($this->context->get_icon_with_text($kind->icon, Sixteen_px, $kind->title), $index); $index += 1; } $renderer->draw_check_group_row('kind', $props); } parent::_draw_date_fields($form, $renderer); }
/** * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { $renderer->labels_css_class = 'top'; $renderer->start(); if ($this->show_object_as_link) { $obj_title = $this->_object->title_as_link(); } else { $obj_title = $this->_object->title_as_html(); } $renderer->draw_text_row('', 'Are you sure you want to delete ' . $obj_title . '?'); if ($this->visible('purge')) { $props = $renderer->make_list_properties(); $props->show_descriptions = true; $check_props = $renderer->make_check_properties('purge'); $check_props->on_click_script = 'on_click_purge (this)'; $props->add_item_object($check_props); $props->add_item('remove_resources', 0); $renderer->draw_check_boxes_row('', $props); } $buttons[] = $renderer->button_as_HTML('No', $this->_object->home_page()); $buttons[] = $renderer->submit_button_as_HTML(); $renderer->draw_buttons_in_row($buttons); $renderer->finish(); }
/** * Draw task option controls. * @param FORM_RENDERER $renderer * @access private */ protected function _draw_options($renderer) { $props = $renderer->make_list_properties(); $props->show_descriptions = true; $this->_add_boolean_options($props); $renderer->draw_check_boxes_row('Options', $props); }
/** * @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 * @param $ctrl_id * @return mixed */ protected function _make_user_list_properties_for($renderer, $ctrl_id) { $Result = $renderer->make_list_properties(); $Result->on_click_script = 'on_group_type_changed (this, this.form.' . $ctrl_id . ')'; $Result->add_item('Allow all users', Project_user_all); $Result->add_item('Allow only registered users', Project_user_registered_only); if ($this->login->is_allowed(Privilege_set_group, Privilege_view)) { $group_query = $this->app->group_query(); /** @var GROUP[] $groups */ $groups = $group_query->objects(); if (sizeof($groups)) { $group_props = $renderer->make_list_properties(); $group_props->css_class = 'small'; foreach ($groups as $group) { $group_props->add_item($group->title_as_plain_text(), $group->id); } $Result->add_item('Allow only ' . $renderer->drop_down_as_HTML($ctrl_id, $group_props), Project_user_group); } else { $this->_user_list_error_message = 'Cannot limit by group (no groups available)'; } } else { $this->_user_list_error_message = 'Cannot limit by group (cannot see groups)'; } return $Result; }
/** * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { $renderer->start(); $options = new FORM_TEXT_CONTROL_OPTIONS(); $options->on_change_script = 'on_title_changed (this)'; $renderer->draw_text_line_row('title', $options); if ($this->visible('location')) { $props = $renderer->make_list_properties(); $props->show_descriptions = true; $props->add_item('Local', Album_location_type_local, 'Store pictures on this server under URL Root; uploading is supported.'); $props->add_item('Remote', Album_location_type_remote, 'Retrieve pictures from another server at URL Root; uploading is <b>not</b> supported.'); $renderer->draw_radio_group_row('location', $props); } $options->on_change_script = 'on_url_root_changed (this)'; $renderer->draw_text_line_row('url_root', $options); $item = $renderer->make_check_properties(); $item->on_click_script = 'on_url_root_enabled_changed (this)'; $renderer->draw_check_box_row('url_root_enabled', $item); $options->on_change_script = null; $renderer->start_block('Dates'); $props = $renderer->make_list_properties(); $props->on_click_script = 'on_day_mode_changed (this)'; $props->show_descriptions = true; $props->add_item('One day', Album_is_single_day, 'For parties or sporting events.'); $props->add_item('Several days', Album_is_span, 'For trips; both first and last day are fixed.'); $props->add_item('Journal', Album_is_journal, 'First day is fixed; last day is always today\'s date.'); $props->add_item('Free-form', Album_is_adjusted, 'Calculated automatically from pictures and journals.'); $renderer->start_row(''); echo $renderer->radio_group_as_html('date_style', $props); $renderer->finish_row(); $renderer->draw_date_row('first_day'); $renderer->draw_date_row('last_day'); $renderer->draw_error_row('dates'); $renderer->finish_block(); $renderer->start_block('Settings'); $props = $renderer->make_list_properties(); $props->show_descriptions = true; $props->add_item('is_visible', 1); $props->add_item('show_times', 1); $props->add_item('is_organizational', 1); $item = $renderer->make_check_properties(); $item->title = 'constrain_picture_size'; $options = new FORM_TEXT_CONTROL_OPTIONS(); $options->css_class = 'tiny'; $picture_width_control = $renderer->text_line_as_HTML('max_picture_width', $options); $picture_height_control = $renderer->text_line_as_HTML('max_picture_height', $options); $item->text = ' ' . $picture_width_control . ' x ' . $picture_height_control; $item->on_click_script = 'on_pic_size_constraint_changed (this)'; $item->css_class = 'text-line'; $props->add_item_object($item); $renderer->draw_check_boxes_row('', $props); $renderer->start_row('Temperature'); $props = $renderer->make_list_properties(); $props->items_per_row = 2; $props->add_item('Celsius', 1); $props->add_item('Fahrenheit', 0); echo $renderer->radio_group_as_HTML('show_celsius', $props); $renderer->finish_row(); $renderer->finish_block(); $this->_draw_key_photo($renderer); $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_attachment_selector($renderer) { $attachments = $this->_attachments(); if (sizeof($attachments)) { $props = $renderer->make_list_properties(); $props->css_class = 'small'; foreach ($attachments as $att) { $props->add_item($att->title_as_plain_text(), $att->file_name); } $attachment_control = $renderer->drop_down_as_html('attachments', $props); $props = $renderer->make_list_properties(); $props->add_item('None', 'none'); $props->add_item('Left', 'left'); $props->add_item('Left (alone)', 'left-column'); $props->add_item('Center', 'center'); $props->add_item('Right', 'right'); $props->add_item('Right (alone)', 'right-column'); $props->css_class = 'small'; $alignments = $renderer->drop_down_as_html('alignments', $props); $props = $renderer->make_list_properties(); $props->add_item('Thumbnail', 'thumbnail'); $props->add_item('25%', '25'); $props->add_item('50%', '50'); $props->add_item('75%', '75'); $props->add_item('Full-size', '100'); $props->css_class = 'small'; $sizes = $renderer->drop_down_as_html('sizes', $props); $props = $renderer->make_list_properties(); $props->add_item('No text', 'none'); $props->add_item('Caption', 'caption'); $props->add_item('Tooltip', 'tooltip'); $props->add_item('Both', 'both'); $props->css_class = 'small'; $caption_modes = $renderer->drop_down_as_html('caption_modes', $props); $renderer->start_row('Attachments'); echo $attachment_control; echo $alignments; echo $sizes; echo $caption_modes; echo $renderer->javascript_button_as_html('Add', 'on_insert_attachment ()'); $renderer->finish_row(); } }
/** * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { $renderer->start(); $renderer->draw_text_row('', 'Are you sure you want to ship ' . $this->_object->title_as_link() . '?'); $props = $renderer->make_list_properties(); $props->show_descriptions = true; $props->add_item($this->app->get_icon_with_text('{app_icons}statuses/working', Sixteen_px, 'Release to testing'), Testing, 'Feature-complete internal release.'); $props->add_item($this->app->get_icon_with_text('{icons}buttons/ship', Sixteen_px, 'Ship'), Shipped, 'Jobs and changes can still be added and removed.'); $props->add_item($this->app->get_icon_with_text('{icons}indicators/locked', Sixteen_px, 'Lock'), Locked, 'Changes and jobs cannot be added or removed.'); $renderer->draw_radio_group_row('state', $props); $props = $renderer->make_list_properties(); $props->show_descriptions = true; $props->add_item('Publish release only', History_item_silent, 'Generate a single notification indicating that the release has shipped.'); $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); $buttons[] = $renderer->button_as_HTML('No', $this->_object->home_page()); $buttons[] = $renderer->submit_button_as_HTML(); $renderer->draw_buttons_in_row($buttons); $renderer->finish(); }
/** * @param FORM $form * @param FORM_RENDERER $renderer * @access private */ protected function _draw_date_fields($form, $renderer) { $renderer->draw_check_box_row('not_weather_type'); $props = $renderer->make_list_properties(); $props->items_per_row = 7; $i = 0; $icons = $this->app->display_options->weather_icons(); foreach ($icons as $icon) { $i += 1; $props->add_item($icon->icon_as_html(Twenty_px), $i); } $renderer->draw_check_group_row('weather_type', $props); $renderer->start_row(' '); $options = new FORM_TEXT_CONTROL_OPTIONS(); $options->css_class = 'tiny'; echo 'Warmer than ' . $renderer->text_line_as_html('warmer_than', $options); echo '° and cooler than ' . $renderer->text_line_as_html('colder_than', $options) . '°'; $renderer->finish_row(); parent::_draw_date_fields($form, $renderer); }
/** * @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(); }
/** * @param FORM $form * @param FORM_RENDERER $renderer * @access private */ protected function _draw_folder_selector($form, $renderer) { $props = $renderer->make_list_properties(); $props->add_item('Context or none', Search_user_context_none); $props->add_item('Selected folder(s)', Search_user_constant); $props->add_item('NOT selected folder(s)', Search_user_not_constant); /** @var $id_values int[] */ $id_values = $form->value_for('folder_ids'); $selected_folder_ids = array(); if (sizeof($id_values)) { foreach ($id_values as $id) { if ($id) { $selected_folder_ids[$id] = $id; } } } $visible = $form->value_for('folder_search_type') != Search_user_context_none || sizeof($selected_folder_ids) > 0; $layer = $renderer->start_layer_row('folders', 'Folder(s)', 'Toggle folder options.', $visible); $renderer->start_row(' '); echo $renderer->drop_down_as_html('folder_search_type', $props); echo ' '; $renderer->finish_row(); $renderer->start_row(' '); $folder_query = $this->login->folder_query(); $folder_query->clear_results(); $folders = $folder_query->root_tree($this->app->root_folder_id); $selected_folders = $folder_query->objects_at_ids($selected_folder_ids); /* Make a copy (not a reference). */ $tree = $this->app->make_tree_renderer(); include_once 'webcore/gui/folder_tree_node_info.php'; $tree_node_info = new FOLDER_TREE_NODE_INFO($this->app); include_once 'webcore/gui/selector_tree_decorator.php'; $decorator = new MULTI_SELECTOR_TREE_DECORATOR($tree, $selected_folder_ids); $decorator->control_name = 'folder_ids'; $decorator->form_name = $form->name; $decorator->auto_toggle_children = true; $tree->node_info = $tree_node_info; $tree->decorator = $decorator; $tree->set_visible_nodes($selected_folders); $tree->display($folders); $renderer->finish_row(); $renderer->finish_layer_row($layer); }
/** * @param FORM_RENDERER $renderer * @param PERMISSIONS_FORMATTER $formatter * @access private * @abstract */ protected function _draw_permission_controls($renderer, $formatter) { $renderer->draw_text_row('', 'The settings on the left can override content permissions, either <em>Granting</em> or <em>Denying</em> them. <em>Default</em> uses the permissions defined in the folder.'); if ($this->visible('use_defaults')) { $props = $renderer->make_list_properties(); $props->on_click_script = 'update_controls ()'; if ($this->_object->is_anonymous()) { $props->add_item('Use default permissions for anonymous users.', 1); } else { $props->add_item('Use default permissions for registered users.', 1); } $props->add_item('Use the permissions below.', 0); $renderer->start_row(); echo $renderer->radio_group_as_HTML('use_defaults', $props); $renderer->finish_row(); } $this->_draw_buttons($renderer); $props = $renderer->make_list_properties(); $props->add_item('Default', Privilege_controlled_by_content); $props->add_item('Granted', Privilege_always_granted); $props->add_item('Denied', Privilege_always_denied); $props->css_class = 'tiny-small'; ?> <div class="columns text-flow"> <div> <?php foreach ($this->content_groups as $group) { $renderer->start_block($group->title); foreach ($group->maps as $map) { $this->_draw_tri_permission($map, $formatter, $renderer, $props); } $renderer->finish_block(); } ?> </div> <div> <?php foreach ($this->global_groups as $group) { $renderer->start_block($group->title); foreach ($group->maps as $map) { $this->_draw_permission($map, $formatter, $renderer, $props); } $renderer->finish_block(); } ?> </div> </div> <?php $this->_draw_buttons($renderer); }
/** * Add all users from the query result to the result. * @param USER_QUERY $user_query * @param FORM_RENDERER $renderer * @return FORM_LIST_PROPERTIES * @access private */ protected function _prepare_list_properties_for($renderer, $user_query) { /** @var $users USER[] */ $users = $user_query->objects(); $Result = $renderer->make_list_properties(); $Result->css_class = 'medium'; $Result->add_item('(None)', 0); foreach ($users as $user) { $Result->add_item($user->real_name(true), $user->id); } return $Result; }
/** * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { /** @var UPLOADED_FILE_SET $file_set */ $file_set = $this->value_for('upload_file'); /** @var ALBUM $folder */ $folder = $this->_folder; $upload_allowed = $folder->uploads_allowed(); $upload_found = isset($file_set) && $file_set->is_valid(); $is_uploading = $this->value_for('use_upload'); $this->set_enabled('file_name', !$is_uploading); $this->set_enabled('overwrite', $is_uploading); $this->set_enabled('upload_file', $is_uploading); if (!$upload_allowed || $upload_found) { $renderer->draw_hidden('use_upload'); } if ($upload_found) { $renderer->draw_hidden('overwrite'); } $renderer->start(); $renderer->draw_text_line_row('title'); if (!$this->object_exists()) { $renderer->start_block('Day'); $props = $renderer->make_list_properties(); $props->on_click_script = 'on_date_changed (this)'; if (isset($this->_exif_date)) { $caption = 'Use <span class="field">' . $this->_exif_date->format() . '</span> (snapshot date)'; } else { $caption = 'Use date stored by a digital camera'; } $props->add_item($caption, 1); $props->add_item('Use the date below', 0); $renderer->start_row(); echo $renderer->radio_group_as_html('read_exif', $props); $renderer->finish_row(); $renderer->draw_date_row('day'); $renderer->draw_error_row('read_exif'); $renderer->draw_error_row('day'); $renderer->finish_block(); } else { $renderer->draw_date_row('day'); } $renderer->draw_text_box_row('description', 'short-medium'); if ($upload_allowed) { if (!$upload_found) { $options = new FORM_TEXT_CONTROL_OPTIONS(); $renderer->start_block('Picture'); if ($this->object_exists()) { /** @var PICTURE $pic */ $pic = $this->_object; echo '<img class="pullquote right align-right" src="' . $pic->full_thumbnail_name() . '" alt="Picture">'; } $props = $renderer->make_list_properties(); $props->on_click_script = 'file_option_changed (this)'; $props->add_item($this->app->resolve_icon_as_html('{icons}buttons/upload', Sixteen_px, 'Upload') . ' Upload the picture below', 1); $renderer->start_row(); echo $renderer->radio_group_as_html('use_upload', $props); $renderer->finish_row(); $renderer->start_row(); $options->on_change_script = 'upload_file_changed (this)'; echo $renderer->file_as_html('upload_file', $options); echo $renderer->check_box_as_html('overwrite'); $renderer->finish_row(); $renderer->draw_error_row('upload_file'); $props->clear_items(); $props->add_item('Show the picture from the URL below', 0); $renderer->start_row(); echo $renderer->radio_group_as_html('use_upload', $props); $renderer->finish_row(); $renderer->start_row(); $options->on_change_script = 'file_name_changed (this)'; echo $renderer->text_line_as_html('file_name', $options); $renderer->finish_row(); $renderer->draw_error_row('file_name'); $this->_draw_thumbnail_options($renderer, ''); $renderer->finish_block(); } else { $renderer->draw_file_row('upload_file'); $this->_draw_thumbnail_options($renderer, ' '); } } else { $renderer->start_row(); if ($this->object_exists()) { /** @var PICTURE $pic */ $pic = $this->_object; echo '<img class="pullquote right align-right" src="' . $pic->full_thumbnail_name() . '" alt="Picture">'; } $renderer->finish_row(); $renderer->draw_text_line_row('file_name'); $this->_draw_thumbnail_options($renderer, ' '); } $renderer->draw_check_box_row('is_visible'); $renderer->draw_submit_button_row(); $this->_draw_history_item_controls($renderer); $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 release 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); $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 a release removes all connections to it and permanently removes it from the database.', 'info-box-bottom'); $renderer->finish(); }
/** * Display additional email options. * Allow descendants to use the standard email form rendering, while still adding new mailing options. * @param FORM_RENDERER $renderer * @access private */ protected function _draw_options($renderer) { if ($this->visible('send_as_html')) { $props = $renderer->make_list_properties(); $props->items_per_row = 2; $props->add_item('HTML', 1); $props->add_item('Plain text', 0); $renderer->draw_radio_group_row('send_as_html', $props); } }
/** * @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) { $renderer->labels_css_class = 'top'; /** @var FOLDER $folder */ $folder = $this->_object; if (!$folder->defines_security()) { $renderer->start(); $renderer->draw_text_row('', 'Are you sure you want to create new permissions for ' . $folder->title_as_link() . '?'); $parent_folder = $folder->parent_folder(); $permissions_folder = $parent_folder->permissions_folder(); $props = $renderer->make_list_properties(); $props->add_item('Do not create any default permissions*', Security_copy_none); $props->add_item('Copy current permissions from ' . $permissions_folder->title_as_link(), Security_copy_current); $props->add_item('Grant all permissions for user ' . $this->login->title_as_link(), Security_create_admin); $renderer->draw_radio_group_row('copy_mode', $props); $buttons[] = $renderer->button_as_HTML('No', 'view_folder_permissions.php?id=' . $this->_object->id); $buttons[] = $renderer->submit_button_as_HTML(); $renderer->draw_buttons_in_row($buttons); $permissions = $this->login->permissions(); if ($permissions->value_for(Privilege_set_folder, Privilege_view) != Privilege_always_granted) { $renderer->draw_text_row('', $this->app->get_message('*In this case, you <span class="field">will not</span> be able to see this folder.', 'warning'), 'notes'); } else { $renderer->draw_text_row('', '*Your user will still be allowed to see this folder.', 'notes'); } $renderer->finish(); } else { $renderer->start(); $renderer->draw_text_row('', 'Are you sure you want to remove permissions for ' . $folder->title_as_link() . '?*'); $buttons[] = $renderer->button_as_HTML('No', 'view_folder_permissions.php?id=' . $folder->id); $buttons[] = $renderer->submit_button_as_HTML(); $renderer->draw_buttons_in_row($buttons); $renderer->draw_text_row('', '*Doing so will revert all permissions to those used by the parent folder.', 'notes'); $renderer->finish(); } }
/** * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { $renderer->start(); $renderer->draw_text_line_row('title'); $renderer->draw_date_row('day'); /** @var ALBUM_APPLICATION_DISPLAY_OPTIONS $album_display_options */ $album_display_options = $this->app->display_options; /** @var PROPERTY_VALUE[] $icons */ $icons = $album_display_options->weather_icons(); if (sizeof($icons)) { $props = $renderer->make_list_properties(); $props->items_per_row = 7; $i = 0; foreach ($icons as $icon) { $i += 1; $props->add_item($icon->icon_as_html(Thirty_px), $i); } $renderer->draw_radio_group_row('weather_type', $props); } $renderer->draw_text_box_row('weather'); $options = new FORM_TEXT_CONTROL_OPTIONS(); $options->css_class = 'tiny'; $renderer->start_row('Temps', 'text-line'); echo $renderer->text_line_as_html('lo_temp', $options) . '°C to '; echo $renderer->text_line_as_html('hi_temp', $options) . '°C '; $renderer->finish_row(); $renderer->draw_error_row('lo_temp'); $renderer->draw_error_row('hi_temp'); $renderer->draw_error_row('temps'); $renderer->draw_text_box_row('description', 'tall'); $renderer->draw_check_box_row('is_visible'); $renderer->draw_submit_button_row(); $this->_draw_history_item_controls($renderer); $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(); } }
/** * Hook to allow descendants to use the default form layout, but add print options. * @param FORM_RENDERER $renderer * @access private */ protected function _draw_print_options($renderer) { $props = $renderer->make_list_properties(); $props->add_item('Don\'t show comments', Print_comments_off); $props->add_item('Show comments threaded', Print_comments_threaded); $props->add_item('Show comments flat', Print_comments_flat); $renderer->draw_radio_group_row('show_comments', $props); $renderer->draw_check_box_row('show_users'); }
/** * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { $renderer->start(); $renderer->draw_text_line_row('title'); $renderer->draw_password_row('password1'); $renderer->draw_password_row('password2'); $renderer->draw_text_line_row('real_first_name'); $renderer->draw_text_line_row('real_last_name'); $renderer->draw_text_line_row('email'); $props = $renderer->make_list_properties(); $props->show_descriptions = true; $props->add_item('Keep private', User_email_hidden, 'Do not display this email under any circumstances. Used only for sending subscriptions.'); $props->add_item('Show scrambled', User_email_scrambled, 'Email is displayed, but scrambled (e.g. bob [at] network [dot] com)'); $props->add_item('Show normally', User_email_visible, 'Email is displayed normally (open to screen-scraping; not recommended)'); $renderer->draw_radio_group_row('email_visibility', $props); if ($this->_captcha_enabled()) { $this->_draw_captcha_controls($renderer); } $renderer->draw_submit_button_row(); $layer = $renderer->start_layer_row('other_options', 'More Options', '%s more user account options'); $renderer->draw_text_line_row('home_page_url'); $renderer->draw_text_line_row('picture_url'); $renderer->draw_icon_browser_row('icon_url'); $renderer->draw_text_box_row('signature', 'short-medium'); $renderer->draw_text_box_row('description', 'short-medium'); $renderer->finish_layer_row($layer); $this->_draw_history_item_controls($renderer); $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(); }
/** * Draws controls for history item notification. * @param FORM_RENDERER $renderer * @access private */ protected function _draw_history_item_controls($renderer) { $description = 'Change history is stored automatically. %s history options.'; $layer = $renderer->start_layer_row('history', 'History', $description, false, 'full-screen-optional'); $props = $renderer->make_list_properties(); $props->show_descriptions = true; $props->add_item('Default', History_item_default, 'Let the system decide whether to send notifications for this change.'); $props->add_item('Publish', History_item_needs_send, 'Send notifications for this change.'); $props->add_item('Do not publish', History_item_silent, 'Do not send notifications for this change'); $renderer->draw_radio_group_row('publication_state', $props); $renderer->draw_text_line_row('history_item_title'); $renderer->draw_text_box_row('history_item_description', 'short-medium'); $renderer->draw_submit_button_row(); $renderer->finish_layer_row($layer); }
/** * Draw the controls for the form. * @param FORM_RENDERER $renderer * @access private */ protected function _draw_controls($renderer) { $renderer->default_control_height = '75px'; $renderer->start(); $props = $renderer->make_list_properties(); $props->add_item('bool1', 1); $props->add_item('bool2', 1); $props->items_per_row = 4; $renderer->draw_check_boxes_row('Options', $props); $renderer->start_row('Text', 'text-line'); $text_props = new FORM_TEXT_CONTROL_OPTIONS(); $text_props->css_class = 'small'; echo $renderer->date_as_html('date'); echo ' '; echo $renderer->text_line_as_html('name', $text_props); $renderer->finish_row(); $renderer->draw_text_box_row('description'); $renderer->start_block(''); $props = $renderer->make_list_properties(); $props->show_descriptions = true; $props->css_class = 'small'; $props->add_item('Option One', 0, 'Description for option one.'); $props->add_item('Option Two', 1, 'Description for option two.'); $renderer->draw_radio_group_row('select', $props); $field = $this->field_at('select'); $renderer->start_row('Menus', 'text-line'); echo $renderer->drop_down_as_html('select', $props); echo ' '; $field->required = true; echo $renderer->drop_down_as_html('select', $props); $renderer->finish_row(); $renderer->start_row('Lists'); $field->required = false; echo $renderer->list_box_as_html('select', $props); echo ' '; $field->required = true; echo $renderer->list_box_as_html('select', $props); $renderer->finish_row(); $renderer->finish_block(); $renderer->draw_submit_button_row(); $renderer->finish(); }
/** * @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(); }
/** * 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(); }