3fb9d495b682971dc56dc5188376a4c13ae18cbc

Author: k-kishida

Date: 2010-02-11 20:53:29 +0900

Can apply saved filter. but not apply saved from Redmine.

diff --git a/app/controllers/components/queries.php b/app/controllers/components/queries.php index d78a08a..f4a197f 100755 --- a/app/controllers/components/queries.php +++ b/app/controllers/components/queries.php @@ -24,7 +24,30 @@ class QueriesComponent extends Object $self->data['Filter']['operators_' . $field] = $options['operator']; $self->data['Filter']['values_' . $field] = $options['values']; } - if (isset($self->params['query_id'])) { + if ($self->_get_param('query_id') != null) { + /* + $conditions = array("Query.project_id" => null); + if(!empty($self->_project)) { + $conditions['OR'] = array('project_id' => $self->_project['Project']['id']); + } + */ + $Query->read(null, $self->_get_param('query_id')); + $show_filters = $Query->getFilters(); + foreach ($show_filters as $field => $options) { + $self->data['Filter']['fields_' . $field] = $field; + $self->data['Filter']['operators_' . $field] = $options['operator']; + switch ($available_filters[$field]['type']) { + case 'list': + case 'list_optional': + case 'list_status': + case 'list_subprojects': + $self->data['Filter']['values_' . $field] = $options['values']; + break; + default : + $self->data['Filter']['values_' . $field] = $options['values'][0]; + break; + } + } } else { if ($self->_project) $this->query_filter_cond = array('Issue.project_id' => $self->_project['Project']['id']); if (isset($self->params['url']['set_filter'], $self->params['form']['fields']) || $forse_set_filter) { diff --git a/app/controllers/issues_controller.php b/app/controllers/issues_controller.php index 299bc29..0351adf 100644 --- a/app/controllers/issues_controller.php +++ b/app/controllers/issues_controller.php @@ -101,6 +101,7 @@ class IssuesController extends AppController 'order' => 'Issue.id DESC', 'limit' => $limit, )); + $this->sidebar_queries(); $this->set('query', array('Query' => $this->Query->defaults())); $this->set('issue_list', $this->paginate('Issue')); $this->set('params', $this->params); @@ -904,5 +905,27 @@ class IssuesController extends AppController # end # end # end -#end + /** + * Move from IssuesHelper + */ + function sidebar_queries() { + # User can see public queries and his own queries + $user_id = 0; + if (!$this->current_user || !$this->current_user['logged']) { + $user_id = $this->current_user['id']; + } + $visible = array(); + $visible[] = array("Query.is_public = ? OR Query.user_id = ?" => array(true, $user_id)); + # Project specific queries and global queries + if(empty($this->_project)) { + $visible[] = array("Query.project_id" => null); + } else { + $visible[] = array("OR"=>array("Query.project_id" => null, "Query.project_id" => $this->_project['Project']['id'])); + } + $sidebar_queries = $this->Query->find('all', array( + 'order' => "Query.name ASC", + 'conditions' => $visible + )); + $this->set('sidebar_queries', $sidebar_queries); + } } \ No newline at end of file diff --git a/app/models/query.php b/app/models/query.php index a45d1e5..989f260 100644 --- a/app/models/query.php +++ b/app/models/query.php @@ -59,7 +59,6 @@ class Query extends AppModel var $actsAs = array( 'Candy', ); -# serialize :filters var $validate = array( 'name' => array( 'validates_presence_of'=>array('rule'=>array('notEmpty')), @@ -75,7 +74,7 @@ class Query extends AppModel var $operators_by_filter_type; var $default_show_filters; var $available_filters; - var $filetes = array(); + var $filters = array(); function __construct() { @@ -791,20 +790,18 @@ class Query extends AppModel return true; } - function afterFind($results, $primary = false) - { - if (isset($results['id'])) { - $rb_filters = Spyc::YAMLLoad($results['filters']); - foreach($rb_filters as $field=>$filter) { - $operator = trim($filter[':operator'], '"'); - $values = array(); - foreach($filter[':values'] as $value) { - $values[] = trim($value, '"'); - } - $this->filters[$field] = compact('operator', 'values'); - } + function getFilters($query = false) { + if(!$query) { + $query = $this->data[$this->name]; + } + $filters = array(); + $rb_filters = Spyc::YAMLLoad($query['filters']); + foreach($rb_filters as $field=>$filter) { + $operator = $filter[0]['operator']; + $values = $filter[1]; + $filters[$field] = compact('operator', 'values'); } - return $results; + return $filters; } } \ No newline at end of file diff --git a/app/views/elements/issues/sidebar.ctp b/app/views/elements/issues/sidebar.ctp index af8763d..220985b 100755 --- a/app/views/elements/issues/sidebar.ctp +++ b/app/views/elements/issues/sidebar.ctp @@ -26,10 +26,6 @@ <% unless sidebar_queries.empty? -%> --> <h3><?php __('Custom queries') ?></h3> -<!-- -<% sidebar_queries.each do |query| -%> -<%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %><br /> -<% end -%> -<%= call_hook(:view_issues_sidebar_queries_bottom) %> -<% end -%> ---> \ No newline at end of file +<?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 endforeach; ?>