Skip to content

Commit

Permalink
inline search
Browse files Browse the repository at this point in the history
  • Loading branch information
charlesmarshall committed May 10, 2012
1 parent 7958ed0 commit a2cb2a3
Show file tree
Hide file tree
Showing 15 changed files with 197 additions and 5 deletions.
3 changes: 3 additions & 0 deletions lib/model/Organisation.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ public function setup(){
$this->define("comments", "ManyToManyField", array('target_model'=>"Comment", 'group'=>'relationships')); //used for notes about organisation
}

public function search_details(){
return $this->title . " <span>$this->telephone</span><span>$this->email</span>";
}

}
?>
3 changes: 3 additions & 0 deletions lib/model/Staff.php
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,8 @@ public function department_id($func="all"){
return $ids;
}

public function search_details(){
return $this->title . " <span>$this->telephone</span><span>$this->email</span>";
}
}
?>
4 changes: 4 additions & 0 deletions lib/model/WildfireResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,5 +141,9 @@ public function for_department($department_id, $join="jobs"){
}
}

public function search_details(){
return $this->title;
}

}
?>
4 changes: 3 additions & 1 deletion resources/app/controller/BaseController.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class BaseController extends WaxController{
'details'=>array('owner', 'admin'),
'delete'=>array('owner')
);
public static $searchable = true;
public static $global_search_columns = array('id','title');

public function controller_global(){
parent::controller_global();
Expand All @@ -34,7 +36,7 @@ public function controller_global(){
}

public function _base_url(){
return "/home/";
return "/dash/";
}
//the url of the controller
public function _url(){
Expand Down
1 change: 1 addition & 0 deletions resources/app/controller/DashController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class DashController extends BaseController{
public $name = "Home";
public $navigation_links = array('index');
public $filter_fields=array();
public static $searchable = false;
public $permissions = array(
'index'=>array('standard'=>'standard', 'staff'=>'staff', 'admin'=>'admin', 'owner'=>'owner')
);
Expand Down
41 changes: 41 additions & 0 deletions resources/app/controller/SearchController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?
class SearchController extends BaseController{
public $name = "Search";
public $model_class = "Staff";
public $filter_fields=array();
public $navigation_links = array();
public $search_results = array();
public $permissions = array(
'index'=>array('owner', 'admin', 'staff'),
'create'=>array('owner', 'admin', 'staff'),
'edit'=>array('owner', 'admin', 'staff'),
'details'=>array('owner', 'admin', 'staff'),
'delete'=>array()
);

//do a fuzzy search on all the controllers that are allowed
public function index(){
$search_on = array();
foreach($this->structure as $name=>$details){
$class = $details['class'];
if($class::$searchable){
$controller = new $class(false, false);
$search_on[$name] = array('model'=>$controller->model_class, 'cols'=>$class::$global_search_columns);
}
}
if($q = Request::param('q')){
foreach($search_on as $name=>$info){
$class = $info['model'];
$model = new $class;
$res = array();
foreach($info['cols'] as $col){
foreach($model->clear()->scope("live")->filter("$col LIKE ?", "%".$q."%", "raw")->limit(3)->all() as $row) $res[$row->primval] = $row;
}
if(count($res)) $this->search_results[$name] = $res;
}
}

}

}
?>
2 changes: 1 addition & 1 deletion resources/app/controller/WorkController.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class WorkController extends BaseController{
'update'=>array('owner', 'admin', 'staff'),
'graphs'=>array('owner', 'admin', 'staff')
);

public static $searchable = false;

public function listing(){
parent::index();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
jQuery(document).ready(function(){

var timed_search = false;


jQuery(window).bind("autocomplete", function(e, field, val, form, replace){
console.log(field);
console.log(val);
console.log(form);
console.log(replace);
var dest = form.attr("action")+".ajax";
jQuery.ajax({
url:dest,
data:form.serialize(),
type:form.attr("method").toUpperCase(),
success:function(res){
replace.html(res);
}
});

});

jQuery("input.autocomplete").keyup(function(e){
var field = jQuery(this),
val = field.val(),
form = field.parents("form"),
replace = form.find(field.attr("data-replace"))
;
clearTimeout(timed_search);
timed_search = setTimeout(function(){
jQuery(window).trigger("autocomplete", [field, val, form, replace]);
}, 800);
});

});
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,60 @@
float:right;
margin-left:10px;
margin-top:0;
}
}

#header_search{
float:right;
width:25%;
margin-left:1%;
}
#header_search label,
#header_search input{
display:block;
float:left;
}
#header_search label span{
display:none;
}
#header_search input{
width:95%;
padding:5px 1%;
}
#header_search .inline_search_results{
position:relative;
width:95%;
padding:4px 1%;
}
#header_search .search_results{
position:absolute;
padding:0;
top:24px;
background:white;
border-top:0;
width:100%;
box-shadow:4px 5px 6px rgba(0,0,0,0.4);
}
.search_results .result{
padding:0;
border-bottom:1px solid rgba(94, 94, 94, 0.2);
}
.search_results .result a{
text-decoration:none;
display:block;
padding:3px 10px;
}
.search_results .result span{
margin-bottom:0px;
display:block;
font-size:93%;
}
.search_results .result a.sect{
font-size:116%;
padding:4px 6px;
}
.search_results .result a.res{
font-size:100%;
}
.search_results .result a.res:hover{
background:#CFF2F9;
}
7 changes: 7 additions & 0 deletions view/SearchController/_inline.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<form action="/search/index/" method="post" id="header_search" class='autocomplete'>
<fieldset>
<label for="header_search_box"><span>Search</span></label>
<input id="header_search_box" type="text" value="" name="q" placeholder="Search" class="autocomplete" data-replace=".inline_search_results">
<div class='inline_search_results'></div>
</fieldset>
</form>
14 changes: 14 additions & 0 deletions view/SearchController/index.ajax
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<div class='search_results'>
<?if($search_results):?>
<?foreach($search_results as $con=>$results):?>
<div class='result clearfix'>
<a href="/<?=strtolower($con)?>/" class='sect'><?=ucwords($con)?></a>
<?foreach($results as $row):?>
<a href="/<?=strtolower($con)?>/details/<?=$row->primval?>/" class='res'><?=$row->search_details()?></a>
<?endforeach?>
</div>
<?endforeach?>
<?else:?>
<p><em>No results</em></p>
<?endif?>
</div>
9 changes: 9 additions & 0 deletions view/SearchController/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?=partial("_navbar", array('structure'=>$structure, 'controller'=>$controller, 'action'=>$action, 'model'=>$model, 'filter_fields'=>array(), 'model_class'=>$model_class, 'model_scope'=>$model_scope, 'model_filters'=>array()));?>
<div class='full padded clearfix'>
<?=partial("$controller/_dynamic_tab", array('active_staff'=>$active_staff, 'controller'=>$controller, 'action'=>$action));?>

