iAppId = $iAppId; $this->iVendorId = $oRow->vendorId; $this->iCatId = $oRow->catId; $this->iSubmitterId = $oRow->submitterId; $this->sSubmitTime = $oRow->submitTime; $this->sDate = $oRow->submitTime; $this->sName = $oRow->appName; $this->sKeywords = $oRow->keywords; $this->sDescription = $oRow->description; $this->sWebpage = $oRow->webPage; $this->sQueued = $oRow->queued; } /* fetch versions of this application, if there are any */ $this->aVersionsIds = array(); /* only admins can view all versions */ //FIXME: it would be nice to move this permission into the user class as well as keep it generic if($_SESSION['current']->hasPriv("admin")) { $sQuery = "SELECT versionId FROM appVersion WHERE appId = '?'"; } else { $sQuery = "SELECT versionId FROM appVersion WHERE queued = 'false' AND appId = '?'"; } if($hResult = query_parameters($sQuery, $this->iAppId)) { while($oRow = mysql_fetch_object($hResult)) { $this->aVersionsIds[] = $oRow->versionId; } } } } /** * Creates a new application. */ function create() { if(!$_SESSION['current']->canCreateApplication()) return; if($_SESSION['current']->appCreatedMustBeQueued()) $this->sQueued = 'true'; else $this->sQueued = 'false'; $hResult = query_parameters("INSERT INTO appFamily (appName, description, keywords, ". "webPage, vendorId, catId, submitterId, queued) VALUES (". "'?', '?', '?', '?', '?', '?', '?', '?')", $this->sName, $this->sDescription, $this->sKeywords, $this->sWebpage, $this->iVendorId, $this->iCatId, $_SESSION['current']->iUserId, $this->sQueued); if($hResult) { $this->iAppId = mysql_insert_id(); $this->application($this->iAppId); $this->SendNotificationMail(); // Only administrators will be mailed as no supermaintainers exist for this app. return true; } else { addmsg("Error while creating a new application.", "red"); return false; } } /** * Update application. * Returns true on success and false on failure. */ function update($bSilent=false) { $sWhatChanged = ""; /* if the user doesn't have permission to modify this application, don't let them */ if(!$_SESSION['current']->canModifyApplication($this)) return; /* create an instance of ourselves so we can see what has changed */ $oApp = new Application($this->iAppId); if ($this->sName && ($this->sName!=$oApp->sName)) { if (!query_parameters("UPDATE appFamily SET appName = '?' WHERE appId = '?'", $this->sName, $this->iAppId)) return false; $sWhatChanged .= "Name was changed from ".$oApp->sName." to ".$this->sName.".\n\n"; } if ($this->sDescription && ($this->sDescription!=$oApp->sDescription)) { if (!query_parameters("UPDATE appFamily SET description = '?' WHERE appId = '?'", $this->sDescription, $this->iAppId)) return false; $sWhatChanged .= "Description was changed from\n ".$oApp->sDescription."\n to \n".$this->sDescription.".\n\n"; } if ($this->sKeywords && ($this->sKeywords!=$oApp->sKeywords)) { if (!query_parameters("UPDATE appFamily SET keywords = '?' WHERE appId = '?'", $this->sKeywords, $this->iAppId)) return false; $sWhatChanged .= "Keywords were changed from\n ".$oApp->sKeywords."\n to \n".$this->sKeywords.".\n\n"; } if ($this->sWebpage && ($this->sWebpage!=$oApp->sWebpage)) { if (!query_parameters("UPDATE appFamily SET webPage = '?' WHERE appId = '?'", $this->sWebpage, $this->iAppId)) return false; $sWhatChanged .= "Web page was changed from ".$oApp->sWebpage." to ".$this->sWebpage.".\n\n"; } if ($this->iVendorId && ($this->iVendorId!=$oApp->iVendorId)) { if (!query_parameters("UPDATE appFamily SET vendorId = '?' WHERE appId = '?'", $this->iVendorId, $this->iAppId)) return false; $oVendorBefore = new Vendor($oApp->iVendorId); $oVendorAfter = new Vendor($this->iVendorId); $sWhatChanged .= "Vendor was changed from ".$oVendorBefore->sName." to ".$oVendorAfter->sName.".\n\n"; } if ($this->iCatId && ($this->iCatId!=$oApp->iCatId)) { if (!query_parameters("UPDATE appFamily SET catId = '?' WHERE appId = '?'", $this->iCatId, $this->iAppId)) return false; $oCatBefore = new Category($oApp->iCatId); $oCatAfter = new Category($this->iCatId); $sWhatChanged .= "Vendor was changed from ".$oCatBefore->sName." to ".$oCatAfter->sName.".\n\n"; } if($sWhatChanged and !$bSilent) $this->SendNotificationMail("edit",$sWhatChanged); return true; } /** * Deletes the application from the database. * and request the deletion of linked elements. */ function delete($bSilent=false) { /* make sure the current user has the appropriate permission to delete this application */ if(!$_SESSION['current']->canDeleteApplication($this)) return false; foreach($this->aVersionsIds as $iVersionId) { $oVersion = new Version($iVersionId); $oVersion->delete($bSilent); } /* fetch urlsIds */ $aUrlsIds = array(); $sQuery = "SELECT id FROM appData WHERE type = 'url' AND appId = '?'"; if($hResult = query_parameters($sQuery, $this->iAppId)) { while($oRow = mysql_fetch_object($hResult)) { $aUrlsIds[] = $oRow->id; } } foreach($aUrlsIds as $iUrlId) { $oUrl = new Url($iUrlId); $oUrl->delete($bSilent); } // remove any supermaintainers for this application so we don't orphan them $hResult = Maintainer::deleteMaintainersForApplication($this); if(!$hResult) { addmsg("Error removing app maintainers for the deleted application!", "red"); } $sQuery = "DELETE FROM appFamily WHERE appId = '?' LIMIT 1"; if(!($hResult = query_parameters($sQuery, $this->iAppId))) { addmsg("Error deleting application!", "red"); } if(!$bSilent) $this->SendNotificationMail("delete"); return true; } /** * Move application out of the queue. */ function unQueue() { if(!$_SESSION['current']->canUnQueueApplication()) return; if(query_parameters("UPDATE appFamily SET queued = '?', keywords = '?' WHERE appId = '?'", "false", str_replace(" *** ","",$this->sKeywords), $this->iAppId)) { $this->sQueued = 'false'; // we send an e-mail to intersted people $this->mailSubmitter(); $this->SendNotificationMail(); } } function Reject() { if(!$_SESSION['current']->canRejectApplication($this)) return; // If we are not in the queue, we can't move the application out of the queue. if(!$this->sQueued == 'true') return false; if(query_parameters("UPDATE appFamily SET queued = '?' WHERE appId = '?'", "rejected", $this->iAppId)) { $this->sQueued = 'rejected'; // we send an e-mail to intersted people $this->mailSubmitter("reject"); $this->SendNotificationMail("reject"); // the application has been rejectedd addmsg("The application has been rejected.", "green"); } } function ReQueue() { if(!$_SESSION['current']->canRequeueApplication($this)) return false; if(query_parameters("UPDATE appFamily SET queued = '?' WHERE appId = '?'", "true", $this->iAppId)) { $this->sQueued = 'true'; // we send an e-mail to intersted people $this->SendNotificationMail(); // the application has been re-queued addmsg("The application has been re-queued.", "green"); } } function mailSubmitter($sAction="add") { $aClean = array(); //array of filtered user input $aClean['sReplyText'] = makeSafe($_REQUEST['sReplyText']); if($this->iSubmitterId) { $oSubmitter = new User($this->iSubmitterId); switch($sAction) { case "add": $sSubject = "Submitted application accepted"; $sMsg = "The application you submitted (".$oApp->sName." ".$this->sName.") has been accepted."; $sMsg .= "Administrators Responce:\n"; break; case "reject": $sSubject = "Submitted application rejected"; $sMsg = "The application you submitted (".$oApp->sName." ".$this->sName.") has been rejected."; $sMsg .= "Clicking on the link in this email will allow you to modify and resubmit the application. "; $sMsg .= "A link to your queue of applications and versions will also show up on the left hand side of the Appdb site once you have logged in. "; $sMsg .= APPDB_ROOT."appsubmit.php?sub=view&apptype=application&appId=".$this->iAppId."\n"; $sMsg .= "Reason given:\n"; break; case "delete": $sSubject = "Submitted application deleted"; $sMsg = "The application you submitted (".$oApp->sName." ".$this->sName.") has been deleted."; $sMsg .= "Reason given:\n"; break; $sMsg .= $aClean['sReplyText']."\n"; $sMsg .= "We appreciate your help in making the Application Database better for all users."; } mail_appdb($oSubmitter->sEmail, $sSubject ,$sMsg); } } function SendNotificationMail($sAction="add",$sMsg=null) { $aClean = array(); //array of filtered user input $aClean['sReplyText'] = makeSafe($_REQUEST['sReplyText']); switch($sAction) { case "add": if($this->sQueued == 'false') // Has been accepted. { $sSubject = $this->sName." has been added by ".$_SESSION['current']->sRealname; $sMsg = APPDB_ROOT."appview.php?iAppId=".$this->iAppId."\n"; if($this->iSubmitterId) { $oSubmitter = new User($this->iSubmitterId); $sMsg .= "This application has been submitted by ".$oSubmitter->sRealname."."; $sMsg .= "\n"; } if($aClean['sReplyText']) { $sMsg .= "Appdb admin reply text:\n"; $sMsg .= $aClean['sReplyText']."\n"; // append the reply text, if there is any } addmsg("The application was successfully added into the database.", "green"); } else { $sSubject = $this->sName." has been submitted by ".$_SESSION['current']->sRealname; $sMsg .= "This application has been queued."; $sMsg .= "\n"; addmsg("The application you submitted will be added to the database after being reviewed.", "green"); } break; case "edit": $sSubject = $this->sName." has been modified by ".$_SESSION['current']->sRealname; $sMsg .= APPDB_ROOT."appview.php?iAppId=".$this->iAppId."\n"; addmsg("Application modified.", "green"); break; case "delete": $sSubject = $this->sName." has been deleted by ".$_SESSION['current']->sRealname; // if sReplyText is set we should report the reason the application was deleted if($aClean['sReplyText']) { $sMsg .= "Reason given:\n"; $sMsg .= $aClean['sReplyText']."\n"; // append the reply text, if there is any } addmsg("Application deleted.", "green"); break; case "reject": $sSubject = $this->sName." has been rejected by ".$_SESSION['current']->sRealname; $sMsg .= APPDB_ROOT."appsubmit.php?sAppType=application&sSub=view&iAppId=".$this->iAppId."\n"; // if sReplyText is set we should report the reason the application was rejected if($aClean['sReplyText']) { $sMsg .= "Reason given:\n"; $sMsg .= $aClean['sReplyText']."\n"; // append the reply text, if there is any } addmsg("Application rejected.", "green"); break; } $sEmail = User::get_notify_email_address_list($this->iAppId); if($sEmail) mail_appdb($sEmail, $sSubject ,$sMsg); } /* output a html table and this applications values to the fields for editing */ function OutputEditor($sVendorName) { HtmlAreaLoaderScript(array("app_editor")); echo ''; echo html_frame_start("Application Form", "90%", "", 0); echo "\n"; echo '',"\n"; echo '',"\n"; // app Category $w = new TableVE("view"); echo '',"\n"; // vendor name echo '',"\n"; echo '',"\n"; // alt vendor $x = new TableVE("view"); echo '',"\n"; // url echo '',"\n"; echo '',"\n"; echo '',"\n"; echo '',"\n"; echo '',"\n"; echo '',"\n"; echo "
Application name
Category',"\n"; $w->make_option_list("iAppCatId", $this->iCatId,"appCategory","catId","catName"); echo '
Vendor
 ',"\n"; $x->make_option_list("iAppVendorId", $this->iVendorId,"vendor","vendorId","vendorName"); echo '
