Notice: Undefined index: adsensem-show-ad in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 280

Notice: wp_enqueue_script was called incorrectly. Scripts and styles should not be registered or enqueued until the wp_enqueue_scripts, admin_enqueue_scripts, or login_enqueue_scripts hooks. Please see Debugging in WordPress for more information. (This message was added in version 3.3.) in /home/araki/blog.ceed.jp/wp-includes/functions.php on line 3361

Strict Standards: Redefining already defined constructor for class SyntaxHighlighter in /home/araki/blog.ceed.jp/wp-content/plugins/syntax-highlighter/syntax_highlighter.php on line 118

Strict Standards: Redefining already defined constructor for class wokScriptManager in /home/araki/blog.ceed.jp/wp-content/plugins/syntax-highlighter/includes/common-controller.php on line 315

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::init() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 470

Strict Standards: Non-static method adsensem::setup_is_valid() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 110

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::init_widgets() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 470

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 145

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 145

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162

Notice: Undefined variable: args in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Strict Standards: Non-static method adsensem::register_widget() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 151

Notice: Undefined variable: _adsensem in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 162
cakePHPのimageBehaviorについて | CEED
Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524

cakePHPのimageBehaviorについて


Notice: get_settings の使用はバージョン 2.1 から非推奨になっています! 代わりに get_option() を使ってください。 in /home/araki/blog.ceed.jp/wp-includes/functions.php on line 3194

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::filter_ads() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 192

Strict Standards: Non-static method adsensem::filter_ad_callback() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 198

Strict Standards: Non-static method adsensem::filter_ad_callback() should not be called statically in /home/araki/blog.ceed.jp/wp-content/plugins/adsense-manager/adsense-manager.php on line 201

Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524

Notice: Array to string conversion in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 701

こちらの
http://blog.syuhari.jp/archives/1905
記事でimageBehaviorというのを知り、早速使っていました。
findしたときにも、各画像のパス結果レコードに挿入してくれて便利なのですが、どうやらリレーションテーブルのiに関しては処理してくれないようです。
なので、上記ソースに少し手を入れて、belongsToのテーブルに関しても持ってきてくれるように追記してみました。
即席なのでおかしなところがあったらご指摘いただけるとありがたいです。


<?php

class ImageBehavior extends ModelBehavior {

	var $settings = null;

	function setup(&$model, $config = array()) {
		$this->imageSetup($model, $config);
	}

	function imageSetup(&$model, $config = array()) {
		$settings = Set::merge(array(
		'baseDir'=> '',
		), $config);

		if (!isset($settings['fields'])) $settings['fields']=array();
		$fields=array();
		foreach($settings['fields'] as $key=>$value) {
			$field = ife(is_numeric($key), $value, $key);
			$conf = ife(is_numeric($key), array(), ife(is_array($value),$value,array()));
			$conf=Set::merge(
			array (
				'thumbnail' => array('prefix'=>'thumb',
					         'create'=>false,
					         'width'=>'100',
 					         'height'=>'100',
 					         'aspect'=>true,
							 'allow_enlarge'=>true,
		                    ),
				'resize'=>null, // array('width'=>'100','heigth'=>'100'),
				'versions' => array(
				),
			), $conf);
			foreach ($conf['versions'] as $id=>$version) {
				$conf['versions'][$id]=Set::merge(array(
 					         'aspect'=>true,
							 'allow_enlarge'=>false,
		                    ),$version);
			}
			if (is_array($conf['resize'])) {
				if (!isset($conf['resize']['aspect'])) $conf['resize']['aspect']=true;
				if (!isset($conf['resize']['allow_enlarge'])) $conf['resize']['allow_enlarge']=false;
			}
			$fields[$field]=$conf;
		}
		$settings['fields']=$fields;

		$this->settings[$model->name] = $settings;
	}

