Exemple #1
0
 function _render_link($renderer, $data)
 {
     $bootstrap = False;
     if ($this->getConf('redissue.theme') == 8) {
         $bootstrap = True;
     }
     $apiKey = $this->getConf('redissue.API');
     if (empty($apiKey)) {
         $this->_render_default_link($renderer, $data);
     } else {
         $url = $this->getConf('redissue.url');
         $client = new Redmine\Client($url, $apiKey);
         // Get Id user of the Wiki if Impersonate
         $view = $this->getConf('redissue.view');
         if ($view == self::RI_IMPERSONATE) {
             $redUser = $_SERVER['REMOTE_USER'];
             // Attempt to collect information with this user
             $client->setImpersonateUser($redUser);
         }
         $issue = $client->api('issue')->show($data['id']);
         if ($issue) {
             // ALL_INFO --- Get Info from the Issue
             $project = $issue['issue']['project'];
             $project_identifier = $this->_project_identifier($client, $project['name']);
             $tracker = $issue['issue']['tracker'];
             $status = $issue['issue']['status']['name'];
             $author = $issue['issue']['author'];
             $assigned = $issue['issue']['assigned_to'];
             $subject = $issue['issue']['subject'];
             $description = $issue['issue']['description'];
             $done_ratio = $issue['issue']['done_ratio'];
             // RENDERER_MAIN_LINK ---- Get the Id Status
             $myStatusId = $issue['issue']['status']['id'];
             $statuses = $client->api('issue_status')->all();
             // Browse existing statuses
             for ($i = 0; $i < count($statuses['issue_statuses']); $i++) {
                 $foundStatus = $statuses['issue_statuses'][$i];
                 if ($foundStatus['id'] == $myStatusId) {
                     // Get is_closed value
                     $isClosed = $foundStatus['is_closed'];
                 }
             }
             // If isClosed not empty, change css
             $this->_render_custom_link($renderer, $data, "[#" . $data['id'] . "] " . $subject, $bootstrap);
             // PRIORITIES --- Get priority and define color
             $priority = $issue['issue']['priority'];
             $id_priority = $priority['id'];
             $color_prio = $this->_color_prio($client, $id_priority);
             if (!$isClosed) {
                 if ($bootstrap) {
                     $renderer->doc .= ' <span class="label label-success">' . $status . '</span>';
                 } else {
                     $renderer->doc .= ' <span class="badge-prio color-' . $color_prio . '">' . $priority['name'] . '</span>';
                     $renderer->doc .= ' <span class="badge-prio tracker">' . $tracker['name'] . '</span>';
                     $renderer->doc .= ' <span class="badge-prio open">' . $status . '</span>';
                 }
             } else {
                 if ($bootstrap) {
                     $renderer->doc .= ' <span class="label label-default">' . $status . '</span>';
                 } else {
                     $renderer->doc .= ' <span class="badge-prio closed">' . $status . '</span>';
                 }
             }
             // GENERAL_RENDERER --- If all is ok
             if ($bootstrap) {
                 $renderer->doc .= ' <span class="label label-' . $color_prio . '">' . $priority['name'] . '</span>';
                 $renderer->doc .= ' <span class="label label-primary">' . $tracker['name'] . '</span>';
                 $renderer->doc .= '<div class="well">';
                 $renderer->doc .= '<div class="issue-info"><dl class="dl-horizontal">';
                 $renderer->doc .= '<dt><icon class="glyphicon glyphicon-info-sign">&nbsp;</icon>Projet :</dt>';
                 $renderer->doc .= '<dd><a href="' . $url . '/projects/' . $project_identifier . '">' . $project['name'] . '</a></dd>';
                 $renderer->doc .= '<dt>Auteur :</dt>';
                 $renderer->doc .= '<dd>' . $author['name'] . ' </dd>';
                 $renderer->doc .= '<dt>Assigné à :</dt>';
                 $renderer->doc .= '<dd>' . $assigned['name'] . ' </dd>';
                 $renderer->doc .= '</dl></div>';
                 // ./ Issue-info
                 $renderer->doc .= '<h4>Description</h4><p>' . $description . '</p>';
                 $renderer->doc .= '<div class="progress">';
                 $renderer->doc .= '<span class="progress-bar" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100" style="width:' . $done_ratio . '%">';
                 $renderer->doc .= '<span class="doku">' . $done_ratio . '% Complete</span>';
                 $renderer->doc .= '</span></div>';
                 // ./progress
                 $renderer->doc .= '</div>';
                 // ./ well
                 if ($data['state'] != DOKU_LEXER_SPECIAL) {
                     $renderer->doc .= '<div class ="issue-doku">';
                 }
             } else {
                 //Not Bootstrap
                 $renderer->doc .= '<div ';
                 if ($data['short'] > 0) {
                     $renderer->doc .= 'style="display:none;"';
                 }
                 $renderer->doc .= 'class="issue-doku border-' . $color_prio . '">';
                 $renderer->doc .= '<div>';
                 $renderer->doc .= '<span><b>' . $this->getLang('redissue.project') . ' : </b></span>';
                 $renderer->doc .= '<a href="' . $url . '/projects/' . $project_identifier . '"> ' . $project['name'] . '</a>';
                 $renderer->doc .= '<span><b> ' . $this->getLang('redissue.author') . ' : </b></span>';
                 $renderer->doc .= '' . $author['name'] . '';
                 $renderer->doc .= '<br>';
                 $renderer->doc .= '<span><b> ' . $this->getLang('redissue.assigned') . ' :</b></span>';
                 $renderer->doc .= '<a> ' . $assigned['name'] . ' </a>';
                 $renderer->doc .= '</span></div>';
                 // ./ Issue-info
                 $renderer->doc .= '<div class="issue-description">';
                 $renderer->doc .= '<h4>' . $this->getLang('redissue.desc') . ' :</h4>';
                 $renderer->doc .= '<p>' . $description . '</p>';
                 $renderer->doc .= '</div>';
                 $renderer->doc .= '<div class="progress">';
                 $renderer->doc .= '<span class="doku">' . $done_ratio . '% Complete</span>';
                 $renderer->doc .= '</div>';
                 // ./progress
                 if ($data['state'] != DOKU_LEXER_SPECIAL) {
                     $renderer->doc .= '<div class="description">';
                 }
             }
         } else {
             // If the user has no Rights
             $this->_render_default_link($renderer, $data);
             if ($data['state'] == DOKU_LEXER_SPECIAL or $data['state'] == DOKU_LEXER_ENTER) {
                 $renderer->doc .= '<div><div class="norights">';
             }
         }
     }
 }
