iVendorId = $oRow->vendorId;
$this->sName = $oRow->vendorName;
$this->sWebpage = $oRow->vendorURL;
$this->sState = $oRow->state;
}
/*
* We fetch applicationsIds.
*/
$sQuery = "SELECT appId
FROM appFamily
WHERE vendorId = '?' ORDER by appName";
if($hResult = query_parameters($sQuery, $this->iVendorId))
{
while($oRow = query_fetch_object($hResult))
{
$this->aApplicationsIds[] = $oRow->appId;
}
}
}
/**
* Creates a new vendor.
*
* NOTE: If creating a vendor with the same name as an existing vendor
* we retrieve the existing vendors information and return true,
* even though we didn't create the vendor, this makes it easier
* for the user of the vendor class.
*/
function create()
{
/* Check for duplicates */
$hResult = query_parameters("SELECT * FROM vendor WHERE vendorName = '?' AND state != 'deleted'",
$this->sName);
if($hResult && $oRow = query_fetch_object($hResult))
{
if(query_num_rows($hResult))
{
$this->vendor($oRow->vendorId);
if(!$this->mustBeQueued())
$this->unQueue();
/* Even though we did not create a new vendor, the caller is provided
with an id and can proceed as normal, so we return TRUE */
return TRUE;
}
}
$hResult = query_parameters("INSERT INTO vendor (vendorName, vendorURL, state) ".
"VALUES ('?', '?', '?')",
$this->sName, $this->sWebpage,
$this->mustBeQueued() ? 'queued' : 'accepted');
if($hResult)
{
$this->iVendorId = query_appdb_insert_id();
$this->vendor($this->iVendorId);
return true;
}
else
{
addmsg("Error while creating a new developer.", "red");
return false;
}
}
/**
* Un-queue vendor
* Returns TRUE or FALSE
*/
function unQueue()
{
$hResult = query_parameters("UPDATE vendor SET state = '?' WHERE vendorId = '?'",
'accepted', $this->iVendorId);
if(!$hResult)
return FALSE;
$this->sState = 'accepted';
return TRUE;
}
/**
* Update vendor.
* Returns true on success and false on failure.
*/
function update()
{
if(!$this->iVendorId)
return $this->create();
if($this->sName)
{
if (!query_parameters("UPDATE vendor SET vendorName = '?' WHERE vendorId = '?'",
$this->sName, $this->iVendorId))
return false;
$this->sName = $sName;
}
if($this->sWebpage)
{
if (!query_parameters("UPDATE vendor SET vendorURL = '?' WHERE vendorId = '?'",
$this->sWebpage, $this->iVendorId))
return false;
$this->sWebpage = $sWebpage;
}
return true;
}
/**
* Remove the vendor from the database.
*/
function purge()
{
if(sizeof($this->aApplicationsIds)>0)
{
return FALSE;
} else
{
$sQuery = "DELETE FROM vendor
WHERE vendorId = '?'
LIMIT 1";
if(query_parameters($sQuery, $this->iVendorId))
{
return TRUE;
}
return FALSE;
}
return false;
}
/**
* Flag the vendor as deleted
*/
function delete()
{
if(sizeof($this->aApplicationsIds)>0)
{
return FALSE;
} else
{
$sQuery = "UPDATE vendor SET state = 'deleted'
WHERE vendorId = '?'
LIMIT 1";
if(query_parameters($sQuery, $this->iVendorId))
{
return TRUE;
}
return FALSE;
}
return false;
}
function checkOutputEditorInput($aClean)
{
if(!getInput('sVendorName', $aClean))
return '
You need to enter the developer\'s name
';
}
function outputEditor()
{
$oTable = new Table();
$oTable->SetWidth("100%");
$oTable->SetBorder(0);
$oTable->SetCellPadding(2);
$oTable->SetCellSpacing(0);
// name
$oTableRow = new TableRow();
$oTableCell = new TableCell("Developer name:");
$oTableCell->SetAlign("right");
$oTableCell->SetClass("color0");
$oTableCell->SetBold(true);
$oTableRow->AddCell($oTableCell);
$oTableCell = new TableCell('');
$oTableCell->SetClass("color0");
$oTableRow->AddCell($oTableCell);
$oTable->AddRow($oTableRow);
// Url
$oTableRow = new TableRow();
$oTableCell = new TableCell("Developer URL:");
$oTableCell->SetAlign("right");
$oTableCell->SetClass("color0");
$oTableCell->SetBold(true);
$oTableRow->AddCell($oTableCell);
$oTableCell = new TableCell('');
$oTableCell->SetClass("color0");
$oTableRow->AddCell($oTableCell);
$oTable->AddRow($oTableRow);
echo $oTable->GetString();
echo '',"\n";
}
public static function objectGetSortableFields()
{
return array('vendorName');
}
public static function objectGetDefaultSort()
{
return 'vendorName';
}
function objectGetFilterInfo()
{
$oFilter = new FilterInterface();
$oFilter->AddFilterInfo('vendorName', 'Name', array(FILTER_CONTAINS, FILTER_STARTS_WITH, FILTER_ENDS_WITH), FILTER_VALUES_NORMAL);
return $oFilter;
}
function objectGetEntries($sState, $iRows = 0, $iStart = 0, $sOrderBy = 'vendorName', $bAscending = TRUE, $oFilter = null)
{
/* Not implemented */
if($sState == 'rejected')
return FALSE;
$sWhereFilter = $oFilter ? $oFilter->getWhereClause() : '';
$sOrder = $bAscending ? 'ASC' : 'DESC';
if($sWhereFilter)
$sWhereFilter = " AND $sWhereFilter";
if(!$iRows)
$iRows = Vendor::objectGetEntriesCount($sState, $oFilter);
$hResult = query_parameters("SELECT * FROM vendor WHERE state = '?' $sWhereFilter
ORDER BY $sOrderBy $sOrder LIMIT ?,?",
$sState, $iStart, $iRows);
if(!$hResult)
return FALSE;
return $hResult;
}
function objectGetHeader()
{
$oTableRow = new TableRowSortable();
$oTableRow->AddSortableTextCell('Name', 'vendorName');
$oTableCell = new TableCell('Applications');
$oTableRow->AddCell($oTableCell);
$oTableRow->AddTextCell("Website");
return $oTableRow;
}
// returns an OMTableRow instance
function objectGetTableRow()
{
$bDeleteLink = sizeof($this->aApplicationsIds) ? FALSE : TRUE;
// create the html table row
$oTableRow = new TableRow();
$oTableRow->AddTextCell($this->objectMakeLink());
$oTableCell = new TableCell(sizeof($this->aApplicationsIds));
$oTableRow->AddCell($oTableCell);
$oTableCell = new TableCell($this->sWebpage);
$oTableCell->SetCellLink($this->sWebpage);
$oTableRow->AddCell($oTableCell);
// create the object manager specific row
$oOMTableRow = new OMTableRow($oTableRow);
$oOMTableRow->SetHasDeleteLink($bDeleteLink);
return $oOMTableRow;
}
public function objectGetState()
{
return $this->sState;
}
function canEdit()
{
if($_SESSION['current']->hasPriv("admin"))
return TRUE;
else
return FALSE;
}
function mustBeQueued()
{
if($_SESSION['current']->hasPriv("admin"))
return FALSE;
else
return TRUE;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetChildren($bIncludeDeleted = false)
{
/* We don't have any */
return array();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
/* We don't send notification mails */
return array(null, null, null);
}
function objectGetSubmitterId()
{
/* We don't record the submitter id */
return NULL;
}
function getOutputEditorValues($aClean)
{
$this->sName = $aClean['sVendorName'];
$this->sWebpage = $aClean['sVendorWebpage'];
}
function display()
{
echo 'Developer name: '.$this->sName,"\n";
if($this->canEdit())
{
echo "[iVendorId&sTitle=Edit%20Developer\">edit]";
}
echo ' ',"\n";
if ($this->sWebpage)
{
echo 'Developer URL: '.
$this->sWebpage.' ',"\n";
}
if($this->aApplicationsIds)
{
echo ' Applications by '.$this->sName.'
',"\n";
$oTable = new Table();
$oRow = new TableRow();
$oRow->AddTextCell('Name');
$oRow->AddTextCell('Rating');
$oRow->AddTextCell('Tested DXGL version');
$oRow->SetClass('color4');
$oRow->SetStyle('color: #ffffff;');
$oTable->AddRow($oRow);
$i = 0;
foreach($this->aApplicationsIds as $iAppId)
{
$oApp = new Application($iAppId);
if($oApp->objectGetState() != 'accepted')
continue;
$i++;
$oRow = new TableRow();
$oRow->SetClass(($i % 2) ? 'color0' : 'color1');
$oRow->AddTextCell($oApp->objectMakeLink());
$oRow->AddTextCell('');
$oRow->AddTextCell('');
$oTable->AddRow($oRow);
$aVersions = $oApp->objectGetChildrenClassSpecific('version');
foreach($aVersions as $oVersion)
{
if($oVersion->objectGetState() != 'accepted')
continue;
$i++;
$oRow = new TableRow();
$oRow->SetClass(($i % 2) ? 'color0' : 'color1');
$oRow->AddTextCell(' '.$oVersion->objectMakeLink());
$oCell = new TableCell($oVersion->sTestedRating);
$oCell->setClass($oVersion->sTestedRating);
$oRow->AddCell($oCell);
$oCell = new TableCell($oVersion->sTestedRelease);
$oCell->setClass($oVersion->sTestedRating);
$oRow->AddCell($oCell);
$oTable->AddRow($oRow);
}
}
echo $oTable->GetString(),"\n";
}
}
public function objectGetClassDisplayName()
{
return 'developer';
}
/* Make a URL for viewing the specified vendor */
function objectMakeUrl()
{
$oManager = new objectManager("vendor", "View Developer");
return $oManager->makeUrl("view", $this->iVendorId);
}
/* Make a HTML link for viewing the specified vendor */
function objectMakeLink()
{
return "objectMakeUrl()."\">$this->sName";
}
function objectGetEntriesCount($sState, $oFilter = null)
{
/* Not implemented */
if($sState == 'rejected')
return FALSE;
$sWhereClause = $oFilter ? $oFilter->getWhereClause() : '';
if($sWhereClause)
$sWhereClause = " AND $sWhereClause";
$hResult = query_parameters("SELECT COUNT(vendorId) as count FROM vendor WHERE state = '?' $sWhereClause",
$sState);
if(!$hResult)
return FALSE;
if(!$oRow = query_fetch_object($hResult))
return FALSE;
return $oRow->count;
}
function allowAnonymousSubmissions()
{
return FALSE;
}
function objectMoveChildren($iNewId)
{
/* Keep track of how many children we have modified */
$iCount = 0;
foreach($this->aApplicationsIds as $iAppId)
{
$oApp = new application($iAppId);
$oApp->iVendorId = $iNewId;
if($oApp->update(TRUE))
$iCount++;
else
return FALSE;
}
return $iCount;
}
function objectGetId()
{
return $this->iVendorId;
}
function objectGetItemsPerPage($sState = 'accepted')
{
$aItemsPerPage = array(25, 50, 100, 200);
$iDefaultPerPage = 25;
return array($aItemsPerPage, $iDefaultPerPage);
}
function objectShowAddEntry()
{
return TRUE;
}
}
?>