/** * Will render a specified form, the name of the form given by the first parameter; * * This method will render one of the forms for our object, invoked by giving the proper form identifier to the current form. * We have chosen this method of invoking forms, because we just had too many this->renderSomethingMethod (), which really had * an impact on code massiveness. Also, having code organized in switch/case statements leads us to be able to share common * settings between different forms, as we've done with the methods defined in the __CALL method above; * * For example, if we wanted to share some common configuration between a create and an edit form, we could have introduced * two switches in this method, one that would have set the common options, and the second, would have just passed through * again, and get the already set configuration options, using them. This means that if we needed to change behavior of * some interconnected forms, that would mean modifying the needed code one place only, which is a big advantage over * having separated methods for each form. Maybe if we extended this object, you guys could understand the functionality; * * @param string $objFormToRender The name of the form to render; * @return mixed Depends on the rendered form if it returns something or not; */ public function renderBackendPage(S $objPageToRender) { // Get a specific CSS file for this controller ... TPL::manageCSS(new FilePath($this->getPathToSkinCSS()->toRelativePath() . $objPageToRender . CSS_EXTENSION), $objPageToRender); // Do pagination ... if (isset($_GET[ADMIN_PAGINATION])) { $objLowerLimit = (int) $_GET[ADMIN_PAGINATION]->toString() * 10 - 10; $objUpperLimit = 10; } else { $objLowerLimit = 0; $objUpperLimit = 10; } // Do a switch on the rendered page ... switch ($objPageToRender) { case 'manageArticles': // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION])) { // Do a switch ... switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('articleEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('articleErase')); break; } } else { // Redirect to DescByPublished ... if (!isset($_GET[ADMIN_ACTION_SORT])) { $this->setHeaderKey(URL::rewriteURL(new A(array(ADMIN_ACTION_SORT)), new A(array('DescByPublished'))), new S('Location')); } // Set some requirements ... $objGetCondition = new S(); if (isset($_GET[ADMIN_ACTION_BY])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_BY]) { case ARTICLES_SEARCH_TITLE: $objGetCondition->appendString(_SP)->appendString('WHERE %objArticleTableFTitle'); break; case ARTICLES_SEARCH_CONTENT: $objGetCondition->appendString(_SP)->appendString('WHERE %objArticleTableFContent'); break; case ARTICLES_SEARCH_TAGS: $objGetCondition->appendString(_SP)->appendString('WHERE %objArticleTableFTags'); break; case ARTICLES_SEARCH_EXCERPT: $objGetCondition->appendString(_SP)->appendString('WHERE %objArticleTableFExcerpt'); break; case ARTICLES_SEARCH_CATEGORY: $objGetCondition->appendString('AS t1 INNER JOIN %objCategoryTable AS t2 ON t1.%objArticleTableFCategoryId = t2.%objCategoryTableFId WHERE %objCategoryTableFName'); break; } // Add LIKE searching ... $objGetCondition->appendString(_SP)->appendString('LIKE "%%Search%"')->doToken('%Search', $_GET[ADMIN_ACTION_SEARCH]); // Get the count ... $objSearchCount = $this->getArticleCount($objGetCondition); } // Do a sorting, before anything else; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': case 'DescByTitle': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objArticleTableFTitle'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByTitle': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByPublished': case 'DescByPublished': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objArticleTableFDatePublished'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByPublished': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByPublished': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByUpdated': case 'DescByUpdated': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objArticleTableFDateUpdated'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByUpdated': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByUpdated': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByViews': case 'DescByViews': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objArticleTableFViews'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByViews': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByViews': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByCategory': case 'DescByCategory': if (isset($_GET[ADMIN_ACTION_BY])) { if ($_GET[ADMIN_ACTION_BY] == ARTICLES_SEARCH_CATEGORY) { // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY t2.%objCategoryTableFName'); } else { // Make the ordered condition; $objGetCondition->doToken('WHERE', _SP . 'AS t1 INNER JOIN %objCategoryTable AS t2 ON t1.%objArticleTableFCategoryId = t2.%objCategoryTableFId WHERE'); $objGetCondition->appendString(_SP)->appendString('ORDER BY t2.%objCategoryTableFName'); } } else { // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('AS t1 INNER JOIN %objCategoryTable AS t2 ON t1.%objArticleTableFCategoryId = t2.%objCategoryTableFId ORDER BY t2.%objCategoryTableFName'); } // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByCategory': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByCategory': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Get based on SQL condtion ... $objArticleTable = $this->getArticles($objGetCondition); if (isset($_GET[ADMIN_ACTION_BY])) { $objArticleTableCount = $objSearchCount; } else { $objArticleTableCount = $this->getArticleCount(); } // Fix pagination when count is LESS than 10; if (isset($_GET[ADMIN_ACTION_BY]) && isset($_GET[ADMIN_PAGINATION])) { if ($objArticleTableCount->toInt() < 10) { // Remove paging ... & redirect to proper ... TPL::setHeaderKey(URL::rewriteURL(new A(array(ADMIN_PAGINATION))), new S('Location')); } else { if (CEIL($objArticleTableCount->toInt() / 10) < (int) $_GET[ADMIN_PAGINATION]->toString()) { // Redirect to proper ... TPL::setHeaderKey(URL::rewriteURL(new A(array(ADMIN_PAGINATION)), new A(array(CEIL($objArticleTableCount->toInt() / 10)))), new S('Location')); } } } // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageArticles.tp'); TPL::tpSet($objArticleTable, new S('articleTable'), $tpF); TPL::tpSet($this, new S('ART'), $tpF); TPL::tpSet($this->STG, new S('STG'), $tpF); TPL::tpExe($tpF); // Do pagination ... if ($objArticleTableCount->toInt() > 10) { self::$objAdministration->setPagination($objArticleTableCount); } // Do the form, make it happen; $this->renderForm(new S('articleSearch')); $this->renderForm(new S('articleCreate')); } // BK; break; case 'manageCategories': // Add some requirements; TPL::manageJSS(new FilePath($this->getPathToSkinJSS()->toRelativePath() . 'manageCategories.js'), new S('manageCategories')); // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION])) { // Do a switch ... switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('categoryEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('categoryErase')); break; case ADMIN_ACTION_MOVE: $this->renderForm(new S('categoryMove')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting, before anything else; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByCategory': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByCategory': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('DESC'); break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objCategoryTreeCount = $this->getCategoryCount(); $objCategoryTree = $this->getCategories(isset($_GET[ADMIN_SHOW_ALL]) ? new S() : $objGetCondition); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageCategories.tp'); TPL::tpSet($objCategoryTree, new S('categoryTree'), $tpF); TPL::tpExe($tpF); // Do pagination ... if ($objCategoryTreeCount->toInt() > 10 && !isset($_GET[ADMIN_SHOW_ALL])) { self::$objAdministration->setPagination($objCategoryTreeCount); } // Do the form, make it happen; $this->renderForm(new S('categoryCreate')); } // BK; break; case 'manageComments': // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION])) { // Switch between actions; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('commentEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('commentErase')); break; } } else { // Do a redirect ... if (!isset($_GET[ADMIN_ACTION_SORT])) { $this->setHeaderKey(URL::rewriteURL(new A(array(ADMIN_ACTION_SORT)), new A(array('DescByDate'))), new S('Location')); } // Set some requirements ... $objGetCondition = new S(); // Do a sorting, before anything else; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByName': case 'DescByName': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objCommentsTableFName'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByName': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByName': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByTitle': case 'DescByTitle': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('AS t1 LEFT JOIN %objArticleTable AS t2 ON t1.%objCommentsTableFArticleId = t2.%objArticleTableFId ORDER BY t2.%objArticleTableFTitle'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByTitle': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByApproved': case 'DescByApproved': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objCommentsTableFApproved'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByApproved': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByApproved': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByDate': case 'DescByDate': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objCommentsTableFDate'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByDate': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByDate': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements; $objComments = $this->getComments($objGetCondition); $objCommentsCount = $this->getCommentCount(); // Process them arrays; foreach ($objComments as $k => $v) { if ($v[self::$objCommentsTableFRUId] != new S('0')) { $v[self::$objCommentsTableFName] = $this->ATH->getUserInfoById($v[self::$objCommentsTableFRUId], Authentication::$objAuthUsersTableFUName); } } // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageComments.tp'); TPL::tpSet($objComments, new S('articleTable'), $tpF); TPL::tpSet($this->STG, new S('STG'), $tpF); TPL::tpSet($this, new S('ART'), $tpF); TPL::tpExe($tpF); // Do some pagination ... if ($objCommentsCount->toInt() > 10) { self::$objAdministration->setPagination($objCommentsCount); } } // BK; break; case 'manageOperations': // Do the form, make it happen; $this->renderForm(new S('categoryMoveOperation')); break; case 'manageConfiguration': // Do the form, make it happen ... if (isset($_GET[ADMIN_ACTION])) { $this->renderForm($_GET[ADMIN_ACTION]); } else { $this->renderForm(new S('configurationEdit')); } break; } }
/** * Will render a specified form, the name of the form given by the first parameter; * * This method will render one of the forms for our object, invoked by giving the proper form identifier to the current form. * We have chosen this method of invoking forms, because we just had too many this->renderSomethingMethod (), which really had * an impact on code massiveness. Also, having code organized in switch/case statements leads us to be able to share common * settings between different forms, as we've done with the methods defined in the __CALL method above; * * For example, if we wanted to share some common configuration between a create and an edit form, we could have introduced * two switches in this method, one that would have set the common options, and the second, would have just passed through * again, and get the already set configuration options, using them. This means that if we needed to change behavior of * some interconnected forms, that would mean modifying the needed code one place only, which is a big advantage over * having separated methods for each form. Maybe if we extended this object, you guys could understand the functionality ... * * @param string $objFormToRender The name of the form to render; * @return mixed Depends on the rendered form if it returns something or not; */ public function renderBackendPage(S $objPageToRender) { # Get a specific CSS file for this controller ... TPL::manageCSS(new FilePath($this->getPathToSkinCSS()->toRelativePath() . $objPageToRender . CSS_EXTENSION), $objPageToRender); # Do pagination ... if (isset($_GET[ADMIN_PAGINATION])) { $objLowerLimit = (int) $_GET[ADMIN_PAGINATION]->toString() * 10 - 10; $objUpperLimit = 10; } else { $objLowerLimit = 0; $objUpperLimit = 10; } // Do a switch on the rendered page ... switch ($objPageToRender) { case 'manageMessages': // Set some predefines; $objGetCondition = new S(); // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION])) { // Switch between actions; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_VIEW: // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'viewMessage.tp'); TPL::tpSet($_GET[ADMIN_ACTION_ID], new S('objGETId'), $tpF); TPL::tpSet($this, new S('CNT'), $tpF); TPL::tpExe($tpF); // Do the form, make it happen ... $this->renderForm(new S('messageOperations')); $this->renderForm(new S('messageSend')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('messageErase')); break; } } else { if (!isset($_GET[ADMIN_ACTION_SORT])) { $this->setHeaderKey(URL::rewriteURL(new A(array(ADMIN_ACTION_SORT)), new A(array('DescByReceived'))), new S('Location')); } // Set some requirements; $objGetCondition = new S(); // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION_SORT])) { // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByReceived': case 'DescByReceived': // Set some requirements; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objContactTableFReceived'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByReceived': $objGetCondEFEFEFition->appendString(_SP)->appendString('ASC'); break; case 'DescByReceived': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByLastEdited': case 'DescByLastEdited': // Set some requirements; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objContactTableFLastEdited'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByLastEdited': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByLastEdited': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscBySubject': case 'DescBySubject': // Set some requirements; $objGetCondition->appendString('AS t1 INNER JOIN %objContactSubjectTable AS t2 ON t1.%objContactTableFSubjectId = t2.%objContactSubjectFId ORDER BY %objContactSubjectFTitle'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscBySubject': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescBySubject': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; } } // Add some LIMITS; $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements; $objArticleTable = $this->getMessages($objGetCondition); $objArticleTableCount = $this->getMessageCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageMessages.tp'); TPL::tpSet($objArticleTable, new S('articleTable'), $tpF); TPL::tpSet($this, new S('CNT'), $tpF); TPL::tpSet($this->STG, new S('STG'), $tpF); TPL::tpExe($tpF); // Do pagination; if ($objArticleTableCount->toInt() > 10) { self::$objAdministration->setPagination($objArticleTableCount); } } // Break out; break; case 'manageSubjects': // Set some predefines; $objGetCondition = new S(); // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION])) { // Switch between actions; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('subjectEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('subjectErase')); break; } } else { // Do a sorting, before anything else; if (isset($_GET[ADMIN_ACTION_SORT])) { switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': case 'DescByTitle': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objContactSubjectFTitle'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByTitle': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; } } // Add some LIMITs; $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements; $objArticleTable = $this->getSubjects($objGetCondition); $objArticleTableCount = $this->getSubjectCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageSubjects.tp'); TPL::tpSet($objArticleTable, new S('articleTable'), $tpF); TPL::tpExe($tpF); // Do pagination ... if ($objArticleTableCount->toInt() > 10) { self::$objAdministration->setPagination($objArticleTableCount); } // Do the form, make it happen; $this->renderForm(new S('subjectCreate')); } break; case 'manageConfiguration': // Do the form, make it happen; if (isset($_GET[ADMIN_ACTION])) { $this->renderForm($_GET[ADMIN_ACTION]); } else { $this->renderForm(new S('configurationEdit')); } break; } }
/** * Will render a specified form, the name of the form given by the first parameter; * * This method will render one of the forms for our object, invoked by giving the proper form identifier to the current form. * We have chosen this method of invoking forms, because we just had too many this->renderSomethingMethod (), which really had * an impact on code massiveness. Also, having code organized in switch/case statements leads us to be able to share common * settings between different forms, as we've done with the methods defined in the __CALL method above; * * For example, if we wanted to share some common configuration between a create and an edit form, we could have introduced * two switches in this method, one that would have set the common options, and the second, would have just passed through * again, and get the already set configuration options, using them. This means that if we needed to change behavior of * some interconnected forms, that would mean modifying the needed code one place only, which is a big advantage over * having separated methods for each form. Maybe if we extended this object, you guys could understand the functionality; * * @param string $objFormToRender The name of the form to render; * @return mixed Depends on the rendered form if it returns something or not; */ public function renderBackendPage(S $objPageToRender) { // Get a specific CSS file for this controller ... TPL::manageCSS(new FilePath($this->getPathToSkinCSS()->toRelativePath() . $objPageToRender . CSS_EXTENSION), $objPageToRender); // Do pagination ... if (isset($_GET[ADMIN_PAGINATION])) { $objLowerLimit = (int) $_GET[ADMIN_PAGINATION]->toString() * 10 - 10; $objUpperLimit = 10; } else { $objLowerLimit = 0; $objUpperLimit = 10; } // Do a switch on the rendered page ... switch ($objPageToRender) { case 'manageConfiguration': if (isset($_GET[ADMIN_ACTION])) { $this->renderForm($_GET[ADMIN_ACTION]); } else { $this->renderForm(new S('configurationEdit')); } break; case 'manageCountries': // Do some work; if (isset($_GET[ADMIN_ACTION])) { // Do a switch; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('countryEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('countryErase')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting beforehand; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByName': case 'DescByName': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objSettingsCountryTableFName'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByName': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByName': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objCountries = $this->getCountries($objGetCondition); $objCountriesCount = $this->getCountryCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageCountries.tp'); TPL::tpSet($objCountries, new S('articleTable'), $tpF); TPL::tpExe($tpF); // Do some pagination; if ($objCountriesCount->toInt() > 10) { self::$objAdministration->setPagination($objCountriesCount); } // Do the form, make it happen; $this->renderForm(new S('countryCreate')); } // Break out ... break; case 'manageErrorPages': // Do some work; if (isset($_GET[ADMIN_ACTION])) { // Do a switch; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('errorPageEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('errorPageErase')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting beforehand; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByErrorCode': case 'DescByErrorCode': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objSettingsErrTableFCode'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByErrorCode': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByErrorCode': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByErrorPageTitle': case 'DescByErrorPageTitle': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objSettingsErrTableFTitle'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByErrorPageTitle': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByErrorPageTitle': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objCountries = $this->getErrorPages($objGetCondition); $objCountriesCount = $this->getErrorPageCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageErrorPages.tp'); TPL::tpSet($objCountries, new S('articleTable'), $tpF); TPL::tpExe($tpF); // Do some pagination; if ($objCountriesCount->toInt() > 10) { self::$objAdministration->setPagination($objCountriesCount); } // Do the form, make it happen; $this->renderForm(new S('errorPageCreate')); } // Break out ... break; } }
/** * Will render a specified form, the name of the form given by the first parameter; * * This method will render one of the forms for our object, invoked by giving the proper form identifier to the current form. * We have chosen this method of invoking forms, because we just had too many this->renderSomethingMethod (), which really had * an impact on code massiveness. Also, having code organized in switch/case statements leads us to be able to share common * settings between different forms, as we've done with the methods defined in the __CALL method above; * * For example, if we wanted to share some common configuration between a create and an edit form, we could have introduced * two switches in this method, one that would have set the common options, and the second, would have just passed through * again, and get the already set configuration options, using them. This means that if we needed to change behavior of * some interconnected forms, that would mean modifying the needed code one place only, which is a big advantage over * having separated methods for each form. Maybe if we extended this object, you guys could understand the functionality; * * @param string $objFormToRender The name of the form to render; * @return mixed Depends on the rendered form if it returns something or not; */ public function renderBackendPage(S $objPageToRender) { // Get a specific CSS file for this controller ... TPL::manageCSS(new FilePath($this->getPathToSkinCSS()->toRelativePath() . $objPageToRender . CSS_EXTENSION), $objPageToRender); // Do pagination ... if (isset($_GET[ADMIN_PAGINATION])) { $objLowerLimit = (int) $_GET[ADMIN_PAGINATION]->toString() * 10 - 10; $objUpperLimit = 10; } else { $objLowerLimit = 0; $objUpperLimit = 10; } // Do a switch on the rendered page ... switch ($objPageToRender) { case 'manageNewsletter': // Do some work; if (isset($_GET[ADMIN_ACTION])) { // Do a switch; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('newsletterEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('newsletterErase')); break; } } else { // Redirect to DescBySubscribed ... if (!isset($_GET[ADMIN_ACTION_SORT])) { $this->setHeaderKey(URL::rewriteURL(new A(array(ADMIN_ACTION_SORT)), new A(array('DescBySubscribed'))), new S('Location')); } // Set some requirements ... $objGetCondition = new S(); // Check for sorting ... if (isset($_GET[ADMIN_ACTION_BY])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_BY]) { } // Add LIKE searching ... $objGetCondition->appendString(_SP)->appendString('LIKE "%%Search%"')->doToken('%Search', $_GET[ADMIN_ACTION_SEARCH]); // Get the count, on SQL ... $objSearchCount = $this->getSubscriberCount($objGetCondition); } // Do a sorting beforehand; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByEmail': case 'DescByEmail': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLetterTableFEML'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByEmail': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByEmail': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByFirstName': case 'DescByFirstName': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLetterTableFFirstName'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByFirstName': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByFirstName': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByLastName': case 'DescByLastName': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLetterTableFLastName'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByLastName': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByLastName': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscBySubscribed': case 'DescBySubscribed': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLetterTableFSubscribed'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscBySubscribed': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescBySubscribed': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objLetterTable = $this->getSubscribers($objGetCondition); $objLetterTableCount = $this->getSubscriberCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageNewsletter.tp'); TPL::tpSet($objLetterTable, new S('newsletterTable'), $tpF); TPL::tpSet($this->STG, new S('STG'), $tpF); TPL::tpExe($tpF); // Do some pagination; if ($objLetterTableCount->toInt() > 10) { self::$objAdministration->setPagination($objLetterTableCount); } // Do the form, make it happen; $this->renderForm(new S('newsletterSearch')); $this->renderForm(new S('newsletterCreate')); } // Break out ... break; case 'manageCategories': // Add some requirements; TPL::manageJSS(new FilePath($this->getPathToSkinJSS()->toRelativePath() . 'manageCategories.js'), new S('manageCategories')); // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION])) { // Do a switch ... switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('categoryEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('categoryErase')); break; case ADMIN_ACTION_MOVE: $this->renderForm(new S('categoryMove')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting, before anything else; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByCategory': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByCategory': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('DESC'); break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objCategoryTreeCount = $this->getCategoryCount(); $objCategoryTree = $this->getCategories(isset($_GET[ADMIN_SHOW_ALL]) ? new S() : $objGetCondition); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageCategories.tp'); TPL::tpSet($objCategoryTree, new S('categoryTree'), $tpF); TPL::tpExe($tpF); // Do pagination ... if ($objCategoryTreeCount->toInt() > 10 && !isset($_GET[ADMIN_SHOW_ALL])) { self::$objAdministration->setPagination($objCategoryTreeCount); } // Do the form, make it happen; $this->renderForm(new S('categoryCreate')); } // Break out ... break; case 'manageOperations': // Do the form, make it happen; $this->renderForm(new S('categoryMoveOperation')); break; case 'manageConfiguration': // Do the form, make it happen ... if (isset($_GET[ADMIN_ACTION])) { $this->renderForm($_GET[ADMIN_ACTION]); } else { $this->renderForm(new S('configurationEdit')); } break; } }
/** * Will render a specified form, the name of the form given by the first parameter; * * This method will render one of the forms for our object, invoked by giving the proper form identifier to the current form. * We have chosen this method of invoking forms, because we just had too many this->renderSomethingMethod (), which really had * an impact on code massiveness. Also, having code organized in switch/case statements leads us to be able to share common * settings between different forms, as we've done with the methods defined in the __CALL method above; * * For example, if we wanted to share some common configuration between a create and an edit form, we could have introduced * two switches in this method, one that would have set the common options, and the second, would have just passed through * again, and get the already set configuration options, using them. This means that if we needed to change behavior of * some interconnected forms, that would mean modifying the needed code one place only, which is a big advantage over * having separated methods for each form. Maybe if we extended this object, you guys could understand the functionality; * * @param string $objFormToRender The name of the form to render; * @return mixed Depends on the rendered form if it returns something or not; */ public function renderBackendPage(S $objPageToRender) { // Get a specific CSS file for this controller ... TPL::manageCSS(new FilePath($this->getPathToSkinCSS()->toRelativePath() . $objPageToRender . CSS_EXTENSION), $objPageToRender); // Do pagination ... if (isset($_GET[ADMIN_PAGINATION])) { $objLowerLimit = (int) $_GET[ADMIN_PAGINATION]->toString() * 10 - 10; $objUpperLimit = 10; } else { $objLowerLimit = 0; $objUpperLimit = 10; } // Do a switch on the rendered page ... switch ($objPageToRender) { case 'manageImages': // Make an IF; if (isset($_GET[PRODUCTS_ACTION_IMAGE])) { // Do a switch ... switch ($_GET[PRODUCTS_ACTION_IMAGE]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('imageEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('imageErase')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting beforehand; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByImage': case 'DescByImage': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsIMGTableFURL'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByImage': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByImage': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByTitle': case 'DescByTitle': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsIMGTableFTitle'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByTitle': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; } } else { // Set some requirements ... $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsIMGTableFId DESC'); } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objImageTable = $this->getImagesByProductId($_GET[ADMIN_ACTION_ID], $objGetCondition); $objImageTableCount = $this->getImageCountByProductId($_GET[ADMIN_ACTION_ID]); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageImages.tp'); TPL::tpSet($objImageTable, new S('imageTable'), $tpF); TPL::tpSet($this, new S('thisObj'), $tpF); TPL::tpExe($tpF); // Do some pagination; if ($objImageTableCount->toInt() > 10) { self::$objAdministration->setPagination($objImageTableCount); } // Do the form, make it happen; $this->renderForm(new S('imageCreate')); } // Break out ... break; case 'manageProperties': if (isset($_GET[PRODUCTS_ACTION_PROPERTY])) { // Do a switch ... switch ($_GET[PRODUCTS_ACTION_PROPERTY]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('propertyEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('propertyErase')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting beforehand; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByKey': case 'DescByKey': // Set some requiremenst; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsPropertyTableFKey'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByKey': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByKey': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByVar': case 'DescByVar': // Set some requiremenst; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsPropertyTableFVar'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByVar': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByVar': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; } } else { // Set some requirements ... $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsPropertyTableFId DESC'); } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objPropertyTable = $this->getPropertiesByProductId($_GET[ADMIN_ACTION_ID], $objGetCondition); $objPropertyTableCount = $this->getPropertyCountByProductId($_GET[ADMIN_ACTION_ID]); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageProperties.tp'); TPL::tpSet($objPropertyTable, new S('propertyTable'), $tpF); TPL::tpSet($this, new S('thisObj'), $tpF); TPL::tpExe($tpF); // Do some pagination; if ($objPropertyTableCount->toInt() > 10) { self::$objAdministration->setPagination($objPropertyTableCount); } // Do the form, make it happen; $this->renderForm(new S('propertyCreate')); } // Break out ... break; case 'manageProducts': // Set some requirements; TPL::manageJSS(new FilePath($this->getPathToSkinJSS()->toRelativePath() . 'manageProducts.js'), new S('manageProducts')); // Do some work; if (isset($_GET[ADMIN_ACTION])) { // Do a switch; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('productEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('productErase')); break; case ADMIN_ACTION_IMAGES: // Specific ... $this->renderBackendPage(new S('manageImages')); break; case ADMIN_ACTION_PROPERTIES: // Specific ... $this->renderBackendPage(new S('manageProperties')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting beforehand; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByCode': case 'DescByCode': // Set some requirements; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsTableFCode'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByCode': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByCode': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByName': case 'DescByName': // Set some requirements; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsTableFName'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByName': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByName': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByStoc': case 'DescByStoc': // Set somre requirements; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsTableFStoc'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByStoc': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByStoc': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByPrice': case 'DescByPrice': // Set some requirements; $objGetCondition->appendString(_SP)->appendString('ORDER BY %objProductsTableFPrice'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByPrice': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByPrice': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; case 'AscByCategory': case 'DescByCategory': // Set some requirements; $objGetCondition->appendString(_SP)->appendString('INNER JOIN %objProductsCategoryTable AS t2 ON t1.%objProductsTableFCategoryId = t2.%objCategoryTableFId ORDER BY t2.%objCategoryTableFName'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByCategory': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByCategory': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // Break out ... break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objProductTable = $this->getProducts($objGetCondition); $objProductTableCount = $this->getProductCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageProducts.tp'); TPL::tpSet($objProductTable, new S('productTable'), $tpF); TPL::tpSet($this, new S('thisObj'), $tpF); TPL::tpExe($tpF); // Do some pagination; if ($objProductTableCount->toInt() > 10) { self::$objAdministration->setPagination($objPropertyTableCount); } // Do the form, make it happen; $this->renderForm(new S('productCreate')); } // Break out ... break; case 'manageCategories': // Add some requirements; TPL::manageJSS(new FilePath($this->getPathToSkinJSS()->toRelativePath() . 'manageCategories.js'), new S('manageCategories')); // Check if there's an action to take; if (isset($_GET[ADMIN_ACTION])) { // Do a switch ... switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('categoryEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('categoryErase')); break; case ADMIN_ACTION_MOVE: $this->renderForm(new S('categoryMove')); break; } } else { // Set some requirements ... $objGetCondition = new S(); // Do a sorting, before anything else; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByCategory': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByCategory': // Make the ordered condition; $objGetCondition->appendString(_SP)->appendString('DESC'); } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objCategoryTreeCount = $this->getCategoryCount(); $objCategoryTree = $this->getCategories(isset($_GET[ADMIN_SHOW_ALL]) ? new S() : $objGetCondition); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageCategories.tp'); TPL::tpSet($objCategoryTree, new S('categoryTree'), $tpF); TPL::tpExe($tpF); // Do pagination ... if ($objCategoryTreeCount->toInt() > 10 && !isset($_GET[ADMIN_SHOW_ALL])) { self::$objAdministration->setPagination($objCategoryTreeCount); } // Do the form, make it happen; $this->renderForm(new S('categoryCreate')); } // Break out ... break; case 'manageOperations': // Do the form, make it happen; $this->renderForm(new S('categoryMoveOperation')); break; case 'manageConfiguration': // Do the form, make it happen ... if (isset($_GET[ADMIN_ACTION])) { $this->renderForm($_GET[ADMIN_ACTION]); } else { $this->renderForm(new S('configurationEdit')); } break; } }
/** * Will return the JSS header, parsing some .tp files for tokens to be replaced. This method is an internal method used by core * developers to add the specific <script type='text/javascript' src='...'> to the header section of our DOM. * * @return S Will return the JSS header for the current page * @author Catalin Z. Alexandru <*****@*****.**> * @copyright Under the terms of the GNU General Public License v3 * @version $Id: 10_TPL.php 315 2009-10-11 07:11:31Z catalin.zamfir $ * @since Version 1.0 * @access private * @static * @final */ private static final function getJSSHeader() { $jssHeaderString = new S(); $jssReplaceString = new S('[%SCRIPT_JS_SRC%]'); $jssPureString = new FileContent(FORM_TP_DIR . _S . 'frm_web_header_js.tp'); foreach (self::$objPageJSS as $k => $v) { $jssHeaderString->appendString(str_replace($jssReplaceString->toString(), self::$objPageJSS[$k], $jssPureString->toString())); } // Do return ... return $jssHeaderString; }
/** * Will render a specified form, the name of the form given by the first parameter; * * This method will render one of the forms for our object, invoked by giving the proper form identifier to the current form. * We have chosen this method of invoking forms, because we just had too many this->renderSomethingMethod (), which really had * an impact on code massiveness. Also, having code organized in switch/case statements leads us to be able to share common * settings between different forms, as we've done with the methods defined in the __CALL method above; * * For example, if we wanted to share some common configuration between a create and an edit form, we could have introduced * two switches in this method, one that would have set the common options, and the second, would have just passed through * again, and get the already set configuration options, using them. This means that if we needed to change behavior of * some interconnected forms, that would mean modifying the needed code one place only, which is a big advantage over * having separated methods for each form. Maybe if we extended this object, you guys could understand the functionality ... * * @param string $objFormToRender The name of the form to render; * @return mixed Depends on the rendered form if it returns something or not; */ public function renderBackendPage(S $objPageToRender) { // Get a specific CSS file for this controller ... TPL::manageCSS(new FilePath($this->getPathToSkinCSS()->toRelativePath() . $objPageToRender . CSS_EXTENSION), $objPageToRender); // Do pagination ... if (isset($_GET[ADMIN_PAGINATION])) { $objLowerLimit = (int) $_GET[ADMIN_PAGINATION]->toString() * 10 - 10; $objUpperLimit = 10; } else { $objLowerLimit = 0; $objUpperLimit = 10; } // Do a switch on the rendered page ... switch ($objPageToRender) { case 'welcomePage': // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'welcomePage.tp'); TPL::tpSet(self::$objAdministration->getWidget(NULL), new S('objWidgets'), $tpF); TPL::tpExe($tpF); break; case 'manageUsers': // Do specific actions, based on _GET parameters; if (isset($_GET[ADMIN_ACTION])) { // Switch ... switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('userEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('userErase')); break; } } else { // Show them ordered by DESC; if (!isset($_GET[ADMIN_ACTION_SORT])) { $this->setHeaderKey(URL::rewriteURL(new A(array(ADMIN_ACTION_SORT)), new A(array('DescByRegistered'))), new S('Location')); } // Set some requirements; $objGetCondition = new S(); if (isset($_GET[ADMIN_ACTION_BY])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_BY]) { case AUTHENTICATION_PROFILE_USERNAME: $objGetCondition->appendString('WHERE %objAuthUsersTableFUName'); break; case AUTHENTICATION_PROFILE_EMAIL: $objGetCondition->appendString('WHERE %objAuthUsersTableFEML'); break; case AUTHENTICATION_PROFILE_GROUP: $objGetCondition->appendString('AS t1 LEFT JOIN %objAuthGroupTable AS t2 ON t1.%objAuthUsersTableFUGId = t2.%objAuthGroupTableFId WHERE t2.%objAuthGroupTableFName'); break; } // Add LIKE searching ... $objGetCondition->appendString(_SP)->appendString('LIKE "%%Search%"')->doToken('%Search', $_GET[ADMIN_ACTION_SEARCH]); } if (isset($_GET[ADMIN_ACTION_SORT])) { // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByUsername': case 'DescByUsername': // Set the order ... $objGetCondition->appendString(_SP)->appendString('ORDER BY %objAuthUsersTableFUName'); // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByUsername': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByUsername': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByEMail': case 'DescByEMail': // Set the order ... $objGetCondition->appendString(_SP)->appendString('ORDER BY %objAuthUsersTableFEML'); // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByEMail': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByEMail': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByGroup': case 'DescByGroup': // Set the order ... if (isset($_GET[ADMIN_ACTION_BY])) { $objGetCondition->appendString(_SP)->prependString('AS t1 LEFT JOIN %objAuthGroupTable AS t2 ON t1.%objAuthUsersTableFUGId = t2.%objAuthGroupTableFId '); } else { $objGetCondition->appendString(_SP)->appendString('AS t1 LEFT JOIN %objAuthGroupTable AS t2 ON t1.%objAuthUsersTableFUGId = t2.%objAuthGroupTableFId '); } // Add order by ... $objGetCondition->appendString(_SP)->appendString('ORDER BY t2.%objAuthGroupTableFName'); // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByGroup': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByGroup': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByRegistered': case 'DescByRegistered': // Set the order ... $objGetCondition->appendString(_SP)->appendString('ORDER BY %objAuthUsersTableFRegOn'); // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByRegistered': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByRegistered': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; } } // Make the unordered condition; $objGetCondition = $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Get the users ... $objUsersTable = $this->getUsers($objGetCondition); if (isset($_GET[ADMIN_ACTION_BY])) { $objUsersTableCount = $objUsersTable->doCount(); } else { $objUsersTableCount = $this->getUserCount(); } // Get each group for each user ... foreach ($objUsersTable as $k => $v) { $v['group_name'] = $this->getGroupInfoById($v[Authentication::$objAuthUsersTableFUGId], Authentication::$objAuthGroupTableFName); } // Fix pagination when count is LESS than 10; if (isset($_GET[ADMIN_ACTION_BY]) && isset($_GET[ADMIN_PAGINATION])) { if ($objUsersTableCount->toInt() < 10) { // Remove paging ... & redirect to proper ... TPL::setHeaderKey(URL::rewriteURL(new A(array(ADMIN_PAGINATION))), new S('Location')); } else { if (CEIL($objUsersTableCount->toInt() / 10) < (int) $_GET[ADMIN_PAGINATION]->toString()) { // Redirect to proper ... TPL::setHeaderKey(URL::rewriteURL(new A(array(ADMIN_PAGINATION)), new A(array(CEIL($objUsersTableCount->toInt() / 10)))), new S('Location')); } } } // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageUsers.tp'); TPL::tpSet($objUsersTable, new S('usersTable'), $tpF); TPL::tpSet($this->STG, new S('STG'), $tpF); TPL::tpExe($tpF); // Do them pagination ... if ($objUsersTableCount->toInt() > 10) { self::$objAdministration->setPagination($objUsersTableCount); } // Set a search form; $this->renderForm(new S('userSearch')); $this->renderForm(new S('userCreate')); } break; case 'manageGroups': // Add some requirements; TPL::manageJSS(new FilePath($this->getPathToSkinJSS()->toRelativePath() . 'manageGroups.js'), new S('manageCategories')); // Do specific actions, based on _GET parameters; if (isset($_GET[ADMIN_ACTION])) { switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('groupEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('groupErase')); break; case ADMIN_ACTION_MOVE: $this->renderForm(new S('groupMove')); break; } } else { // Do an empty SQL string; $objGetCondition = new S(); // Do a sorting, before anything else; if (isset($_GET[ADMIN_ACTION_SORT])) { switch ($_GET[ADMIN_ACTION_SORT]) { case 'DescByGroup': $objGetCondition->appendString(_SP)->appendString('DESC'); break; case 'AscByGroup': $objGetCondition->appendString(_SP)->appendString('ASC'); break; } } // Add some LIMITs; $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements; $objGroupTable = $this->getGroups(isset($_GET[ADMIN_SHOW_ALL]) ? new S() : $objGetCondition); $objGroupTableCount = $this->getGroupCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageGroups.tp'); TPL::tpSet($objGroupTable, new S('groupTree'), $tpF); TPL::tpExe($tpF); // Do them paginations ... if ($objGroupTableCount->toInt() > 10 && !isset($_GET[ADMIN_SHOW_ALL])) { self::$objAdministration->setPagination($objGroupTableCount); } // Do the form, make it happen; $this->renderForm(new S('groupCreate')); } break; case 'manageZones': // Do specific actions, based on _GET parameters; if (isset($_GET[ADMIN_ACTION])) { // Switch ... switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('zoneEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('zoneErase')); break; } } else { // Do a sorting beforehand; $objGetCondition = new S(); if (isset($_GET[ADMIN_ACTION_SORT])) { switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByZone': case 'DescByZone': // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByZone': $objGetCondition->appendString(_SP)->appendString(new S('ASC')); break; case 'DescByZone': $objGetCondition->appendString(_SP)->appendString(new S('DESC')); break; } break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements; $objZonesTable = $this->getZones($objGetCondition); $objZonesTableCount = $this->getZoneCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageZones.tp'); TPL::tpSet($objZonesTable, new S('zonesTable'), $tpF); TPL::tpExe($tpF); // Do them paginations ... if ($objZonesTableCount->toInt() > 10) { self::$objAdministration->setPagination($objZonesTableCount); } } break; case 'manageMappings': // Do specific actions, based on _GET parameters; if (isset($_GET[ADMIN_ACTION])) { switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('zoneMappingEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('zoneMappingErase')); break; } } else { // Do a sorting beforehand; $objGetCondition = new S(); if (isset($_GET[ADMIN_ACTION_SORT])) { // Switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByGroup': case 'DescByGroup': // Set some requirements; $objGetCondition->appendString(_SP)->appendString('AS t1 LEFT JOIN %objAuthGroupTable AS t2 ON t1.%objAuthZoneMTableFUGId = t2.%objAuthGroupTableFId ORDER BY t2.%objAuthGroupTableFName'); switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByGroup': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByGroup': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByZoneForGroup': case 'DescByZoneForGroup': // Set some requirements; $objGetCondition = new S('AS t1 LEFT JOIN %objAuthZonesTable AS t2 ON t1.%objAuthZoneMTableFZId = t2.%objAuthGroupTableFId ORDER BY t2.%objAuthZonesTableFName'); switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByZoneForGroup': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByZoneForGroup': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } break; } } // LIMIT only TO GROUP; if ($objGetCondition->toLength()->toInt() != 0) { $objGetCondition->doToken('ORDER', new S('WHERE %objAuthZoneMTableFIUG = "Y" ORDER')); } else { $objGetCondition = new S('WHERE %objAuthZoneMTableFIUG = "Y"'); } // Add SOME LIMITs; $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements; $objZoneMappings = $this->getZoneMappings($objGetCondition); $objMappingsTableCount = $this->getMappingCount(new S('WHERE %objAuthZoneMTableFIUG = "Y"')); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageMappings.tp'); TPL::tpSet($objZoneMappings, new S('zonesMappingsTableForGroup'), $tpF); TPL::tpExe($tpF); // Do pagination; if ($objMappingsTableCount->toInt() > 10) { self::$objAdministration->setPagination($objMappingsTableCount); } // Do the form, make it happen; $this->renderForm(new S('zoneMappingCreateForGroups')); } break; case 'manageMappingsForUsers': // Do specific actions, based on _GET parameters; if (isset($_GET[ADMIN_ACTION])) { switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('zoneMappingEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('zoneMappingErase')); break; } } else { // Do a sorting beforehand; $objGetUCondition = new S(); if (isset($_GET[ADMIN_ACTION_SORT])) { switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByZone': case 'DescByZone': // Set some requirements; $objGetUCondition = new S('AS t1 LEFT JOIN %objAuthZonesTable AS t2 ON t1.%objAuthZoneMTableFZId = t2.%objAuthUsersTableFId ORDER BY t2.%objAuthZonesTableFName'); switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByZone': $objGetUCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByZone': $objGetUCondition->appendString(_SP)->appendString('DESC'); break; } break; case 'AscByUsername': case 'DescByUsername': // Set some requirements; $objGetUCondition = new S('AS t1 LEFT JOIN %objAuthUsersTable AS t2 ON t1.%objAuthZoneMTableFUGId = t2.%objAuthUsersTableFId ORDER BY t2.%objAuthUsersTableFUName'); switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByUsername': $objGetUCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByUsername': $objGetUCondition->appendString(_SP)->appendString('DESC'); break; } break; } } // LIMIT ONLY to USERS; if ($objGetUCondition->toLength()->toInt() != 0) { $objGetUCondition->doToken('ORDER', new S('WHERE %objAuthZoneMTableFIUG = "N" ORDER')); } else { $objGetUCondition = new S('WHERE %objAuthZoneMTableFIUG = "N"'); } // Set some requirements; $objMappingsTableCount = $this->getMappingCount(new S('WHERE %objAuthZoneMTableFIUG = "N"')); $objZoneMappings = $this->getZoneMappings($objGetUCondition); // Set the template file; $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageMappingsForUsers.tp'); TPL::tpSet($objZoneMappings, new S('zonesMappingsTableForUsers'), $tpF); TPL::tpExe($tpF); // Do pagination; if ($objMappingsTableCount->toInt() > 10) { self::$objAdministration->setPagination($objMappingsTableCount); } // Do the form, make it happen; $this->renderForm(new S('zoneMappingCreateForUsers')); } // Break out; break; case 'manageConfiguration': if (isset($_GET[ADMIN_ACTION])) { $this->renderForm($_GET[ADMIN_ACTION]); } else { $this->renderForm(new S('configurationEdit')); } break; } }
/** * Will send the email, at the specified address, using the specified subject and content; * * This method will send out the given email and subject, to the given address, while decoding the content from entities; You, * as the user, SHOULD ALWAYS remember, that the content gets decoded in this method, thus allowing you to work with your * content where you've called it, without modifying it; * * @param S $objMAILTo The email to send it to; * @param S $objMAILSubject The subject to set; * @param S $objMAILContent And the content; * @todo CLEAN THIS URGENTLY! ... */ public function doMAIL(S $objMAILTo, S $objMAILSubject, S $objMAILContent) { // First of ALL, get a CLONE ... $objMAILClone = clone $objMAILContent; $objMAILClone = $objMAILClone->entityDecode(ENT_QUOTES)->stripTags(); // #0: proper MULTIPART; $objMAILContent->prependString(new S(_N_))->prependString(_S(self::MAIL_HEADER_CONTENT_ENCODING_SEVENBIT . _N_))->prependString(_S(self::MAIL_HEADER_CONTENT_TYPE_HTML . _N_))->prependString(_S(self::MAIL_HEADER_PHP_ALTERNATIVE . _N_)->doToken('%s', self::$objHASHId))->prependString(_S(_N_))->prependString(_S($objMAILClone . _N_))->prependString(_S(_N_))->prependString(_S(self::MAIL_HEADER_CONTENT_ENCODING_SEVENBIT . _N_))->prependString(_S(self::MAIL_HEADER_CONTENT_TYPE_PLAIN . _N_))->prependString(_S(self::MAIL_HEADER_PHP_ALTERNATIVE . _N_)->doToken('%s', self::$objHASHId))->prependString(_S(_N_))->prependString(_S(self::MAIL_HEADER_MULTIPART_ALTERNATIVE . _N_)->doToken('%s', self::$objHASHId))->prependString(_S(self::MAIL_HEADER_PHP_MIXED . _N_)->doToken('%s', self::$objHASHId)); // #4: ... end PLAIN and HTML ... $objMAILContent->appendString(_S(_N_))->appendString(_S(self::MAIL_HEADER_PHP_ALTERNATIVE_END . _N_)->doToken('%s', self::$objHASHId)); // #5: ... attachments; foreach (self::$objEMLAttachment as $k => $v) { // #5.1 $objMAILContent->appendString(_S(self::MAIL_HEADER_PHP_MIXED . _N_)->doToken('%s', self::$objHASHId))->appendString(_S(self::MAIL_HEADER_ATTACHMENT_TYPE_NAME . _N_)->doToken('%t', $v['attachment_type'])->doToken('%n', $v['attachment_name']))->appendString(_S(self::MAIL_HEADER_ENCODING_BASE64 . _N_))->appendString(_S(self::MAIL_HEADER_DISPOSITION_ATTACHMENT . _N_))->appendString(_S(_N_))->appendString($v['attachment_base64'])->appendString(_S(self::MAIL_HEADER_PHP_MIXED . _N_)->doToken('%s', self::$objHASHId)); } // Finish ... $objMAILContent->appendString(_S(_N_))->appendString(_S(self::MAIL_HEADER_PHP_MIXED_END)->doToken('%s', self::$objHASHId)); // Go ... everyhing IS ok and life's grand ... MAIL($objMAILTo, $objMAILSubject, $objMAILContent->entityDecode(ENT_QUOTES), self::$objFromHeader . self::$objReceiptTo . self::$objReplyTo . self::$objMIMEHeader . self::$objTypeHTML); }
/** * Will execute necessary SQL operations on the current form ... * * This method, setSQLOperationsOnForm, you don't need to know the internal workings of it. This is because, as you can see * it is a private method, and thus, it's used internally by the class, to achieve it's goals of execution. Just pass on * and read any other 'public' or 'protected' method out there ... * * @return object The current object instance; */ private static function setSQLOperationsOnForm() { if (isset(self::$objFormDataContainer['table_name'])) { if (isset(self::$objFormDataContainer['table_name']) && isset(self::$objUpdateWhere)) { $q = new S('SELECT * FROM %table WHERE %condition LIMIT 1'); $q->doToken('%table', self::$objFormDataContainer['table_name']); $q->doToken('%condition', self::$objUpdateWhere); if (self::getQuery($q)->doCount()->toInt() == 0) { self::$objFormDataContainer['update_or_insert'] = new S('insert'); } } // Do update; if (isset(self::$objFormDataContainer['update_or_insert']) && self::$objFormDataContainer['update_or_insert'] == new S('update')) { // Check to see if update_id is set. We can't update on something that doesn't exist! if (isset(self::$objUpdateWhere)) { // For each _SESSION['POST'] key, do an update ... foreach ($_SESSION['POST'] as $k => $v) { if (in_array($k, self::$objUpdateTableFields->toArray())) { $q = new S('UPDATE %table SET %who = "%what" WHERE %condition'); $q->doToken('%table', self::$objUpdateTableName)->doToken('%who', $k)->doToken('%what', $v)->doToken('%condition', self::$objUpdateWhere); self::getQuery($q); } } // Do additional SQLs ... foreach (self::$objOtherSQLData as $k => $v) { $q = new S('UPDATE %table SET %who = "%what" WHERE %condition'); $q->doToken('%table', self::$objUpdateTableName)->doToken('%who', $k)->doToken('%what', $v)->doToken('%condition', self::$objUpdateWhere); self::getQuery($q); } } } else { if (isset(self::$objFormDataContainer['update_or_insert']) && self::$objFormDataContainer['update_or_insert'] == new S('insert')) { if (isset(self::$objFormDataContainer['table_save_into'])) { $insertTableArray = self::$objFormDataContainer['table_save_into']; $insertTable = self::$objFormDataContainer['table_save_into']->toValues(); $insertTableCount = count($insertTable); for ($i = 0; $i < $insertTableCount; ++$i) { foreach ($_SESSION['POST'] as $k => $v) { if (isset($insertTableArray[$k]) && isset($insertTable[$i]) && $insertTableArray[$k] == $insertTable[$i]) { $detectedMULTIPLEInputs[$insertTable[$i]][] = $k; } } } foreach ($detectedMULTIPLEInputs as $k => $v) { $a = new A(); $q = new S('INSERT INTO %table SET' . _SP); $q->doToken('%table', $k); $detectedMULTIPLEInputs[$k] = array_unique($v); $tableFields = self::getFieldsFromTable(new S($k)); foreach ($_SESSION['POST'] as $kv => $vv) { $r = new S('%who = "%what"'); if (in_array($kv, $tableFields->toArray())) { $a[] = $r->doToken('%who', $kv)->doToken('%what', $vv); } } foreach (self::$objOtherSQLData as $k => $v) { $r = new S('%who = "%what"'); if (in_array($k, $tableFields->toArray())) { $a[] = $r->doToken('%who', $k)->doToken('%what', $v); } } $q->appendString(implode(', ', $a->toArray())); self::getQuery($q); } // Do for the native table ... if (isset(self::$objFormDataContainer['table_name'])) { $a = new A(); $q = new S('INSERT INTO %table SET' . _SP); $q->doToken('%table', self::$objFormDataContainer['table_name']); $tableFields = self::getFieldsFromTable(self::$objFormDataContainer['table_name']); foreach ($_SESSION['POST'] as $k => $v) { if (in_array($k, $tableFields->toArray())) { $r = new S('%who = "%what"'); $a[] = $r->doToken('%who', $k)->doToken('%what', $v); } } foreach (self::$objOtherSQLData as $k => $v) { $r = new S('%who = "%what"'); if (in_array($k, $tableFields->toArray())) { $a[] = $r->doToken('%who', $k)->doToken('%what', $v); } } $q->appendString(implode(', ', $a->toArray())); self::getQuery($q); } } else { $a = new A(); $q = new S('INSERT INTO %table SET' . _SP); $q->doToken('%table', self::$objFormDataContainer['table_name']); $tableFields = self::getFieldsFromTable(self::$objFormDataContainer['table_name']); foreach ($_SESSION['POST'] as $k => $v) { $r = new S('%who = "%what"'); if (in_array($k, $tableFields->toArray())) { $a[] = $r->doToken('%who', $k)->doToken('%what', $v); } } foreach (self::$objOtherSQLData as $k => $v) { $r = new S('%who = "%what"'); if (in_array($k, $tableFields->toArray())) { $a[] = $r->doToken('%who', $k)->doToken('%what', $v); } } // Just do it; $q->appendString(implode(', ', $a->toArray())); self::getQuery($q); } } } } }
/** * Will render a specified form, the name of the form given by the first parameter; * * This method will render one of the forms for our object, invoked by giving the proper form identifier to the current form. * We have chosen this method of invoking forms, because we just had too many this->renderSomethingMethod (), which really had * an impact on code massiveness. Also, having code organized in switch/case statements leads us to be able to share common * settings between different forms, as we've done with the methods defined in the __CALL method above; * * For example, if we wanted to share some common configuration between a create and an edit form, we could have introduced * two switches in this method, one that would have set the common options, and the second, would have just passed through * again, and get the already set configuration options, using them. This means that if we needed to change behavior of * some interconnected forms, that would mean modifying the needed code one place only, which is a big advantage over * having separated methods for each form. Maybe if we extended this object, you guys could understand the functionality; * * @param string $objFormToRender The name of the form to render; * @return mixed Depends on the rendered form if it returns something or not; */ public function renderBackendPage(S $objPageToRender) { // Get a specific CSS file for this controller ... TPL::manageCSS(new FilePath($this->getPathToSkinCSS()->toRelativePath() . $objPageToRender . CSS_EXTENSION), $objPageToRender); // Do pagination ... if (isset($_GET[ADMIN_PAGINATION])) { $objLowerLimit = (int) $_GET[ADMIN_PAGINATION]->toString() * 10 - 10; $objUpperLimit = 10; } else { $objLowerLimit = 0; $objUpperLimit = 10; } // Do a switch on the rendered page ... switch ($objPageToRender) { case 'manageLyrics': // Do some work; if (isset($_GET[ADMIN_ACTION])) { // Do a switch; switch ($_GET[ADMIN_ACTION]) { case ADMIN_ACTION_EDIT: $this->renderForm(new S('lyricEdit')); break; case ADMIN_ACTION_ERASE: $this->renderForm(new S('lyricErase')); break; } } else { // Redirect to DescByDateAdded ... if (!isset($_GET[ADMIN_ACTION_SORT])) { $this->setHeaderKey(URL::rewriteURL(new A(array(ADMIN_ACTION_SORT)), new A(array('DescByDateAdded'))), new S('Location')); } // Set some requirements ... $objGetCondition = new S(); // Do a sorting beforehand; if (isset($_GET[ADMIN_ACTION_SORT])) { // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': case 'DescByTitle': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLyricsTableFTitle'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByTitle': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByTitle': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // BK; break; case 'AscByArtist': case 'DescByArtist': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLyricsTableFArtist'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByArtist': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByArtist': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // BK; break; case 'AscByAlbum': case 'DescByAlbum': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLyricsTableFAlbum'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByAlbum': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByAlbum': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // BK; break; case 'AscByDateAdded': case 'DescByDateAdded': $objGetCondition->appendString(_SP)->appendString('ORDER BY %objLyricsTableFDateAdded'); // Do a switch ... switch ($_GET[ADMIN_ACTION_SORT]) { case 'AscByDateAdded': $objGetCondition->appendString(_SP)->appendString('ASC'); break; case 'DescByDateAdded': $objGetCondition->appendString(_SP)->appendString('DESC'); break; } // BK; break; } } // Add some LIMITs $objGetCondition->appendString(_SP)->appendString('LIMIT %LowerLimit, %UpperLimit')->doToken('%LowerLimit', $objLowerLimit)->doToken('%UpperLimit', $objUpperLimit); // Set some requirements ... $objLyricTable = $this->getLyrics($objGetCondition); $objLyricTableCount = $this->getLyricCount(); // Set the template file ... $tpF = new FilePath($this->getPathToSkin()->toRelativePath() . 'manageLyrics.tp'); TPL::tpSet($objLyricTable, new S('lyricTable'), $tpF); TPL::tpSet($this->ATH, new S('ATH'), $tpF); TPL::tpSet($this->STG, new S('STG'), $tpF); TPL::tpExe($tpF); // Do some pagination; if ($objLyricTableCount->toInt() > 10) { self::$objAdministration->setPagination($objLyricTableCount); } // Do the form, make it happen; $this->renderForm(new S('lyricCreate')); } // BK; break; } }