-attribute :name, :kind_of => String, :name_attribute => true
-attribute :site, :kind_of => String, :required => true
-attribute :source, :kind_of => String
-attribute :version, :kind_of => String
-attribute :repository, :kind_of => String
-attribute :revision, :kind_of => String
-attribute :reload_apache, :kind_of => [TrueClass, FalseClass], :default => true
+property :theme, :kind_of => String, :name_property => true
+property :site, :kind_of => String, :required => true
+property :source, :kind_of => String
+property :version, :kind_of => String
+property :repository, :kind_of => String
+property :revision, :kind_of => String
+property :reload_apache, :kind_of => [TrueClass, FalseClass], :default => true
+
+action :create do
+ if new_resource.source
+ remote_directory theme_directory do
+ cookbook "wordpress"
+ source new_resource.source
+ owner node[:wordpress][:user]
+ group node[:wordpress][:group]
+ mode "755"
+ files_owner node[:wordpress][:user]
+ files_group node[:wordpress][:group]
+ files_mode "644"
+ end
+ else
+ theme_repository = new_resource.repository || default_repository
+
+ if theme_repository.end_with?(".git")
+ git theme_directory do
+ action :sync
+ repository theme_repository
+ revision new_resource.revision
+ user node[:wordpress][:user]
+ group node[:wordpress][:group]
+ end
+ elsif theme_repository.end_with?(".zip")
+ zip_path = "#{Chef::Config[:file_cache_path]}/#{new_resource.theme}.zip"
+
+ remote_file zip_path do
+ source theme_repository
+ action :create
+ end
+
+ archive_file zip_path do
+ destination theme_directory
+ action :nothing
+ overwrite true
+ group node[:wordpress][:group]
+ owner node[:wordpress][:user]
+ subscribes :extract, "remote_file[#{zip_path}]", :immediately
+ end
+ else
+ subversion theme_directory do
+ action :sync
+ repository theme_repository
+ user node[:wordpress][:user]
+ group node[:wordpress][:group]
+ ignore_failure theme_repository.start_with?("https://themes.svn.wordpress.org/")
+ end
+ end
+ end
+end
+
+action :delete do
+ directory theme_directory do
+ action :delete
+ recursive true
+ end
+end
+
+action_class do
+ def site_directory
+ node[:wordpress][:sites][new_resource.site][:directory]
+ end
+
+ def theme_directory
+ "#{site_directory}/wp-content/themes/#{new_resource.theme}"
+ end
+
+ def default_repository
+ "https://themes.svn.wordpress.org/#{new_resource.theme}/#{new_resource.version}"
+ end
+end