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