4 * Widget_MyLatestSvnCommits
6 * Copyright (c) Xerox Corporation, Codendi 2001-2009.
8 * @author marc.nazarian@xrce.xerox.com
10 class Widget_MyLatestSvnCommits extends Widget {
13 * Default number of SVN commits to display (if user did not change/set preferences)
15 const NB_COMMITS_TO_DISPLAY = 5;
18 * Number of SVN commits to display (user preferences)
20 private $_nb_svn_commits;
22 public function __construct() {
23 $this->Widget('mylatestsvncommits');
24 $this->_nb_svn_commits = user_get_preference('my_latests_svn_commits_nb_display');
25 if($this->_nb_svn_commits === false) {
26 $this->_nb_svn_commits = self::NB_COMMITS_TO_DISPLAY;
27 user_set_preference('my_latests_svn_commits_nb_display', $this->_nb_svn_commits);
30 public function getTitle() {
31 return _("My Latest SVN Commits");
33 public function _getLinkToCommit($group_id, $commit_id) {
34 return '/svn/?func=detailrevision&group_id='.$group_id.'&rev_id='.$commit_id;
36 public function _getLinkToMore($group_id, $commiter) {
37 return '/svn/?func=browse&group_id='.$group_id.'&_commiter='.$commiter;
40 public function getContent() {
42 $uh = new UserHelper();
43 $request = HTTPRequest::instance();
44 $hp = Codendi_HTMLPurifier::instance();
45 $user = UserManager::instance()->getCurrentUser();
46 $project_ids = $user->getProjects();
47 foreach ($project_ids as $project_id) {
48 $project = new Project($project_id);
49 if ($project->usesSVN()) {
50 list($latest_revisions, $nb_revisions) = svn_get_revisions($project, 0, $this->_nb_svn_commits, '', $user->getUserName());
51 if ($nb_revisions > 0) {
53 list($hide_now,$count_diff,$hide_url) = my_hide_url('my_svn_group', $project_id, $request->get('hide_item_id'), count($project_ids), $request->get('hide_my_svn_group'));
56 $html .= '<strong>' . $project->getPublicName() . '</strong>';
59 while ($data = db_fetch_array($latest_revisions)) {
60 $html .= '<div class="'. util_get_alt_row_color($i++) .'" style="border-bottom:1px solid #ddd">';
61 $html .= '<div style="font-size:0.98em;">';
62 $html .= '<a href="'. $this->_getLinkToCommit($project->getGroupId(), $data['revision']) .'">rev #'.$data['revision'].'</a>';
63 $html .= ' '._("on").' ';
64 //In the db, svn dates are stored as int whereas cvs dates are stored as timestamp
65 $html .= format_date(_("Y-m-d H:i"), (is_numeric($data['date']) ? $data['date'] : strtotime($data['date'])));
66 $html .= ' '._("by").' ';
67 $html .= $hp->purify($uh->getDisplayNameFromUserName($data['who']), CODENDI_PURIFIER_CONVERT_HTML);
69 $html .= '<div style="padding-left:20px; padding-bottom:4px; color:#555">';
70 $html .= util_make_links(substr($data['description'], 0, 255), $project->getGroupId());
71 if (strlen($data['description']) > 255) {
77 $html .= '<div style="text-align:center" class="'. util_get_alt_row_color($i++) .'">';
78 $html .= '<a href="'. $this->_getLinkToMore($project->getGroupId(), $user->getUserName()) .'">[ More ]</a>';
86 function getPreferences() {
88 $prefs .= _("Maximum number of SVN commits to display per project");
89 $prefs .= ' <input name="nb_svn_commits" type="text" size="2" maxlenght="3" value="'.user_get_preference('my_latests_svn_commits_nb_display').'" />';
92 function updatePreferences(&$request) {
93 $request->valid(new Valid_String('cancel'));
94 $nbShow = new Valid_UInt('nb_svn_commits');
96 if (!$request->exist('cancel')) {
97 if ($request->valid($nbShow)) {
98 $this->_nb_svn_commits = $request->get('nb_svn_commits');
100 $this->_nb_svn_commits = self::NB_COMMITS_TO_DISPLAY;
102 user_set_preference('my_latests_svn_commits_nb_display', $this->_nb_svn_commits);
107 function getCategory() {
110 function getDescription() {
111 return _("List SVN commits you have done, by project.");