/** * add appropriate WHERE clause that filters metafiles linked to given article * * @param Article $article * @return MetaFileQuery */ public function filterByArticle(Article $article) { if ($article->getId()) { $this->innerJoin('articles_files af', 'af.filesID = f.filesID'); $this->addCondition("af.articlesID = ?", $article->getId()); } return $this; }
/** * return all metafile instances linked to an article with mimetype 'image/jpeg', 'image/png', 'image/gif' * * @param Article $article * @param callback $callBackSort * @throws MetaFileException * @return array:\vxPHP\File\MetaFile */ public static function getImagesForArticle(Article $article, $callBackSort = NULL) { $result = array(); $mimeTypes = array('image/jpeg', 'image/png', 'image/gif'); $files = Application::getInstance()->getDb()->doPreparedQuery("\n\t\t\tSELECT\n\t\t\t\tf.*,\n\t\t\t\tCONCAT(fo.Path, IFNULL(f.Obscured_Filename, f.File)) as FullPath\n\t\t\tFROM\n\t\t\t\tfiles f\n\t\t\t\tINNER JOIN folders fo ON f.foldersID = fo.foldersID\n\t\t\t\tINNER JOIN articles_files af ON af.filesID = f.filesID\n\t\t\tWHERE\n\t\t\t\taf.articlesID = ?\n\t\t\t\tAND f.Mimetype IN ('" . implode("','", $mimeTypes) . "')\n\t\t\tORDER BY\n\t\t\t\taf.customSort\n\t\t\t", array($article->getId())); foreach ($files as &$f) { if (isset(self::$instancesById[$f['filesID']])) { $file = self::$instancesById[$f['filesID']]; } else { $file = new self(NULL, NULL, $f); self::$instancesById[$f['filesID']] = $file; self::$instancesByPath[$file->filesystemFile->getPath()] = $file; } $result[] = $file; } if (is_null($callBackSort)) { return $result; } else { if (is_callable($callBackSort)) { usort($result, $callBackSort); return $result; } else { if (is_callable("self::{$callBackSort}")) { usort($result, "self::{$callBackSort}"); return $result; } else { throw new MetaFileException("'{$callBackSort}' is not callable."); } } } }