\n"; $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; return $sToRender; } // If there are no threads to view for a document function getViewFailPage($sMessage) { global $default; if ( strlen($sMessage)>0 ) { $sToRender = $sMessage; } else { $sToRender = _("Current document has no discussion. Press the ADD button to start a discussion."); } return $sToRender; } /** * Page to create a new thread * * @param $iDocumentID -> a valid document ID */ function getNewThreadOption($iDocumentID) { global $default; $sToRender .= _("Would you like to create a new Discussion thread for this document?"); $sToRender .= "   "; $sToRender .= ""; $sToRender .= ""; return $sToRender; } /** * Views the list of comments for a document * Prints out 1 comment * User needs to call this function many times to list all comments * * @param $iNum -> its the iterative index of the current comment * @param $iThread -> a valid Thread Object * @param $oComment -> a valid Comment Object */ function getViewComment($iNum, $oThread, $oComment, $sIndent) { global $default; $iSubjectChars = 59; // If iNum is odd then highlight it if (($iNum%2) == 1) $BGcolor = "#F5F6EE"; if (($iNum%2) == 0) $UserBGcolor = "#F5F6EE"; $sUserName = ""; $oUser = User::get($oComment->getUserID()); if ($oUser) { $sUserName = $oUser->getName(); } // If the Subject string is too long if (strlen($oComment->getSubject())>$iSubjectChars ) $dotdot = " ..."; $sToRender .= "\n"; $sToRender .= "\t\n"; $sToRender .= "\t\t$sIndentgetSubject() . "\">\n"; $sToRender .= substr($oComment->getSubject(),0,$iSubjectChars ) . $dotdot . "\n"; $sToRender .= "\t\n"; $sToRender .= "\t\t$sUserName\n"; $sToRender .= "\t" . $oComment->getDate() . "\n"; return $sToRender; } /** * Prints out the list of discussion comments */ function getPage($iDocumentID, $aDocumentThreads) { global $default; $sToRender .= renderHeading(_("Document Discussion Comments")); $sToRender .= displayDocumentPath($iDocumentID); $sToRender .= getPageButtons($iDocumentID); $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; $iCount = 0; // for each thread, retrieve all comments for ($i=0; $igetID(), -1); // now loop through the comments, and indent comments that have the same reply_to at the same level .... ?? for ($j=0; $jlog->info("commentTree[$j][comment]=" . arrayToString($aCommentTree[$j]["comment"])); $sToRender .= getViewComment($iCount++, $aDocumentThreads[$i], $aCommentTree[$j]["comment"], getIndent($aCommentTree[$j]["level"])); } } } $sToRender .= "\n
" . _("Subject") . "" . _("Author") . "" . _("Date") . "
\n\n"; return $sToRender; } /** * Returns the comments for a particular thread */ function getCommentTree($iThreadID, $iReplyTo, $iLevel = 0) { global $default; // find all comments for the specified thread and reply $aWhereClause = array("thread_id = ? AND in_reply_to = ? ORDER BY id", array($iThreadID, $iReplyTo)); $aComments = DiscussionComment::getList($aWhereClause);/*ok*/ // loop through these and find their children for ($i=0; $i $aComments[$i], "level" => $iLevel); $aChildren = getCommentTree($iThreadID, $aComments[$i]->getID(), $iLevel+1); if (count($aChildren) > 0) { $aTree = array_merge($aTree, $aChildren); } } $default->log->debug("getCommentTree($iThreadID, $iReplyTo, $iLevel), returning " . arrayToString($aTree)); return $aTree; } /** * Returns an indent string of appropriate length for the specified comment level */ function getIndent($iLevel) { global $default; $sToRender = ""; for ($i=0; $i<$iLevel; $i++) { $sToRender .= "    "; } $default->log->info("indent($iLevel) = " . $sToRender); return $sToRender; } ?>