[dev] Serious problem with Ansel and possibly datatree (no,
it's not datatree)
Roel Gloudemans
roel at gloudemans.info
Mon Sep 20 09:19:50 PDT 2004
It's fixed.
Thanks,
Roel.
> Sure enough, images weren't being deleted properly. Try what I just
> committed.
>
> I don't think we need to try to delete the base directory, since the storage
> structure is a hash. There will certainly be another image that will go into
> that bucket.
>
> --Ben
>
> Quoting Roel Gloudemans <roel at gloudemans.info>:
>
>>
>>> Okay, this is useful, especially knowing you use SQL VFS. Two steps
>>> from here:
>>>
>>> - Log the queries sent to your SQL server when you delete that image (VFS
>>> doesn't have logging support currently, which is why you need to do
>>> it on the
>>> server end, but I'll try and work on that).
>>
>> Well, looking at the delete method used in Ansel (quote from
>> lib/Gallery.php):
>> function delete()
>> {
>> // Delete files from VFS.
>> $this->_vfs->deleteFolder('.horde/ansel', substr($this->getId(),
>> -2), true);
>>
>> // Remove from DataTree backend.
>> $this->_imageOb->removeImage($this);
>> }
>>
>> I can imagine why this happens. All images are in the same directory.
>> Looking at
>> the code to delete images you'd suspect that there should be one image per
>> directory. (Which is not the case)
>>
>> With the current setup the delete code should be like:
>> /**
>> * Removes this image from the VFS and DataTree backends.
>> */
>> function delete()
>> {
>> // Get the filenames
>> $fullname = $this->getVFSName('full');
>> $screenname = $this->getVFSName('screen');
>> $basepath = '.horde/ansel/' . substr($this->getId(), -2);
>>
>> // Delete files from VFS.
>> $this->_vfs->deleteFile($basepath . '/screen', $screenname);
>> $this->_vfs->deleteFile($basepath . '/thumb', $screenname);
>> $this->_vfs->deleteFile($basepath . '/full', $fullname);
>>
>> // Delete folder if no more images left
>> if (count($this->_vfs->listFolder($basepath . '/full') == 0) {
>> $this->_vfs->deleteFolder($basepath, true);
>> }
>>
>> // Remove from DataTree backend.
>> $this->_imageOb->removeImage($this);
>> }
>>
>> Darn, I think I solved it :-) (pleeeeeeaaaaaase say that I'm correct ;-) )
>>
>> Cheers,
>> Roel.
>>
>> (PS. Patch attached)
More information about the dev
mailing list