	/**
	 * Before save method. Called before all saves
	 *
	 * Overriden to transparently manage setting the item position to the end of the list
	 *
	 * @param AppModel $model
	 * @return boolean True to continue, false to abort the save
	 */
	function beforeSave(&$model) {
		extract($this->settings[$model->name]);
		if (empty($model->data[$model->name][$model->primaryKey])) {
		}

		//Ajax でプレアップロードされている場合はそちらを使用する。 modified by M.Araki
		if(isset($model->data[$model->name][TMP_IMG_FILE_NAME])){
			$field = 'image';
			$tempData[$field] = array(
				'tmp_name' => TMP_IMG_DIR_SYSTEM.DS.$model->data[$model->name][TMP_IMG_FILE_NAME],
				'name' => $model->data[$model->name][TMP_IMG_FILE_NAME],
				'type' => $model->data[$model->name][TMP_IMG_FILE_TYPE],
				'error' => '0'
			);
			$model->data[$model->name][$field] = $model->data[$model->name][TMP_IMG_FILE_TYPE];
		}else{
			$tempData = array();
			foreach ($fields as $key=>$value) {
				$field = ife(is_numeric($key), $value, $key);
				if (isset($model->data[$model->name][$field])) {
					if ($this->__isUploadFile($model->data[$model->name][$field])) {
						$tempData[$field] = $model->data[$model->name][$field];
						$model->data[$model->name][$field]=$this->__getContent($model->data[$model->name][$field]);
					} else {
						unset($model->data[$model->name][$field]);
					}
				}
			}
		}

		$this->runtime[$model->name]['beforeSave'] = $tempData;
		return true;
	}

	function afterSave(&$model) {
		extract($this->settings[$model->name]);
		if (empty($model->data[$model->name][$model->primaryKey])) {
		}

		$tempData = $this->runtime[$model->name]['beforeSave'];
		unset($this->runtime[$model->name]['beforeSave']);
		foreach($tempData as $field=>$value) {
			$this->__saveFile($model, $field, $value);
			@unlink($value['tmp_name']);
		}

		return true;
	}


	function afterFind(&$model, &$results, $primary) {
		extract($this->settings[$model->name]);
		$relatedModels = $model->belongsTo;

		if ( is_array( $results ) ) {
			$i=0;
			if (isset($results[0])) {
				while ( isset( $results[$i][$model->name] ) && is_array( $results[$i][$model->name] ) )  {
					foreach ($fields as $field => $fieldParams) {
						if (isset($results[$i][$model->name][$field]) && ($results[$i][$model->name][$field]!='')) {
							$value=$results[$i][$model->name][$field];
							$results[$i][$model->name][$field]=$this->__getParams($model, $field, $value, $fieldParams, $results[$i][$model->name]);
						}
					}
					foreach($relatedModels as $relatedModelName => $param){
						$relatedModel = $model->{$relatedModelName};
						if(!isset($this->settings[$relatedModelName])) continue;
						foreach ($this->settings[$relatedModelName]['fields'] as $field => $fieldParams) {
							if (isset($results[$i][$relatedModelName][$field]) && ($results[$i][$relatedModelName][$field]!='')) {
								$value=$results[$i][$relatedModelName][$field];
								$results[$i][$relatedModelName][$field]=$this->__getParams($relatedModel, $field, $value,$fieldParams, $results[$i][$relatedModelName]);
							}
						}
					}
	                $i++;
				}
			} else {
					foreach ($fields as $field => $fieldParams) {
						if (isset($results[$model->name][$field]) && ($results[$model->name][$field]!='')) {
							$value=$results[$model->name][$field];
							$results[$model->name][$field]=$this->__getParams($model, $field, $value, $fieldParams, $results[$model->name]);
						}
					}
					foreach($relatedModels as $relatedModelName => $param){
						$relatedModel = $model->{$relatedModelName};
						foreach ($this->settings[$relatedModelName]['fields'] as $field => $fieldParams) {
							if (isset($results[$relatedModelName][$field]) && ($results[$relatedModelName][$field]!='')) {
								$value=$results[$relatedModelName][$field];
								$results[$relatedModelName][$field]=$this->__getParams($relatedModel, $field, $value,$fieldParams, $results[$relatedModelName]);
							}
						}
					}

/*				foreach ($fields as $field => $fieldParams) {
					if (isset($results[$model->name][$field]) && ($results[$i][$model->name][$field]!='')) {
						$value=$results[$i][$model->name][$field];
						$results[$model->name][$field]=$this->__getParams($model, $field, $value, $fieldParams, $results[$model->name]);
					}
				}*/
			}
		}
		return $results;
		//return true;
	}

	function __getParams(&$model, $field, $value, $fieldParams, $record) {
		extract($this->settings[$model->name]);
		$result=array();
		if ($value!='') {
			$folderName = $this->__getFolder($model, $record);
			$ext=$this->decodeContent($value);
			$fileName=$field .'.'. $ext;
			$result['path']=$folderName.$fileName;

			$thumb=$fields[$field]['thumbnail'];
			if ($thumb['create']) {
				$result['thumb']=$folderName.$this->__getPrefix($thumb).'_'.$fileName;
			}
			foreach($fields[$field]['versions'] as $version) {
				$result[$this->__getPrefix($version)]=$folderName.$this->__getPrefix($version).'_'.$fileName;
			}
		}
		return $result;
	}

