<?php defined('SYSPATH') or die('No direct access allowed.'); /** * Mark all accounts that have no outstanding invoices and active services as disabled. * * @package Photo * @category Controllers * @author Deon George * @copyright (c) 2014 Deon George * @license http://dev.leenooks.net/license.html */ class Controller_Photo extends Controller_TemplateDefault { public function action_index() { } public function action_details() { $po = ORM::factory('Photo',$this->request->param('id')); if (! $po->loaded()) HTTP::redirect('index'); Block::factory() ->title('Details for Photo:'.$po->id) ->body(Debug::vars($po->info())); } public function action_duplicate() { $output = ''; // Update the current posted photos. if ($this->request->post()) foreach ($this->request->post('process') as $pid) { $po = ORM::factory('Photo',$pid); $po->duplicate = Arr::get($this->request->post('duplicate'),$pid); $po->delete = Arr::get($this->request->post('delete'),$pid); $po->flag = Arr::get($this->request->post('flag'),$pid); $po->save(); } $p = ORM::factory('Photo'); if ($x=$this->request->param('id')) $p->where('id','=',$x); else $p->where('duplicate','=',TRUE) ->where_open() ->where('delete','!=',TRUE) ->or_where('delete','is',NULL) ->where_close(); $output .= Form::open(sprintf('%s/%s',strtolower($this->request->controller()),$this->request->action())); foreach ($p->find_all() as $po) { $dp = $po->duplicate_find()->find_all(); // Check that there are still duplicates if ($dp->count() == 0) { $po->duplicate = NULL; $po->save(); continue; } $output .= Form::hidden('process[]',$po->id); foreach ($dp as $dpo) $output .= Form::hidden('process[]',$dpo->id); $output .= '<table class="table table-striped table-condensed table-hover">'; foreach (array( 'ID'=>array('key'=>'id','value'=>HTML::anchor('/photo/details/%VALUE%','%VALUE%')), 'Thumbnail'=>array('key'=>'id','value'=>HTML::anchor('/photo/view/%VALUE%',HTML::image('photo/thumbnail/%VALUE%'))), 'Signature'=>array('key'=>'signature'), 'Date Taken'=>array('key'=>'date_taken()'), 'Filename'=>array('key'=>'filename'), 'Proposed Name'=>array('key'=>'path()'), 'Width'=>array('key'=>'width'), 'Height'=>array('key'=>'height'), 'Orientation'=>array('key'=>'orientation'), 'Make'=>array('key'=>'make'), 'Model'=>array('key'=>'model'), ) as $k=>$v) $output .= $this->table_duplicate_details($dp,$po,$v['key'],$k,Arr::get($v,'value','%VALUE%')); foreach (array( 'Flag'=>array('key'=>'id','value'=>'flag'), 'Duplicate'=>array('key'=>'id','value'=>'duplicate'), 'Delete'=>array('key'=>'id','value'=>'delete'), ) as $k=>$v) $output .= $this->table_duplicate_checkbox($dp,$po,$v['key'],$k,Arr::get($v,'value','%VALUE%')); $output .= '</table>'; break; } $output .= '<div class="row">'; $output .= '<div class="offset2">'; $output .= '<button type="submit" class="btn btn-primary">Save changes</button>'; $output .= '<button type="button" class="btn">Cancel</button>'; $output .= '</div>'; $output .= '</div>'; $output .= Form::close(); Block::factory() ->title('Duplicate Photo:'.$po->id) ->title_icon('icon-edit') ->body($output); } public function action_thumbnail() { // Get the file path from the request $po = ORM::factory('Photo',$this->request->param('id')); return $this->image($po->thumbnail(),$po->date_taken,$po->type(TRUE)); } public function action_view() { $po = ORM::factory('Photo',$this->request->param('id')); return $this->image($po->image(),$po->date_taken,$po->type(TRUE)); } private function image($content,$modified,$type) { // Send the file content as the response if ($content) $this->response->body($content); // Return a 404 status else $this->response->status(404); // Generate and check the ETag for this file if (Kohana::$environment < Kohana::TESTING OR Kohana::$config->load('debug')->etag) $this->check_cache(sha1($this->response->body())); // Set the proper headers to allow caching $this->response->headers('Content-Type',$type); $this->response->headers('Content-Length',(string)$this->response->content_length()); $this->response->headers('Last-Modified',date('r',$modified)); $this->auto_render = FALSE; } private function table_duplicate_checkbox(Database_MySQL_Result $dp,Model_Photo $po,$param,$title,$condition) { $output = '<tr>'; $output .= sprintf('<th>%s</th>',$title); $output .= '<td>'.Form::checkbox($condition.'['.$po->{$param}.']',TRUE,$po->{$condition} ? TRUE : FALSE).'</td>'; foreach ($dp as $dpo) $output .= '<td>'.Form::checkbox($condition.'['.$dpo->{$param}.']',TRUE,$dpo->{$condition} ? TRUE : FALSE).'</td>'; $output .= '</tr>'; return $output; } private function table_duplicate_details(Database_MySQL_Result $dp,Model_Photo $po,$param,$title='',$content='') { $output = '<tr>'; if (preg_match('/\(/',$param) OR preg_match('/-\>/',$param)) eval("\$d = \$po->$param;"); else $d = $po->display($param); $output .= sprintf('<th>%s</th>',$title); $output .= sprintf('<td>%s</td>',$content ? str_replace('%VALUE%',$d,$content) : $d); foreach ($dp as $dpo) { if (preg_match('/\(/',$param) OR preg_match('/-\>/',$param)) eval("\$d = \$dpo->$param;"); else $d = $dpo->display($param); $output .= sprintf('<td>%s</td>',$content ? str_replace('%VALUE%',$d,$content) : $d); } $output .= '</tr>'; return $output; } } ?>