| Current Path : /home/bateauecpx/www/administrator/components/com_jevents/controllers/ |
| Current File : /home/bateauecpx/www/administrator/components/com_jevents/controllers/defaults.php |
<?php
/**
* JEvents Component for Joomla! 3.x
*
* @version $Id: defaults.php 3308 2012-02-28 10:13:19Z geraintedwards $
* @package JEvents
* @copyright Copyright (C) 2008-2019 GWE Systems Ltd
* @license GNU/GPLv2, see http://www.gnu.org/licenses/gpl-2.0.html
* @link http://www.jevents.net
*/
defined( 'JPATH_BASE' ) or die( 'Direct Access to this location is not allowed.' );
jimport('joomla.application.component.controllerform');
class AdminDefaultsController extends JControllerForm {
/**
* Controler for the Control Panel
* @param array configuration
*/
function __construct($config = array())
{
parent::__construct($config);
if (!JEVHelper::isAdminUser())
{
JFactory::getApplication()->redirect("index.php?option=" . JEV_COM_COMPONENT . "&task=cpanel.cpanel", "Not Authorised - must be admin");
return;
}
$this->registerTask( 'list', 'overview' );
$this->registerTask( 'new', 'edit' );
$this->registerTask( 'save', 'apply' );
$this->registerDefaultTask("overview");
// Make sure DB is up to date
$db = JFactory::getDbo();
$db->setQuery("SELECT * FROM #__jev_defaults");
$defaults =$db->loadObjectList("name");
if (!isset($defaults['icalevent.detail_body'])){
$db->setQuery("INSERT INTO #__jev_defaults set name='icalevent.detail_body',
title=".$db->Quote("JEV_EVENT_DETAIL_PAGE").",
subject='',
value='',
state=0");
$db->execute();
}
else {
$db->setQuery("UPDATE #__jev_defaults set title=".$db->Quote("JEV_EVENT_DETAIL_PAGE")." WHERE name='icalevent.detail_body'");
$db->execute();
}
if (!isset($defaults['icalevent.edit_page'])){
$db->setQuery("INSERT INTO #__jev_defaults set name='icalevent.edit_page',
title=".$db->Quote("JEV_EVENT_EDIT_PAGE").",
subject='',
value='',
state=0");
$db->execute();
}
else {
$db->setQuery("UPDATE #__jev_defaults set title=".$db->Quote("JEV_EVENT_EDIT_PAGE")." WHERE name='icalevent.edit_page'");
$db->execute();
}
if (!isset($defaults['icalevent.list_row'])){
$db->setQuery("INSERT INTO #__jev_defaults set name='icalevent.list_row',
title=".$db->Quote("JEV_EVENT_LIST_ROW").",
subject='',
value='',
state=0");
$db->execute();
}
else {
$db->setQuery("UPDATE #__jev_defaults set title=".$db->Quote("JEV_EVENT_LIST_ROW")." WHERE name='icalevent.list_row'");
$db->execute();
}
if (!isset($defaults['month.calendar_cell'])){
$db->setQuery("INSERT INTO #__jev_defaults set name='month.calendar_cell',
title=".$db->Quote("JEV_EVENT_MONTH_CALENDAR_CELL").",
subject='',
value='',
state=0");
$db->execute();
}
else {
$db->setQuery("UPDATE #__jev_defaults set title=".$db->Quote("JEV_EVENT_MONTH_CALENDAR_CELL")." WHERE name='month.calendar_cell'");
$db->execute();
}
if (!isset($defaults['month.calendar_tip'])){
$db->setQuery("INSERT INTO #__jev_defaults set name='month.calendar_tip',
title=".$db->Quote("JEV_EVENT_MONTH_CALENDAR_TIP").",
subject='',
value='',
state=0");
$db->execute();
}
else {
$db->setQuery("UPDATE #__jev_defaults set title=".$db->Quote("JEV_EVENT_MONTH_CALENDAR_TIP")." WHERE name='month.calendar_tip'");
$db->execute();
}
/*
* Edit Page config must wait for plugins to be updated!
if (!isset($defaults['icalevent.edit_page'])){
$db->setQuery("INSERT INTO #__jev_defaults set name='icalevent.edit_page',
title=".$db->Quote(JText::_("JEV_EVENT_EDIT_PAGE")).",
subject='',
value='',
state=0");
$db->execute();
}
else {
$db->setQuery("UPDATE #__jev_defaults set title=".$db->Quote(JText::_("JEV_EVENT_EDIT_PAGE"))." WHERE name='icalevent.edit_page'");
$db->execute();
}
*/
}
/**
* List Ical Events
*
*/
function overview( )
{
$this->populateLanguages();
$this->populateCategories();
// get the view
$this->view = $this->getView("defaults","html");
// Set the layout
$this->view->setLayout('overview');
// Get/Create the model
if ($model = $this->getModel("defaults", "defaultsModel")) {
// Push the model into the view (as default)
$this->view->setModel($model, true);
}
$this->view->overview();
}
function edit($key = NULL, $urlVar = NULL){
// get the view
$this->view = $this->getView("defaults","html");
// Set the layout
$this->view->setLayout('edit');
// Get/Create the model
if ($model = $this->getModel("default", "defaultsModel")) {
// Push the model into the view (as default)
$this->view->setModel($model, true);
}
$this->view->edit();
} // editdefaults()
function cancel($key = NULL){
$this->setRedirect(JRoute::_("index.php?option=".JEV_COM_COMPONENT."&task=defaults.overview",false) );
$this->redirect();
}
function unpublish(){
$jinput = JFactory::getApplication()->input;
$db= JFactory::getDbo();
$cid = $jinput->get("cid", array(), "array");
if (count($cid)!=1) {
$this->setRedirect(JRoute::_("index.php?option=".JEV_COM_COMPONENT."&task=defaults.overview",false) );
$this->redirect();
return;
}
$name = $cid[0];
$sql = "UPDATE #__jev_defaults SET state=0 where id=".$db->Quote($name);
$db->setQuery($sql);
$db->execute();
$this->setRedirect(JRoute::_("index.php?option=".JEV_COM_COMPONENT."&task=defaults.overview",false) );
$this->redirect();
}
function publish(){
$db= JFactory::getDbo();
$jinput = JFactory::getApplication()->input;
$cid = $jinput->get("cid",array(), "array");
if (count($cid)!=1) {
$this->setRedirect(JRoute::_("index.php?option=".JEV_COM_COMPONENT."&task=defaults.overview",false) );
$this->redirect();
return;
}
$name = $cid[0];
// Check if the layout is the same as the default value - if it is then do NOT publish it
$sql = "SELECT * FROM #__jev_defaults where id=".$db->Quote($name);
$db->setQuery($sql);
$value = $db->loadObject();
$defaultvalue = "";
$componentname = explode(".",$value->name ,2);
$componentname = $componentname[0];
if (JevJoomlaVersion::isCompatible("3.0.0"))
{
if ($defaultvalue == "" && file_exists(JPATH_ADMINISTRATOR . '/components/'. $componentname .'/views/defaults/tmpl/' . $value->name . ".3.html"))
{
$defaultvalue = file_get_contents(JPATH_ADMINISTRATOR . '/components/'. $componentname .'/views/defaults/tmpl/' . $value->name . ".3.html");
}
}
if ($defaultvalue == "" && file_exists(JPATH_ADMINISTRATOR . '/components/'. $componentname .'/views/defaults/tmpl/' . $value->name . ".html"))
{
$defaultvalue = file_get_contents(JPATH_ADMINISTRATOR . '/components/'. $componentname .'/views/defaults/tmpl/' . $value->name . ".html");
}
if (str_replace(" ", "",$defaultvalue)==str_replace(" ","",$value->value) || $value->value=="") {
JFactory::getApplication()->enqueueMessage(JText::_("JEV_LAYOUT_IS_DEFAULT_NOT_PUBLISHED", "WARNING"));
$this->setRedirect(JRoute::_("index.php?option=".JEV_COM_COMPONENT."&task=defaults.overview",false) );
$this->redirect();
return;
}
$sql = "UPDATE #__jev_defaults SET state=1 where id=".$db->Quote($name);
$db->setQuery($sql);
$db->execute();
$this->setRedirect(JRoute::_("index.php?option=".JEV_COM_COMPONENT."&task=defaults.overview",false) );
$this->redirect();
}
/**
* Saves the Session Record
*/
function save($key = NULL, $urlVar = NULL) {
$jinput = JFactory::getApplication()->input;
$id = $jinput->getInt("id",0);
if ($id >0 ){
// Get/Create the model
if ($model = $this->getModel("default", "defaultsModel")) {
//TODO find a work around for getting post array with JInput.
if ($model->store(JRequest::get("post",JREQUEST_ALLOWRAW))){
if ($jinput->getCmd("task") == "defaults.apply"){
$this->setRedirect("index.php?option=".JEV_COM_COMPONENT."&task=defaults.edit&id=$id",JText::_("JEV_TEMPLATE_SAVED"));
$this->redirect();
return;
}
$this->setRedirect("index.php?option=".JEV_COM_COMPONENT."&task=defaults.overview",JText::_("JEV_TEMPLATE_SAVED"));
$this->redirect();
return;
}
else {
echo "<script> alert('".$model->getErrorMessage()."'); window.history.go(-1); </script>\n";
exit();
}
}
}
}
private function populateLanguages() {
$db = JFactory::getDbo();
// get the list of languages first
$query = $db->getQuery(true);
$query->select("l.*");
$query->from("#__languages as l");
$query->where('l.lang_code <> "xx-XX"');
$query->order("l.lang_code asc");
$db->setQuery($query);
$languages = $db->loadObjectList('lang_code');
// remove ones where the language is no longer installed
$query = $db->getQuery(true);
$langcodes = array();
$langcodes[] = $db->quote("*");
foreach ($languages as $lang){
$langcodes[] = $db->quote($lang->lang_code);
}
$langcodes = implode(",",$langcodes);
$query->delete('#__jev_defaults')->where("language NOT IN ($langcodes)");
$db->setQuery($query);
$db->execute();
// not needed if only one language
if (count($languages )==1){
return;
}
// Clean up bad data
$query = $db->getQuery(true);
$query->select("count(id) as duplicatecount, name, language, catid");
$query->from("#__jev_defaults as def");
$query->group("name, language, catid");
$query->having("duplicatecount > 1");
$db->setQuery($query);
$xxx = (string) $db->getQuery();
$duplicates = $db->loadObjectList();
if ( count($duplicates)) {
foreach ($duplicates as $duplicate)
{
$query = $db->getQuery(true);
$query->select("id, state, name, language, value");
$query->from("#__jev_defaults as def");
$query->where('def.name ='.$db->quote($duplicate->name));
$query->where('def.catid ='.$db->quote($duplicate->catid));
$query->where('def.language ='.$db->quote($duplicate->language));
$query->order("name, language, state desc, id desc");
$db->setQuery($query);
$duplicatedetails = $db->loadObjectList();
if (count($duplicatedetails)==$duplicate->duplicatecount){
// Keep the most up to date published entry
if ($duplicatedetails[0]->state==1) {
$dupids = array();
for ($d=1; $d<$duplicate->duplicatecount; $d++) {
$dupids[] = $duplicatedetails[$d]->id;
}
if (count($dupids)>0) {
$query = $db->getQuery(true);
$query->delete("#__jev_defaults");
$query->where("id in (".implode(",", $dupids).")");
$db->setQuery($query);
//var_dump($duplicate);
//echo "<hr/>";
//echo (string) $db->getQuery();exit();
$db->execute();
}
}
else {
// sort by descending value
usort($duplicatedetails, function($a, $b){ return -1 * strcmp($a->value, $b->value);});
$dupids = array();
for ($d=1; $d<$duplicate->duplicatecount; $d++) {
$dupids[] = $duplicatedetails[$d]->id;
}
if (count($dupids)>0) {
$query = $db->getQuery(true);
$query->delete("#__jev_defaults");
$query->where("id in (".implode(",", $dupids).")");
$db->setQuery($query);
//var_dump($duplicate);
//echo "<hr/>";
//echo (string) $db->getQuery();exit();
$db->execute();
}
}
}
}
}
$query = $db->getQuery(true);
$query->select("def.*");
$query->from("#__jev_defaults as def");
$query->where('def.language = "*"');
$query->order("def.title asc");
$db->setQuery($query);
$allLanguageTitles = $db->loadObjectList();
$query = $db->getQuery(true);
$query->select("def.*");
$query->from("#__jev_defaults as def");
$query->where('def.language <> "*"');
$query->order("def.title, language asc");
$db->setQuery($query);
$specificLanguageTitles = $db->loadObjectList();
$missingDefaults = array();
foreach ($allLanguageTitles as $title){
foreach ($languages as $lang_code=>$lang){
$matched = false;
foreach ($specificLanguageTitles as $stitle){
if ($title->name == $stitle->name && $stitle->language == $lang_code){
$matched = true;
break;
}
}
if (!$matched){
$missingDefaults[] = array("lang_code"=>$lang_code, "title"=>$title);
}
}
}
if (count ($missingDefaults)>0){
$query = $db->getQuery(true);
$query->insert("#__jev_defaults")->columns("title, name, subject,value,state,params,language");
foreach ($missingDefaults as $md){
$values = array($db->quote($md["title"]->title), $db->quote($md["title"]->name), $db->quote($md["title"]->subject), $db->quote($md["title"]->value), 0, $db->quote($md["title"]->params), $db->quote($md["lang_code"]));
$query->values(implode(",",$values));
}
$db->setQuery($query);
$db->execute();
}
//echo $db->getgetErrorMsg();
}
private function populateCategories() {
$db = JFactory::getDbo();
// get the list of categories first
$query = $db->getQuery(true);
$query->select("c.*");
$query->from("#__categories as c");
$query->where('extension="com_jevents"');
$query->where('published=1');
$query->order("c.title asc");
$db->setQuery($query);
$categories = $db->loadObjectList('id');
// remove ones where the category is no longer installed
$query = $db->getQuery(true);
$cats = array();
$cats[0] = $db->quote("0");
foreach ($categories as $cat){
$cats[$cat->id] = $db->quote($cat->id);
}
$incats = implode(",",$cats);
$query->delete('#__jev_defaults')->where("catid NOT IN ($incats)");
$db->setQuery($query);
$db->execute();
// not needed if only one category
if (count($cats )==1){
return;
}
$query = $db->getQuery(true);
$query->select("def.*");
$query->from("#__jev_defaults as def");
//$query->where('def.language = "*"');
$query->where('def.catid = "0"');
$query->where('def.name NOT like ("com_jevpeople%") AND def.name NOT like ("com_jevlocations%")' );
$query->order("def.name asc");
$db->setQuery($query);
$tempdata = $db->loadObjectList();
$allCatidNames = array();
foreach ($tempdata as $td){
if (!isset($allCatidNames[$td->name])){
$allCatidNames[$td->name] = array();
}
$allCatidNames[$td->name][] = $td;
}
$query = $db->getQuery(true);
$query->select("def.*");
$query->from("#__jev_defaults as def");
$query->where('def.catid<> "0"');
$query->where('def.name NOT like ("com_jevpeople%") AND def.name NOT like ("com_jevlocations%")' );
$query->order("def.name, catid asc");
$db->setQuery($query);
$catdata = $db->loadObjectList();
$specificCategoryNames = array();
foreach ($catdata as $cat){
if (!isset($specificCategoryNames[$cat->name])){
$specificCategoryNames[$cat->name] = array();
}
$specificCategoryNames[$cat->name][$cat->catid.".".$cat->language] = $cat;
}
$missingDefaults = array();
foreach ($allCatidNames as $name => $namedata){
// all language versions to check and populate
if (!isset($specificCategoryNames[$name])) {
foreach ($cats as $catid=>$cat){
if ($catid==0) continue;
foreach ($namedata as $nd){
$missingDefaults[] = array("catid"=>$catid, "lang_code"=>$nd->language, "name"=>$nd);
//echo $nd->name." ".$catid." ".$nd->language."<Br/>";
}
}
}
else {
foreach ($namedata as $nd){
foreach ($cats as $catid=>$cat){
if ($catid==0) continue;
$matched = false;
foreach ($specificCategoryNames[$name] as $sname){
if ($nd->name == $sname->name && $nd->language == $sname->language && $sname->catid == $catid){
$matched = true;
break;
}
}
if (!$matched){
$missingDefaults[] = array("catid"=>$catid, "lang_code"=>$nd->language, "name"=>$nd);
//echo $nd->name." ".$catid." ".$nd->language."<Br/>";
}
}
}
}
/*
foreach ($namedata as $allcat){
if ( $catid == $sname->catid){
$matched = false;
foreach ($specificCategoryNames as $sname){
if ($name->name == $sname->name && $name->language == $sname->language ){
$matched = true;
$count++;
break;
}
}
if (!$matched){
$missingDefaults[] = array("catid"=>$catid, "lang_code"=>$name->language, "name"=>$name);
}
}
}
}
*/
}
if (count ($missingDefaults)>0){
$query = $db->getQuery(true);
$query->insert("#__jev_defaults")->columns("title, name, subject,value,state,params,language, catid");
foreach ($missingDefaults as $md){
$values = array($db->quote($md["name"]->title), $db->quote($md["name"]->name), $db->quote($md["name"]->subject), $db->quote($md["name"]->value), 0, $db->quote($md["name"]->params), $db->quote($md["lang_code"]), $md["catid"]);
$query->values(implode(",",$values));
}
$db->setQuery($query);
$db->execute();
}
echo $db->getErrorMsg();
}
}