[pLog-svn] r4385 - in plog/branches/lifetype-1.2-resource-test: class/action class/file class/gallery/dao class/gallery/resizers class/net class/view templates/admin

Jon Daley plogworld at jon.limedaley.com
Mon Dec 11 22:40:34 GMT 2006


 	That sounds good.  What do you think the chances are of this patch 
applying correctly to a 1.1.3 install?

On Mon, 11 Dec 2006, oscar at devel.lifetype.net wrote:

> Author: oscar
> Date: 2006-12-11 21:52:47 +0000 (Mon, 11 Dec 2006)
> New Revision: 4385
>
> Removed:
>   plog/branches/lifetype-1.2-resource-test/class/view/resourceserverview.class.php
> Modified:
>   plog/branches/lifetype-1.2-resource-test/class/action/resourceserveraction.class.php
>   plog/branches/lifetype-1.2-resource-test/class/file/fileupload.class.php
>   plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresource.class.php
>   plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresources.class.php
>   plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresourcestorage.class.php
>   plog/branches/lifetype-1.2-resource-test/class/gallery/resizers/gallerythumbnailgenerator.class.php
>   plog/branches/lifetype-1.2-resource-test/class/net/baserequestgenerator.class.php
>   plog/branches/lifetype-1.2-resource-test/class/net/customrequestgenerator.class.php
>   plog/branches/lifetype-1.2-resource-test/class/net/prettyrequestgenerator.class.php
>   plog/branches/lifetype-1.2-resource-test/class/net/rawrequestgenerator.class.php
>   plog/branches/lifetype-1.2-resource-test/class/view/redirectview.class.php
>   plog/branches/lifetype-1.2-resource-test/templates/admin/globalsettings_url.template
> Log:
> Just finished implementing experimental support for resources, so that files are now uploaded with their "real" name to the gallery/X/ folder and accessed directly via the resource server.
>
> URLs to files and previews now look like http://www.host.com/gallery/X/file.jpg, http://www.host.com/gallery/X/preview/file.jpg and so on. Albums remain for organizational purposes but their structure is not mapped to folders in disk.
>
> Backward compatibility with older URLs is achieved by means of an HTTP redirect from for example resserver.php?blogId=1&resource=file.jpg to the new URL format. This should ensure a smooth transition from the old system to the new one as long as things like resource_download_link are not modified (they are marked as non-editable in "general settings"->"URL")
>
> This feature needs a bit more testing specially regarding files with non-latin characters, but otherwise it works pretty well. Letting the web server serve these files is obviously a lot faster than doing it via resserver.php, so this should eliminate all the complaints regarding resserver's hunger for server resources... I'd like to hear your opinion, specially from those of you running bigger servers.
>
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/action/resourceserveraction.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/action/resourceserveraction.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/action/resourceserveraction.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -1,13 +1,17 @@
> <?php
>
> +	// the three different modes that a resource can be requested
> +	define( 'RESOURCE_VIEW_MODE_DEFAULT', '' );
> +	define( 'RESOURCE_VIEW_MODE_PREVIEW', 'preview' );
> +	define( 'RESOURCE_VIEW_MODE_MEDIUM', 'medium' );
> +
>     lt_include( PLOG_CLASS_PATH."class/action/action.class.php" );
>     lt_include( PLOG_CLASS_PATH."class/config/config.class.php" );
> -    lt_include( PLOG_CLASS_PATH."class/view/resourceserverview.class.php" );
> +    lt_include( PLOG_CLASS_PATH."class/view/redirectview.class.php" );
>     lt_include( PLOG_CLASS_PATH."class/net/http/subdomains.class.php" );
>     lt_include( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
>     lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresources.class.php" );
>     lt_include( PLOG_CLASS_PATH."class/security/pipeline.class.php" );
> -    lt_include( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
> 	lt_include( PLOG_CLASS_PATH."class/data/validator/stringvalidator.class.php" );
> 	lt_include( PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php" );
>
> @@ -45,7 +49,7 @@
>
> 			// since this class does not return HTML code but files, we cannot
> 			// return HTML so let's return 404 status code with a custom error message
> -			$view = new ResourceServerView();
> +			$view = new View();
> 			$view->addHeaderResponse( "HTTP/1.1 404 Not Found" );
> 			$view->addHeaderResponse( "Status: 404 Not Found" );
> 			$view->addHeaderResponse( "X-LifeType-Error: Invalid parameters" );
> @@ -127,7 +131,7 @@
> 			$this->_getBlogInfo();
> 			if( $this->_blogInfo == false ) {
> 				// return 404 not found because the blog id is not correct!
> -				$this->_view = new ResourceServerView();
> +				$this->_view = new View();
> 				$this->_view->addHeaderResponse( "HTTP/1.1 404 Not Found" );
> 				$this->_view->addHeaderResponse( "Status: 404 Not Found" );
> 				$this->_view->addHeaderResponse( "X-LifeType-Error: Blog $resId is not correct" );
> @@ -135,28 +139,6 @@
> 				return false;
> 			}
>
> -			//
> -            // security stuff
> -			//
> -			// :KLUDGE: the problem with the security Pipeline and the PluginManager in this
> -			// action is that we need to reimplement the whole stuff because... this action does not
> -			// inherit from BlogAction and therefore nobody is doing these things for us! I don't really
> -			// like to do it like this but while I think of a better way, let's leave like it
> -			//
> -            $pipeline = new Pipeline( $this->_request, $this->_blogInfo );
> -            $result = $pipeline->process();
> -
> -            // if the pipeline blocked the request, then we have to let the user know and quit
> -			// processing
> -            if( !$result->isValid()) {
> -				$this->_view = new ResourceServerView();
> -				$this->_view->addHeaderResponse( "HTTP/1.1 403 Forbidden" );
> -				$this->_view->addHeaderResponse( "Status: 403 Forbidden" );
> -				$this->_view->addHeaderResponse( "X-LifeType-Error: Access is blocked" );
> -
> -				return false;
> -            }
> -
> 			// now if the blog id was correct, then we can proceed to get the rest of the parameters
> 			$this->_resName = $this->_request->getValue( "resource" );
> 			$this->_resId = $this->_request->getValue( "resId" );
> @@ -172,7 +154,7 @@
> 					$albums = new GalleryAlbums();
> 					$album = $albums->getAlbumByName( $this->_albumName );
> 					if( !$album ) {
> -						$this->_view = new ResourceServerView();
> +						$this->_view = new View();
> 						$this->_view->addHeaderResponse( "HTTP/1.1 404 Not Found" );
> 						$this->_view->addHeaderResponse( "Status: 404 Not Found" );
> 						$this->_view->addHeaderResponse( "X-LifeType-Error: Album $albumId not found" );
> @@ -185,29 +167,8 @@
> 			return true;
> 		}
>
> -		/**
> -		 * notifies of events using the plugin manager. It also adds a couple of useful parameters!
> -		 *
> -		 * @see PluginManager
> -		 */
> -		function notifyEvent( $eventType, $params = Array())
> -		{
> -			$params[ 'from' ] = $this->_actionInfo->getActionParamValue();
> -			$params[ 'request' ] = $this->_request;
> -
> -			return $this->_pm->notifyEvent( $eventType, $params );
> -		}
> -
> 		function perform()
> 		{
> -			// initialize the plugin manager, needed to inform plugins of the EVENT_RESOURCE_LOADED
> -			// event, in case any of them is waiting for it! This obviously slows things down but
> -			// hey, what can I do? Users ask and I deliver...
> -            $this->_pm =& PluginManager::getPluginManager();
> -            $this->_pm->setBlogInfo( $this->_blogInfo );
> -			$this->_userInfo = $this->_blogInfo->getOwnerInfo();
> -            $this->_pm->setUserInfo( $this->_userInfo );
> -
> 			// and fetch the resource
> 			$resources = new GalleryResources();
> 			if( $this->_resName ) {
> @@ -219,7 +180,7 @@
>
> 			if( !$resource ) {
> 				// return 404 not found because the resource wasn't found
> -				$this->_view = new ResourceServerView();
> +				$this->_view = new View();
> 				$this->_view->addHeaderResponse( "HTTP/1.1 404 Not Found" );
> 				$this->_view->addHeaderResponse( "Status: 404 Not Found" );
> 				$this->_view->addHeaderResponse( "X-LifeType-Error: Resource $this->_resId not found" );
> @@ -227,11 +188,21 @@
> 				return false;
> 			}
>
> -			// we need to let plugins know that we have successfully loaded a resource
> -			$this->notifyEvent( EVENT_RESOURCE_LOADED, Array( "resource" => &$resource ));
> +			$url = $this->_blogInfo->getBlogRequestGenerator();
> +			switch( $this->_mode ) {
> +				case RESOURCE_VIEW_MODE_PREVIEW:
> +					$redirectUrl = $url->resourcePreviewLink( $resource );
> +					break;
> +				case RESOURCE_VIEW_MODE_MEDIUM:
> +					$redirectUrl = $url->resourceMediumSizePreviewLink( $resource );
> +					break;
> +				default:
> +					$redirectUrl = $url->resourceDownloadLink( $resource );
> +					break;
> +			}
>
> 			// generate the correct view with the resource data...
> -			$this->_view = new ResourceServerView( $resource, $this->_mode );
> +			$this->_view = new RedirectView( $redirectUrl, $this->_mode );
>
> 			return true;
> 		}
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/file/fileupload.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/file/fileupload.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/file/fileupload.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -41,6 +41,11 @@
>         	return $this->_name;
>         }
>
> +		function setFileName( $fileName )
> +		{
> +			$this->_name = $fileName;
> +		}
> +
> 		/**
> 		 * returns the MIME type of the file
> 		 *
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresource.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresource.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresource.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -33,6 +33,7 @@
>         var $_album;
> 		var $_thumbnailFormat;
> 		var $_fileDescriptor;
> +		var $_fileSize;
>
> 		/**
> 		 * Constructor.
> @@ -70,6 +71,7 @@
>             $this->_resourceType = $resourceType;
>             $this->_filePath = $filePath;
>             $this->_fileName = $fileName;
> +			$this->_fileSize = 0;
>             $this->_metadata = $metadata;
>             $this->_date = $date;
> 			$this->_thumbnailFormat = $thumbnailFormat;
> @@ -239,68 +241,6 @@
>         }
>
> 		/**
> -		 * returns an stream of bytes with the contents of the file
> -		 *
> -		 * @return an string with all the bytes or false otherwise
> -		 */
> -        function getData()
> -        {
> -        	lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresourcestorage.class.php" );
> -
> -        	$fileParts = explode( ".", $this->getFileName());
> -            $fileExt = $fileParts[count($fileParts)-1];
> -
> -			$resourceStorageFolder = GalleryResourceStorage::getResourcesStorageFolder();
> -            $fileName = $resourceStorageFolder.$this->getOwnerId()."/".$this->getOwnerId()."-".$this->getId().".".$fileExt;
> -
> -			return $this->_getData( $fileName );
> -        }
> -
> -		/**
> -		 * returns a buffer of bytes limited to $chunkSize in bytes from
> -		 * the file descriptor provided
> -		 *
> -		 * @return a buffer of bytes from the file or false if empty or error
> -		 * @private
> -		 */
> -		function _getDataChunk(&$filedesc,$chunkSize)
> -		{
> -			if (feof($filedesc) || !$filedesc) {
> -				/* finished reading file */
> -				if (feof($filedesc))
> -					fclose($filedesc);
> -
> -				return false;
> -			}
> -			else {
> -				/* return $chunksize of bytes */
> -				return fread($filedesc,$chunkSize);
> -			}
> -		}
> -
> -		/**
> -		 * @private
> -		 */
> -		function getDataChunk($chunksize)
> -		{
> -			if (!$this->_fileDescriptor) {
> -				lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresourcestorage.class.php" );
> -				$fileParts = explode(".",$this->getFileName());
> -				$fileExt = $fileParts[count($fileParts)-1];
> -				$resourceStorageFolder = GalleryResourceStorage::getResourcesStorageFolder();
> -				$fileName = $resourceStorageFolder.$this->getOwnerId()."/".$this->getOwnerId()."-".$this->getId().".".$fileExt;
> -
> -				/* store this for use again */
> -				$this->_fileDescriptor = @fopen($fileName,"rb");
> -
> -				/* open failed... we'll just say empty file */
> -				if (!$this->_fileDescriptor)
> -					return false;
> -			}
> -			return $this->_getDataChunk($this->_fileDescriptor,$chunksize);
> -		}
> -
> -		/**
> 		 * Sets the album id. You should normally not need to use this method
> 		 *
> 		 * @param albumId The id of the album
> @@ -368,9 +308,13 @@
> 		 */
> 		function getFileSize()
> 		{
> -			$reader = $this->getMetadataReader();
> -			return $reader->getFileSize();
> +			return( $this->_fileSize );
> 		}
> +
> +		function setFileSize( $size )
> +		{
> +			$this->_fileSize = $size;
> +		}
>
> 		/**
> 		 * returns an object that will allow to access the metadata of this resource
> @@ -430,36 +374,15 @@
>     		lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresourcestorage.class.php" );
>
> 			if( $this->getThumbnailFormat() == THUMBNAIL_OUTPUT_FORMAT_SAME_AS_IMAGE ) {
> -				$fileParts = explode( ".", $this->getFileName());
> -				$fileExt = $fileParts[count($fileParts)-1];
> -
> -				$fileName = $this->getOwnerId()."-".$this->getId().".".strtolower($fileExt);
> -				$previewFile = GalleryResourceStorage::getPreviewsFolder( $this->getOwnerId()).$fileName;
> +				$previewFile = GalleryResourceStorage::getPreviewsFolder( $this->getOwnerId()).$this->getFileName();
> 			}
> 			else {
> -				$previewType = $this->getThumbnailFormat();
> -				$fileName = $this->getOwnerId()."-".$this->getId().".".strtolower($previewType);
> -				$previewFile = GalleryResourceStorage::getPreviewsFolder( $this->getOwnerId()).$fileName;
> +				throw( new Exception( "TODO: this case has not been implemented yet!" ));
> 			}
>
> 			return $previewFile;
> 		}
>
> -        /**
> -         * Returns the binary data corresponding to the preview.
> -         *
> -         * @return A string of binary data.
> -         */
> -        function getPreview()
> -        {
> -        	if( !$this->hasPreview())
> -            	return false;
> -
> -			$previewFile = $this->getPreviewFileName();
> -
> -			return $this->_getData( $previewFile );
> -        }
> -
> 		/**
> 		 * returns the full path to the file with the medium-sized preview
> 		 *
> @@ -470,64 +393,15 @@
> 			lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresourcestorage.class.php" );
>
> 			if( $this->getThumbnailFormat() == THUMBNAIL_OUTPUT_FORMAT_SAME_AS_IMAGE ) {
> -				$fileParts = explode( ".", $this->getFileName());
> -				$fileExt = $fileParts[count($fileParts)-1];
> -
> -				$fileName = $this->getOwnerId()."-".$this->getId().".".strtolower($fileExt);
> -				$previewFile = GalleryResourceStorage::getMediumSizePreviewsFolder( $this->getOwnerId()).$fileName;
> +				$previewFile = GalleryResourceStorage::getMediumSizePreviewsFolder( $this->getOwnerId()).$this->getFileName();
> 			}
> 			else {
> -				$previewType = $this->getThumbnailFormat();
> -				$fileName = $this->getOwnerId()."-".$this->getId().".".strtolower($previewType);
> -				$previewFile = GalleryResourceStorage::getMediumSizePreviewsFolder( $this->getOwnerId()).$fileName;
> +				throw( new Exception( "TODO: this case has not been implemented yet!" ));
> 			}
>
> 			return $previewFile;
> 		}
>
> -        /**
> -         * Returns the binary data corresponding to the preview.
> -         *
> -         * @return A string of binary data.
> -         */
> -        function getMediumSizePreview()
> -        {
> -        	if( !$this->hasPreview())
> -            	return false;
> -
> -			// get the file name of the medium size preview
> -			$previewFile = $this->getMediumSizePreviewFileName();
> -
> -			// if there is no medium size file, then return the big one... for compatibility reasons
> -			$data = $this->_getData( $previewFile );
> -			if( !$data )
> -				return $this->getData();
> -			else
> -				return $data;
> -        }
> -
> -		/**
> -		 * returns an stream of data with the contents of the file. This method is used by
> -		 * getData(), getPreviewData and getMediumSizePreviewData()
> -		 *
> -		 * @return The contents of the given file or nothing if empty or if it can't be read
> -		 * @private
> -		 */
> -		function _getData( $file )
> -		{
> -			if( File::isReadable ( $file )) {
> -				$file = new File( $file );
> -				$file->open( "rb" );
> -
> -				$size = $file->getSize();
> -
> -				return $file->read( $size );
> -			}
> -			else {
> -				return false;
> -			}
> -		}
> -
> 		function getNormalizedDescription()
> 		{
> 			lt_include( PLOG_CLASS_PATH."class/data/textfilter.class.php" );
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresources.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresources.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresources.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -106,7 +106,7 @@
> 			$id = $resource->getId();
> 			$query = "SELECT id, owner_id, album_id, description,
>         	                 date, flags, resource_type, file_path, file_name,
> -        	                 metadata, thumbnail_format, properties
> +        	                 metadata, thumbnail_format, properties, file_size
>         	          FROM {$prefix}gallery_resources
> 			          WHERE album_id = '$albumId' AND date >= '$date' AND id > $id
> 					  ORDER BY date ASC,id ASC LIMIT 1";
> @@ -146,7 +146,7 @@
> 			$id = $resource->getId();
> 			$query = "SELECT id, owner_id, album_id, description,
>         	                 date, flags, resource_type, file_path, file_name,
> -        	                 metadata, thumbnail_format, properties
> +        	                 metadata, thumbnail_format, properties, file_size
>         	          FROM {$prefix}gallery_resources
> 			          WHERE album_id = '$albumId' AND date <= '$date' AND id < $id
> 					  ORDER BY date DESC,id DESC LIMIT 1";
> @@ -189,23 +189,23 @@
>                                    $page = DEFAULT_PAGING_ENABLED,
>                                    $itemsPerPage = DEFAULT_ITEMS_PER_PAGE )
>         {
> -		$resources = Array();
> -		$query = "SELECT id FROM ".$this->getPrefix()."gallery_resources WHERE owner_id = '".Db::qstr($ownerId)."'";
> -		if( $albumId != GALLERY_NO_ALBUM )
> -			$query .= " AND album_id = '".Db::qstr($albumId)."'";
> -		if( $resourceType != GALLERY_RESOURCE_ANY )
> -			$query .= " AND resource_type = '".Db::qstr($resourceType)."'";
> -		if( $searchTerms != "" )
> -			$query .= " AND (".$this->getSearchConditions( $searchTerms ).")";
> +			$resources = Array();
> +			$query = "SELECT id FROM ".$this->getPrefix()."gallery_resources WHERE owner_id = '".Db::qstr($ownerId)."'";
> +			if( $albumId != GALLERY_NO_ALBUM )
> +				$query .= " AND album_id = '".Db::qstr($albumId)."'";
> +			if( $resourceType != GALLERY_RESOURCE_ANY )
> +				$query .= " AND resource_type = '".Db::qstr($resourceType)."'";
> +			if( $searchTerms != "" )
> +				$query .= " AND (".$this->getSearchConditions( $searchTerms ).")";
>
> -		$result = $this->Execute( $query, $page, $itemsPerPage );
> -		if( !$result )
> -			return $resources;
> +			$result = $this->Execute( $query, $page, $itemsPerPage );
> +			if( !$result )
> +				return $resources;
>
> -		while( $row = $result->FetchRow()) {
> -			// use the primary key to retrieve the items via the cache
> -			$resources[] = $resource = $this->get( "id", $row["id"], CACHE_RESOURCES );
> -		}
> +			while( $row = $result->FetchRow()) {
> +				// use the primary key to retrieve the items via the cache
> +				$resources[] = $resource = $this->get( "id", $row["id"], CACHE_RESOURCES );
> +			}
>
>             return $resources;
>         }
> @@ -303,6 +303,9 @@
> 			$tf = new Textfilter();
> 			$normalizedDescription = $tf->normalizeText( $description );
> 			$properties = serialize( array() );
> +
> +			// check if there already is a file with the same name stored
> +			$duplicated = $this->isDuplicatedFileName( $fileName );
>
> 			// finally put the query together and execute it
> 			$query = "INSERT INTO ".$this->getPrefix()."gallery_resources(
> @@ -328,13 +331,12 @@
> 			// if that's the case, then we should rename the one we just
> 			// added with some random prefix, to make it different from the
> 			// other one...
> -			if( $this->isDuplicatedFilename( $fileName )) {
> +			if( $duplicated ) {
> 				$query = "UPDATE ".$this->getPrefix()."gallery_resources
> 						  SET file_name = '$resourceId-$fileName'
> 						  WHERE id = $resourceId";
>
> 				$this->Execute( $query );
> -
> 			}
>
> 			lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryalbums.class.php" );
> @@ -427,8 +429,8 @@
>             $getId3 = new GetID3();
>             $metadata = $getId3->analyze( $upload->getTmpName());
>             // nifty helper method from the getid3 package
> -            getid3_lib::CopyTagsToComments($metadata);
> -
> +            getid3_lib::CopyTagsToComments($metadata);
> +
>             $resourceType = $this->_getResourceType( $upload->getFileName(), $metadata );
>
>             // set the flags
> @@ -440,10 +442,17 @@
>
>             // add the record to the database
>             $fileName = $upload->getFileName();
> +			print("file name = $fileName<br/>" );
> +			$duplicated = $this->isDuplicatedFilename( $fileName );
> 			$filePath = "";
> 			$resourceId = $this->addResourceToDatabase( $ownerId, $albumId, $description, $flags, $resourceType, $filePath, $fileName, $info );
> 			if( !$resourceId )
> 				return false;
> +
> +			if( $duplicated ) {
> +				print("duplicated!!!<br/>");
> +				$upload->setFileName( $resourceId."-".$upload->getFileName());
> +			}
>
>             // and finally move the file to the right place in disk
>             // move the file to disk
> @@ -467,7 +476,7 @@
>             	lt_include( PLOG_CLASS_PATH."class/gallery/resizers/gallerythumbnailgenerator.class.php" );
>
> 				lt_include( PLOG_CLASS_PATH."class/config/config.class.php" );
> -				$config =& Config::getConfig();
> +				$config =& Config::getConfig();
>
>             	$imgWidth = $info["video"]["resolution_x"];
>             	$imgHeight = $info["video"]["resolution_y"];
> @@ -556,7 +565,7 @@
> 				if( isset( $metadata["jpg"] )) {
> 					$info["jpg"]["exif"]["FILE"] = $metadata["jpg"]["exif"]["FILE"];
> 					$info["jpg"]["exif"]["COMPUTED"] = $metadata["jpg"]["exif"]["COMPUTED"];
> -					$info["jpg"]["exif"]["IFD0"] = $metadata["jpg"]["exif"]["IFD0"];
> +					if(isset( $metadata["jpg"]["exif"]["IFD0"] )) $info["jpg"]["exif"]["IFD0"] = $metadata["jpg"]["exif"]["IFD0"];
> 					$metadata["jpg"]["exif"]["EXIF"]["MakerNote"] = "";
> 					$info["jpg"]["exif"]["EXIF"] = $metadata["jpg"]["exif"]["EXIF"];
> 				}
> @@ -809,14 +818,22 @@
>         	$query = "SELECT COUNT(id) AS total FROM ".$this->getPrefix()."gallery_resources
>                       WHERE file_name = '$fileName'";
>
> +			print($query."<br/>");
> +
>             $result = $this->Execute( $query );
>
>             $row = $result->FetchRow();
> -            $result->Close();
> -            if( $row["total"] == 0 || $row["total"] == 1 )
> -            	return false;
> +
> +			print_r($row);
> +
> +            if( $row["total"] == 0 )
> +            	$result = false;
>             else
> -            	return true;
> +            	$result = true;
> +
> +			$result == true ? print("duplicated<br/>") : print("not duplicated<br/>");
> +
> +			return( $result );
>         }
>
> 		/**
> @@ -844,6 +861,7 @@
> 										$row["thumbnail_format"],
> 										unserialize($row["properties"]),
>                                         $row["id"] );
> +										$res->setFileSize( $row["file_size"] );
>
>              return $res;
>         }
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresourcestorage.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresourcestorage.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/gallery/dao/galleryresourcestorage.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -225,9 +225,6 @@
> 				return false;
>
>             // new name for the file
> -            $fileParts = explode( ".", $upload->getFileName());
> -            $fileExt = $fileParts[count($fileParts)-1];
> -            $fileName = "$ownerId-$resourceId.$fileExt";
>             $filePath = $this->getUserFolder( $ownerId );
>
>             // move the file to the temporaray folder first
> @@ -248,11 +245,15 @@
> 			//do not use storeFile method because I have change filename in $tmpFolder.
> 			//$destFile = $this->storeFile( $resourceId, $ownerId, $origFile, RESOURCE_STORAGE_STORE_MOVE );
> 			//$destFile use $filePath and $fileName generated above.
> -			$destFile = $filePath.$fileName;
> +
> +			//$destFile = $filePath.$fileName;
> +			$destFile = $filePath.$upload->getFileName();
> +
> //=========================================
> //codes below are copy and modify from method storeFile
> 			// first of all, check if the file is readable and if not, quit
> 			if( !File::isReadable($origFile)) {
> +				print("dest file = ".$destFile." - orig file = ".$origFile."<br/>");
> 				return false;
> 			}
>
> @@ -323,11 +324,8 @@
>         {
>         	if( $resource ) {
> 				// first of all, remove the resource file itself
> -        		$fileParts = explode( ".", $resource->getFileName());
> -                $fileExt = $fileParts[count($fileParts)-1];
> -                $fileName = $resource->getOwnerId()."-".$resource->getId().".".$fileExt;
>                 $filePath = $this->getUserFolder( $resource->getOwnerId());
> -				$fullName = $filePath.$fileName;
> +				$fullName = $filePath.$resource->getFileName();
>
> 				if( File::isReadable( $fullName)) {
> 					$result = File::delete( $fullName );
> @@ -362,12 +360,7 @@
> 		 */
> 		function getResourcePath( $resource )
> 		{
> -			$fileParts = explode( ".", $resource->getFileName());
> -			$fileExt = $fileParts[count($fileParts)-1];
> -			$filePath = $this->getUserFolder( $resource->getOwnerId());
> -			$fileName = $resource->getOwnerId()."-".$resource->getId().".".$fileExt;
> -
> -			return $filePath.$fileName;
> +			return( $this->getUserFolder( $resource->getOwnerId()).$resource->getFileName());
> 		}
>     }
> ?>
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/gallery/resizers/gallerythumbnailgenerator.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/gallery/resizers/gallerythumbnailgenerator.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/gallery/resizers/gallerythumbnailgenerator.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -23,18 +23,14 @@
> 			$config =& Config::getConfig();
> 			$previewKeepAspectRatio = $config->getValue( "thumbnails_keep_aspect_ratio" );
>
> -			// get the file extension
> -			$fileParts = explode( ".", $resFile );
> -			$fileExt = strtolower($fileParts[count($fileParts)-1]);
> -			$fileName = $ownerId."-".$resourceId.".".$fileExt;
> -
> 			// and start the resizing process
> 			lt_include( PLOG_CLASS_PATH."class/gallery/resizers/galleryresizer.class.php" );
> 			$resizer = new GalleryResizer( $resFile );
> 			lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresourcestorage.class.php" );
> 			GalleryResourceStorage::checkPreviewsStorageFolder( $ownerId );
> -			$outFile = GalleryResourceStorage::getPreviewsFolder( $ownerId ).$fileName;
>
> +			$outFile = GalleryResourceStorage::getPreviewsFolder( $ownerId ).basename($resFile);
> +
> 			// and finally, we can generate the preview!
> 			$result = $resizer->generate( $outFile, $previewHeight, $previewWidth, $previewKeepAspectRatio );
>
> @@ -61,17 +57,12 @@
> 			$config =& Config::getConfig();
> 			$previewKeepAspectRatio = $config->getValue( "thumbnails_keep_aspect_ratio" );
>
> -			// get the file extension
> -			$fileParts = explode( ".", $resFile );
> -			$fileExt = strtolower($fileParts[count($fileParts)-1]);
> -			$fileName = $ownerId."-".$resourceId.".".$fileExt;
> -
> 			// and start the resizing process
> 		    lt_include( PLOG_CLASS_PATH."class/gallery/resizers/galleryresizer.class.php" );
> 			$resizer = new GalleryResizer( $resFile );
> 		    lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresourcestorage.class.php" );
> 			GalleryResourceStorage::checkMediumSizePreviewsStorageFolder( $ownerId );
> -			$outFile = GalleryResourceStorage::getMediumSizePreviewsFolder( $ownerId ).$fileName;
> +			$outFile = GalleryResourceStorage::getMediumSizePreviewsFolder( $ownerId ).basename( $resFile );
>
> 			// and finally, we can generate the preview!
> 			$result = $resizer->generate( $outFile, $previewWidth, $previewHeight, $previewKeepAspectRatio );
> @@ -100,18 +91,13 @@
> 			lt_include( PLOG_CLASS_PATH."class/config/config.class.php" );
> 			$config =& Config::getConfig();
> 			$previewKeepAspectRatio = $config->getValue( "thumbnails_keep_aspect_ratio" );
> -
> -			// get the file extension
> -			$fileParts = explode( ".", $resFile );
> -			$fileExt = $fileParts[count($fileParts)-1];
> -			$fileName = $ownerId."-".$resourceId.".".$fileExt;
> -
> +
> 			// and start the resizing process
> 		    lt_include( PLOG_CLASS_PATH."class/gallery/resizers/galleryresizer.class.php" );
> 			$resizer = new GalleryResizer( $resFile );
> 		    lt_include( PLOG_CLASS_PATH."class/gallery/dao/galleryresourcestorage.class.php" );
> 			GalleryResourceStorage::checkUserStorageFolder( $ownerId );
> -			$outFile = GalleryResourceStorage::getUserFolder( $ownerId ).$fileName;
> +			$outFile = GalleryResourceStorage::getUserFolder( $ownerId ).basename( $resFile );
>
> 			// and finally, we can generate the preview!
> 			$result = $resizer->generate( $outFile, $previewWidth, $previewHeight, $previewKeepAspectRatio );
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/net/baserequestgenerator.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/net/baserequestgenerator.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/net/baserequestgenerator.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -483,35 +483,42 @@
>         	throw( new Exception( "This function must be implemented by child classes." ));
>         }
>
> +
>         /**
> -         * Returns the link to a resource preview. Must be implemented by child classes to generate a valid URL.
> +         * Returns the link to a resource preview
>          *
>          * @param album Generates the correct link to fetch a resource preview
>          */
>         function resourcePreviewLink( $resource )
>         {
> -        	throw( new Exception( "This function must be implemented by child classes." ));
> +            $blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> +			$resourceLink = $this->getBaseUrl()."/gallery/".$blogId."/previews/".$resource->getFileName();
> +            return $resourceLink;
>         }
> -
> +
>         /**
> -         * Returns the link to a resource preview. Must be implemented by child classes to generate a valid URL.
> +         * Returns the link to a resource preview
>          *
>          * @param album Generates the correct link to fetch a resource preview
>          */
>         function resourceMediumSizePreviewLink( $resource )
>         {
> -	        throw( new Exception( "This function must be implemented by child classes." ));
> +            $blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> +			$resourceLink = $this->getBaseUrl()."/gallery/".$blogId."/previews-med/".$resource->getFileName();
> +            return $resourceLink;
> 		}
>
>         /**
> -         * Returns the link to a resource. Must be implemented by child classes to generate a valid URL.
> +         * Returns the link to a resource
>          *
>          * @param resource Generates the correct link to fetch a resource
>          */
>         function resourceDownloadLink( $resource )
>         {
> -	        throw( new Exception( "This function must be implemented by child classes." ));
> -        }
> +            $blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> +			$resourceLink = $this->getBaseUrl()."/gallery/".$blogId."/".$resource->getFileName();
> +            return $resourceLink;
> +        }
>
> 		/**
> 		 * whether we should generate valid xhtml requests or not
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/net/customrequestgenerator.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/net/customrequestgenerator.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/net/customrequestgenerator.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -386,48 +386,6 @@
> 			return $resourceLink;
>         }
>
> -        /**
> -         * Returns the link to a resource preview
> -         *
> -         * @param album Generates the correct link to fetch a resource preview
> -         */
> -        function resourcePreviewLink( $resource )
> -        {
> -            $resourcePreviewFormat = $this->_config->getValue( "resource_preview_link_format" );
> -			$params = $this->_fillResourceParameters( $resource );
> -			$resourcePreviewLink = $this->getBaseUrl().$this->_replaceTags( $resourcePreviewFormat, $params );
> -
> -			return $resourcePreviewLink;
> -        }
> -
> -        /**
> -         * Returns the link to a resource preview
> -         *
> -         * @param album Generates the correct link to fetch a resource preview
> -         */
> -        function resourceMediumSizePreviewLink( $resource )
> -        {
> -            $resourcePreviewFormat = $this->_config->getValue( "resource_medium_size_preview_link_format" );
> -			$params = $this->_fillResourceParameters( $resource );
> -			$resourcePreviewLink = $this->getBaseUrl().$this->_replaceTags( $resourcePreviewFormat, $params );
> -
> -			return $resourcePreviewLink;
> -        }
> -
> -        /**
> -         * Returns the link to a resource
> -         *
> -         * @param resource Generates the correct link to fetch a resource
> -         */
> -        function resourceDownloadLink( $resource )
> -        {
> -            $resourceDownloadFormat = $this->_config->getValue( "resource_download_link_format" );
> -			$params = $this->_fillResourceParameters( $resource );
> -			$resourceDownloadLink = $this->getBaseUrl().$this->_replaceTags( $resourceDownloadFormat, $params );
> -
> -			return $resourceDownloadLink;
> -        }
> -
> 		/**
> 		 * @private
> 		 */
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/net/prettyrequestgenerator.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/net/prettyrequestgenerator.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/net/prettyrequestgenerator.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -312,43 +312,6 @@
>         }
>
>         /**
> -         * Returns the link to a resource preview
> -         *
> -         * @param album Generates the correct link to fetch a resource preview
> -         */
> -        function resourcePreviewLink( $resource )
> -        {
> -			$blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> -
> -        	return $resourceLink = $this->getBaseUrl()."/resserver.php?blogId=".$blogId."&amp;resource=".rawurlencode($resource->getFileName())."&amp;mode=preview";
> -        }
> -
> -        /**
> -         * Returns the link to a resource preview
> -         *
> -         * @param album Generates the correct link to fetch a resource preview
> -         */
> -        function resourceMediumSizePreviewLink( $resource )
> -        {
> -			$blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> -
> -        	return $resourceLink = $this->getBaseUrl()."/resserver.php?blogId=".$blogId."&amp;resource=".rawurlencode($resource->getFileName())."&amp;mode=medium";
> -        }
> -
> -        /**
> -         * Returns the link to a resource
> -         *
> -         * @param resource Generates the correct link to fetch a resource
> -         */
> -        function resourceDownloadLink( $resource )
> -        {
> -        	$blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> -
> -        	return $resourceLink = $this->getBaseUrl()."/get/".$blogId."/".rawurlencode($resource->getFileName());
> -        }
> -
> -
> -        /**
>          * Returns a string representing the request
>          *
>          * @return A String object representing the request
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/net/rawrequestgenerator.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/net/rawrequestgenerator.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/net/rawrequestgenerator.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -379,59 +379,6 @@
>         }
>
>         /**
> -         * Returns the link to a resource preview
> -         *
> -         * @param album Generates the correct link to fetch a resource preview
> -         */
> -        function resourcePreviewLink( $resource )
> -        {
> -            $blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> -
> -            $this->addParameter( "blogId", $blogId);
> -            $this->addParameter( "resource", $resource->getFileName());
> -            $this->addParameter( "mode", "preview" );
> -
> -            $resourceLink = $this->getResourceServerUrl().$this->getRequest( false );
> -
> -            return $resourceLink;
> -        }
> -
> -        /**
> -         * Returns the link to a resource preview
> -         *
> -         * @param album Generates the correct link to fetch a resource preview
> -         */
> -        function resourceMediumSizePreviewLink( $resource )
> -        {
> -            $blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> -
> -            $this->addParameter( "blogId", $blogId);
> -            $this->addParameter( "resource", $resource->getFileName());
> -            $this->addParameter( "mode", "medium" );
> -
> -            $resourceLink = $this->getResourceServerUrl().$this->getRequest( false );
> -
> -            return $resourceLink;
> -		}
> -
> -        /**
> -         * Returns the link to a resource
> -         *
> -         * @param resource Generates the correct link to fetch a resource
> -         */
> -        function resourceDownloadLink( $resource )
> -        {
> -            $blogId = ($resource->getOwnerId() ? $resource->getOwnerId() : $this->_blogInfo->getId());
> -
> -            $this->addParameter( "blogId", $blogId);
> -            $this->addParameter( "resource", $resource->getFileName());
> -
> -            $resourceLink = $this->getResourceServerUrl().$this->getRequest( false );
> -
> -            return $resourceLink;
> -        }
> -
> -        /**
>          * Returns a string representing the request
>          *
>          * @return A String object representing the request
>
> Modified: plog/branches/lifetype-1.2-resource-test/class/view/redirectview.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/view/redirectview.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/view/redirectview.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -1,5 +1,7 @@
> <?php
>
> +	include_once( PLOG_CLASS_PATH."class/view/view.class.php" );
> +
>     /**
>      * This view returns no content, it just sends a
>      * "Location:" header to the browser so that the browser itself takes care
>
> Deleted: plog/branches/lifetype-1.2-resource-test/class/view/resourceserverview.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/class/view/resourceserverview.class.php	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/class/view/resourceserverview.class.php	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -1,108 +0,0 @@
> -<?php
> -
> -	lt_include( PLOG_CLASS_PATH.'class/view/view.class.php' );
> -
> -	// the three different modes that a resource can be requested
> -	define( 'RESOURCE_VIEW_MODE_DEFAULT', '' );
> -	define( 'RESOURCE_VIEW_MODE_PREVIEW', 'preview' );
> -	define( 'RESOURCE_VIEW_MODE_MEDIUM', 'medium' );
> -    define( 'DEFAULT_HTTP_CACHE_LIFETIME', '86400');
> -    define( 'RESOURCE_DEFAULT_CHUNK_SIZE', '32768' );
> -
> -    /**
> -     * \ingroup View
> -     * @private
> -     */
> -	class ResourceServerView extends View
> -	{
> -
> -		var $_resource;
> -		var $_mode;
> -
> -		function ResourceServerView( $resource = null, $mode = RESOURCE_VIEW_MODE_DEFAULT )
> -		{
> -			$this->View();
> -
> -			$this->_resource = $resource;
> -			$this->_mode = $mode;
> -
> -			if( $this->_resource != null )
> -				$this->_initResponse();
> -		}
> -
> -		/**
> -		 * @private
> -		 * Initializes the mime type needed for this resource and the headers, if any is needed
> -		 */
> -		function _initResponse()
> -		{
> -			$this->addHeaderResponse( 'Pragma: public' );
> -			$this->addHeaderResponse( 'Accept-Ranges: bytes' );
> -			$this->addHeaderResponse( 'Content-Disposition: inline; filename='.rawurlencode($this->_resource->getFileName()));
> -
> -			// depending on what we're sending, the content of the headers will vary...
> -			if( $this->_mode == RESOURCE_VIEW_MODE_PREVIEW )
> -				$this->addHeaderResponse( 'Content-Type: '.$this->_resource->getThumbnailMimeType());
> -			elseif( $this->_mode == RESOURCE_VIEW_MODE_MEDIUM )
> -				$this->addHeaderResponse( 'Content-Type: '.$this->_resource->getThumbnailMimeType());
> -			else {
> -				$data = $this->_resource->getMetadataReader();
> -				$this->addHeaderResponse( 'Content-Type: '.$this->_resource->getMimeType());
> -				$this->addHeaderResponse( 'Content-Length: '.$data->getFileSize());
> -			}
> -
> -			return true;
> -		}
> -
> -		/**
> -		 * we need to overwrite this method or else the View class will be sending the wrong
> -		 * content type and character encoding... We overwrite it to do nothing, since we have
> -		 * already sent the content type in _initResponse()
> -		 *
> -		 * @see View::sendContentType()
> -		 */
> -		function sendContentType()
> -		{
> -			return( true );
> -		}
> -
> -		function render()
> -		{
> -			// call the render method in the main view class... it will take care of sending the headers
> -			// for us and so on...
> -			parent::render();
> -
> -			// if there is no resource to send... then we can quit right away!
> -			if( $this->_resource == null )
> -				return;
> -
> -			// let's see if we really need to send some data or not...
> -			// send also some headers that will help caching, if configured to do so
> -			$config =& Config::getConfig();
> -			$useCaching = $config->getValue( 'resource_server_http_cache_enabled' );
> -			if( $useCaching ) {
> -				// send the "Last-Modified" header
> -				$resDate = $this->_resource->getTimestamp();
> -				$lastModified = $resDate->getDate( DATE_FORMAT_UNIXTIME );
> -				$cacheLifetime = $config->getValue( 'resource_server_http_cache_lifetime', DEFAULT_HTTP_CACHE_LIFETIME );
> -
> -				// check if we have to resent the data and if not, then we're done!
> -				lt_include( PLOG_CLASS_PATH.'class/net/http/httpcache.class.php' );
> -				if( HttpCache::httpConditional( $lastModified, $cacheLifetime ))
> -					exit();
> -			}
> -
> -			// if we need to send something, then let's do it now and finish
> -			if( $this->_mode == RESOURCE_VIEW_MODE_PREVIEW )
> -				print( $this->_resource->getPreview());
> -			elseif( $this->_mode == RESOURCE_VIEW_MODE_MEDIUM )
> -				print( $this->_resource->getMediumSizePreview());
> -			else {
> -				while($chunk =& $this->_resource->getDataChunk( RESOURCE_DEFAULT_CHUNK_SIZE ))
> -					echo( $chunk );
> -			}
> -
> -			return true;
> -		}
> -	}
> -?>
> \ No newline at end of file
>
> Modified: plog/branches/lifetype-1.2-resource-test/templates/admin/globalsettings_url.template
> ===================================================================
> --- plog/branches/lifetype-1.2-resource-test/templates/admin/globalsettings_url.template	2006-12-11 21:50:45 UTC (rev 4384)
> +++ plog/branches/lifetype-1.2-resource-test/templates/admin/globalsettings_url.template	2006-12-11 21:52:47 UTC (rev 4385)
> @@ -81,19 +81,19 @@
>    <div class="field">
>     <label for="config[resource_preview_link_format]">resource_preview_link_format</label>
>     <div class="formHelp">{$locale->tr("help_resource_preview_link_format")}</div>
> -    <input style="width:100%" type="text" id="config[resource_preview_link_format]" name="config[resource_preview_link_format]" value="{$resource_preview_link_format}"/>
> +    <input disabled="disabled" style="width:100%" type="text" id="config[resource_preview_link_format]" name="config[resource_preview_link_format]" value="{$resource_preview_link_format}"/>
>    </div>
>    <!-- resource_preview_link_format -->
>    <div class="field">
>     <label for="config[resource_medium_size_preview_link_format]">resource_medium_size_preview_link_format</label>
>     <div class="formHelp">{$locale->tr("help_resource_medium_size_preview_link_format")}</div>
> -    <input style="width:100%" type="text" id="config[resource_medium_size_preview_link_format]" name="config[resource_medium_size_preview_link_format]" value="{$resource_medium_size_preview_link_format}"/>
> +    <input disabled="disabled" style="width:100%" type="text" id="config[resource_medium_size_preview_link_format]" name="config[resource_medium_size_preview_link_format]" value="{$resource_medium_size_preview_link_format}"/>
>    </div>
>    <!-- resource_download_link_format -->
>    <div class="field">
>     <label for="config[resource_download_link_format]">resource_download_link_format</label>
>     <div class="formHelp">{$locale->tr("help_resource_download_link_format")}</div>
> -    <input style="width:100%" type="text" id="config[resource_download_link_format]" name="config[resource_download_link_format]" value="{$resource_download_link_format}"/>
> +    <input disabled="disabled" style="width:100%" type="text" id="config[resource_download_link_format]" name="config[resource_download_link_format]" value="{$resource_download_link_format}"/>
>    </div>
>    <!-- page_suffix_format -->
>    <div class="field">
>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://devel.lifetype.net/mailman/listinfo/plog-svn
>

-- 
Jon Daley
http://jon.limedaley.com/

The shortest distance between two points is under construction.
-- Altito


More information about the pLog-svn mailing list