iCommentId = $oRow->commentId; $this->iParentId = $oRow->parentId; $this->iAppId = $oRow->appId; $this->iVersionId = $oRow->versionId; $this->sSubject = $oRow->subject; $this->sBody = $oRow->body; $this->sDateCreated = $oRow->time; $this->sHostname = $oRow->hostname; $this->oOwner = new User($oRow->userId); } } /* * Creates a new comment. * Informs interested people about the creation. * Returns true on success, false on failure */ function create($sSubject, $sBody, $iParentId=null, $iVersionId) { $hResult = query_parameters("INSERT INTO appComments (parentId, versionId, subject, ". "body, userId, time, hostname) VALUES ('?', '?', '?', '?', '?', ?, '?')", $iParentId, $iVersionId, $sSubject, $sBody, $_SESSION['current']->iUserId, "NOW()", get_remote()); if($hResult) { $this->comment(mysql_insert_id()); $sEmail = User::get_notify_email_address_list($this->iAppId, $this->iVersionId); $sEmail .= $this->oOwner->sEmail." "; // fetches e-mails from parent comments, all parents are notified that a // comment was added to the thread while($iParentId) { $oParent = new Comment($iParentId); $sEmail .= $oParent->oOwner->sEmail." "; $iParentId = $oParent->iParentId; } if($sEmail) { $aEmailArray = explode(" ", $sEmail); /* break the long email string into parts by spaces */ $aEmailArray = array_unique($aEmailArray); /* remove duplicates */ /* build the single string of all emails up */ $sEmail = ""; foreach($aEmailArray as $key=>$value) { $sEmail.="$value "; } $sSubject = "Comment for '".lookup_app_name($this->iAppId)." ".lookup_version_name($this->iVersionId)."' added by ".$_SESSION['current']->sRealname; $sMsg = "To reply to this email please use the link provided below.\n"; $sMsg .= "DO NOT reply via your email client as it will not reach the person who wrote the comment\n"; $sMsg .= APPDB_ROOT."appview.php?versionId=".$this->iVersionId."&mode=nested#Comment-".$this->iCommentId."\n"; $sMsg .= "\n"; $sMsg .= "Subject: ".$this->sSubject."\r\n"; $sMsg .= "\n"; $sMsg .= $this->sBody."\r\n"; mail_appdb($sEmail, $sSubject ,$sMsg); } addmsg("Comment created.", "green"); return true; } else { addmsg("Error while creating a new comment", "red"); return false; } } /** * Update comment. * FIXME: Informs interested people about the modification. * Returns true on success and false on failure. */ function update($sSubject=null, $sBody=null, $iParentId=null, $iVersionId=null) { if ($iParentId) { if (!query_parameters("UPDATE appComments SET parentId = '?' WHERE commentId = '?'", $iParentId, $this->iCommentId)) return false; $this->iParentId = $iParentId; } if ($iVersionId) { if (!query_parameters("UPDATE appComments SET versionId = '?' WHERE commentId = '?'", $iVersionId, $this->iCommentId)) return false; $this->iVersionId = $iVersionId; // FIXME: we need to refetch $this->iAppId. } if ($sSubject) { if (!query_parameters("UPDATE appComments SET subject = '?' WHERE commentId = '?'", $sSubject, $this->iCommentId)) return false; $this->sSubject = $sSubject; } if ($sBody) { if (!query_parameters("UPDATE appComments SET body = '?' WHERE commentId = '?'", $sBody, $this->iCommentId)) return false; $this->sBody = $sBody; } return true; } /** * Removes the current comment from the database. * Informs interested people about the deletion. * Returns true on success and false on failure. */ function delete($sReason=null) { $hResult = query_parameters("DELETE FROM appComments WHERE commentId = '?'", $this->iCommentId); if ($hResult) { /* fixup the child comments so the parentId points to a valid parent comment */ $hResult = query_parameters("UPDATE appComments set parentId = '?' WHERE parentId = '?'", $this->iParentId, $this->iCommentId); $sEmail = User::get_notify_email_address_list($this->iAppId, $this->iVersionId); $sEmail .= $this->oOwner->sEmail; if($sEmail) { $sSubject = "Comment for '".lookup_app_name($this->iAppId)." ".lookup_version_name($this->iVersionId)."' deleted by ".$_SESSION['current']->sRealname; $sMsg = APPDB_ROOT."appview.php?versionId=".$this->iVersionId."\n"; $sMsg .= "\n"; $sMsg .= "This comment was made on ".substr($this->sDateCreated,0,10)." by ".$this->oOwner->sRealname."\n"; $sMsg .= "\n"; $sMsg .= "Subject: ".$this->sSubject."\r\n"; $sMsg .= "\n"; $sMsg .= $this->sBody."\r\n"; $sMsg .= "\n"; $sMsg .= "Because:\n"; if($sReason) $sMsg .= $sReason."\n"; else $sMsg .= "No reason given.\n"; mail_appdb($sEmail, $sSubject ,$sMsg); } addmsg("Comment deleted.", "green"); return true; } return false; } } /* * Comment functions that are not part of the class */ function forum_lookup_user($iUserId) { if ($iUserId > 0) { $oUser = new User($iUserId); if($_SESSION['current']->isLoggedIn()) $sMailto = '' . $oUser->sRealname . ''; else $sMailto = $oUser->sRealname; } if (!$iUserId || !$oUser->isLoggedIn()) { $sMailto = 'Anonymous'; } return $sMailto; } /** * display a single comment (in $oRow) */ function view_app_comment($oRow) { echo html_frame_start('','98%'); echo '
| commentId.">\n";
echo " ".$oRow->subject." \n"; echo " by ".forum_lookup_user($oRow->userId)." on ".$oRow->time." \n"; echo " |
| \n";
// body
echo htmlify_urls($oRow->body), " \n"; // only add RE: once if(eregi("RE:", $oRow->subject)) $subject = $oRow->subject; else $subject = "RE: ".$oRow->subject; // reply post buttons echo " [appId&versionId=$oRow->versionId\">post new] \n"; echo " [appId&versionId=$oRow->versionId&subject=". urlencode("$subject")."&thread=$oRow->commentId\">reply to this] \n"; echo " |
| \n"; echo " |
\n"; do_display_comments_nested($hResult2); echo "\n"; } } } function display_comments_nested($versionId, $threadId) { $hResult = grab_comments($versionId, $threadId); do_display_comments_nested($hResult); } /** * display threaded comments * handle is a db result set */ function do_display_comments_threaded($hResult, $is_main) { if (!$is_main) echo "
\n"; do_display_comments_threaded($hResult2, 0); echo "\n"; } } if (!$is_main) echo "
|
The following comments are owned by whoever posted them. WineHQ is not responsible for what they say.
'."\n"; } //start comments echo '| ',"\n"; //hide or display depending on pref if ($_SESSION['current']->isLoggedIn()) $mode = $_SESSION['current']->getPref("comments:mode", "threaded"); else $mode = "threaded"; /* default non-logged in users to threaded comment display mode */ if ($aClean['mode']=="nested") $mode = "nested"; switch ($mode) { case "flat": display_comments_flat($versionId); break; case "nested": display_comments_nested($versionId, $threadId); break; case "threaded": display_comments_threaded($versionId, $threadId); break; } echo ' |