public static function updateProjectSubproject(PhabricatorProject $project) { $dao = new PhabricatorProjectSubproject(); $conn = $dao->establishConnection('w'); $sql = array(); foreach ($project->getSubprojectPHIDs() as $subproject_phid) { $sql[] = qsprintf($conn, '(%s, %s)', $project->getPHID(), $subproject_phid); } queryfx($conn, 'DELETE FROM %T WHERE projectPHID = %s', $dao->getTableName(), $project->getPHID()); if ($sql) { queryfx($conn, 'INSERT INTO %T (projectPHID, subprojectPHID) VALUES %Q', $dao->getTableName(), implode(', ', $sql)); } }
private function renderAboutPage(PhabricatorProject $project, PhabricatorProjectProfile $profile) { $viewer = $this->getRequest()->getUser(); $blurb = $profile->getBlurb(); $blurb = phutil_escape_html($blurb); $blurb = str_replace("\n", '<br />', $blurb); $phids = array_merge(array($project->getAuthorPHID()), $project->getSubprojectPHIDs()); $phids = array_unique($phids); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); $timestamp = phabricator_datetime($project->getDateCreated(), $viewer); $about = '<div class="phabricator-profile-info-group"> <h1 class="phabricator-profile-info-header">About</h1> <div class="phabricator-profile-info-pane"> <table class="phabricator-profile-info-table"> <tr> <th>Creator</th> <td>' . $handles[$project->getAuthorPHID()]->renderLink() . '</td> </tr> <tr> <th>Created</th> <td>' . $timestamp . '</td> </tr> <tr> <th>PHID</th> <td>' . phutil_escape_html($project->getPHID()) . '</td> </tr> <tr> <th>Blurb</th> <td>' . $blurb . '</td> </tr> </table> </div> </div>'; if ($project->getSubprojectPHIDs()) { $table = $this->renderSubprojectTable($handles, $project->getSubprojectPHIDs()); $subproject_list = $table->render(); } else { $subproject_list = '<p><em>No subprojects.</em></p>'; } $about .= '<div class="phabricator-profile-info-group">' . '<h1 class="phabricator-profile-info-header">Subprojects</h1>' . '<div class="phabricator-profile-info-pane">' . $subproject_list . '</div>' . '</div>'; return $about; }