	/**
	 * Before delete method. Called before all deletes
	 *
	 * Will delete the current item from list and update position of all items after one
	 *
	 * @param AppModel $model
	 * @return boolean True to continue, false to abort the delete
	 */
	function beforeDelete(&$model) {
		$this->runtime[$model->name]['ignoreUserAbort'] = ignore_user_abort();
		@ignore_user_abort(true);
		return true;
	}

	function afterDelete(&$model) {
		extract($this->settings[$model->name]);

		foreach ($fields as $field=>$fieldParams) {
			$folderPath=$this->__getFullFolder($model, $field);
			uses ('folder');
			$folder = &new Folder($path = $folderPath, $create = false);
			if ($folder!==false) {
				@$folder->delete($folder->pwd());
			}
		}

		@ignore_user_abort((bool) $this->runtime[$model->name]['ignoreUserAbort']);
		unset($this->runtime[$model->name]['ignoreUserAbort']);
		return true;
	}

	function __isUploadFile($file) {
		if (!isset($file['tmp_name'])) return false;
		return (file_exists($file['tmp_name']) && $file['error']==0);
	}

	function __getContent($file) {
		return $file['type'];
	}
	function decodeContent($content) {
		$contentsMaping=array(
	      "image/gif" => "gif",
	      "image/jpeg" => "jpg",
	      "image/pjpeg" => "jpg",
	      "image/x-png" => "png",
	      "image/jpg" => "jpg",
	      "image/png" => "png",
	      "application/x-shockwave-flash" => "swf",
	      "application/pdf" => "pdf",
	      "application/pgp-signature" => "sig",
	      "application/futuresplash" => "spl",
	      "application/msword" => "doc",
	      "application/postscript" => "ps",
	      "application/x-bittorrent" => "torrent",
	      "application/x-dvi" => "dvi",
	      "application/x-gzip" => "gz",
	      "application/x-ns-proxy-autoconfig" => "pac",
	      "application/x-shockwave-flash" => "swf",
	      "application/x-tgz" => "tar.gz",
	      "application/x-tar" => "tar",
	      "application/zip" => "zip",
	      "audio/mpeg" => "mp3",
	      "audio/x-mpegurl" => "m3u",
	      "audio/x-ms-wma" => "wma",
	      "audio/x-ms-wax" => "wax",
	      "audio/x-wav" => "wav",
	      "image/x-xbitmap" => "xbm",
	      "image/x-xpixmap" => "xpm",
	      "image/x-xwindowdump" => "xwd",
	      "text/css" => "css",
	      "text/html" => "html",
	      "text/javascript" => "js",
	      "text/plain" => "txt",
	      "text/xml" => "xml",
	      "video/mpeg" => "mpeg",
	      "video/quicktime" => "mov",
	      "video/x-msvideo" => "avi",
	      "video/x-ms-asf" => "asf",
	      "video/x-ms-wmv" => "wmv"
		);
		if (isset($contentsMaping[$content]))
			return $contentsMaping[$content];
		else return $content;
	}


