• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

cms/modules/form/editformelement.php

Go to the documentation of this file.
00001 <?php
00002 if(!defined('__PRAGYAN_CMS'))
00003 { 
00004         header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
00005         echo "<h1>403 Forbidden<h1><h4>You are not authorized to access the page.</h4>";
00006         echo '<hr/>'.$_SERVER['SERVER_SIGNATURE'];
00007         exit(1);
00008 }
00016         function generateEditFormElementDescBody($moduleCompId, $elementId, $action = 'editform') {
00017                 $myElement = new FormElement();
00018 
00019                 $elementQuery = 'SELECT * FROM `form_elementdesc` WHERE ' .
00020                                                                                 '`page_modulecomponentid` = ' . $moduleCompId . ' AND ' .
00021                                                                                 '`form_elementid` = ' . $elementId;
00022 
00023                 if($elementResult = mysql_query($elementQuery)) {
00024                         if($elementRow = mysql_fetch_assoc($elementResult)) {
00025                                 $myElement -> fromMysqlTableRow($elementRow);
00026                                 return $myElement -> toHtmlForm('elementDataForm', $action);
00027                         }
00028                 }
00029 
00030                 return 'An error occurred while trying to process your request. ' .
00031                        'Could not load data for the given form element.';
00032         }
00033 
00034         function submitEditFormElementDescData($moduleCompId,$elementId) {
00035                 $myElement = new FormElement();
00036 
00037                 $myElement -> fromHtmlForm();
00038                 $updateQuery = $myElement -> toMysqlUpdateQuery($moduleCompId);
00039 
00040                 if(mysql_query($updateQuery)) {
00041                         return true;
00042                 }
00043                 else {
00044                         return false;
00045                 }
00046         }
00047 
00054         class FormElement {
00055         private $elementId;
00056         private $elementName;
00057         private $elementDescription;
00058         private $elementType;
00059         private $elementSize;
00060         private $typeOptions;
00061         private $defaultValue;
00062         private $moreThan;
00063         private $lessThan;
00064         private $checkInteger;
00065         private $toolTipText;
00066         private $isRequired;
00067         private $elementRank;
00068 
00069         private static $fieldMap = array(
00070                                                                 'form_elementid' => 'elementId',
00071                                                                 'form_elementname' => 'elementName',
00072                                                                 'form_elementdisplaytext' => 'elementDescription',
00073                                                                 'form_elementtype' => 'elementType',
00074                                                                 'form_elementsize' => 'elementSize',
00075                                                                 'form_elementtypeoptions' => 'typeOptions',
00076                                                                 'form_elementdefaultvalue' => 'defaultValue',
00077                                                                 'form_elementmorethan' => 'moreThan',
00078                                                                 'form_elementlessthan' => 'lessThan',
00079                                                                 'form_elementcheckint' => 'checkInteger',
00080                                                                 'form_elementtooltiptext' => 'toolTipText',
00081                                                                 'form_elementisrequired' => 'isRequired',
00082                                                                 'form_elementrank' => 'elementRank'
00083                                                         );
00084 
00085 
00089         public function fromMysqlTableRow($elementDescRow) {
00090                 foreach(FormElement::$fieldMap as $key => $value) {
00091                         $this->$value = $elementDescRow[$key];
00092                 }
00093 
00094                 $this->checkInteger = $this->checkInteger == 1 ? true : false;
00095                 $this->isRequired = $this->isRequired == 1 ? true : false;
00096         }
00097 
00101         public function fromHtmlForm() {
00102                 if($_POST['elementid'] == 'new' || !ctype_digit($_POST['elementid'])) {
00103                         if(isset($this->elementId))
00104                                 unset($this->elementId);
00105                 }
00106                 else {
00107                         $this->elementId = escape($_POST['elementid']);
00108                 }
00109                 
00110                 $this->elementName = escape($_POST['txtElementName']);
00111                 $this->elementDescription = escape($_POST['txtElementDesc']);
00112                 $this->elementType = escape($_POST['selElementType']);
00113                 $this->elementSize = escape($_POST['txtElementSize']);
00114                 $this->typeOptions = isset($_POST['txtElementTypeOptions']) ? escape($_POST['txtElementTypeOptions']) : '';
00115                 $this->defaultValue = escape($_POST['txtDefaultValue']);
00116                 $this->checkInteger = (isset($_POST['optCheckNumber']) && $_POST['optCheckNumber'] == 'yes') ? true : false;
00117                 $this->moreThan = isset($_POST['txtMinValue']) ? escape($_POST['txtMinValue']) : '';
00118                 $this->lessThan = isset($_POST['txtMaxValue']) ? escape($_POST['txtMaxValue']) : '';
00119                 $this->toolTipText = escape($_POST['txtToolTip']);
00120                 $this->isRequired = escape($_POST['optRequired']) == 'yes' ? true : false;
00121         }
00122 
00123         
00124                                 
00128         public function toHtmlTableRow($imagePath, $action='editform') {
00129                 $checkNumber = $this->checkInteger == true ? 'Integer Only' : '';
00130                 $required = $this->isRequired == true ? 'Required' : 'Not Required';
00131                 $requiredClass = $this->isRequired == true ? 'formfieldred' : 'formfieldgreen';
00132         
00133         
00134                 $otherInfo="<div class=\"formfieldextrainfo $requiredClass\">$required</div>";
00135                 if($this->elementSize!=0)
00136                         $otherInfo.="<div class=\"formfieldextrainfo formfieldinfo\"><span>Size</span><br/>{$this->elementSize}</div>";
00137                 if($this->defaultValue!="")
00138                         $otherInfo.="<div class=\"formfieldextrainfo formfieldinfo\"><span>Default</span><br/>{$this->defaultValue}</div>";
00139                 if($checkNumber!="")
00140                         $otherInfo.="<div class=\"formfieldextrainfo formfieldred\" title=\"Only in the case that the entered element should be a number\">$checkNumber</div>";
00141                 if($this->checkInteger==true || $this->elementType=="date" || $this->elementType=="datetime")
00142                         $otherInfo.="<div class=\"formfieldextrainfo formfieldinfo\" title=\"Minimum and Maximum value of date or number\"><span>Range</span><br/>{$this->moreThan}-{$this->lessThan}</div>";
00143                 else if($this->elementType=="file")
00144                         $otherInfo.="<div class=\"formfieldextrainfo formfieldred\" title=\"Maximum value of uploaded file\"><span>Upload Limit</span><br/>{$this->lessThan}</div>";
00145                 
00146         
00147         
00148                 
00149                 
00150                 $rowString = <<<ROWSTRING
00151                 <script language="javascript">
00152                         function gotopage(pagepath) {
00153                                 if(confirm("Are you sure you want to delete this form element?"))
00154                                         window.location = pagepath;
00155                         }
00156             </script>
00157                 <tr>
00158                         <td>
00159                                 <a href="./+$action&subaction=moveUp&elementid={$this->elementId}">
00160                                         <img src="$imagePath/common/icons/16x16/actions/go-up.png" alt="Move Up" title="Move Up"/>
00161                                 </a>
00162                         
00163                                 <a href="./+$action&subaction=moveDown&elementid={$this->elementId}">
00164                                         <img src="$imagePath/common/icons/16x16/actions/go-down.png" alt="Move Down" title="Move Down"/>
00165                                 </a>
00166                         
00167                                 <a href="./+$action&subaction=editformelement&elementid={$this->elementId}">
00168                                         <img src="$imagePath/common/icons/16x16/apps/accessories-text-editor.png" alt="Edit" title="Edit" />
00169                                 </a>
00170                         
00171                                 <a style="cursor:pointer" onclick="return gotopage('./+$action&subaction=deleteformelement&elementid={$this->elementId}')">
00172                                         <img src="$imagePath/common/icons/16x16/actions/edit-delete.png" alt="Delete" title="Delete" />
00173                                         </a>
00174                                 </td>
00175                                 <td>{$this->elementName}</td>
00176                                 <td>{$this->elementDescription}</td>
00177                                 <td>{$this->elementType}</td>
00178                                 <td>{$this->toolTipText}</td>
00179                                 <td>
00180                                 $otherInfo
00181                                 </td>
00182 
00183                                 <td>{$this->typeOptions}</td>
00184                         </tr>
00185 ROWSTRING;
00186         
00187                         return $rowString;
00188                 }
00189 
00190 
00194         public function toHtmlForm($formHtmlId = 'elementDataForm', $action = 'editform') {
00195                 global $cmsFolder;
00196                 global $moduleFolder;
00197                 global $urlRequestRoot;
00198                 $calpath="$urlRequestRoot/$cmsFolder/$moduleFolder";
00199 
00200                 if($formHtmlId == '') {
00201                         $formHtmlId = 'elementDataForm';
00202                 }
00203                 if($action == '') {
00204                         $action = 'editform';
00205                 }
00206 
00207                 $elemTypeBox = '';
00208 
00209                 $elementTypes = array('text', 'textarea', 'radio', 'checkbox', 'select', 'password', 'file', 'date', 'datetime');
00210                 if(isset($this->elementType)) {
00211                         for($i = 0; $i < count($elementTypes); $i++) {
00212                                 $elemTypeBox .= '<option';
00213                                 if($elementTypes[$i] == $this->elementType) {
00214                                         $elemTypeBox .= ' selected="selected"';
00215                                 }
00216                                 $elemTypeBox .= '>' . $elementTypes[$i] . "</option>\n";
00217                         }
00218                 }
00219                 else {
00220                         $elemTypeBox = '<option>' . join($elementTypes, "</option>\n<option>") . '</option>';
00221                 }
00222 
00223                 $hiddenValue = isset($this->elementId) ? $this->elementId : 'new';
00224 
00225                 $checkNumber = $this->checkInteger == true ? 'checked="checked"' : '';
00226                 $checkNumberN = $this->checkInteger == true ? '' : 'checked="checked"';
00227                 $required = $this->isRequired == true ? 'checked="checked"' : '';
00228                 $requiredN = $this->isRequired == true ? '' : 'checked="checked"';
00229 
00230                 $htmlOutput = <<<HTMLOUTPUT
00231 
00232                 <script language="javascript" type="text/javascript">
00233                 <!--
00234                         var datetimeFormat = '%Y-%m-%d %H:%M';
00235 
00236                         function checkNumberClicked(form) {
00237                                 if(form.optCheckNumber[0].checked == true && form.selElementType.value == 'text') {
00238                                         form.txtMaxValue.disabled = form.txtMinValue.disabled = false;
00239                                 }
00240 
00241                                 else if(form.selElementType.value == 'text')
00242                                         form.txtMaxValue.disabled = form.txtMinValue.disabled = true;
00243                         }
00244 
00245                         function elementTypeChanged(form) {
00246                                 var elemType = form.selElementType.value;
00247 
00248                                 if(elemType == 'checkbox' || elemType == 'radio' || elemType == 'select' || elemType == 'file') {
00249                                         form.txtElementTypeOptions.disabled = false;
00250                                 }
00251                                 else {
00252                                         form.txtElementTypeOptions.disabled = true;
00253                                 }
00254 
00255                                 if(elemType == 'text') {
00256                                         form.optCheckNumber[0].disabled = form.optCheckNumber[1].disabled = false;
00257                                 }
00258                                 else {
00259                                         form.optCheckNumber[0].disabled = form.optCheckNumber[1].disabled = true;
00260                                 }
00261 
00262                                 if(elemType == 'textarea' || elemType == 'text') {
00263                                         form.txtElementSize.disabled = false;
00264                                 }
00265                                 else {
00266                                         form.txtElementSize.disabled = true;
00267                                 }
00268 
00269                                 if(elemType == 'file') {
00270                                         form.txtDefaultValue.disabled = true;
00271                                 }
00272                                 else {
00273                                         form.txtDefaultValue.disabled = false;
00274                                 }
00275 
00276                                 if(elemType == 'date' || elemType == 'datetime' || elemType == 'text') {
00277                                         form.txtMaxValue.disabled = form.txtMinValue.disabled = false;
00278                                 }
00279                                 else if(elemType == 'file') {
00280                                         form.txtMaxValue.disabled = false;
00281                                         form.txtMinValue.disabled = true;
00282                                 }
00283                                 else {
00284                                         form.txtMaxValue.disabled = form.txtMinValue.disabled = true;
00285                                 }
00286 
00287                                 if(elemType == 'date' || elemType == 'datetime') {
00288                                         if(elemType == 'date') {
00289                                                 datetimeFormat = '%Y-%m-%d';
00290                                         }
00291                                         else {
00292                                                 datetimeFormat = '%Y-%m-%d %H:%M';
00293                                         }
00294                                         form.calDefaultValue.style.display = form.calMaxValue.style.display = form.calMinValue.style.display = 'inline';
00295                                 }
00296                                 else {
00297                                         form.calDefaultValue.style.display = form.calMaxValue.style.display = form.calMinValue.style.display = 'none';
00298                                 }
00299                         }
00300                 -->
00301                 </script>
00302                 <link rel="stylesheet" type="text/css" media="all" href="$calpath/form/calendar/calendar.css" title="Aqua" />
00303                 <script type="text/javascript" src="$calpath/form/calendar/calendar.js"></script>
00304 
00305                 <form id="$formHtmlId" action="./+$action&subaction=editformelement" method="POST">
00306                         <br />
00307                         <table cellspacing="12px">
00308                                 <tr>
00309                                         <td nowrap="nowrap">Name of the variable:</td><td><input type="text" name="txtElementName" value="{$this->elementName}" /></td>
00310                                 </tr>
00311                                 <tr>
00312                                         <td>Text displayed before this field:</td><td><textarea style="width:98%;" name="txtElementDesc" rows="5" cols="50">{$this->elementDescription}</textarea></td>
00313                                 </tr>
00314                                 <tr>
00315                                         <td>Element Type:</td>
00316                                         <td>
00317                                                 <select name="selElementType" onchange="elementTypeChanged(this.form)">$elemTypeBox</select>
00318                                         </td>
00319                                 </tr>
00320 
00321                                 <tr>
00322                                         <td>Element Size:</td>
00323                                         <td><input type="text" name="txtElementSize" value="{$this->elementSize}" /></td>
00324                                 </tr>
00325 
00326                                 <tr>
00327                                         <td>Extra Options* (| separated values):</td>
00328                                         <td><input type="text" name="txtElementTypeOptions" value="{$this->typeOptions}" disabled="disabled" title="Used in the case of checkboxes, radio buttons and select fields." /></td>
00329                                 </tr>
00330 
00331                                 <tr>
00332                                         <td>Default Value:</td>
00333                                         <td><input type="text" name="txtDefaultValue" id="txtDefaultValue" value="{$this->defaultValue}" /><input name='calDefaultValue' type="reset" value=" ... " onclick="return showCalendar('txtDefaultValue', datetimeFormat, '24', true);" /></td>
00334                                 </tr>
00335 
00336                                 <tr>
00337                                         <td>Strictly a number?</td>
00338                                         <td>
00339                                                 <label><input type="radio" onclick="checkNumberClicked(this.form)" name="optCheckNumber" value="yes" $checkNumber />Yes</label>
00340                                                 <label><input type="radio" onclick="checkNumberClicked(this.form)" name="optCheckNumber" value="no" $checkNumberN />No</label>
00341                                         </td>
00342                                 </tr>
00343 
00344                                 <tr>
00345                                         <td>Minimum Value:</td>
00346                                         <td><input type="text" id="txtMinValue" name="txtMinValue" value="{$this->moreThan}" /><input name='calMinValue' type="reset" value=" ... " onclick="return showCalendar('txtMinValue', datetimeFormat, '24', true);" /></td>
00347                                 </tr>
00348 
00349                                 <tr>
00350                                         <td>Maximum Value:</td>
00351                                         <td><input type="text" id="txtMaxValue" name="txtMaxValue" value="{$this->lessThan}" /><input name='calMaxValue' type="reset" value=" ... " onclick="return showCalendar('txtMaxValue', datetimeFormat, '24', true);" /></td>
00352                                 </tr>
00353 
00354                                 <tr>
00355                                         <td>Tooltip Text:</td>
00356                                         <td><textarea style="width:98%;" name="txtToolTip" rows="5" cols="50">{$this->toolTipText}</textarea></td>
00357                                 </tr>
00358 
00359                                 <tr>
00360                                         <td>Required?</td>
00361                                         <td>
00362                                                 <label><input type="radio" name="optRequired" value="yes" $required />Yes</label>
00363                                                 <label><input type="radio" name="optRequired" value="no" $requiredN />No</label>
00364                                         </td>
00365                                 </tr>
00366                         </table>
00367 
00368                         <br /><br />
00369                         * You can provide the different choices for checkboxes, radio buttons or select fields by
00370                         typing the choices separated by pipe symbols (|) in the Extra Options box.<br />
00371                         For file upload fields, you can specify the different acceptable file extensions separated by |. Maximum Value represents the maximum allowable file size in bytes.
00372 
00373 
00374                         <br /><br />
00375                         <input type="hidden" value="$hiddenValue" name="elementid" />
00376                         <input type="submit" value="Update Field" name="btnSubmit" />
00377                 </form>
00378 
00379                 <script language="javascript" type="text/javascript">
00380                 <!--
00381                         elementTypeChanged(document.getElementById('$formHtmlId'));
00382                 -->
00383                 </script>
00384 
00385 HTMLOUTPUT;
00386 
00387 
00388                 return $htmlOutput;
00389         }
00390 
00391         public function toMysqlUpdateQuery($formId) {
00392                 $updates = array();
00393 
00394                 foreach(FormElement::$fieldMap as $key => $value) {
00395                         if(isset($this->$value)) {
00396                                 $updates[] = "`$key` = '". $this->$value . "'";
00397                         }
00398                 }
00399 
00400                 if(count($updates) > 0) {
00401                         return 'UPDATE `form_elementdesc` SET ' . join($updates, ', ') . ' WHERE ' .
00402                                '`form_elementid` = ' . $this->elementId . ' AND `page_modulecomponentid` = ' . $formId;
00403                 }
00404                 return '';
00405         }
00406 
00407         public function toMysqlInsertQuery($elementId = '', $elementRank = '') {
00408                 if($elementRank != '' && ctype_digit($elementRank)) {
00409                         $this->elementRank = $elementRank;
00410                 }
00411 
00412                 $keys = array();
00413                 $values = array();
00414 
00415                 foreach(FormElement::$fieldMap as $k => $v) {
00416                         if($k != 'form_elementid') {
00417                                 $keys[] = $k;
00418                                 $elementValue = $this->$v;
00419                                 if($elementValue === true || $elementValue === false) {
00420                                         $elementValue = $elementValue == true ? 1 : 0;
00421                                 }
00422 
00423                                 if(!ctype_digit($elementValue)) {
00424                                         $values[] = "'$elementValue'";
00425                                 }
00426                                 else {
00427                                         $values[] = $elementValue;
00428                                 }
00429                         }
00430                         else if(ctype_digit($elementId)) {
00431                                 $keys[] = 'form_elementid';
00432                                 $values[] = $elementId;
00433                         }
00434                 }
00435 
00436                 if(count($keys) > 0) {
00437                         return 'INSERT INTO `form_elementdesc`(`'.join($keys, '`, `').'`) VALUES ('.join($values, ', ').')';
00438                 }
00439                 return '';
00440         }
00441 }
00442 
00443 
00444 
00445 

Generated on Sun Jan 2 2011 04:55:32 for Pragyan CMS by  doxygen 1.7.1