38f6917de3dd61694d870249ceb1dbc9eb7ad77e

Author: k-kishida

Date: 2010-02-13 20:53:26 +0900

Can update/delete custom queries. And Can filter issues of all projects.

diff --git a/app/controllers/components/queries.php b/app/controllers/components/queries.php index f4a197f..6bb9760 100755 --- a/app/controllers/components/queries.php +++ b/app/controllers/components/queries.php @@ -16,7 +16,7 @@ class QueriesComponent extends Object $self = $this->controller; $Query = $self->Query; $self->set('force_show_filters', $force_show_filters = $Query->show_filters()); - $show_filters = isset($self->params['url']['set_filter']) || $forse_set_filter ? a() : $force_show_filters; + $show_filters = $forse_set_filter ? a() : $force_show_filters; $available_filters = $Query->available_filters($self->_project, $self->current_user); if (!isset($self->data['Filter'])) $self->data['Filter'] = a(); foreach ($show_filters as $field => $options) { @@ -44,7 +44,7 @@ class QueriesComponent extends Object $self->data['Filter']['values_' . $field] = $options['values']; break; default : - $self->data['Filter']['values_' . $field] = $options['values'][0]; + $self->data['Filter']['values_' . $field] = $this->get_option_value($options['values']); break; } } @@ -84,7 +84,15 @@ class QueriesComponent extends Object } } $self->set('available_filters', $available_filters); - $self->set('show_filters', $this->show_filters = $show_filters); + $self->set('show_filters', $show_filters); + $this->show_filters = $show_filters; + } + + function get_option_value($value) { + if(is_array($value)) { + return $this->get_option_value($value[0]); + } + return $value; } # # Retrieve query from session or build a new query # def retrieve_query diff --git a/app/controllers/issues_controller.php b/app/controllers/issues_controller.php index 0351adf..03600de 100644 --- a/app/controllers/issues_controller.php +++ b/app/controllers/issues_controller.php @@ -102,7 +102,11 @@ class IssuesController extends AppController 'limit' => $limit, )); $this->sidebar_queries(); - $this->set('query', array('Query' => $this->Query->defaults())); + if(empty($this->Query->data)) { + $this->set('query', array('Query' => $this->Query->defaults())); + } else { + $this->set('query', $this->Query->data); + } $this->set('issue_list', $this->paginate('Issue')); $this->set('params', $this->params); if ($this->RequestHandler->isAjax()) $this->layout = 'ajax'; diff --git a/app/controllers/queries_controller.php b/app/controllers/queries_controller.php index b26d4e6..262891b 100644 --- a/app/controllers/queries_controller.php +++ b/app/controllers/queries_controller.php @@ -81,8 +81,38 @@ class QueriesController extends AppController if ($this->RequestHandler->isAjax()) $this->layout = 'ajax'; } - function edit() - { + function edit($id=false) { + if(!empty($this->data)) { + $this->params['query_id'] = $id; + $this->Queries->retrieve_query(true); + $query = $this->data['Query']; + $query['project'] = empty($this->Query->data['Project']) ? a() : array('Project' => $this->Query->data['Project']); + $query['project_id'] = $this->Query->data['Project']['id']; + $query['user_id'] = $this->Query->data['User']['id']; + $query['filters'] = array(); + + foreach($this->params['form']['fields'] as $field) { + $this->Query->add_filter($field, $this->params['form']['operators'][$field], $this->params['form']['values'][$field]); + } + # @query.attributes = params[:query] + if(!empty($query['query_is_for_all'])) $query['project_id'] = null; + $query['is_public'] = $query['project'] && $this->User->is_allowed_to($this->current_user, ':manage_public_queries', $query['project']) || $this->current_user['admin'] ? true : false; + # @query.column_names = nil if params[:default_columns] + $this->Query->save($query); + if(empty($this->Query->validationErrors)) { + $this->Session->setFlash(__('Successful creation.', true), 'default', array('class'=>'flash flash_notice')); + $this->redirect(array('controller'=>'issues', 'action'=>'index', 'project_id'=>$this->Query->data['Project']['identifier'])); + } + return; + } elseif ($id) { + $this->params['query_id'] = $id; + $this->Queries->retrieve_query(true); + $this->data['Query'] = $this->Query->data['Query']; + $this->data['Query']['default_columns'] = true; + if(empty($this->Query->data['Query']['project_id'])) $this->data['Query']['query_is_for_all'] = "1"; + return; + } + $this->cakeError('error404'); } # def edit @@ -103,10 +133,16 @@ class QueriesController extends AppController # end # end # -# def destroy -# @query.destroy if request.post? -# redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :set_filter => 1 -# end + function destroy($id=false) { + if ($id) { + if ($this->Query->read(null, $id)) { + $project = $this->Query->data['Project']; + $this->Query->del(); + $this->redirect(array('controller'=>'issues', 'action'=>'index', 'project_id'=>$project['identifier'], '?'=>array('set_filter' => 1))); + } + } + $this->cakeError('error404'); + } # #private # def find_query diff --git a/app/views/elements/issues/sidebar.ctp b/app/views/elements/issues/sidebar.ctp index 220985b..55dc502 100755 --- a/app/views/elements/issues/sidebar.ctp +++ b/app/views/elements/issues/sidebar.ctp @@ -1,9 +1,9 @@ <h3><?php __('Issues') ?></h3> -<?php echo $html->link(__('View all issues', true), am(isset($project) && $project ? array('project_id' => $project['Project']['identifier_or_id']) : a(), array('controller' => 'issues', 'action' => 'index', '?set_filter=1'))) ?><br /> +<?php echo $html->link(__('View all issues', true), am(isset($main_project) && $main_project ? array('project_id' => $main_project['Project']['identifier']) : a(), array('controller' => 'issues', 'action' => 'index', '?'=>array('set_filter'=>1)))) ?><br /> <!--<%= link_to l(:label_issue_view_all), { :controller => 'issues', :action => 'index', :project_id => @project, :set_filter => 1 } %><br />--> -<?php if (isset($project) && $project): ?> -<?php echo $html->link(__('Summary', true), am(isset($project) && $project ? array('id' => $project['Project']['identifier_or_id']) : a(), array('controller' => 'reports', 'action' => 'issue_report'))) ?><br /> -<?php echo $html->link(__('Change log', true), am(isset($project) && $project ? array('id' => $project['Project']['identifier_or_id']) : a(), array('controller' => 'projects', 'action' => 'changelog'))) ?><br /> +<?php if (isset($main_project) && $main_project): ?> +<?php echo $html->link(__('Summary', true), am(isset($main_project) && $main_project ? array('id' => $main_project['Project']['identifier']) : a(), array('controller' => 'reports', 'action' => 'issue_report'))) ?><br /> +<?php echo $html->link(__('Change log', true), am(isset($main_project) && $main_project ? array('id' => $main_project['Project']['identifier']) : a(), array('controller' => 'projects', 'action' => 'changelog'))) ?><br /> <!-- <%= link_to l(:field_summary), :controller => 'reports', :action => 'issue_report', :id => @project %><br /> <%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %><br /> @@ -27,5 +27,13 @@ --> <h3><?php __('Custom queries') ?></h3> <?php foreach($sidebar_queries as $query): ?> -<?php echo $html->link(h($query['Query']['name']), array('controller' => 'issues', 'action' => 'index', 'project_id' => $main_project['Project']['identifier'], '?'=>array('query_id' => $query['Query']['id']))) ?><br /> +<?php + if(isset($main_project)) { + echo $html->link(h($query['Query']['name']), array('controller' => 'issues', 'action' => 'index', 'project_id' => $main_project['Project']['identifier'], '?'=>array('query_id' => $query['Query']['id']))); + echo '<br />'; + } elseif(empty($query['Query']['project_id'])) { + echo $html->link(h($query['Query']['name']), array('controller' => 'issues', 'action' => 'index', '?'=>array('query_id' => $query['Query']['id']))); + echo '<br />'; + } +?> <?php endforeach; ?> diff --git a/app/views/elements/queries/filters.ctp b/app/views/elements/queries/filters.ctp index 7a88692..cdeb57a 100755 --- a/app/views/elements/queries/filters.ctp +++ b/app/views/elements/queries/filters.ctp @@ -68,7 +68,9 @@ function toggle_multi_select(field) { <label for="cb_<?php echo h($field) ?>"><?php __($field) ?></label> </td> <td style="width:150px;"> - <?php echo $form->select('Filter.operators_' . $field, $filter['operators'], null, array('name' => 'operators[' . $field . ']', 'id' => 'operators_' . $field, 'onchange' => "toggle_operator('" . $javascript->escapeString($field) . "');", 'class' => 'select-small', 'style' => 'vertical-align: top;'), false) ?> + <?php + echo $form->select('Filter.operators_' . $field, $filter['operators'], null, array('name' => 'operators[' . $field . ']', 'id' => 'operators_' . $field, 'onchange' => "toggle_operator('" . $javascript->escapeString($field) . "');", 'class' => 'select-small', 'style' => 'vertical-align: top;'), false); + ?> </td> <td> <div id="div_values_<?php echo h($field) ?>" style="display:none;"> diff --git a/app/views/issues/index.ctp b/app/views/issues/index.ctp index 32b97a4..f1704b3 100644 --- a/app/views/issues/index.ctp +++ b/app/views/issues/index.ctp @@ -1,5 +1,4 @@ -<?php if (true): ?> -<!--<% if @query.new_record? %>--> +<?php if(empty($query['Query']['id'])): ?> <h2><?php __('Issues') ?></h2> <?php $candy->html_title(__('Issues', true)) ?> @@ -8,8 +7,8 @@ <fieldset id="filters"><legend><?php __('Filters') ?></legend> <?php echo $this->renderElement('queries/filters', array('show_filters' => $show_filters, 'available_filters' => $available_filters)) ?> <p class="buttons"> - <?php echo $ajax->link(__('Apply', true), array('controller' => 'issues', 'action' => 'index', 'project_id' => $main_project['Project']['identifier_or_id'], '?set_filter=1'), array('update' => 'content', 'with' => "Form.serialize('query_form')", 'class' => 'icon icon-checked')) ?> - <?php echo $ajax->link(__('Clear', true), array('controller' => 'issues', 'action' => 'index', 'project_id' => $main_project['Project']['identifier_or_id'], '?set_filter=1'), array('update' => 'content', 'class' => 'icon icon-reload')) ?> + <?php echo $ajax->link(__('Apply', true), array('controller' => 'issues', 'action' => 'index', 'project_id' => isset($main_project) ? $main_project['Project']['identifier_or_id'] : null, '?set_filter=1'), array('update' => 'content', 'with' => "Form.serialize('query_form')", 'class' => 'icon icon-checked')) ?> + <?php echo $ajax->link(__('Clear', true), array('controller' => 'issues', 'action' => 'index', 'project_id' => isset($main_project) ? $main_project['Project']['identifier_or_id'] : null, '?set_filter=1'), array('update' => 'content', 'class' => 'icon icon-reload')) ?> <!-- <% if User.current.allowed_to?(:save_queries, @project, :global => true) %> --> @@ -26,7 +25,7 @@ <?php if ($queries->editable($query, $currentuser)): ?> <!--<% if @query.editable_by?(User.current) %>--> <?php echo $html->link(__('Edit', true), array('controller' => 'queries', 'action' => 'edit', 'id' => $query['Query']['id']), array('class' => 'icon icon-edit')) ?> - <?php echo $html->link(__('Delete', true), array('controller' => 'queries', 'action' => 'destroy', 'id' => $query['Query']['id'], 'confirm' => __('Are you sure ?', true)), array('class' => 'icon icon-del')) ?> + <?php echo $html->link(__('Delete', true), array('controller' => 'queries', 'action' => 'destroy', 'id' => $query['Query']['id']), array('class' => 'icon icon-del'), __('Are you sure ?', true)) ?> <!-- <%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %> <%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %> diff --git a/app/views/queries/edit.ctp b/app/views/queries/edit.ctp index 1c99ac0..4252e31 100644 --- a/app/views/queries/edit.ctp +++ b/app/views/queries/edit.ctp @@ -1,6 +1,7 @@ -<h2><%= l(:label_query) %></h2> +<h2><?php __('Custom query') ?></h2> -<% form_tag({:action => 'edit', :id => @query}, :onsubmit => 'selectAllOptions("selected_columns");') do %> - <%= render :partial => 'form', :locals => {:query => @query} %> - <%= submit_tag l(:button_save) %> -<% end %> +<?php echo $form->create('Query', array('url' => array('action'=>'edit', 'id' => $this->params['query_id']), 'onsubmit' => 'selectAllOptions("selected_columns");')); ?> + <?php echo $this->renderElement('error_explanation'); ?> + <?php echo $this->renderElement('queries/form', array('query' => $this->data)) ?> + <?php echo $form->submit(__('Save', true)) ?> +<?php echo $form->end(); ?>