URL
Keywords
Application description

\n"; echo html_frame_end(); } function CheckOutputEditorInput($aValues) { $errors = ""; if (empty($aValues['iAppCatId'])) $errors .= "
  • Please enter a category for your application.
  • \n"; if (strlen($aValues['sAppName']) > 200 ) $errors .= "
  • Your application name is too long.
  • \n"; if (empty($aValues['sAppName'])) $errors .= "
  • Please enter an application name.
  • \n"; // No vendor entered, and nothing in the list is selected if (empty($aValues['sAppVendorName']) && !$aValues['iAppVendorId']) $errors .= "
  • Please enter a vendor.
  • \n"; if (empty($aValues['shAppDescription'])) $errors .= "
  • Please enter a description of your application.
  • \n"; return $errors; } /* retrieves values from $_REQUEST that were output by OutputEditor() */ /* $aValues can be $_REQUEST or any array with the values from OutputEditor() */ function GetOutputEditorValues($aValues) { $this->iAppId = $aValues['iAppId']; $this->sName = $aValues['sAppName']; $this->sDescription = $aValues['shAppDescription']; $this->iCatId = $aValues['iAppCatId']; $this->iVendorId = $aValues['iAppVendorId']; $this->sWebpage = $aValues['sAppWebpage']; $this->sKeywords = $aValues['sAppKeywords']; } /* display this application */ function display() { /* is this user supposed to view this version? */ if(!$_SESSION['current']->canViewApplication($this)) util_show_error_page_and_exit("Something went wrong with the application or version id"); // show Vote Menu if($_SESSION['current']->isLoggedIn()) apidb_sidebar_add("vote_menu"); // header apidb_header("Viewing App - ".$this->sName); // cat display $oCategory = new Category($this->iCatId); $oCategory->display($this->iAppId); // set Vendor $oVendor = new Vendor($this->iVendorId); // set URL $appLinkURL = ($this->sWebpage) ? "sWebpage."\">".substr(stripslashes($this->sWebpage),0,30)."": " "; // start display application echo html_frame_start("","98%","",0); echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo "
    \n"; echo ' ',"\n"; echo " \n"; echo " \n"; // main URL echo " \n"; // optional links $result = query_parameters("SELECT * FROM appData WHERE appId = '?' AND versionID = 0 AND type = 'url'", $this->iAppId); if($result && mysql_num_rows($result) > 0) { echo " \n"; } // image $img = Screenshot::get_random_screenshot_img($this->iAppId, null, false); echo "\n"; echo "
    Name ".$this->sName."
    Vendor ". " ".$oVendor->sName."  \n"; echo "
    Votes "; echo vote_count_app_total($this->iAppId); echo "
    URL".$appLinkURL."
    Links\n"; while($oRow = mysql_fetch_object($result)) { echo " ".substr(stripslashes($oRow->description),0,30)."
    \n"; } echo "
    $img
    \n"; /* close of name/vendor/bugs/url table */ echo "
    \n"; // Display all supermaintainers maintainers of this application echo " \n"; echo " \n"; $other_maintainers = Maintainer::getSuperMaintainersUserIdsFromAppId($this->iAppId); if($other_maintainers) { echo " \n"; } else { echo " \n"; } // Display the app maintainer button echo ' \n"; echo "
    Super maintainers:
      \n"; while(list($index, $userIdValue) = each($other_maintainers)) { $oUser = new User($userIdValue); echo "
    • ".$oUser->sRealname."
    • \n"; } echo "
    No maintainers.Volunteer today!
    '; if($_SESSION['current']->isLoggedIn()) { /* are we already a maintainer? */ if($_SESSION['current']->isSuperMaintainer($this->iAppId)) /* yep */ { echo '
    '; } else /* nope */ { echo ' '; } echo " iAppId."\">"; echo " "; /* set superMaintainer to 1 because we are at the appFamily level */ echo "
    "; if($_SESSION['current']->isSuperMaintainer($this->iAppId) || $_SESSION['current']->hasPriv("admin")) { echo '
    '; } if($_SESSION['current']->isLoggedIn()) { echo '
    '; echo ''; echo '
    '; } if($_SESSION['current']->hasPriv("admin")) { $url = BASE."admin/deleteAny.php?sWhat=appFamily&iAppId=".$this->iAppId."&sConfirmed=yes"; echo "
    "; echo '
    '; } } else { echo '
    '; } echo "
    \n"; /* close of super maintainers table */ echo "
    \n"; /* close the table that contains the whole left hand side of the upper table */ // description echo " \n"; echo "
    Description\n"; echo $this->sDescription; echo "
    \n"; echo html_frame_end("For more details and user comments, view the versions of this application."); // display versions Version::display_approved($this->aVersionsIds); // display bundle display_bundle($this->iAppId); } function lookup_name($appId) { if(!$appId) return null; $result = query_parameters("SELECT appName FROM appFamily WHERE appId = '?'", $appId); if(!$result || mysql_num_rows($result) != 1) return null; $ob = mysql_fetch_object($result); return $ob->appName; } function showList($hResult) { //show applist echo html_frame_start("","90%","",0); echo ""; $c = 1; while($oRow = mysql_fetch_object($hResult)) { $oApp = new Application($oRow->appId); $oSubmitter = new User($oApp->iSubmitterId); if($oApp->iVendorId) { $oVendor = new Vendor($oApp->iVendorId); $sVendor = $oVendor->sName; } else { $sVendor = get_vendor_from_keywords($oApp->sKeywords); } if ($c % 2 == 1) { $bgcolor = 'color0'; } else { $bgcolor = 'color1'; } echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "\n\n"; $c++; } echo "
    Submission Date Submitter Vendor Application Action
    ".print_date(mysqltimestamp_to_unixtimestamp($oApp->sSubmitTime))."\n"; echo $oSubmitter->sEmail ? "sEmail."\">":""; echo $oSubmitter->sRealname; echo $oSubmitter->sEmail ? "":""; echo " ".$sVendor."".$oApp->sName."[iAppId.">process]
    \n\n"; echo html_frame_end(" "); } } ?>