395 Zeilen
12 KiB
PHP
395 Zeilen
12 KiB
PHP
<?php
|
|
/**
|
|
* Project:
|
|
* Contenido Content Management System
|
|
*
|
|
* Description:
|
|
* Contenido class for handling cms type date. This cms type allows to select date with DHTML Calendar
|
|
* it is also possible to select a format in which the date is displayed. It is also possible to display date
|
|
* and time. This class is an example how to handle contenido cms type in a class. In database this class
|
|
* is called in cms type cms_date. JavaScript handling of DHTML Calendar is handled in contenido
|
|
* js calendar class CmsDate.js
|
|
*
|
|
* Requirements:
|
|
* @con_php_req 5.0
|
|
* @con_notice Js class CmsDate.js required
|
|
*
|
|
*
|
|
* @package Contenido Backend
|
|
* @version 1.0.3
|
|
* @author Bilal Arslan, Timo Trautmann
|
|
* @copyright four for business AG <www.4fb.de>
|
|
* @license http://www.contenido.org/license/LIZENZ.txt
|
|
* @link http://www.4fb.de
|
|
* @link http://www.contenido.org
|
|
* @since file available since contenido release <= 4.8.7
|
|
*
|
|
* {@internal
|
|
* created 2007-07-14 Bilal Arslan, Timo Trautmann
|
|
* modified 2008-07-28 Bilal Arslan, added new Date format timestamp
|
|
* modified 2009-04-14 OliverL, added class in Edit- & Save-Link
|
|
* $Id
|
|
* }}
|
|
*
|
|
*/
|
|
|
|
if(!defined('CON_FRAMEWORK')) {
|
|
die('Illegal call');
|
|
}
|
|
|
|
class Cms_Date{
|
|
|
|
/**
|
|
* Contains user input of cms_type
|
|
* @access private
|
|
*/
|
|
private $sContent;
|
|
|
|
/**
|
|
* The format value for the calendar
|
|
* @access private
|
|
*/
|
|
private $aFormat;
|
|
|
|
/**
|
|
* The number of cms_date[?] parameter
|
|
* @access private
|
|
*/
|
|
private $iNumberOfCms;
|
|
|
|
/**
|
|
* The output javascript
|
|
* @access private
|
|
*/
|
|
private $sJS;
|
|
|
|
/**
|
|
* The the static variable, controlls howmuch object exists
|
|
* @access private
|
|
*/
|
|
private static $iNumOutput;
|
|
|
|
/**
|
|
* The contenido global
|
|
* @access private
|
|
*/
|
|
private $iIdArtLang;
|
|
|
|
/**
|
|
* The contenido Edit link
|
|
* @access private
|
|
*/
|
|
private $sEditLink;
|
|
|
|
/**
|
|
* The contenido global
|
|
* @access private
|
|
*/
|
|
private $aCfg;
|
|
|
|
/**
|
|
* The CmsDate object for call cmsDate functions
|
|
* @access private
|
|
*/
|
|
private $sCalName;
|
|
|
|
/**
|
|
* The contenido database object
|
|
* @access private
|
|
*/
|
|
private $oDB;
|
|
|
|
/**
|
|
* Input Field Id
|
|
* @access private
|
|
*/
|
|
private $sEditAreaId;
|
|
|
|
/**
|
|
* the id of Div Element select box
|
|
* @access private
|
|
*/
|
|
private $sDivSelectId;
|
|
|
|
/**
|
|
*
|
|
* The id of select box
|
|
* @access private
|
|
*/
|
|
private $sSelectId;
|
|
|
|
/**
|
|
*
|
|
* Total count of cms_date
|
|
* @access private
|
|
*/
|
|
private $iTotalCount;
|
|
|
|
/**
|
|
* Language of contenido
|
|
* @access private
|
|
*/
|
|
private $sContenidoLang;
|
|
|
|
/**
|
|
* The Cms_Date object constructor, initializes class variables
|
|
*
|
|
* @param {string} $sContent
|
|
* @param {integer} $iNumberOfCms
|
|
* @param {integer} $iIdArtLang
|
|
* @param {string} $sEditLink
|
|
* @param {Object} $aCfg
|
|
* @param {Object} $aDB
|
|
*/
|
|
public function __construct($sContent, $iNumberOfCms, $iIdArtLang, $sEditLink, $aCfg, $aDB, $iTotalCount, $sContenidoLang){
|
|
|
|
$this->iNumberOfCms = $iNumberOfCms;
|
|
$this->iIdArtLang = $iIdArtLang;
|
|
$this->sEditLink = $sEditLink;
|
|
$this->aCfg = $aCfg;
|
|
|
|
// static number for objects
|
|
Cms_Date::$iNumOutput++;
|
|
$this->sCalName = "oCalId".Cms_Date::$iNumOutput;
|
|
$this->oDB = $aDB;
|
|
$this->sEditAreaId = "";
|
|
$this->sDivSelectId = "";
|
|
// if is empty, fill it with space character. Thats important for contenido input area!
|
|
($sContent == "") ? $this->sContent = " " : $this->sContent = urldecode($sContent);
|
|
$this->sSelectId = "";
|
|
$this->iTotalCount = $iTotalCount;
|
|
$this->sJS = "";
|
|
$this->sContenidoLang = $sContenidoLang;
|
|
}
|
|
|
|
/**
|
|
* Edit and View all Widgets. This function is calling in edit mode
|
|
*
|
|
* @return the all widgets
|
|
*/
|
|
public function getAllWidgetEdit(){
|
|
|
|
$this->sContent = urldecode($this->sContent);
|
|
$this->sContent = AddSlashes(AddSlashes($this->sContent));
|
|
$this->sContent = str_replace("\\\'", "'", $this->sContent);
|
|
$this->sContent = str_replace("\$", '\\\$', $this->sContent);
|
|
|
|
// Render all Widgetes
|
|
$this->sContent = $this->getEditingField() . $this->getCalendarButton() . $this->getOkButton() . $this->getSelectBox() . $this->getJsScript();
|
|
return urldecode($this->sContent);
|
|
}
|
|
|
|
/**
|
|
* This function modified cms_content before it is displayed in frontend.
|
|
* In this case this function is a dummy.
|
|
*
|
|
* @return Returns user input of cms_type
|
|
*/
|
|
public function getAllWidgetView(){
|
|
|
|
return $this->sContent;
|
|
}
|
|
|
|
/**
|
|
* This function set the date format for select-box.
|
|
* Function displays current day format.
|
|
* For edit or add formats modified this function.
|
|
*
|
|
* @return the format as an array
|
|
*/
|
|
private function getDateFormats(){
|
|
|
|
$sMonthName = "";
|
|
$sDayName = "";
|
|
$sMonthName = getCanonicalMonth(date('m'));
|
|
$sDayName = getCanonicalDay(date('w'));
|
|
$iDay = date('d');
|
|
$iMonth = date('m');
|
|
$iYear = date("Y");
|
|
$iYearShort = date("y");
|
|
|
|
$this->aFormat = array(
|
|
array("0",i18n("Please Choose Format")),
|
|
array("%d.%m.%Y", date('d.m.Y')),
|
|
array("%A, %d.%m.%Y", $sDayName . ', ' . $iDay .'.'. $iMonth .'.'. $iYear ),
|
|
array("%d. %B %Y", $iDay.'. ' .$sMonthName. ' '. $iYear),
|
|
array("%Y-%m-%d",date('Y-m-d')),
|
|
array("%y-%m-%d",date('y-m-d')),
|
|
array("%d/%B/%Y",$iDay .'/'. $sMonthName .'/'. $iYear),
|
|
array("%d/%m/%y", date('d/m/y')),
|
|
array("%B %y", $sMonthName . " ". $iYearShort),
|
|
array("%B-%y", $sMonthName . "-". $iYearShort),
|
|
array("%d.%m.%Y %H:%M",date('d.m.Y H:i')),
|
|
array("%m.%d.%Y %H:%M:%S",date('d.m.Y H:i:s')),
|
|
array("%H:%M",date('H:i')),
|
|
array("%H:%M:%S",date('H:i:s')),
|
|
array("%l:%M %P",date('h:i A')),
|
|
array("%l:%M:%S %P",date('h:i:s A')),
|
|
array("%s", "Timestamp")
|
|
);
|
|
|
|
|
|
return $this->aFormat;
|
|
}
|
|
|
|
/**
|
|
* This functions given all js-script, what we need for calendar.
|
|
* Set all js-script here
|
|
*
|
|
* @return (String) js-script
|
|
*/
|
|
public function getJsScript(){
|
|
|
|
// include only one time this js script
|
|
if(Cms_Date::$iNumOutput < 2){
|
|
$this->sJS .= ' <link href="'.$this->aCfg['path']['contenido_fullhtml'].'scripts/jscalendar/calendar-contenido.css" rel="stylesheet" type="text/css"/>';
|
|
$this->sJS .= ' <script type="text/javascript" src="'.$this->aCfg['path']['contenido_fullhtml'].'scripts/jscalendar/calendar.js"></script>';
|
|
$this->sJS .= ' <script type="text/javascript" src="'.$this->aCfg['path']['contenido_fullhtml'].'scripts/jscalendar/lang/calendar-'.$this->getLanguageContenido().'.js"></script>';
|
|
$this->sJS .= ' <script type="text/javascript" src="'.$this->aCfg['path']['contenido_fullhtml'].'scripts/jscalendar/calendar-setup.js"></script>';
|
|
$this->sJS .= '<script type="text/javascript" src="'.$this->aCfg['path']['contenido_fullhtml'].'/scripts/cmsDate.js"></script>';
|
|
}
|
|
|
|
$this->sJS .= '<script type="text/javascript">';
|
|
$this->sJS .= "var $this->sCalName = new CmsDate('".$this->sEditAreaId."', '%d.%m.%Y %H:%M', '24', true, '".$this->sDivSelectId."', '".$this->aCfg['path']['contenido_fullhtml']."','".$this->sSelectId."');";
|
|
$this->sJS .= '</script>';
|
|
|
|
// output
|
|
$this->sJS = AddSlashes(AddSlashes($this->sJS));
|
|
$this->sJS = str_replace("\\\'", "'", $this->sJS);
|
|
|
|
return $this->sJS;
|
|
}
|
|
|
|
/**
|
|
* This function builds a Contenido CMS Widget.
|
|
* A Button for Calendar.
|
|
*
|
|
* @return (String)calendar Button widget
|
|
*/
|
|
private function getCalendarButton(){
|
|
|
|
// html link for save
|
|
$oEditAnchor = new cHTMLLink;
|
|
$oEditAnchor->setClass('CMS_DATE_'.($this->iNumberOfCms).'_EDIT CMS_LINK_EDIT');
|
|
$oEditAnchor->setLink("javascript:setcontent('$this->iIdArtLang','" . $this->sEditLink . "');");
|
|
// Calendar Button
|
|
$oEditButton = new cHTMLImage;
|
|
$oEditButton->setSrc($this->aCfg["path"]["contenido_fullhtml"] . $this->aCfg["path"]["images"] . "calendar.gif");
|
|
$oEditButton->setBorder(0);
|
|
$oEditButton->setStyleDefinition("margin-right", "2px");
|
|
$oEditButton->setClass('CMS_DATE_'.($this->iNumberOfCms).'_EDIT CMS_LINK_EDIT');
|
|
$oEditButton->setID("trigger_start" . $this->iNumberOfCms);
|
|
$oEditButton->setEvent("Click", "$this->sCalName.showCalendar()");
|
|
$oEditAnchor->setContent($oEditButton);
|
|
$sFinalEditButton = $oEditButton->render();
|
|
$sFinalEditButton = AddSlashes(AddSlashes($sFinalEditButton));
|
|
$sFinalEditButton = str_replace("\\\'", "'", $sFinalEditButton);
|
|
|
|
return $sFinalEditButton;
|
|
}
|
|
|
|
/**
|
|
* This function builds a Contenido CMS Widget.
|
|
* A Button for Submit (OK-Button).
|
|
*
|
|
* @return (String)Ok Button widget
|
|
*/
|
|
private function getOkButton(){
|
|
|
|
// Ok Image
|
|
$oSaveAnchor = new cHTMLLink;
|
|
$oSaveAnchor->setClass('CMS_DATE_'.($this->iNumberOfCms).'_SAVE CMS_LINK_SAVE');
|
|
$oSaveAnchor->setLink("javascript:setcontent('".$this->iIdArtLang."','0')");
|
|
$oSaveButton = new cHTMLImage;
|
|
$oSaveButton->setSrc($this->aCfg["path"]["contenido_fullhtml"].$this->aCfg["path"]["images"]."but_ok.gif");
|
|
$oSaveButton->setBorder(0);
|
|
$oSaveAnchor->setContent($oSaveButton);
|
|
$sFinalSaveButton = $oSaveAnchor->render();
|
|
$sFinalSaveButton = AddSlashes(AddSlashes($sFinalSaveButton));
|
|
$sFinalSaveButton = str_replace("\\\'", "'", $sFinalSaveButton);
|
|
|
|
return $sFinalSaveButton;
|
|
}
|
|
|
|
/**
|
|
* This function builds a Contenido CMS Widget.
|
|
* A Editing Field or input field what we use for calendar.
|
|
*
|
|
* @return (String) Editing Field widget
|
|
*/
|
|
private function getEditingField(){
|
|
|
|
// Inline Editing Field
|
|
$oDivBox = new cHTMLDiv();
|
|
$oDivBox->setStyleDefinition("border", "1px dashed #bfbfbf");
|
|
$oDivBox->setEvent("Focus", "this.style.border='1px solid #bb5577';");
|
|
$oDivBox->setEvent("Blur", "this.style.border='1px dashed #bfbfbf';");
|
|
$this->sEditAreaId = "DATE_" . $this->oDB->f("idtype") . "_" . $this->iNumberOfCms;
|
|
$oDivBox->setId($this->sEditAreaId);
|
|
$oDivBox->updateAttributes(array ('contentEditable' => 'true'));
|
|
$oDivBox->setContent("_REPLACEMENT_");
|
|
$sFinalEditingDiv = $oDivBox->render();
|
|
$sFinalEditingDiv = AddSlashes(AddSlashes($sFinalEditingDiv));
|
|
$sFinalEditingDiv = str_replace("\\\'", "'", $sFinalEditingDiv);
|
|
$sFinalEditingDiv = str_replace("_REPLACEMENT_", $this->sContent, $sFinalEditingDiv);
|
|
|
|
return $sFinalEditingDiv;
|
|
}
|
|
|
|
/**
|
|
* This function builds a Contenido CMS Widget.
|
|
* A Select-Box what is given date formats.
|
|
* In auoFill we use the function getDateFormats:
|
|
* For edit or add formats modified this function.
|
|
*
|
|
* @return (String)Select-Box widget
|
|
*/
|
|
private function getSelectBox(){
|
|
|
|
// Div Format SelectBox
|
|
$oMenueDiv = new cHTMLDiv();
|
|
$this->sDivSelectId = "menue-$this->iNumberOfCms";
|
|
$oMenueDiv->setId($this->sDivSelectId);
|
|
$oMenueDiv->setStyleDefinition("padding", "4px");
|
|
$oMenueDiv->setStyleDefinition("background-color", "#ccc");
|
|
$oMenueDiv->setStyleDefinition("display", "none");
|
|
$oMenueDiv->setStyleDefinition("width", "239px");
|
|
|
|
// Select Box
|
|
$this->sSelectId = "select_".$this->iNumberOfCms;
|
|
$oSelectMenue = new cHTMLSelectElement("select-format-$this->iNumberOfCms", "", $this->sSelectId);
|
|
$oSelectMenue->setEvent("Change", "$this->sCalName.changeFormat(value);");
|
|
$oSelectMenue->autoFill($this->getDateFormats());
|
|
$oSelectMenue->setStyle("font-size: 11px; width:239px; font-family: Verdana,Arial,sans-serif");
|
|
$oMenueDiv->setContent($oSelectMenue);
|
|
$sFinalSelectBox = $oMenueDiv->render();
|
|
$sFinalSelectBox= AddSlashes(AddSlashes($sFinalSelectBox ));
|
|
$sFinalSelectBox= str_replace("\\\'", "'", $sFinalSelectBox);
|
|
|
|
return $sFinalSelectBox;
|
|
}
|
|
|
|
/**
|
|
* This function gives formatted current language shortcut
|
|
*
|
|
* @return (String)Current Language of Contenidos
|
|
*/
|
|
private function getLanguageContenido(){
|
|
$sLang = "";
|
|
switch($this->sContenidoLang){
|
|
case'de_DE': $sLang = "de";
|
|
break;
|
|
case'en_US': $sLang = "en";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return $sLang;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|