$tn.filename LIKE '%{$this->escape($q['search']['filename'])}%' OR $tn.title LIKE '%{$this->escape($q['search']['filename'])}%'
");
}
+
+ if(!empty($q['_to_base64']) && !empty($q['image_id'])) {
+ $i = DB_DataObject::factory("Images");
+ $i->get($q['image_id']);
+ $roo->jok($i->toBase64());
+ }
}
$o = $this->object();
//print_r($o);
- if (method_exists($o, 'checkPerm')) {
+ if ($o && method_exists($o, 'checkPerm')) {
// edit permissions on related object needed...
return $o->checkPerm( $lvl == 'S' ? 'S' : 'E' , $au);
function getStoreName()
{
$opts = HTML_FlexyFramework::get()->Pman;
- $fn = preg_replace('/[^a-z0-9\.]+/i', '_', $this->filename);
+ $fn = preg_replace('/[^a-z0-9_\.]+/i', '_', $this->filename);
return implode( '/', array(
$opts['storedir'], '_images_', date('Y/m', strtotime($this->created)), $this->id . '-'. $fn
));
*/
function exists()
{
- return file_exists($this->getStoreName());
+ clearstatcache();
+ //var_dump($this->getStoreName());
+ $ret = file_exists($this->getStoreName());
+ if (!$ret) {
+ return $this->canFix();
+ }
+ return $ret;
+ }
+ /**
+ * the getStorename code got changed, and some old files may not end up with the correct name anymore.
+ * this tries to fix it.
+ *
+ */
+ function canFix() {
+ // look for the image in the folder, with matching id.
+ // this is problematic..
+ $fn = $this->getStoreName();
+ if (file_exists($fn . '-really-missing')) {
+ return false;
+ }
+ if (!file_exists(dirname($fn))) {
+ return false;
+ }
+ foreach( scandir(dirname($fn)) as $n) {
+ if (empty($n) || $n[0] == '.') {
+ continue;
+ }
+ $bits = explode('-', $n);
+ if ($bits[0] != $this->id) {
+ continue;
+ }
+ if (preg_match('/\.[0-9]+x[0-9]]+\.jpeg$/', $n)) {
+ continue;
+ }
+ copy(dirname($fn). '/'. $n, $fn);
+ clearstatcache();
+ return true;
+ }
+ // fixme - flag it as bad
+ touch($fn . '-really-missing');
}
$opts = HTML_FlexyFramework::get()->Pman;
$deldir = $opts['storedir']. '/_deleted_images_';
+ clearstatcache();
if (!file_exists( $deldir )) {
- mkdir($deldir, 0755);
+ @mkdir($deldir, 0755); // not sure why we are erroring here.. after checking - maybe permissions?
}
$fn = $this->getStoreName();
}
- $ret['shorten_name'] = $ret['filename'] = $this->shorten_name();
+ $ret['shorten_name'] = $this->shorten_name();
return $ret;
}
//$size = min(1024, (int) $size);
// the size should 200x150 to convert
$sizear = preg_split('/(x|c)/', $size);
- if(empty($sizear[1])){
- $sizear[1] = 0;
+ if(!isset($sizear[1])){
+ $sizear[1] = 0; // 0x with '0' is a box? why
}
+
$size = implode(strpos($size,'c') > -1 ? 'c' : 'x', $sizear);
// print_r($size);
$fc = $this->toFileConvert();
$id = $matches[1];
} else if (preg_match('#Images/([0-9]+)/#', $url, $matches)) {
$id = $matches[1];
+ } else if (preg_match('#images[^/]+/([0-9]+)/#', $url, $matches)) {
+ // supports images.xxxxx.com/{number}/name...
+ $id = $matches[1];
}
-
if ($id === false || $id < 1) {
return false;
}
*
*
*/
- function toHTML($size, $provider = '/Images/Thumb')
+ function toHTML($size, $provider = '/Images/Thumb', $extra = '')
{
}
if (empty($sz[1])) {
$ratio = empty($this->width) ? 1 : $this->height/ ($this->width *1.0);
- $sy = $ratio * $sx;
+ $sy = intval($ratio * $sx);
} else {
$sy = $sz[1];
}
// create it?
- $extra = '';
+
if (strlen($this->title)) {
$extra = ' title="'. htmlspecialchars($this->title) . '"';
}
*/
function toFileConvert()
{
+ $fn = $this->getStoreName();
+
require_once 'File/Convert.php';
$fc = new File_Convert($this->getStoreName(), $this->mimetype);
return $fc;
function createFromData($data)
{
- $this->mimetype= strtolower($this->mimetype);
+ if (0 === strpos($data, "data:")) {
+ // data:image/png;base64,
+ $data = substr($data,5);
+ $bits = explode(";", $data);
+ $this->mimetype = $bits[0];
+ }
+ static $imgid = 1;
+ if (empty($this->filename)) {
+ require_once 'File/MimeType.php';
+ $y = new File_MimeType();
+ $this->filename = 'image-'.$imgid++.'.'.$y->toExt($this->mimetype);
+ }
+
+
+ $this->mimetype = strtolower($this->mimetype);
+ if ($this->mimetype == 'image/jpg') {
+ $this->mimetype = 'image/jpeg';
+ }
+
$explode_mimetype = explode('/', $this->mimetype);
if (array_shift($explode_mimetype) == 'image') {
- $imgs = @getimagesize($data);
+ $imgs = @getimagesize('data://'. $data);
if (!empty($imgs) && !empty($imgs[0]) && !empty($imgs[1])) {
list($this->width , $this->height) = $imgs;
}
file_put_contents($f, file_get_contents("data://" . $data));
-
+ //var_dump($f);exit;
$o = clone($this);
$this->filesize = filesize($f);
}
$file = $this->getStoreName();
-
+
if(!file_exists($file)){
return false;
}