	function __saveAs($fileData, $fileName=null, $folder) {

		if (is_writable($folder)) {
			if (is_uploaded_file($_FILES[$fileData]['tmp_name']))
			{
				if (empty($fileName)) $fileName = $_FILES[$fileData]['name'];
				copy($_FILES[$fileData]['tmp_name'], $folder.$fileName);
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}

	function __getFolder(&$model, $record) {
		extract($this->settings[$model->name]);
		return  Inflector::camelize($model->name) .'/'. $record[$model->primaryKey] . '/';
	}
	function __getFullFolder(&$model, $field) {
		extract($this->settings[$model->name]);
		return  WWW_ROOT . IMAGES_URL. Inflector::camelize($model->name) .DS. $model->id .DS;
	}

	function __saveFile(&$model, $field, $fileData) {
		extract($this->settings[$model->name]);
		$folderName = $this->__getFullFolder($model, $field);
		$ext=$this->decodeContent($this->__getContent($fileData));
		$fileName=$field .'.'. $ext;

		uses ('folder');
		uses ('file');
		$folder = &new Folder($path = $folderName, $create = true, $mode = 0777);

		$files=$folder->find($fileName);

		$file= &new File($folder->pwd().DS.$fileName);

		$fileExists=($file!==false);
		if ($fileExists) {
			@$file->delete();
		}

		if (isset($fields[$field]['resize']['width']) && isset($fields[$field]['resize']['height'])) {
			$file=$folder->pwd().DS.'tmp_'.$fileName;
			copy($fileData['tmp_name'], $file);
			$this->__resize($folder->pwd(),'tmp_'.$fileName,$fileName,$field, $fields[$field]['resize']);
			@unlink($file);
		} else {
			$file=$folder->pwd().DS.$fileName;
			copy($fileData['tmp_name'], $file);
		}



		if ($fields[$field]['thumbnail']['create']) {
			$fieldParams=$fields[$field]['thumbnail'];
			$newFile=$this->__getPrefix($fieldParams).'_'.basename($fileName);
			$this->__resize($folder->pwd(),$fileName,$newFile, $field, $fieldParams);
		}
		foreach($fields[$field]['versions'] as $version) {
			$fieldParams=$fields[$field]['thumbnail'];
			$newFile=$this->__getPrefix($version).'_'.basename($fileName);
			$this->__resize($folder->pwd(),$fileName,$newFile,$field, $version);

		}

	}


	function __getPrefix($fieldParams) {
		if (isset($fieldParams['prefix'])) {
			return $fieldParams['prefix'];
		} else {
			return $fieldParams['width'].'x'.$fieldParams['height'];
		}
	}

	/**
	 * Automatically resizes an image and returns formatted IMG tag
	 *
	 * @param string $path Path to the image file, relative to the webroot/img/ directory.
	 * @param integer $width Image of returned image
	 * @param integer $height Height of returned image
	 * @param boolean $aspect Maintain aspect ratio (default: true)
	 * @param array    $htmlAttributes Array of HTML attributes.
	 * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT.
	 * @return mixed    Either string or echos the value, depends on AUTO_OUTPUT and $return.
	 * @access public
	 */
    function __resize($folder, $originalName, $newName, $field, $fieldParams) {

        $types = array(1 => "gif", "jpeg", "png", "swf", "psd", "wbmp"); // used to determine image type
        $fullpath = $folder;

        $url = $folder.DS.$originalName;

        if (!($size = getimagesize($url)))
            return; // image doesn't exist

		$width=$fieldParams['width'];
		$height=$fieldParams['height'];
        if ($fieldParams['allow_enlarge']===false) { // don't enlarge image
			if (($width>$size[0])||($height>$size[1])) {
				$width=$size[0];
				$height=$size[1];
			}
		} else {
	        if ($fieldParams['aspect']) { // adjust to aspect.
	            if (($size[1]/$height) > ($size[0]/$width))
	                $width = ceil(($size[0]/$size[1]) * $height);
	            else
	                $height = ceil($width / ($size[0]/$size[1]));
	        }
        }

        $cachefile = $fullpath.DS.$newName;  // location on server

        if (file_exists($cachefile)) {
            $csize = getimagesize($cachefile);
            $cached = ($csize[0] == $width && $csize[1] == $height); // image is cached
            if (@filemtime($cachefile) < @filemtime($url)) // check if up to date
                $cached = false;
        } else {
            $cached = false;
        }

        if (!$cached) {
            $resize = ($size&#91;0&#93; > $width || $size[1] > $height) || ($size[0] < $width || $size&#91;1&#93; < $height || ($fieldParams&#91;'allow_enlarge'&#93;===false));
        } else {
            $resize = false;
        }

        if ($resize) {
            $image = call_user_func('imagecreatefrom'.$types&#91;$size&#91;2&#93;&#93;, $url);
            if (function_exists("imagecreatetruecolor") && ($temp = imagecreatetruecolor ($width, $height))) {
                imagecopyresampled ($temp, $image, 0, 0, 0, 0, $width, $height, $size&#91;0&#93;, $size&#91;1&#93;);
              } else {
                $temp = imagecreate ($width, $height);
                imagecopyresized ($temp, $image, 0, 0, 0, 0, $width, $height, $size&#91;0&#93;, $size&#91;1&#93;);
            }
            call_user_func("image".$types&#91;$size&#91;2&#93;&#93;, $temp, $cachefile);
            imagedestroy ($image);
            imagedestroy ($temp);
        }

    }


}
?>


Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method adsensem::footer() should not be called statically in /home/araki/blog.ceed.jp/wp-includes/plugin.php on line 470
getting health insurance in new york buy clomid online UK major health insurance companies buy levitra uk online what are wells fargo hours buy finasteride affordable health insurance for children accutane no prescription medical center of trinity viagra online uten resept midwestern university wellness center dapoxetine top individual health insurance companies viagra ireland

Notice: Use of undefined constant user_level - assumed 'user_level' in /home/araki/blog.ceed.jp/wp-content/plugins/ultimate_ga_1.6.0/ultimate_ga_1.6.0.php on line 524