xref: /plugin/gitbacked/action/editcommit.php (revision fa53f2a35d77ac419bbdb11e6872b25439750d9f)
1*fa53f2a3SWolfgang Gassler<?php
2*fa53f2a3SWolfgang Gassler/**
3*fa53f2a3SWolfgang Gassler * DokuWiki Plugin gitbacked (Action Component)
4*fa53f2a3SWolfgang Gassler *
5*fa53f2a3SWolfgang Gassler * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6*fa53f2a3SWolfgang Gassler * @author  Wolfgang Gassler <wolfgang@gassler.org>
7*fa53f2a3SWolfgang Gassler */
8*fa53f2a3SWolfgang Gassler
9*fa53f2a3SWolfgang Gassler// must be run within Dokuwiki
10*fa53f2a3SWolfgang Gasslerif (!defined('DOKU_INC')) die();
11*fa53f2a3SWolfgang Gassler
12*fa53f2a3SWolfgang Gasslerif (!defined('DOKU_LF')) define('DOKU_LF', "\n");
13*fa53f2a3SWolfgang Gasslerif (!defined('DOKU_TAB')) define('DOKU_TAB', "\t");
14*fa53f2a3SWolfgang Gasslerif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
15*fa53f2a3SWolfgang Gassler
16*fa53f2a3SWolfgang Gasslerrequire_once DOKU_PLUGIN.'action.php';
17*fa53f2a3SWolfgang Gasslerrequire_once(DOKU_PLUGIN.'gitbacked/lib/Git.php');
18*fa53f2a3SWolfgang Gassler
19*fa53f2a3SWolfgang Gasslerclass action_plugin_gitbacked_editcommit extends DokuWiki_Action_Plugin {
20*fa53f2a3SWolfgang Gassler
21*fa53f2a3SWolfgang Gassler    public function register(Doku_Event_Handler &$controller) {
22*fa53f2a3SWolfgang Gassler
23*fa53f2a3SWolfgang Gassler       $controller->register_hook('IO_WIKIPAGE_WRITE', 'AFTER', $this, 'handle_io_wikipage_write');
24*fa53f2a3SWolfgang Gassler
25*fa53f2a3SWolfgang Gassler    }
26*fa53f2a3SWolfgang Gassler
27*fa53f2a3SWolfgang Gassler    public function handle_io_wikipage_write(Doku_Event &$event, $param) {
28*fa53f2a3SWolfgang Gassler
29*fa53f2a3SWolfgang Gassler		$rev = $event->data[3];
30*fa53f2a3SWolfgang Gassler
31*fa53f2a3SWolfgang Gassler		/* On update to an existing page this event is called twice,
32*fa53f2a3SWolfgang Gassler		* once for the transfer of the old version to the attic (rev will have a value)
33*fa53f2a3SWolfgang Gassler		* and once to write the new version of the page into the wiki (rev is false)
34*fa53f2a3SWolfgang Gassler		*/
35*fa53f2a3SWolfgang Gassler		if (!$rev) {
36*fa53f2a3SWolfgang Gassler
37*fa53f2a3SWolfgang Gassler			$pagePath = $event->data[0][0];
38*fa53f2a3SWolfgang Gassler			$pageName = $event->data[2];
39*fa53f2a3SWolfgang Gassler
40*fa53f2a3SWolfgang Gassler			$authorName = $GLOBALS['USERINFO']['name'];
41*fa53f2a3SWolfgang Gassler			$editSummary = $GLOBALS['INFO']['meta']['last_change']['sum'];
42*fa53f2a3SWolfgang Gassler
43*fa53f2a3SWolfgang Gassler			$message = str_replace(
44*fa53f2a3SWolfgang Gassler				array('%page%','%summary%','%user%'),
45*fa53f2a3SWolfgang Gassler				array($pageName,$editSummary,$authorName),
46*fa53f2a3SWolfgang Gassler				$this->getConf('commitMsg')
47*fa53f2a3SWolfgang Gassler			);
48*fa53f2a3SWolfgang Gassler
49*fa53f2a3SWolfgang Gassler			//get path to the repo root (by default DokuWiki's savedir)
50*fa53f2a3SWolfgang Gassler			$repoPath = $this->getConf('repoPath');
51*fa53f2a3SWolfgang Gassler
52*fa53f2a3SWolfgang Gassler			//init the repo and create a new one if it is not present
53*fa53f2a3SWolfgang Gassler			$repo = new GitRepo($repoPath, true, true);
54*fa53f2a3SWolfgang Gassler
55*fa53f2a3SWolfgang Gassler			//add the changed file and set the commit message
56*fa53f2a3SWolfgang Gassler			$repo->add($pagePath);
57*fa53f2a3SWolfgang Gassler			$repo->commit($message);
58*fa53f2a3SWolfgang Gassler
59*fa53f2a3SWolfgang Gassler			//if the push after Commit option is set we push the active branch to origin
60*fa53f2a3SWolfgang Gassler			if ($this->getConf('pushAfterCommit')) {
61*fa53f2a3SWolfgang Gassler				$repo->push('origin',$repo->active_branch());
62*fa53f2a3SWolfgang Gassler			}
63*fa53f2a3SWolfgang Gassler
64*fa53f2a3SWolfgang Gassler		}
65*fa53f2a3SWolfgang Gassler
66*fa53f2a3SWolfgang Gassler    }
67*fa53f2a3SWolfgang Gassler
68*fa53f2a3SWolfgang Gassler}
69*fa53f2a3SWolfgang Gassler
70*fa53f2a3SWolfgang Gassler// vim:ts=4:sw=4:et:
71