*/
class Attachment_thumbnailAction extends AttachmentAction
{
- protected function handle()
+ protected $thumb_w = null; // max width
+ protected $thumb_h = null; // max height
+ protected $thumb_a = null; // "aspect ratio" (more like "square", 1 or 0)
+
+ protected function prepare(array $args=array())
{
- $this->showPage();
+ parent::prepare($args);
+
+ foreach (array('w', 'h', 'a') as $attr) {
+ $this->{"thumb_$attr"} = $this->arg($attr);
+ }
+ return true;
}
/**
*/
function showCore()
{
- $file_thumbnail = File_thumbnail::getKV('file_id', $this->attachment->id);
- if (empty($file_thumbnail->url)) {
- return;
- }
- $this->element('img', array('src' => $file_thumbnail->url, 'alt' => 'Thumbnail'));
+ // Returns a File_thumbnail object or throws exception if not available
+ $thumbnail = $this->attachment->getThumbnail($this->thumb_w, $this->thumb_h, $this->thumb_a);
+ $this->element('img', array('src' => $thumbnail->getUrl(), 'alt' => 'Thumbnail'));
}
}
*/
class File extends Managed_DataObject
{
- ###START_AUTOCODE
- /* the code below is auto generated do not remove the above tag */
-
public $__table = 'file'; // table name
public $id; // int(4) primary_key not_null
public $url; // varchar(255) unique_key
public $filename; // varchar(255)
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
- /* the code above is auto generated do not remove the tag below */
- ###END_AUTOCODE
-
public static function schemaDef()
{
return array(
/**
* Get the attachment's thumbnail record, if any.
*
+ * @param $width int Max width of thumbnail in pixels
+ * @param $height int Max height of thumbnail in pixels. If null, set to $width
+ *
* @return File_thumbnail
*/
- function getThumbnail()
+ public function getThumbnail($width=null, $height=null)
{
- return File_thumbnail::getKV('file_id', $this->id);
+ if ($width === null) {
+ $width = common_config('attachments', 'thumb_width');
+ $height = common_config('attachments', 'thumb_height');
+ $square = common_config('attachments', 'thumb_square');
+ } elseif ($height === null) {
+ $square = true;
+ }
+
+ $params = array('file_id'=> $this->id,
+ 'width' => $width,
+ 'height' => $square ? $width : $height);
+ $thumb = File_thumbnail::pkeyGet($params);
+ if ($thumb === null) {
+ // generate a new thumbnail for desired parameters
+ }
+ return $thumb;
}
public function getPath()