f8b7d4037f793a26b27494d72cd72764095696fd
Benjamin Renard 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) 		}
Benjamin Renard 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) 		}