1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Fixed WebDav delete unmodified template file from sub style

Discussion in 'Resolved Bug Reports' started by Ralle, Dec 12, 2012.

  1. Ralle

    Ralle Active Member

    When you find yourself using WebDav in a sub theme and you delete a template which has not been modified in said theme, it will be deleted from the parent too. This may be expected behavior in some cases, I don't know.
    In my case, it has caused me lots of pain and troubleshooting.
    I have a WebDav client, which allows me to edit files directly. It's called Transmit and is for the Mac. It's a really great application.
    When you edit a file and hit save. It saves a file with another name, then deletes the original file and renames the saved file. This is quite a good way of doing things as the site is up while the new file is being downloaded when working with SFTP or FTP, but with WebDav and xenForo it gives you some unexpected behavior.
    You see when my WebDav client deletes the unmodified template file to replace it with a new version, it actually deletes that template from all other themes, which is horrible.
    You don't expect files in other folders to be deleted because you delete a file which happens to be just a link to a file that exists in another folder. The only really good solution to this problem is to not do anything at all when you delete an unmodified template.
    Therefore I suggest this change:
    Code:
    --- a/library/XenForo/SabreDav/File/Template.php
    +++ b/library/XenForo/SabreDav/File/Template.php
    @@ -157,7 +157,7 @@ class XenForo_SabreDav_File_Template extends Sabre_DAV_File
     
            public function delete()
            {
    -               if ($this->_template)
    +               if ($this->_template && $this->_template['style_id'] == $this->_style['style_id'])
                    {
                            $dw = XenForo_DataWriter::create('XenForo_DataWriter_Template');
                            $dw->setExistingData($this->_template);
    It prevents the deletion of the template, if this style does not have a custom version of it.
     
    HWS likes this.
  2. Mike

    Mike XenForo Developer Staff Member

    Good catch. :)
     
    Ralle and Slavik like this.

Share This Page