38f6917de3dd61694d870249ceb1dbc9eb7ad77e
Author: k-kishida
Date: 2010-02-13 20:53:26 +0900
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(); ?>
