diff --git a/presentation/lookAndFeel/knowledgeTree/administration/news/addNewsBL.php b/presentation/lookAndFeel/knowledgeTree/administration/news/addNewsBL.php new file mode 100644 index 0000000..305dd4c --- /dev/null +++ b/presentation/lookAndFeel/knowledgeTree/administration/news/addNewsBL.php @@ -0,0 +1,99 @@ +fileSystemRoot/lib/dashboard/DashboardNews.inc"); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternMainPage.inc"); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternCustom.inc"); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternTableSqlQuery.inc"); +require_once("$default->uiDirectory/administration/news/newsUI.inc"); + +/** + * $Id$ + * + * Business logic for adding a news item + * + * Licensed under the GNU GPL. For full terms see the file DOCS/COPYING. + * + * @version $Revision$ + * @author Michael Joseph , Jam Warehouse (Pty) Ltd, South Africa + * @package presentation.lookAndFeel.knowledgeTree.administration.news + */ + +if (checkSession()) { + global $default; + + // instantiate my content pattern + $oContent = new PatternCustom(); + + // check that we have all the required parameters + if ($fStore) { + // construct the news object + $oDashboardNews = new DashboardNews($fSynopsis, $fBody, $fRank); + + if (isset($fSynopsis) && isset($fBody) && isset($fRank)) { + // if we have a new image + if (strlen($_FILES['fImage']['name']) > 0) { + // return the size of the image + $aSize = getimagesize($_FILES['fImage']['tmp_name']); + // don't accept it if it isn't an image + if (!$aSize) { + $default->log->error("addNewsBL.php attempted to upload a non-image:" . $_FILES['fImage']['tmp_name']); + $oContent->setHtml(renderAddNewsPage($oDashboardNews, "You may only upload an image file.")); + } else { + // we have an image, now check the size + $iImgWidth = $aSize[0]; + $iImgHeight = $aSize[1]; + if ($oDashboardNews->checkImageSize($iImgWidth, $iImgHeight)) { + // size is fine, so set it + $default->log->info("setting image file=" . $_FILES['fImage']['tmp_name']); + $oDashboardNews->setImageFile($_FILES['fImage']['tmp_name']); + + // store it + if ($oDashboardNews->create()) { + $default->log->info("addNewsBL.php successfully created dashboard news id=" . $oDashboardNews->getID()); + // redirect to view page + redirect("$default->rootUrl/control.php?action=viewNews"); + } else { + // insert failed + $default->log->error("addNewsBL.php DB error inserting dashboard news ($fSynopsis, $fBody, $fRank, with image)"); + $oContent->setHtml(renderAddNewsPage($oDashboardNews, "An error occurred while creating this news item.")); + } + + } else { + // the image is too big + $oContent->setHtml(renderAddNewsPage($oDashboardNews, "The image you have submitted is too big (" . $iImgHeight . "x" . $iImgWidth . " > " . $oDashboardNews->getMaxImageDimensions() . "), please correct and retry")); + } + } + } else { + $default->log->info("no image"); + // no image uploaded, store what we've got + $default->log->info("about to create"); + if ($oDashboardNews->create()) { + // insert worked + $default->log->info("addNewsBL.php successfully created dashboard news id=" . $oDashboardNews->getID()); + // redirect to view page + redirect("$default->rootUrl/control.php?action=viewNews"); + } else { + // insert failed + $default->log->error("addNewsBL.php DB error inserting dashboard news ($fSynopsis, $fBody, $fRank, no image)"); + $oContent->setHtml(renderAddNewsPage($oDashboardNews, "An error occurred while creating this news item.")); + } + } + } else { + // all params not present, so display an error message + $oContent->setHtml(renderAddNewsPage($oDashboardNews, "Please complete the form before submitting.")); + } + } else { + // display the form + $oContent->setHtml(renderAddNewsPage(null)); + } + + // build the page + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $main->setCentralPayload($oContent); + $main->setFormEncType("multipart/form-data"); + $main->setFormAction($_SERVER['PHP_SELF']); + $main->setHasRequiredFields(true); + $main->render(); +} +?> \ No newline at end of file diff --git a/presentation/lookAndFeel/knowledgeTree/administration/news/editNewsBL.php b/presentation/lookAndFeel/knowledgeTree/administration/news/editNewsBL.php index f73927f..521b835 100644 --- a/presentation/lookAndFeel/knowledgeTree/administration/news/editNewsBL.php +++ b/presentation/lookAndFeel/knowledgeTree/administration/news/editNewsBL.php @@ -41,21 +41,54 @@ if (checkSession()) { if ($oDashboardNews->getRank() <> $fRank) { $oDashboardNews->setRank($fRank); } - // if we have a new image - // TODO: check that it is an image - if (strlen($_FILES['fImage']['name']) > 0) { - $oDashboardNews->setImageFile($_FILES['fImage']['tmp_name']); - } - - if ($oDashboardNews->update()) { - $default->log->info("editNewsBL.php successfully updated dashboard news id=$fNewsID"); - // redirect to view page - redirect("$default->rootUrl/control.php?action=viewNews"); + // if we have a new image + if (strlen($_FILES['fImage']['name']) > 0) { + // return the size of the image + $aSize = getimagesize($_FILES['fImage']['tmp_name']); + // don't accept it if it isn't an image + if (!$aSize) { + $default->log->error("editNewsBL.php attempted to upload a non-image:" . $_FILES['fImage']['name']); + // display the edit form, with error message + $oContent->setHtml(renderEditNewsPage($oDashboardNews, "You may only upload an image.")); + + } else { + // we have an image, now check the size + $iImgWidth = $aSize[0]; + $iImgHeight = $aSize[1]; + if (DashboardNews::checkImageSize($iImgWidth, $iImgHeight)) { + // size is fine, so set it + $oDashboardNews->setImageFile($_FILES['fImage']['tmp_name']); + + // store it + if ($oDashboardNews->update()) { + $default->log->info("editNewsBL.php successfully updated dashboard news id=$fNewsID"); + // redirect to view page + redirect("$default->rootUrl/control.php?action=viewNews"); + } else { + // update failed + $default->log->error("editNewsBL.php DB error updating dashboard news id=$fNewsID; ($fSynopsis, $fBody, $fRank)"); + // display the edit form, with error message + $oContent->setHtml(renderEditNewsPage($oDashboardNews, "An error occurred while updating this news item.")); + } + + } else { + // the image is too big + $oContent->setHtml(renderEditNewsPage($oDashboardNews, "The image you have submitted is too big (" . $iImgHeight . "x" . $iImgWidth . " > " . $oDashboardNews->getMaxImageDimensions() . "), please correct and retry")); + } + } } else { - // update failed - $default->log->error("editNewsBL.php DB error updating dashboard news id=$fNewsID; ($fSynopsis, $fBody, $fRank)"); - $oContent->setHtml(renderErrorMessage("An error occurred while updating this news item.")); - } + // store it + if ($oDashboardNews->update()) { + $default->log->info("editNewsBL.php successfully updated dashboard news id=$fNewsID"); + // redirect to view page + redirect("$default->rootUrl/control.php?action=viewNews"); + } else { + // update failed + $default->log->error("editNewsBL.php DB error updating dashboard news id=$fNewsID; ($fSynopsis, $fBody, $fRank)"); + $oContent->setHtml(renderErrorMessage("An error occurred while updating this news item.")); + } + } + } else { // display the edit form $oContent->setHtml(renderEditNewsPage($oDashboardNews)); diff --git a/presentation/lookAndFeel/knowledgeTree/administration/news/manageNewsBL.php b/presentation/lookAndFeel/knowledgeTree/administration/news/manageNewsBL.php index 78bca42..b34e562 100644 --- a/presentation/lookAndFeel/knowledgeTree/administration/news/manageNewsBL.php +++ b/presentation/lookAndFeel/knowledgeTree/administration/news/manageNewsBL.php @@ -28,12 +28,9 @@ if (checkSession()) { // we have an id, so we're either deleting, editing or previewing a current item } else { // no news id, so list the current news items - $oContent->setHtml(renderViewNewsPage()); + $oContent->setHtml(renderListNewsPage()); } - //$main->setFormAction("$default->rootUrl/presentation/lookAndFeel/knowledgeTree/create.php?fRedirectURL=".urlencode("$default->rootUrl/control.php?action=addLinkSuccess&fLinkID=")); - //$main->setHasRequiredFields(true); - // build the page require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); $main->setCentralPayload($oContent); diff --git a/presentation/lookAndFeel/knowledgeTree/administration/news/newsUI.inc b/presentation/lookAndFeel/knowledgeTree/administration/news/newsUI.inc index efd7323..031cb1a 100644 --- a/presentation/lookAndFeel/knowledgeTree/administration/news/newsUI.inc +++ b/presentation/lookAndFeel/knowledgeTree/administration/news/newsUI.inc @@ -6,28 +6,15 @@ require_once("$default->uiDirectory/administration/adminUI.inc"); /** * $Id$ * - * This page controls browsing for documents- this can be done either by - * folder, category or document type. - * The relevant permission checking is performed, calls to the business logic - * layer to retrieve the details of the documents to view are made and the user - * interface is contructed. + * This page holds all presentation code for administering dashboard news. * * Licensed under the GNU GPL. For full terms see the file DOCS/COPYING. * * @version $Revision$ * @author Michael Joseph , Jam Warehouse (Pty) Ltd, South Africa - * @package presentation.lookAndFeel.knowledgeTree.documentmanagement + * @package presentation.lookAndFeel.knowledgeTree.administration.news */ -/** - * Displays an error message - */ -function renderErrorMessage($sErrorMessage) { - $sToRender = ""; - $sToRender .= ""; - $sToRender .= "

$sErrorMessage

"; - return $sToRender; -} function renderNewsPopupJavascript() { global $default; @@ -42,11 +29,21 @@ function renderNewsPopupJavascript() { } /** + * Displays an error message + */ +function renderErrorMessage($sErrorMessage) { + $sToRender = ""; + $sToRender .= ""; + $sToRender .= "

$sErrorMessage

"; + return $sToRender; +} + +/** * Displays the current news items */ function renderNewsTable() { global $default; - $sQuery = "SELECT id, synopsis, body, rank, if((length(image)>0),'yes','no') as image, 'Edit' AS edit, 'Preview' AS preview, 'Delete' AS del " . + $sQuery = "SELECT id, synopsis, IF(LENGTH(body) > 25, CONCAT(LEFT(body,25),'...'), body) AS body, rank, IF(LENGTH(image)>0, 'yes', 'no') as image, 'Edit' AS edit, 'Preview' AS preview, 'Delete' AS del " . "FROM $default->owl_news_table ORDER BY rank ASC"; $aColumns = array("synopsis", "body", "rank", "image", "edit", "preview", "del"); $aColumnHeaders = array("Synopsis", "Body", "Rank", "Image"); @@ -57,65 +54,78 @@ function renderNewsTable() { 5=> "$default->rootUrl/control.php?action=previewNews", 6=> "$default->rootUrl/control.php?action=removeNews"); - $oPatternTableSqlQuery = & new PatternTableSqlQuery($sQuery, $aColumns, $aColumnTypes, $aColumnHeaders, "10%", $aLinkURLs,$aDBColumnArray,$aQueryStringVariableNames); + $oPatternTableSqlQuery = & new PatternTableSqlQuery($sQuery, $aColumns, $aColumnTypes, $aColumnHeaders, "100%", $aLinkURLs,$aDBColumnArray,$aQueryStringVariableNames); $oPatternTableSqlQuery->setTableHeading("Dashboard News"); $oPatternTableSqlQuery->setDisplayColumnHeadings(true); return $oPatternTableSqlQuery->render(); } /** + * Displays a news item + */ +function renderNewsItem($oDashboardNews) { + global $default; + + $sToRender .= "Synopsis:" . $oDashboardNews->getSynopsis() . ""; + $sToRender .= "Body:" . $oDashboardNews->getBody() . ""; + $sToRender .= "Rank:" . $oDashboardNews->getRank() . ""; + $sToRender .= "rootUrl/" . $default->siteMap->getPage("viewNewsImage") . "?fNewsID=" . $oDashboardNews->getID() . "\" border=\"0\">"; + $sToRender .= "getID() . "\">"; + return $sToRender; +} + +/** * Displays the edit/add news item form * * @param DashboardNews the news item to modify */ -function renderModifyAddNewsForm($oDashboardNews = null) { +function renderEditAddNewsForm($oDashboardNews, $bUpdate) { global $default; $sToRender = ""; - $sToRender .= ""; - $sToRender .= ""; - $sToRender .= ""; - $sToRender .= ""; - $sToRender .= (isset($oDashboardNews) ? "getID() . "\">" : ""); - $sToRender .= ""; + + $sToRender .= ""; + $sToRender .= ""; + $sToRender .= ""; + $sToRender .= ""; + + if ($bUpdate) { + $sToRender .= "getID() . "\">"; + $sToRender .= ""; + } else { + $sToRender .= ""; + } + $sToRender .= "\n"; $sToRender .= "
SynopsisgetSynopsis() : "") . "\">
BodygetBody() : "") . "\">
RankgetRank() : "") . "\">
Image
Synopsis:getSynopsis() : "") . "\">
Body:
Rank:getRank() : "") . "\">
Image:
graphicsUrl/widgets/submit.gif\" border=\"0\">\n"; $sToRender .= "rootUrl/control.php?action=viewNews\">graphicsUrl/widgets/cancel.gif\" border=\"0\">
"; + + $sToRender .= "\n\n\n\n"; + return $sToRender; } - -/** - * Prompts for confirmation when deleting a news item - */ -function renderDeleteNewsConfirmationPage($oDashboardNews) { - global $default; - - $sToRender .= "" . renderHeading("Delete Dashboard News") . "
"; - $sToRender .= "\n"; - $sToRender .= ""; - $sToRender .= ""; - $sToRender .= ""; - $sToRender .= ""; - $sToRender .= ""; - $sToRender .= "getID() . "\">"; - $sToRender .= ""; - $sToRender .= "\n"; - - $sToRender .= "
Are you sure you wish to delete this news item?
Synopsis" . $oDashboardNews->getSynopsis() . "
Body" . $oDashboardNews->getBody() . "
Rank" . $oDashboardNews->getRank() . "
rootUrl/" . $default->siteMap->getPage("viewNewsImage") . "?fNewsID=" . $oDashboardNews->getID() . "\" border=\"0\">
graphicsUrl/widgets/delete.gif\" border=\"0\">\n"; - $sToRender .= "rootUrl/control.php?action=viewNews\">graphicsUrl/widgets/cancel.gif\" border=\"0\">
\n"; - return $sToRender; -} - /** * Displays the edit news page */ -function renderEditNewsPage($oDashboardNews) { +function renderEditNewsPage($oDashboardNews, $sErrorMessage = "") { global $default; $sToRender .= "" . renderHeading("Edit Dashboard News") . "
"; + if (strlen($sErrorMessage) > 0) { + $sToRender .= renderErrorMessage($sErrorMessage); + } $sToRender .= "\n"; - $sToRender .= renderModifyAddNewsForm($oDashboardNews); + $sToRender .= renderEditAddNewsForm($oDashboardNews, true); $sToRender .= "
\n"; return $sToRender; } @@ -123,19 +133,22 @@ function renderEditNewsPage($oDashboardNews) { /** * Displays the add new new item page */ -function renderNewNewsPage() { +function renderAddNewsPage($oDashboardNews, $sErrorMessage = "") { global $default; $sToRender .= "" . renderHeading("View Dashboard News") . "
"; + if (strlen($sErrorMessage) > 0) { + $sToRender .= renderErrorMessage($sErrorMessage); + } $sToRender .= "\n"; - $sToRender .= renderModifyAddNewsForm(); + $sToRender .= renderEditAddNewsForm($oDashboardNews, false); $sToRender .= "
\n"; return $sToRender; } /** * Displays a list of news items */ -function renderViewNewsPage() { +function renderListNewsPage() { global $default; $sToRender .= "" . renderHeading("View Dashboard News") . "
"; @@ -143,5 +156,39 @@ function renderViewNewsPage() { $sToRender .= renderNewsTable(); $sToRender .= "\n"; return $sToRender; +} + +/** + * Displays the preview page + */ +function renderPreviewNewsPage($oDashboardNews) { + global $default; + + $sToRender .= "" . renderHeading("Preview Dashboard News") . "
"; + $sToRender .= "\n"; + $sToRender .= renderNewsItem($oDashboardNews); + $sToRender .= "\n"; + $sToRender .= "
rootUrl/control.php?action=viewNews\">graphicsUrl/widgets/back.gif\" border=\"0\">
\n"; + return $sToRender; } + +/** + * Prompts for confirmation when deleting a news item + */ +function renderDeleteNewsConfirmationPage($oDashboardNews) { + global $default; + + $sToRender .= "" . renderHeading("Delete Dashboard News") . "
"; + $sToRender .= "\n"; + $sToRender .= ""; + + $sToRender .= renderNewsItem($oDashboardNews); + + $sToRender .= ""; + $sToRender .= "\n"; + + $sToRender .= "
Are you sure you wish to delete this news item?
graphicsUrl/widgets/delete.gif\" border=\"0\">\n"; + $sToRender .= "rootUrl/control.php?action=viewNews\">graphicsUrl/widgets/cancel.gif\" border=\"0\">
\n"; + return $sToRender; +} ?> \ No newline at end of file diff --git a/presentation/lookAndFeel/knowledgeTree/administration/news/previewNewsBL.php b/presentation/lookAndFeel/knowledgeTree/administration/news/previewNewsBL.php new file mode 100644 index 0000000..6d7fb5e --- /dev/null +++ b/presentation/lookAndFeel/knowledgeTree/administration/news/previewNewsBL.php @@ -0,0 +1,40 @@ +fileSystemRoot/lib/dashboard/DashboardNews.inc"); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternMainPage.inc"); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternCustom.inc"); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternTableSqlQuery.inc"); +require_once("$default->uiDirectory/administration/news/newsUI.inc"); + +/** + * $Id$ + * + * This page previews a news item + * + * Licensed under the GNU GPL. For full terms see the file DOCS/COPYING. + * + * @version $Revision$ + * @author Michael Joseph , Jam Warehouse (Pty) Ltd, South Africa + * @package presentation.lookAndFeel.knowledgeTree.administration.news + */ + +if (checkSession()) { + + // instantiate my content pattern + $oContent = new PatternCustom(); + + if (isset($fNewsID)) { + // we have an id, so we're can proceed + $oContent->setHtml(renderPreviewNewsPage(DashboardNews::get($fNewsID))); + } else { + // no news id, nothing to preview + $oContent->setHtml(renderListNewsPage()); + } + + // build the page + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $main->setCentralPayload($oContent); + $main->render(); +} +?> \ No newline at end of file diff --git a/presentation/lookAndFeel/knowledgeTree/administration/news/removeNewsBL.php b/presentation/lookAndFeel/knowledgeTree/administration/news/removeNewsBL.php index 84b31a1..1ea0967 100644 --- a/presentation/lookAndFeel/knowledgeTree/administration/news/removeNewsBL.php +++ b/presentation/lookAndFeel/knowledgeTree/administration/news/removeNewsBL.php @@ -31,13 +31,14 @@ if (checkSession()) { if ($fDeleteConfirmed) { // confirmation received, so delete if ($oDashboardNews->delete()) { - $default->log->info("deleteNewsBL.php successfully delete dashboard news id=$fNewsID"); + $default->log->info("deleteNewsBL.php successfully deleted dashboard news id=$fNewsID"); // redirect to view page redirect("$default->rootUrl/control.php?action=viewNews"); } else { // delete failed $default->log->error("deleteNewsBL.php DB error deleting dashboard news (" . arrayToString($oDashboardNews) . ")"); $oContent->setHtml(renderErrorMessage("An error occurred while deleting this news item.")); + // TODO: incorporate message into another page } } else { // display the delete confirmation page @@ -46,6 +47,7 @@ if (checkSession()) { } else { // no news id, so display an error message $oContent->setHtml(renderErrorMessage("No news item was selected for deletion")); + // TODO: incorporate message into another page } // build the page