<div class='content clearfix listing_block'>


</div>
</div>
Empty file.
18 changes: 17 additions & 1 deletion view/WorkController/adhoc.ajax
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,27 @@
<input type='hidden' name="<?=$model->table?>[date_end]" value="<?=date("Y-m-d")?>">
<div class='split clearfix'>
<span class='clearfix'><?=$$form_name->title->render();?></span>
<span class='clearfix'><?=$$form_name->content->render();?></span>
<?$jobs = new Job("live");?>
<span class='clearfix'>
<label>Job</label>
<select name="<?=$model->table?>[job_id]" id="<?=$model->table?>_jobs">
<option value="">-- Select --</option>
<?$org = false;?>
<?foreach($jobs->for_department($active_staff->department_id())->order("organisation_id ASC, date_go_live ASC")->all() as $job):?>
<?if($org != $job->organisation_id):?>
<?if($org):?></optgroup><?endif?>
<optgroup label="<?=(($o = $job->client)? $o->title : "No Client")?>">
<?$org = $job->organisation_id;?>
<?endif?>
<option value="<?=$job->primval?>"><?=$job->title?> (<?if($c = $job->client):?><?=$c->title?> <?endif?>@<?=date("jS M", strtotime($job->date_go_live))?>)</option>
<?endforeach?>
</select>
</span>
<span class='clearfix'><?=$$form_name->client->render();?></span>
<span class='clearfix'><?=$$form_name->fee->render();?></span>
<span class='clearfix'><?=$$form_name->hours_used->render();?></span>
<span class='clearfix'><?=$$form_name->department->render();?></span>
<span class='clearfix'><?=$$form_name->content->render();?></span>
<span class='clearfix'><?=$$form_name->type->render();?></span>
</div>
<input type="submit" name="form_submit" value="Save" class='button submit_button'>
Expand Down
3 changes: 2 additions & 1 deletion view/shared/_header.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
<a href="/login/" class='button login'>Login</a>
<a href="/join/" class='button join'>Join</a>
<?endif?>

<?=partial("search/_inline");?>
<h1 id="logo"><a href="/<?if($active_staff):?>dash/<?endif?>"><span><?=Config::get("site/name")?><span></a></h1>
<h2><a href="/<?=$controller?>/">&raquo; <?=(($name)? $name : Inflections::humanize($controller))?></a></h2>

</div>
</div>

0 comments on commit a2cb2a3

Please sign in to comment.