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 .= ''; 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 .= '
'; break; } $output .= '
'; $output .= '
'; $output .= ''; $output .= ''; $output .= '
'; $output .= '
'; $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 = ''; $output .= sprintf('%s',$title); $output .= ''.Form::checkbox($condition.'['.$po->{$param}.']',TRUE,$po->{$condition} ? TRUE : FALSE).''; foreach ($dp as $dpo) $output .= ''.Form::checkbox($condition.'['.$dpo->{$param}.']',TRUE,$dpo->{$condition} ? TRUE : FALSE).''; $output .= ''; return $output; } private function table_duplicate_details(Database_MySQL_Result $dp,Model_Photo $po,$param,$title='',$content='') { $output = ''; if (preg_match('/\(/',$param) OR preg_match('/-\>/',$param)) eval("\$d = \$po->$param;"); else $d = $po->display($param); $output .= sprintf('%s',$title); $output .= sprintf('%s',$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('%s',$content ? str_replace('%VALUE%',$d,$content) : $d); } $output .= ''; return $output; } } ?>