namespace :magento do

namespace :cache do

    desc "Clear the Magento Cache"
    task :clear do
      on roles(fetch(:magento_roles)) do
        within fetch(:magento_working_dir) do
          execute :php, "-r", "\"require_once('app/Mage.php'); Mage::app()->cleanCache(); \""
        end
      end
    end

    desc "Flush the Magento Cache Storage"
    task :flush do
      on roles(fetch(:magento_roles)) do
        within fetch(:magento_working_dir) do
          execute :php, "-r", "\"require_once('app/Mage.php'); Mage::dispatchEvent('adminhtml_cache_flush_all'); Mage::app()->getCacheInstance()->flush(); \""
        end
      end
    end

    desc "Clean Merged Js Css"
    task :clean_merged_js_css do
      on roles(fetch(:magento_roles)) do
        within fetch(:magento_working_dir) do
          execute :php, "-r", "\"require_once('app/Mage.php'); Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); Mage::getModel('core/design_package')->cleanMergedJsCss();  Mage::dispatchEvent('clean_media_cache_after'); \""
        end
      end
    end

    desc "Clean the Magento external Page Cache"
    task :clean_page_cache do
      on roles(fetch(:magento_roles)) do
        within fetch(:magento_working_dir) do
          execute :php, "-r", "\"require_once('app/Mage.php'); Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); if (Mage::helper('pagecache')->isEnabled()) { Mage::helper('pagecache')->getCacheControlInstance()->clean(); } \""
        end
      end
    end

end

namespace :maintenance do
  desc "Turn on maintenance mode by creating maintenance.flag file"
  task :on do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir)  do
        execute :touch, "#{fetch(:magento_working_dir)}/maintenance.flag"
      end
    end
  end

  desc "Turn off maintenance mode by removing maintenance.flag file"
  task :off do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir)  do
        execute :rm, "-f", "#{fetch(:magento_working_dir)}/maintenance.flag"
      end
    end
  end
end

namespace :compiler do
  desc "Run compilation process and enable compiler include path"
  task :compile do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir).join('shell') do
        execute :php, "-f", "compiler.php", "--", "compile"
      end
    end
  end

  desc "Enable compiler include path"
  task :enable do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir).join('shell') do
        execute :php, "-f", "compiler.php", "--", "enable"
      end
    end
  end

  desc "Disable compiler include path"
  task :disable do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir).join('shell') do
        execute :php, "-f", "compiler.php", "--", "disable"
      end
    end
  end

  desc "Disable compiler include path and remove compiled files"
  task :clear do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir).join('shell') do
        execute :php, "-f", "compiler.php", "--", "clear"
      end
    end
  end
end

namespace :indexer do
  desc "Reindex data by all indexers"
  task :reindexall do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir).join('shell') do
        execute :php, "-f", "indexer.php", "--", "reindexall"
      end
    end
  end
end

namespace :logs do
  desc "Clean logs"
  task :clean do
    on roles(fetch(:magento_roles)) do
      within fetch(:magento_working_dir).join('shell') do
        execute :php, "-f", "log.php", "--", "clean"
      end
    end
  end
end

end

namespace :load do

task :defaults do
  set :linked_dirs, fetch(:linked_dirs, []).push("var", "media", "sitemaps")
  set :linked_files, fetch(:linked_files, []).push("app/etc/local.xml")
  set :magento_roles, :all
  set :magento_working_dir, -> { release_path }
end

end