3 require_once('common/include/User.class');
5 class CVSPlugin extends SCM {
6 function CVSPlugin () {
8 $this->name = 'scmcvs';
10 $this->hooks[] = 'scm_page';
11 $this->hooks[] = 'scm_admin_update';
12 $this->hooks[] = 'scm_admin_page';
13 $this->hooks[] = 'scm_stats';
15 $this->hooks[] = 'scm_plugin';
16 // $this->hooks[] = 'group_approved';
17 $this->hooks[] = 'cssfile';
19 require_once('plugins/scmcvs/config.php') ;
21 $this->default_cvs_server = $default_cvs_server ;
23 $this->cvs_root = $cvs_root;
25 $this->cvs_root = "/cvsroot";
27 //$this->default_cvs_server = $default_cvs_server ;
28 //$this->this_server = $this_server ;
29 $this->enabled_by_default = $enabled_by_default ;
34 function getDefaultServer() {
35 return $this->default_cvs_server;
38 function CallHook ($hookname, $params) {
39 global $Language, $HTML;
43 $group_id = $params['group_id'] ;
44 $this->getPage ($group_id) ;
46 case 'scm_admin_update':
47 $this->adminUpdate ($params) ;
49 case 'scm_admin_page':
50 $this->getAdminPage ($params) ;
53 $this->getStats ($params) ;
55 // case "group_approved":
56 // $this->groupApproved ($params) ;
59 $this->getCSSfile ($params) ;
62 $scm_plugins=& $params['scm_plugins'];
63 $scm_plugins[]=$this->name;
70 function getCSSfile ($layout) {
71 echo '<link rel="stylesheet" type="text/css" href="/plugins/scmcvs/cvsweb/css/cvsweb.css" />';
74 function getPage ($group_id) {
75 global $Language, $HTML ;
77 $project =& group_get_object($group_id);
78 if (!$project || !is_object($project)) {
80 } elseif ($project->isError()) {
84 if ($project->usesPlugin($this->name)) {
86 print $Language->getText('plugin_scmcvs','documentation');
88 $cvsrootend=$project->getSCMBox().':/cvsroot/'.$project->getUnixName();
89 $cvsrootend = $project->getSCMBox().':'.$this->cvs_root.'/'.$project->getUnixName();
91 // CVS browser links must be displayed if
92 // project enables anon CVS or if logged-in
93 // user is a member of the group
94 $displayCvsBrowser = $project->enableAnonSCM();
95 if(session_loggedin()) {
96 $perm =& $project->getPermission(session_get_user());
97 if ($perm && is_object($perm) && !$perm->isError() && $perm->isMember()) {
98 $displayCvsBrowser = true;
102 // ######################## Table for summary info
108 // ######################## Anonymous CVS Instructions
109 if ($project->enableAnonSCM()){
110 echo $Language->getText('plugin_scmcvs', 'anoncvs');
113 <tt>cvs -d :pserver:anonymous@' . $cvsrootend.' login</tt><br/>
114 <tt>cvs -d :pserver:anonymous@' . $cvsrootend.' checkout <em>'.$Language->getText('plugin_scmcvs', 'modulename').'</em></tt>
118 // ######################## Developer Access
119 echo $Language->getText('plugin_scmcvs', 'devcvs');
122 <tt>export CVS_RSH=ssh</tt><br/>
123 <tt>cvs -d :ext:<em>'.$Language->getText('plugin_scmcvs', 'developername').'</em>@'.$cvsrootend.' checkout <em>'.$Language->getText('plugin_scmcvs', 'modulename').'</em></tt>
126 // ######################## CVS Snapshot
127 if ($displayCvsBrowser) {
130 [<a href="/snapshots.php?group_id='.$group_id.'">'.$Language->getText('plugin_scmcvs', 'download_snapshot').'</a>]
136 <td width="35%" valign="top">
138 // ######################## CVS Browsing
139 echo $HTML->boxTop($Language->getText('plugin_scmcvs', 'history'));
140 echo $this->getDetailedStats(array('group_id'=>$group_id)).'<p>';
141 if ($displayCvsBrowser){
142 echo $Language->getText('plugin_scmcvs', 'browsetree');
143 echo '<p>[<a href="'.$this->getAccountGroupCVSwebUrl($group_id).'">'.$Language->getText('plugin_scmcvs', 'browseit').'</a>]</p>' ;
144 $hook_params['project_name'] = $project->getUnixName();
145 plugin_hook ("cvs_stats", $hook_params) ;
147 echo $HTML->boxBottom();
156 function adminUpdate ($params) {
157 $group =& group_get_object($params['group_id']);
158 if (!$group || !is_object($group)) {
160 } elseif ($group->isError()) {
163 if ($group->usesPlugin($this->name)) {
164 if ($params['scmcvs_enable_anoncvs']) {
165 $group->SetUsesAnonSCM(true);
167 $group->SetUsesAnonSCM(false);
169 if ($params['scmcvs_enable_pserver']) {
170 $group->SetUsesPserver(true);
172 $group->SetUsesPserver(false);
177 // This function is used to render checkboxes below
180 return 'checked="checked"';
186 function getAdminPage ($params) {
188 $group =& group_get_object($params['group_id']);
190 if ($group->usesPlugin($this->name)) {
193 <input type="checkbox" name="scmcvs_enable_anoncvs" value="1" <?php echo $this->c($group->enableAnonSCM()); ?> /><strong><?php echo $Language->getText('plugin_scmcvs','enable_anonymous_cvs') ?></strong>
195 <input type="checkbox" name="scmcvs_enable_pserver" value="1" <?php echo $this->c($group->enablePserver()); ?> /><strong><?php echo $Language->getText('plugin_scmcvs','enable_pserver') ?></strong>
201 function getStats ($params) {
203 $group_id = $params['group_id'] ;
204 $project =& group_get_object($group_id);
205 if (!$project || !is_object($project)) {
207 } elseif ($project->isError()) {
211 if ($project->usesPlugin($this->name)) {
213 SELECT sum(commits) AS commits, sum(adds) AS adds
215 WHERE group_id='$group_id'");
216 $commit_num = db_result($result,0,'commits');
217 $add_num = db_result($result,0,'adds');
224 echo ' (CVS: '.$Language->getText('plugin_scmcvs','cvs_commits',array(number_format($commit_num,0),number_format($add_num,0))).")";
228 function getDetailedStats ($params) {
229 global $Language, $HTML;
230 $group_id = $params['group_id'] ;
233 SELECT u.realname, u.user_name, sum(commits) as commits, sum(adds) as adds, sum(adds+commits) as combined
234 FROM stats_cvs_user s, users u
235 WHERE group_id=\''.$group_id.'\' AND s.user_id=u.user_id AND (commits>0 OR adds >0)
236 GROUP BY group_id, realname, user_name
237 ORDER BY combined DESC, realname;
240 if (db_numrows($result) > 0) {
241 $tableHeaders = array(
242 $Language->getText('plugin_scmcvs', 'realname'),
243 $Language->getText('plugin_scmcvs', 'adds'),
244 $Language->getText('plugin_scmcvs', 'commits')
246 echo $HTML->listTableTop($tableHeaders);
249 $total = array('adds' => 0, 'commits' => 0);
251 while($data = db_fetch_array($result)) {
252 echo '<tr '. $HTML->boxGetAltRowStyle($i) .'>';
253 echo '<td width="50%"><a href="/users/'.$data['user_name'].'/">'.$data['realname'].'</a></td>'.
254 '<td width="25%" align="right">'.$data['adds']. '</td>'.
255 '<td width="25%" align="right">'.$data['commits'].'</td></tr>';
256 $total['adds'] += $data['adds'];
257 $total['commits'] += $data['commits'];
260 echo '<tr '. $HTML->boxGetAltRowStyle($i) .'>';
261 echo '<td width="50%"><strong>'.$Language->getText('plugin_scmcvs', 'total').':</strong></td>'.
262 '<td width="25%" align="right"><strong>'.$total['adds']. '</strong></td>'.
263 '<td width="25%" align="right"><strong>'.$total['commits'].'</strong></td>';
265 echo $HTML->listTableBottom();
266 echo '<hr size="1" />';
271 * getAccountGroupCvswebUrl() - Returns URL for group's CVS interface WWW
273 * @param string The group name
274 * @return URL to access CVS over HTTP
276 function getAccountGroupCVSwebUrl($group_id) {
277 $project =& group_get_object($group_id);
278 //return 'http://'.$project->getSCMBox().'/plugins/scmcvs/cvsweb.php/?cvsroot='.$project->getUnixName();
279 // external SCM box is now handled inside cvsweb.php
280 return '/plugins/scmcvs/cvsweb.php/?cvsroot='.$project->getUnixName();
284 function groupApproved ($params) {
285 $group_id = $params['group_id'] ;
287 $project =& group_get_object($group_id);
289 if ($this->enabled_by_default) {
290 $group->setPluginUse("scmcvs", 1) ;
292 $group->setPluginUse("scmcvs", 0) ;
300 // c-file-style: "bsd"