3fb9d495b682971dc56dc5188376a4c13ae18cbc
Author: k-kishida
Date: 2010-02-11 20:53:29 +0900
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; ?>
