--- /dev/null
+#
+# Cookbook Name:: mediawiki
+# Definition:: mediawiki_extension
+#
+# Copyright 2013, OpenStreetMap Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+define :mediawiki_extension, :action => [ :enable ] do
+ name = params[:name]
+ site = params[:site]
+ site_directory = node[:mediawiki][:sites][site][:site_directory]
+ mediawiki_directory = node[:mediawiki][:sites][site][:directory]
+ extension_directory = "#{mediawiki_directory}/extensions/#{name}"
+ source = params[:source]
+ template = params[:template]
+
+ if source
+ remote_directory extension_directory do
+ cookbook "mediawiki"
+ source source
+ owner node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0755
+ files_owner node[:mediawiki][:user]
+ files_group node[:mediawiki][:group]
+ files_mode 0755
+ end
+ else
+ repository = params[:repository] || "git://github.com/wikimedia/mediawiki-extensions-#{name}.git"
+ version = params[:version] || node[:mediawiki][:sites][site][:version]
+ tag = params[:tag]
+ if tag
+ reference = "refs/tags/#{tag}"
+ else
+ reference = "refs/heads/REL#{version}".tr(".", "_")
+ end
+
+ git extension_directory do
+ action :sync
+ repository repository
+ reference reference
+ depth 1
+ enable_submodules true
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ ignore_failure repository.start_with?("git://github.com/wikimedia/mediawiki-extensions")
+ notifies :run, resources(:execute => "#{mediawiki_directory}/maintenance/update.php")
+ end
+ end
+
+ if template
+ template "#{mediawiki_directory}/LocalSettings.d/Ext-#{name}.inc.php" do
+ cookbook "mediawiki"
+ source template
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0664
+ notifies :create, resources(:template => "#{mediawiki_directory}/LocalSettings.php")
+ end
+ end
+
+ file "#{mediawiki_directory}/LocalSettings.d/Ext-#{name}.inc.php" do
+ action :create_if_missing
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0664
+ content "<?php require_once('#{extension_directory}/#{name}.php');\n"
+ only_if do File.exist?("#{extension_directory}/#{name}.php") end
+ notifies :create, resources(:template => "#{mediawiki_directory}/LocalSettings.php")
+ end
+end