Exemple #2
0
   function _render_project($renderer, $data)
   {
       $apiKey = $this->getConf('redproject.API');
       $url = $this->getConf('redproject.url');
       $client = new Redmine\Client($url, $apiKey);
       // Get Id user of the Wiki if Impersonate
       $view = $this->getConf('redproject.view');
       if ($view == self::RI_IMPERSONATE) {
           $redUser = $_SERVER['REMOTE_USER'];
           // Attempt to collect information with this user
           $client->setImpersonateUser($redUser);
       }
       // Get Project Info
       $proj = $client->api('project')->show($data['proj']);
       if ($proj) {
           $projId = $proj['project']['id'];
           $projIdent = $proj['project']['identifier'];
           $projName = $proj['project']['name'];
           $projParent = $proj['project']['parent'];
           $nameParent = $projParent['name'];
           $parentId = $client->api('project')->getIdByName($nameParent);
           $parent = $client->api('project')->show($parentId);
           $parentIdent = $parent['project']['identifier'];
           $projHome = $proj['project']['homepage'];
           $projDesc = $proj['project']['description'];
           // RENDERER PROJECT INFO
           // Title
           $renderer->doc .= '<h2 class="title">Projet Redmine</h2>';
           if ($projHome) {
               $renderer->doc .= '<div class="title">';
               $renderer->doc .= '<a href="' . $projHome . '"><div class="circle">HOME</div></a>';
               $renderer->doc .= '<div class="title-droite">';
               $renderer->doc .= '<span class="info-title">' . $projName . '</span>';
               $renderer->doc .= '<div class="see-it">';
               $renderer->doc .= '<a href="' . $url . '/projects/' . $projIdent . '">See it in redmine</a>';
               $renderer->doc .= '</div>';
               // /.see-it
               $renderer->doc .= '</div>';
               // /.title-droite
               $renderer->doc .= '</div>';
               // /.title
           } else {
               $renderer->doc .= '<div class="title">';
               $renderer->doc .= '<a href="' . $projHome . '" title="Add Homepage"><div class="circle">+</div></a>';
               $renderer->doc .= '<div class="title-droite">';
               $renderer->doc .= '<span class="info-title">' . $projName . '</span>';
               $renderer->doc .= '<div class="see-it">';
               $renderer->doc .= '<a href="' . $url . '/projects/' . $projIdent . '">See it in redmine</a>';
               $renderer->doc .= '</div>';
               // /.see-it
               $renderer->doc .= '</div>';
               // /.title-droite
               $renderer->doc .= '</div>';
               // /.title
           }
           // DESCRIPTION
           if ($projDesc == '') {
               $renderer->doc .= '<div class="desc"><h4>Description</h4> <p>' . $this->getLang('description') . '</p></div>';
           } else {
               $renderer->doc .= '<div class="desc"><h4>Description</h4> <p class="desc"> ' . $projDesc . '</p></div>';
           }
           // VERSIONS
           $versions = $client->api('version')->all($data['proj']);
           // Parsing Version
           if ($versions) {
               $renderer->doc .= '<div class="version"><h3>Versions</h3>';
               $renderer->doc .= '<div class="panel-group" id="version-accordion-nb" role="tablist">';
               for ($i = 0; $i < count($versions['versions']); $i++) {
                   // Begin Accordion
                   $renderer->doc .= '<div class="panel panel-primary descver">';
                   $foundVersion = $versions['versions'][$i];
                   $versionId = $foundVersion['id'];
                   $renderer->doc .= '<div class="version panel-heading">';
                   $renderer->doc .= '<h4 class="panel-title">';
                   $renderer->doc .= '<a class="version" data-toggle="collapse" data-parent="#version-accordion-nb" href="#collapse-version-nb-' . $versionId . '">';
                   $renderer->doc .= '<span class="version">Version ' . $foundVersion['name'] . '</span> ';
                   $renderer->doc .= '</a>';
                   $statusClass = $foundVersion['status'] == 'open' ? 'statusop' : 'statuscl';
                   $renderer->doc .= '<span class="' . $statusClass . '"> ' . $foundVersion['status'] . ' </span>';
                   $renderer->doc .= '</h4>';
                   // /.panel-title
                   $renderer->doc .= '</div>';
                   // /.panel-heading
                   $renderer->doc .= '<div id="collapse-version-nb-' . $versionId . '" class="panel-collapse collapse">';
                   // PANEL BODY
                   $renderer->doc .= '<div class="panel-body">';
                   // Time Entries
                   $createdOn = DateTime::createFromFormat(DateTime::ISO8601, $foundVersion['created_on']);
                   $updatedOn = DateTime::createFromFormat(DateTime::ISO8601, $foundVersion['updated_on']);
                   $renderer->doc .= '<p><b>Description :</b> ' . $foundVersion['description'] . '</p>';
                   $renderer->doc .= '<p><a href="' . $url . '/versions/' . $versionId . '">See this version in redmine</a></p>';
                   $renderer->doc .= '<p><b>' . $this->getLang('createdon') . '</b>' . $createdOn->format(DateTime::RFC850) . '</p>';
                   $renderer->doc .= '<p><b>' . $this->getLang('updatedon') . '</b>' . $updatedOn->format(DateTime::RFC850) . '</p>';
                   // Issues of Versions
                   $issueTotal = $client->api('issue')->all(array('project_id' => $projId, 'status_id' => '*', 'fixed_version_id' => $foundVersion['id'], 'limit' => 1));
                   // Total issues & open
                   $issueOpen = $client->api('issue')->all(array('project_id' => $projId, 'status_id' => 'open', 'fixed_version_id' => $foundVersion['id'], 'limit' => 1));
                   // Get percent version
                   $diffIssue = $issueTotal['total_count'] - $issueOpen['total_count'];
                   $progress = $this->getPercent($diffIssue, $issueTotal['total_count']);
                   // renderer Progressbar
                   $renderer->doc .= '<span class="col-md-3">';
                   $renderer->doc .= '<a href="' . $url . '/projects/' . $projIdent . '/issues">' . $issueTotal['total_count'] . ' issues (' . $diffIssue . ' closed - ' . $issueOpen['total_count'] . ' open)</a>';
                   $renderer->doc .= '</span>';
                   // /.col-md-3
                   $renderer->doc .= '<span class="col-md-6">';
                   $renderer->doc .= '<div class="progress">';
                   $renderer->doc .= '<span class="progress-bar" role="progressbar" aria-valuenow="70"
 aria-valuemin="0" aria-valuemax="100" style="width:' . $progress . '%">';
                   $renderer->doc .= '<span class="doku">' . $progress . '% Complete</span>';
                   $renderer->doc .= '</span></div>';
                   // ./progress
                   $renderer->doc .= '</span>';
                   // ./col-md-6
                   $renderer->doc .= '</div>';
                   // /.panel-body
                   $renderer->doc .= '</div>';
                   // /#collapse-version-nb-'.$versionId.' .panel-collapse
                   $renderer->doc .= '</div>';
                   // /.panel .panel-default
                   $renderer->doc .= '<br>';
               }
               $renderer->doc .= '</div>';
               // /.panel-group
           } else {
               $renderer->doc .= '<div class="version"><h3>Versions</h3>';
               $renderer->doc .= $nbVersion . ' versions';
               $renderer->doc .= 'div class="descver"><p>' . $this->getLang('noversion') . '</p></div>';
           }
           $renderer->doc .= '</div>';
           // DETAILS
           // Get Number of Version
           for ($v = 0; $v < count($versions['versions']); $v++) {
               $nbVersion = $v + 1;
           }
           // Get number of Issues
           $issueTotal = $client->api('issue')->all(array('project_id' => $projId, 'status_id' => '*', 'limit' => 1));
           $issueOpen = $client->api('issue')->all(array('project_id' => $projId, 'status_id' => 'open', 'limit' => 1));
           // Initialize Array
           $usersByRole = array();
           $members = $client->api('membership')->all($projId);
           // Found each Members
           for ($m = 0; $m < count($members['memberships']); $m++) {
               // $z++;
               $memberFound = $members['memberships'][$m];
               $currentUser = $memberFound['user'];
               for ($r = 0; $r < count($memberFound['roles']); $r++) {
                   $currentRole = $memberFound['roles'][$r];
                   $roleId = $currentRole['id'];
                   // If doesn't exist in usersByRole, create it
                   if (!$usersByRole[$roleId]) {
                       $currentRole['members'] = array($currentUser);
                       $usersByRole[$roleId] = $currentRole;
                   } else {
                       array_push($usersByRole[$roleId]['members'], $currentUser);
                   }
               }
           }
           // Renderer Details
           $renderer->doc .= '<div class="details">';
           $renderer->doc .= '<h3>' . $this->getlang('hdetail') . '</h3>';
           // Stats
           $renderer->doc .= '<div class="stats">';
           if ($projParent == '') {
               $renderer->doc .= '<p>' . $this->getLang('mainproj') . '</p>';
           } else {
               $renderer->doc .= '<p>' . $this->getLang('subproject') . ' <a href="' . $url . '/projects/' . $parentIdent . '">' . $nameParent . '</a></p>';
           }
           $renderer->doc .= '<p>' . $this->getLang('tversion') . '<span class="label label-info">' . $nbVersion . '</span>' . $this->getLang('vversion') . '</p>';
           $renderer->doc .= '<p><span class="label label-success">' . $issueTotal['total_count'] . '</span>' . $this->getLang('issues') . '<span class="label label-warning">' . $issueOpen['total_count'] . '</span>' . $this->getLang('open') . '</p>';
           $renderer->doc .= '<p><span class="label label-info">' . $m . '</span>' . $this->getLang('membdetail') . '</p>';
           $renderer->doc .= '</div>';
           // /.stats
           $renderer->doc .= '</div>';
           // /.details
           // MEMBERSHIPS & ROLES
           $langMembers = $this->getLang('membres');
           $renderer->doc .= '<h3 class="member">' . $langMembers . '</h3>';
           // Display new array usersByRole
           $renderer->doc .= '<div class="member">';
           foreach ($usersByRole as $role => $currentRole) {
               $renderer->doc .= '<p class="member">' . $currentRole['name'] . ' : ';
               foreach ($currentRole['members'] as $who => $currentUser) {
                   $userId = $currentUser['id'];
                   $mailCurrentUser = $client->api('user')->show($userId);
                   $mailUser = $mailCurrentUser['user']['mail'];
                   $renderer->doc .= '<a href="mailto:' . $mailUser . '?Subject=Project ' . $projName . '"target="_top"><span> ' . $currentUser['name'] . '</span></a>';
               }
               $renderer->doc .= '</p>';
           }
           $renderer->doc .= '</div>';
       } else {
           $renderer->doc .= '<div class="title"><img class="title" src="lib/plugins/redproject/images/home.png">Projet Privé</div><br>';
           $renderer->doc .= '<div class="desc"><h3>Information</h3>' . $this->getLang('norights') . ' </p></div>';
       }
   }