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