getProperties());
}*/
static $inst = null;
static $table = null;
static function init(){
if(self::$inst === null){
//$db = JFactory::getDbo();
self::$inst = new VmMedia( );
if(!isset(self::$theme_url)){
self::$theme_url = VmConfig::get('vm_themeurl',0);
if(empty(self::$theme_url)){
self::$theme_url = 'components/com_virtuemart/';
}
}
self::$table = VmTable::getInstance('Medias', 'Table', array('dbo'=>JFactory::getDbo()));
}
}
static function getMedia($id){
self::$table->load($id);
$attribsImage = self::$table->getProperties();
foreach($attribsImage as $k=>$v){
self::$inst->{$k} = $v;
}
self::$inst->setFilePaths();
return clone(self::$inst);
}
function setFilePaths(){
$choosed = false;
if($this->file_type == 'product' || $this->file_type == 'products'){
$this->file_url_folder = VmConfig::get('media_product_path');
$choosed = true;
}
else if($this->file_type == 'category' || $this->file_type == 'categories'){
$this->file_url_folder = VmConfig::get('media_category_path');
$choosed = true;
}
else if($this->file_type == 'shop'){
$this->file_url_folder = VmConfig::get('media_path');
$choosed = true;
}
else if($this->file_type == 'vendor' || $this->file_type == 'vendors'){
$this->file_url_folder = VmConfig::get('media_vendor_path');
$choosed = true;
}
else if($this->file_type == 'manufacturer' || $this->file_type == 'manufacturers'){
$this->file_url_folder = VmConfig::get('media_manufacturer_path');
$choosed = true;
}
else if($this->file_type == 'forSale' || $this->file_type== 'file_is_forSale'){
$this->file_url_folder = shopFunctions::checkSafePathBase();
if($this->file_url_folder){
$choosed = true;
$this->file_is_forSale=1;
}
}
if($choosed && empty($this->file_url_folder)){
$link = JURI::root() . 'administrator/index.php?option=com_virtuemart&view=config';
vmInfo('COM_VIRTUEMART_MEDIA_NO_PATH_TYPE',$this->file_type,$link );
//Todo add general media_path to config
//$this->file_url_folder = VmConfig::get('media_path');
$this->file_url_folder = self::getStoriesFb('typeless').'/';
$this->setRole=true;
// } else if(!$choosed and empty($this->file_url_folder) and $this->file_is_forSale==0){
} else if(!$choosed and empty($this->file_url_folder) ){
if(empty($this->file_type) and !empty($this->file_url)){
vmAdminInfo('COM_VIRTUEMART_MEDIA_CHOOSE_TYPE',$this->file_title );
// vmError('Ignore this message, when it appears while the media synchronisation process, else report to http://forum.virtuemart.net/index.php?board=127.0 : cant create media of unknown type, a programmers error, used type ',$this->file_type);
}
$this->file_url_folder = self::getStoriesFb('typeless').'/';
$this->setRole=true;
} else if(!$choosed and $this->file_is_forSale==1){
$this->file_url_folder = '';
$this->setRole=false;
}
//return $this->file_url_folder;
//$this->file_url_folder = '';
$this->file_url_folder_thumb = '';
//if( substr( $this->file_url, 0, 2) == "//" ) {
$rdspos = strrpos($this->file_url,'/');
if($rdspos!==false){
$this->file_name = substr($this->file_url,$rdspos+1);
$rdspos = strrpos($this->file_name,'.');
if($rdspos!==false){
$this->file_extension = strtolower(JFile::getExt($this->file_name));
$this->file_name = substr($this->file_name, 0,$rdspos);
}
}else {
vmdebug('$name',$this->file_url);
}
//vmdebug('Remote image URL, created file_name',$this->file_name,$this->file_extension);
//}
//vmdebug('$this->file_url '.$this->file_url,$this->file_name,$this->file_extension);
if($this->file_is_forSale==0 and $this->file_type!='forSale'){
$this->file_url_folder_thumb = $this->file_url_folder.'resized/';
$this->file_path_folder = str_replace('/',DS,$this->file_url_folder);
} else {
$safePath = shopFunctions::checkSafePathBase();
if(!$safePath){
return FALSE;
}
$this->file_path_folder = $safePath;
$this->file_url_folder = $this->file_path_folder;//str_replace(DS,'/',$this->file_path_folder);
$this->file_url_folder_thumb = VmConfig::get('forSale_path_thumb');
}
}
/**
* Tests if a function is an image by mime or extension
*
* @author Max Milbers
* @param string $file_mimetype
* @param string $file_extension
*/
private function isImage(){
if(!isset($this->isImage)){
//$this->file_extension = JFile::stripExt($this->file_name );
//vmdebug('isImage ',$this->file_name,$this->file_extension);
if($this->file_extension == 'jpg' || $this->file_extension == 'jpeg' || $this->file_extension == 'png' || $this->file_extension == 'gif'){
$this->isImage = TRUE;
} else {
$this->isImage = FALSE;
vmTrace('is no image '.$this->file_extension);
}
}
return $this->isImage;
}
function filterImageArgs($imageArgs){
if(!empty($imageArgs)){
if(!is_array($imageArgs)){
$imageArgs = str_replace(array('class','"','='),'',$imageArgs);
$imageArgs = array('class' => $imageArgs.' '.$this->file_class);
} else {
if(!isset($imageArgs['class'])) $imageArgs['class'] = '';
$imageArgs['class'] .= ' '.$this->file_class;
}
} else {
$imageArgs = array('class' => $imageArgs.' '.$this->file_class);
}
return $imageArgs;
}
function setNoImageSet(){
/*if($this->file_is_downloadable){
$file_name = VmConfig::get('downloadable','zip.png');
} else {*/
$file_name = VmConfig::get('no_image_set','noimage_new.gif');
//}
$this->file_name = JFile::stripExt($file_name);
$this->file_url_folder = self::theme_url.'assets/images/vmgeneral/';
$this->file_url = $this->file_url_folder.$file_name;
$this->file_url_folder_thumb = static::getStoriesFb('typeless').'/';;
$this->file_meta = vmText::_('COM_VIRTUEMART_NO_IMAGE_SET').' '.$this->file_description;
$this->file_extension = strtolower(JFile::getExt($file_name));
}
function displayMedia($imageArgs='',$lightbox=true,$effect="class='modal' rel='group'",$return = true,$withDescr = false,$absUrl = false, $width=0,$height=0){
$imageArgs = $this->imageArgsToArray($imageArgs);
if($withDescr) $withDescr = $this->file_description;
if(!$this->isImage()){
return $this->getIcon($imageArgs,$lightbox,$return,$withDescr,$absUrl);
}
if( substr( $this->file_url, 0, 2) == "//" ) {
$toChk = $this->file_url;
try {
$resObj = VmConnector::getHttp(array(), array('curl', 'stream'))->get($toChk);
//vmdebug('Object per URL',$resObj);
if($resObj->code!=200){
vmdebug('URL does not exists',$toChk,$resObj);
vmError(vmText::sprintf('COM_VIRTUEMART_FILE_NOT_FOUND',$toChk));
};
} catch (RuntimeException $e) {
vmError(vmText::sprintf('COM_VIRTUEMART_FILE_NOT_FOUND',$toChk));
}
} else {
if($this->file_is_forSale){
$toChk = $this->file_url;
} else {
$toChk = VMPATH_ROOT.'/'.$this->file_url;
}
if(!empty($this->file_name) and !JFile::exists($toChk)){
vmdebug('Media file does not exists',$toChk);
vmError(vmText::sprintf('COM_VIRTUEMART_FILE_NOT_FOUND',$toChk));
}
}
if(empty($this->file_meta)){
if(!empty($this->file_description)){
$file_alt = $this->file_description;
} else if(!empty($this->file_name)) {
$file_alt = $this->file_name;
} else {
$file_alt = '';
}
} else {
$file_alt = $this->file_meta;
}
$file_url_thumb = $this -> getFileUrlThumb($width, $height);
$media_path = VMPATH_ROOT.DS.str_replace('/',DS,$file_url_thumb);
if (empty($file_url_thumb) || !file_exists($media_path)) {
$file_url_thumb = $this->createThumb($width,$height);
}
if($return) return $this->displayIt($file_url_thumb, $file_alt, $imageArgs,$lightbox,$effect,$withDescr,$absUrl);
}
function displayMediaFull($imageArgs='',$lightbox=true,$effect ="class='modal'",$description = true ){
}
/**
* This function displays the image, when the image is not already a resized one,
* it tries to get first the resized one, or create a resized one or fallback in case
*
* @author Max Milbers
*
* @param string $imageArgs Attributes to be included in the tag.
* @param boolean $lightbox alternative display method
* @param string $effect alternative lightbox display
* @param boolean $withDesc display the image media description
*/
function displayMediaThumb($imageArgs='',$lightbox=true,$effect="class='modal' rel='group'",$return = true,$withDescr = false,$absUrl = false, $width=0,$height=0){
$imageArgs = $this->imageArgsToArray($imageArgs);
//vmdebug('displayMediaThumb ');
$typelessUrl = '';
if(empty($this->file_name)){
$typelessUrl = static::getStoriesFb('typeless').'/';
}
if( substr( $this->file_url, 0, 2) == "//" ) {
$toChk = $this->file_url;
try {
$resObj = VmConnector::getHttp(array(), array('curl', 'stream'))->get($toChk);
//vmdebug('Object per URL',$resObj);
if($resObj->code!=200){
vmdebug('URL does not exists',$toChk,$resObj);
vmError(vmText::sprintf('COM_VIRTUEMART_FILE_NOT_FOUND',$toChk));
};
} catch (RuntimeException $e) {
vmError(vmText::sprintf('COM_VIRTUEMART_FILE_NOT_FOUND',$toChk));
}
} else {
if($this->file_is_forSale){
$toChk = $this->file_url;
} else {
$toChk = VMPATH_ROOT.'/'.$this->file_url;
}
if(empty($typelessUrl) and !JFile::exists($toChk)){
vmdebug('Media file does not exists',$toChk);
vmError(vmText::sprintf('COM_VIRTUEMART_FILE_NOT_FOUND',$toChk));
}
}
//needs file_url_thumb, or file_url_folder_thumb and file_name and file_extension
$file_url_thumb = $this -> getFileUrlThumb($width, $height);
//vmdebug('displayMediaThumb '.$file_url_thumb);
$media_path = VMPATH_ROOT.DS.str_replace('/',DS,$file_url_thumb);
if(empty($this->file_meta)){
if(!empty($this->file_description)){
$file_alt = $this->file_description;
} else if(!empty($this->file_name)) {
$file_alt = $this->file_name;
} else {
$file_alt = '';
}
} else {
$file_alt = $this->file_meta;
}
if ((empty($file_url_thumb) || !file_exists($media_path)) && is_a($this,'VmImage')) {
$file_url_thumb = $this->createThumb($width,$height);
$media_path = VMPATH_ROOT.DS.str_replace('/',DS,$file_url_thumb);
}
//$this->file_url_thumb = $file_url_thumb;
if($withDescr) $withDescr = $this->file_description;
if (empty($file_url_thumb) || !file_exists($media_path)) {
return $this->getIcon($imageArgs,$lightbox,$return,$withDescr,$absUrl);
}
if($return) return $this->displayIt($file_url_thumb, $file_alt, $imageArgs,$lightbox,$effect,$withDescr,$absUrl);
}
function getFileUrlThumb($width = 0,$height = 0){
if(!empty($this->file_url_thumb)){
$file_url_thumb = $this->file_url_thumb;
} else if($this->isImage()) {
$file_url_thumb = $this->createThumbFileUrl($width,$height);
} else {
vmdebug('No image '.$this->file_name);
$file_url_thumb = '';
}
return $file_url_thumb;
}
public function createThumbFileUrl($width=0,$height=0){
$file_name = $this->createThumbName($width,$height);
if(empty($this->file_name_thumb)) {
//vmdebug('createThumbFileUrl empty file_name_thumb ',$this);
return false;
}
$file_url_thumb = $this->file_url_folder_thumb.$this->file_name_thumb.'.'.$this->file_extension;
return $file_url_thumb;
}
/**
* a small function that ensures that we always build the thumbnail name with the same method
*/
public function createThumbName($width=0,$height=0){
if(empty($this->file_name)) return false;
$dim = self::determineWH($width, $height);
$this->file_name_thumb = $this->file_name.'_'.$dim['width'].'x'.$dim['height'];
return $this->file_name_thumb;
}
/**
* This function should return later also an icon, if there isnt any automatic thumbnail creation possible
* like pdf, zip, ...
*
* @author Max Milbers
* @param string $imageArgs
* @param boolean $lightbox
*/
function getIcon($imageArgs,$lightbox,$return=false,$withDescr=false,$absUrl = false){
$file_url = false;
$file_alt = false;
static $exists = array();
$tC = self::$theme_url.'assets/images/vmgeneral/filetype_'.$this->file_extension.'.png';
if(!empty($this->file_extension)){
$file_alt = $this->file_description;
if(!isset($exists[$this->file_extension])){
$exists[$this->file_extension] = file_exists($tC);
}
if($exists[$this->file_extension]){
$file_url = $tC;
}
}
if(!$file_url){
$file_url = self::$theme_url.'assets/images/vmgeneral/'.VmConfig::get('no_image_found');
$file_alt = vmText::_('COM_VIRTUEMART_NO_IMAGE_FOUND').' '.$this->file_description;
}
if($return){
if($this->file_is_downloadable){
return $this->displayIt($file_url, $file_alt, '',true,'',$withDescr,$absUrl);
} else {
return $this->displayIt($file_url, $file_alt, $imageArgs,$lightbox,'',$withDescr,$absUrl);
}
}
}
/**
* This function is just for options how to display an image...
* we may add here plugins for displaying images
*
* @author Max Milbers
* @param string $file_url relative Url
* @param string $file_alt media description
* @param string $imageArgs attributes for displaying the images
* @param boolean $lightbox use lightbox
*/
public function displayIt( $file_url, $file_alt, $imageArgs, $lightbox, $effect ="class='modal'", $withDesc=false, $absUrl = false){
if ($withDesc) $desc=''.$withDesc.'';
else $desc='';
$root='';
if( substr( $file_url, 0, 2) == "//" ) {
$root = JURI::root(true).'/';;
} else if($absUrl){
$root = JURI::root(false);
} else {
$root = JURI::root(true).'/';
}
$args = '';
if(is_array($imageArgs)){
foreach($imageArgs as $k=>$v){
$args .= ' '.$k.'="'.$v.'" ';
}
} else {
$args = $imageArgs;
}
if($lightbox){
$image = '';//JHtml::image($file_url, $file_alt, $imageArgs);
if ($file_alt ) $file_alt = 'title="'.$file_alt.'"';
if ($file_url and pathinfo($file_url, PATHINFO_EXTENSION) and substr( $file_url, 0, 4) != "http") {
if($this->file_is_forSale or substr( $file_url, 0, 2) == "//"){
$href = $file_url ;
} else {
$href = JURI::root() .$file_url ;
}
} else {
$href = $root.$file_url ;
}
$lightboxImage = ''.$image.'';
$lightboxImage = $lightboxImage.$desc;
return $lightboxImage;
} else {
return ''.$desc;
}
}
public function determineWH($width,$height){
$dim = array();
$dim['width'] = $width;
$dim['height'] = $height;
if(!$width and !$height){
$dim['width'] = VmConfig::get('img_width',90);
$dim['height'] = VmConfig::get('img_height',90);
}
$dim['width'] = (int)$dim['width'];
$dim['height'] = (int)$dim['height'];;
return $dim;
}
/**
* This function actually creates the thumb
* and when it is instanciated with one of the getImage function automatically updates the db
*
* @author Max Milbers
* @param boolean $save Execute update function
* @return name of the thumbnail
*/
public function createThumb($width=0,$height=0) {
if(empty($this->file_url_folder)){
vmError('Couldnt create thumb, no directory given. Activate vmdebug to understand which database entry is creating this error');
vmdebug('createThumb, no directory given',$this);
return FALSE;
}
if(empty($this->file_name)){
if($this->virtuemart_media_id!=0){
vmError('Couldnt create thumb, no name given. Activate vmdebug to understand which database entry is creating this error');
vmdebug('createThumb, no name given',$this);
}
return false;
}
$synchronise = vRequest::getString('synchronise',false);
if(!VmConfig::get('img_resize_enable') || $synchronise) return;
//now lets create the thumbnail, saving is done in this function
$dim = self::determineWH($width, $height);
$width = $dim['width'];
$height = $dim['height'];
// Don't allow sizes beyond 2000 pixels //I dont think that this is good, should be config
// $width = min($width, 2000);
// $height = min($height, 2000);
$maxsize = false;
$bgred = 255;
$bggreen = 255;
$bgblue = 255;
$root = '';
$this->file_name_thumb = $this->createThumbName($width,$height);
$exists = false;
if( substr( $this->file_url, 0, 2) == "//" ) {
$fullSizeFilenamePath = $this->file_url;
$exists = true;
//$resizedFilenamePath = vRequest::filterPath(VMPATH_ROOT.'/'.$this->file_url_folder_thumb.$this->file_name_thumb);
vmdebug('Set file url as $fullSizeFilenamePath',$fullSizeFilenamePath,$this->file_name_thumb);
} else {
if($this->file_is_forSale==0){
$fullSizeFilenamePath = VMPATH_ROOT.'/'.$this->file_url_folder.$this->file_name.'.'.$this->file_extension;
} else {
$fullSizeFilenamePath = $this->file_url_folder.$this->file_name.'.'.$this->file_extension;
}
$fullSizeFilenamePath = vRequest::filterPath($fullSizeFilenamePath);
$exists = file_exists($fullSizeFilenamePath);
}
$resizedFilenamePath = vRequest::filterPath(VMPATH_ROOT.'/'.$this->file_url_folder_thumb.$this->file_name_thumb.'.'.$this->file_extension);
$this->checkPathCreateFolders(vRequest::filterPath($this->file_url_folder_thumb));
if ($exists) {
if(!file_exists($resizedFilenamePath)) {
$createdImage = new Img2Thumb( $fullSizeFilenamePath, (int)$width, (int)$height, $resizedFilenamePath, $maxsize, $bgred, $bggreen, $bgblue );
if(!$createdImage){
return 0;
}
}
return $this->file_url_folder_thumb.$this->file_name_thumb.'.'.$this->file_extension;
} else {
vmError('Couldnt create thumb, file not found '.$fullSizeFilenamePath);
return 0;
}
}
static function getStoriesFb($suffix = ''){
if(!isset(self::$url[$suffix])){
self::$url[$suffix] = 'images/virtuemart/'. $suffix ;
if(JFolder::exists(VMPATH_ROOT .'/'.self::$url[$suffix])) {
return self::$url[$suffix];
} else {
$urlOld = 'images/stories/virtuemart/'. $suffix;
if(JFolder::exists(VMPATH_ROOT .'/'.$urlOld)){
self::$url[$suffix] = $urlOld;
return $urlOld;
}
}
if(JFolder::create(VMPATH_ROOT .'/'.self::$url[$suffix])) {
return self::$url[$suffix];
} else {
self::$url[$suffix] = false;
return false;
}
} else {
return self::$url[$suffix];
}
}
}