Initial commit
Benjamin Renard authored 11 years ago
|
1) <?php
2)
3) class AddRepoPlugin extends VGPlugin
4) {
5) function __construct() {
6) global $conf;
7) if (isset($conf['addrepo'])) {
8) $this->register_action('addrepo');
9) $this->register_hook('header');
10) $this->register_hook('page_start');
11) $this->register_hook('summary');
12) }
13) }
14)
15) function action($action) {
16) if ($action === 'addrepo') {
17) global $page;
18) global $conf;
19) if (isset($_POST['repo_name']) && isset($_POST['repo_desc']) && isset($_POST['repo_pwd'])) {
20) $create=True;
21) $name=rtrim($_POST['repo_name']);
22) if (!$this -> validate_repo_name($name)) {
23) $this -> add_display_message('Invalid name of repository. Must only contain letters, numbers or caraters "_" or "-". ',True);
24) $create=False;
25) }
26) $desc=rtrim($_POST['repo_desc']);
27) if (empty($desc)) {
28) $this -> add_display_message('Repository description is required.',True);
29) $create=False;
30) }
31)
32) if (!isset($conf['addrepo']['password']) || empty($conf['addrepo']['password'])) {
33) $this -> add_display_message('Password not defined in configuration. Creation disable.',True);
34) $create=False;
35) }
36) else {
37) $pwd=rtrim($_POST['repo_pwd']);
38) if ($pwd!=$conf['addrepo']['password']) {
39) $this -> add_display_message('Password incorrect',True);
40) $create=False;
41) }
42) }
43)
44) if ($create && $this -> create_repo($name,$desc)) {
45) $this -> add_display_message("Repository $name successfully created !<br>To access to your new repository, click <a href='?a=summary&p=$name'>here</a>.");
46) }
47) else {
48) $page['addrepo']['values']['name']=$name;
49) $page['addrepo']['values']['desc']=$desc;
50) }
51) }
52) $this->display_plugin_template('addrepo');
53) }
54) }
55)
56) function hook($type) {
57) if ($type == 'header') {
58) echo "\t<link rel='stylesheet' href='plugins/addrepo/style.css' type='text/css' />\n";
59) }
60) elseif ($type == 'page_start') {
61) $this->display_plugin_template('start',False);
62) }
63) elseif ($type == 'summary') {
64) global $page;
65) global $conf;
66) $infos=get_project_info($page['project']);
67) if (empty($infos['head_hash'])) {
68) if (isset($conf['addrepo']['url_format'])) {
69) $page['addrepo']['URL']=sprintf($conf['addrepo']['url_format'],$page['project']);
70) }
71) else {
72) $page['addrepo']['URL']='[URL]';
73) }
74) $this->display_plugin_template('summary',False);
75) }
76) }
77) }
78)
79) /**
80) * Display the given template.
81) * Fixe global variables inclusion
82) */
83) function display_template($template, $with_headers = true) {
84) global $conf;
85) global $page;
86) if ($with_headers) {
87) require 'templates/header.php';
88) }
89) require "$template";
90) if ($with_headers) {
91) require 'templates/footer.php';
92) }
93) }
94)
95) function add_display_message($msg,$error=false) {
96) global $page;
97) if ($error) {
98) $page['addrepo']['error'][]=$msg;
99) }
100) else {
101) $page['addrepo']['msg'][]=$msg;
102) }
103) }
104)
105) function validate_repo_name($name) {
106) if (preg_match('/^[a-zA-Z0-9\-\_]*$/',$name)) {
107) return True;
108) }
109) return False;
110) }
111)
112) function create_repo($name,$desc) {
113) global $conf;
114) if (!isset($conf['addrepo']['root_path'])) {
115) $this -> add_display_message('Root path not configured !',True);
116) return;
117) }
118) elseif(!is_dir($conf['addrepo']['root_path'])) {
119) $this -> add_display_message('Root directory not found. Check your configuration !',True);
120) return;
121) }
122) $path=$conf['addrepo']['root_path'].'/'.$name;
123) if (is_dir($path)) {
124) $this -> add_display_message("Repository $name still exist !",True);
125) return;
126) }
127)
128) if (!mkdir($path)) {
129) $this -> add_display_message("Fail to create repository's directory. Check permission.",True);
130) return;
131) }
132)
133) global $conf;
134) $conf['project'][$name]=array(
135) 'repo' => $path
136) );
137)
138) $cmd = $conf['git'] ." --git-dir=$path init";
139) exec($cmd,$out,$ret);
140) if ($ret !== 0) {
141) $this -> add_display_message("Error initializing repository !");
142) return;
143) }
144)
145) try {
146) $fd = fopen($path.'/description','w');
147) fwrite($fd,$desc);
148) fclose($fd);
149) }
150) catch (Exception $e) {
151) $this -> add_display_message("Error setting repository's description : ".$e->getMessage());
152) return;
153) }
|
Added chmod g+rw after repo...
Benjamin Renard authored 11 years ago
|
154)
155) $cmd = "chmod g+rw -R $path";
156) exec($cmd,$out,$ret);
157) if ($ret !== 0) {
158) $this -> add_display_message("Error fixing repository permission. You may not be able to push in this repository.");
159) }
|