{result}

{message}

{toppagination}
{listing}
{bottompagination}
{view}
{errormessage}
{formheader}{form}{formfooter}
{returnlink}
'; var $error_message_format = '
{errormessage}
'; var $form_header = ''; var $form_footer = ''; var $page_entries = 10; var $total_entries = 0; var $page = 1; var $listing_message = 'All entries'; var $no_entries_message = 'There are no entries to display.'; var $viewing_message = 'Viewing entry'; var $create_message = 'Create a new entry'; var $create_canceled_message = 'Creating a new entry was canceled.'; var $created_message = 'A new entry was created successfully.'; var $update_message = 'Update this entry'; var $update_canceled_message = 'Updating an entry was canceled.'; var $updated_message = 'The entry was updated successfully.'; var $delete_message = 'Are you sure you want to delete this entry?'; var $delete_canceled_message = 'Deleting the entry was canceled.'; var $deleted_message = 'The entry was deleted successfully.'; var $create_preview_message = 'New entry preview'; var $update_preview_message = 'Updated entry preview'; var $append_message = ''; var $preview_input; var $preview_label = 'Preview'; var $save_input; var $save_label = 'Save'; var $submit_input; var $submit_label = 'Submit'; var $cancel_input; var $cancel_label = 'Cancel'; var $delete_input; var $delete_label = 'Delete'; var $delete_cancel_input; var $invalid_mark = '[X]'; var $fields = array(); var $delete_fields = array(); var $columns = array(); var $rows = array(); var $row_style_column = ''; var $row_class_column = ''; var $listing_style = ''; var $listing_class = ''; var $listing_spacing = 0; var $listing_padding = 2; var $highlight_row_color = ''; var $highlight_row_class = ''; var $odd_row_color = ''; var $odd_row_class = ''; var $even_row_color = ''; var $even_row_class = ''; var $create = 1; var $read = 1; var $update = 1; var $delete = 1; var $view = 0; var $save = 0; var $preview = 0; var $update_label = 'Update'; var $view_label = 'View'; var $id_column; var $entry_output = ''; var $custom_parameters = array(); var $external_parameters = array(); var $field_layout_properties = array(); var $create_parameter; var $page_parameter; var $update_parameter; var $delete_parameter; var $state = 'listing'; var $next_state = ''; var $entry; var $ajax_input = ''; var $action_input = ''; var $view_id = ''; var $message_id = ''; var $error_id = ''; var $layout = ''; var $pagination_data = '{page}'; var $pagination_tab_limit = 10; var $ajax_response = 0; var $ajax_message = array(); var $loaded = 0; var $update_inputs = array(); var $target_input = ''; var $entry_field_names = array(); Function GeneratePagination(&$form) { $e = $this->page_entries; $t = $this->total_entries; if($e == 0) { $pages = array( array( 'first'=>1, 'last'=>$t, 'page'=>1, 'data'=>str_replace('{first}', 1, str_replace('{last}', $t, str_replace('{page}', 1, $this->pagination_data))) ) ); return $pages; } $l = $this->pagination_tab_limit; if(intval(($t + $e - 1) / $e) > $l) { $start = (max($this->page - intval($l / 2), 1) - 1) * $e + 1; $end = $start + $l * $e - 1; if($end > $t) { $start = max((intval($t / $e) - $l + 1) * $e + 1, 1); $end = $t; } } else { $start = 1; $end = $t; } for($pages = array(), $entry = $start; $entry <= $end; $entry += $e) { $page = ($entry - 1) / $e + 1; $p = count($pages); $last = min($t, $entry + $e - 1); $pages[$p]=array( 'first'=>$entry, 'last'=>$last, 'page'=>$page, 'data'=>str_replace('{first}', $entry, str_replace('{last}', $last, str_replace('{page}', $page, $this->pagination_data))) ); if($page != $this->page) { $pages[$p]['url'] = $this->AddActionParameter($form, $this->page_parameter, $page); $pages[$p]['tab'] = 1; } } return($pages); } Function DisplayPagination($form, $pages, $position) { $o = ''; $tp = count($pages); $page = '{data}'; $tab = '{data}'; for($p = 0; $p < $tp; ++$p) { $u = IsSet($pages[$p]['url']); $o .= str_replace('{data}', $pages[$p]['data'], str_replace('{url}', $u ? HtmlSpecialChars($pages[$p]['url']) : '', $u ? $page : $tab)); } return($o); } Function HasEntries(&$has_entries) { $has_entries = (count($this->rows)!=0); return(''); } Function AddActionParameters(&$form, $parameters) { $url = $form->ACTION; $tp = count($parameters); for(Reset($parameters), $p = 0; $p < $tp; Next($parameters), ++$p) { $parameter = Key($parameters); $url .= (GetType(strpos($url, '?')) == 'integer' ? (strlen($url) > 1 ? '&' : '') : '?').UrlEncode($parameter).'='.UrlEncode($parameters[$parameter]); } $p = $this->custom_parameters; $tc = count($p); for(Reset($p), $c = 0; $c < $tc; Next($p), ++$c) { $k = Key($p); $url .= '&'.UrlEncode($k).'='.UrlEncode($p[$k]); } $p = $this->external_parameters; $tc = count($p); for(Reset($p), $c = 0; $c < $tc; Next($p), ++$c) { $k = Key($p); $this->external_parameters[$k] = $form->GetInputValue($k); $url .= '&'.UrlEncode($k).'='.UrlEncode($this->external_parameters[$k]); } return($url); } Function AddActionParameter(&$form, $parameter, $value) { return($this->AddActionParameters($form, array($parameter => $value))); } /* * $c - column * $r - row * */ Function GetListingData($c, $r, $d, $default, &$template) { $ro = $this->rows; $co = $this->columns; UnSet($data); if(($i = IsSet($co[$c]['InputColumn'])) || IsSet($co[$c]['LabelColumn'])) { $column = ($i ? $co[$c]['InputColumn'] : $co[$c]['LabelColumn']); if(IsSet($ro[$r][$column])) { $input = $ro[$r][$column]; $mark = 'i_'.$input; $template = array( 'format'=>'{'.$mark.'}', 'marks'=>array( ($i ? 'input' : 'label')=>array( $mark=>$input ) ) ); return; } } if(IsSet($co[$c]['FormatMap']) && IsSet($ro[$r][$d])) { $map = $co[$c]['FormatMap']; $v = $ro[$r][$d]; if(IsSet($map[$v])) $format = $map[$v]; } if(!IsSet($format) && IsSet($co[$c]['Format'])) $format = $co[$c]['Format']; if(IsSet($format) && (!IsSet($co[$c]['MapNull']) || IsSet($ro[$r][$d]))) { $data = $format; $f = (IsSet($co[$c]['FormatParameters']) ? $co[$c]['FormatParameters'] : array()); $tf = count($f); $inputs = $labels = array(); $ms = strlen($this->mark_start); $me = strlen($this->mark_end); for(Reset($f), $p = 0; $p < $tf; Next($f), ++$p) { $k = Key($f); if(($i = IsSet($f[$k]['InputColumn']) && IsSet($ro[$r][$column = $f[$k]['InputColumn']])) || (IsSet($f[$k]['LabelColumn']) && IsSet($ro[$r][$column = $f[$k]['LabelColumn']]))) { $mark = $k; if(substr($mark, 0, $ms) != $this->mark_start) $mark = $this->mark_start.$mark; if(substr($mark, -$me, $me) != $this->mark_end) $mark .= $this->mark_end; if(strcmp($mark, $k)) $data = str_replace($k, $mark, $data); $mark = substr($mark, $ms, -$me); if($i) $inputs[$mark] = $ro[$r][$column]; else $labels[$mark] = $ro[$r][$column]; } else { $d = (IsSet($f[$k]['Column']) ? $f[$k]['Column'] : $c); if(IsSet($ro[$r][$d])) $v = $ro[$r][$d]; else $v = (IsSet($f[$k]['MapNull']) ? $f[$k]['MapNull'] : ''); if(IsSet($f[$k]['Map'][$v])) $v = $f[$k]['Map'][$v]; if(IsSet($f[$k]['Replace'])) { $re = $f[$k]['Replace']; $tre = count($re); for(Reset($re), $e = 0; $e < $tre; Next($re), ++$e) { $ke = Key($re); $v = preg_replace('/'.str_replace('/', '\\/', $ke).'/', $re[$ke], $v); } } if(IsSet($f[$k]['HTML'])) $v = HtmlSpecialChars($v); $data = str_replace($k, $v, $data); } } if(count($inputs) || count($labels)) { $template = array( 'format'=>$data, 'marks'=>array( 'input'=>$inputs, 'label'=>$labels ) ); return; } } else { if(IsSet($ro[$r][$d])) $data = $ro[$r][$d]; elseif(IsSet($co[$c]['MapNull'])) $data = $co[$c]['MapNull']; else $data = $default; if(IsSet($co[$c]['Map'][$data])) $data = $co[$c]['Map'][$data]; if(IsSet($co[$c]['Replace'])) { $re = $co[$c]['Replace']; $tre = count($re); for(Reset($re), $e = 0; $e < $tre; Next($re), ++$e) { $ke = Key($re); $data = preg_replace('/'.str_replace('/', '\\/', $ke).'/', $re[$ke], $data); } } if(IsSet($co[$c]['HTML'])) $data = HtmlSpecialChars($data); } $template = array( 'format'=>'{data}', 'marks'=>array( 'data'=>array( 'data'=>$data ) ) ); return ''; } Function AppendTemplateData(&$template, $data, &$last_data) { if(strlen($data) == 0) return; $block = count($template['marks']['data']); if(strlen($template['format']) == 0) $template['format'] = '{'.($mark = 'd0').'}'; else { if($last_data) $mark = 'd'.($block - 1); else { $mark = 'd'.$block; $template['format'] .= '{'.$mark.'}'; } } if($last_data) $template['marks']['data'][$mark] .= $data; else $template['marks']['data'][$mark] = $data; $last_data = 1; } Function AppendTemplate(&$template, $t, &$last_data) { if(!IsSet($t['marks']['input']) && !IsSet($t['marks']['label'])) { if(IsSet($t['marks']['data'])) $this->AppendTemplateData($template, $t['marks']['data'][substr($t['format'], 1, -1)], $last_data); return; } $count = count($template['marks']['template']); $template['format'] .= '{'.($mark = 't'.$count).'}'; $template['marks']['template'][$mark] = $t; $last_data = 0; } Function GetListing(&$form, &$template) { $template = array( 'format' => '', 'marks' => array( 'data'=>array(), 'template'=>array() ) ); $last_data = 0; $ro = $this->rows; $co = $this->columns; $tc = count($co); $listing = 'listing_class) ? ' class="'.HtmlSpecialChars($this->listing_class).'"' : '').(strlen($this->listing_style) ? ' style="'.HtmlSpecialChars($this->listing_style).'"' : '').(IsSet($this->listing_spacing) ? ' cellspacing="'.HtmlSpecialChars($this->listing_spacing).'"' : '').(IsSet($this->listing_padding) ? ' cellpadding="'.HtmlSpecialChars($this->listing_padding).'"' : '').">\n\n"; for($style = array(), $c = 0; $c < $tc; ++$c) { $style[$c] = (IsSet($co[$c]['Style']) ? ' style="'.HtmlSpecialChars($co[$c]['Style']).'"' : '').(IsSet($co[$c]['Class']) ? ' class="'.HtmlSpecialChars($co[$c]['Class']).'"' : ''); if(IsSet($co[$c]['HTML']) && !$co[$c]['HTML']) Unset($co[$c]['HTML']); $listing .= ''; if(IsSet($co[$c]['Header'])) $listing .= $co[$c]['Header']; $listing .= "\n"; } $listing .= "\n"; $highlight = ((strlen($this->highlight_row_color) || strlen($this->highlight_row_class)) ? ' onmouseover="'.HtmlSpecialChars((strlen($this->highlight_row_class) ? 'this.className='.$form->EncodeJavascriptString($this->highlight_row_class).';' : '').(strlen($this->highlight_row_color) ? 'this.style.backgroundColor='.$form->EncodeJavascriptString($this->highlight_row_color).';' : '')).'"' : ''); $lowlight = ((strlen($this->odd_row_color) || strlen($this->odd_row_class)) ? ' onmouseout="'.HtmlSpecialChars((strlen($this->odd_row_class) ? 'this.className='.$form->EncodeJavascriptString($this->odd_row_class).';' : '').(strlen($this->odd_row_color) ? 'this.style.backgroundColor='.$form->EncodeJavascriptString($this->odd_row_color).';' : '')).'"' : ''); $odd_rows = (strlen($this->odd_row_class) ? ' class="'.$this->odd_row_class.'"' : '').(strlen($this->odd_row_color) ? ' style="background-color: '.$this->odd_row_color.'"' : '').$highlight.$lowlight; $lowlight = ((strlen($this->even_row_color) || strlen($this->even_row_class)) ? ' onmouseout="'.HtmlSpecialChars((strlen($this->even_row_class) ? 'this.className='.$form->EncodeJavascriptString($this->even_row_class).';' : '').(strlen($this->even_row_color) ? 'this.style.backgroundColor='.$form->EncodeJavascriptString($this->even_row_color).';' : '')).'"' : ''); $even_rows = (strlen($this->even_row_class) ? ' class="'.$this->even_row_class.'"' : '').(strlen($this->even_row_color) ? ' style="background-color: '.$this->even_row_color.'"' : '').$highlight.$lowlight; $tr = count($ro); for($r = 0; $r < $tr; ++$r) { $s = ''; if(strlen($this->row_style_column) && IsSet($ro[$r][$this->row_style_column])) $s = ' style="'.HtmlSpecialChars($ro[$r][$this->row_style_column]).'"'; $c = (($r % 2) ? $even_rows : $odd_rows); if(strlen($this->row_class_column) && IsSet($ro[$r][$this->row_class_column])) { $class = $ro[$r][$this->row_class_column]; $c = ' class="'.HtmlSpecialChars($class).'"'.$highlight.' onmouseout="'.HtmlSpecialChars('this.className='.$form->EncodeJavascriptString($class)).'"'; } $listing .= '\n"; for($c = 0; $c < $tc; ++$c) { $listing .= ''; $d = (IsSet($co[$c]['Column']) ? $co[$c]['Column'] : $c); if($this->view && IsSet($co[$c]['View'])) { $id = $co[$c]['View']; $parameters = array( $this->view_parameter => IsSet($ro[$r][$id]) ? $ro[$r][$id] : $r, ); if($this->read) $parameters[$this->page_parameter] = $this->page; $listing .= ''; $this->AppendTemplateData($template, $listing, $last_data); $this->GetListingData($c, $r, $d, HtmlSpecialChars($this->view_label), $t); $this->AppendTemplate($template, $t, $last_data); $listing = ''; } elseif($this->update && IsSet($co[$c]['Update'])) { $id = $co[$c]['Update']; $parameters = array( $this->update_parameter => IsSet($ro[$r][$id]) ? $ro[$r][$id] : $r, ); if($this->read) $parameters[$this->page_parameter] = $this->page; $listing .= ''; $this->AppendTemplateData($template, $listing, $last_data); $this->GetListingData($c, $r, $d, HtmlSpecialChars($this->update_label), $t); $this->AppendTemplate($template, $t, $last_data); $listing = ''; } elseif($this->delete && IsSet($co[$c]['Delete'])) { $id = $co[$c]['Delete']; $parameters = array( $this->delete_parameter => IsSet($ro[$r][$id]) ? $ro[$r][$id] : $r, ); if($this->read) $parameters[$this->page_parameter] = $this->page; $listing .= ''; $this->AppendTemplateData($template, $listing, $last_data); $this->GetListingData($c, $r, $d, HtmlSpecialChars($this->delete_label), $t); $this->AppendTemplate($template, $t, $last_data); $listing = ''; } else { $this->AppendTemplateData($template, $listing, $last_data); $this->GetListingData($c, $r, $d, '', $t); $this->AppendTemplate($template, $t, $last_data); $listing = ''; } $listing .= "\n"; } $listing .= "\n"; } $listing .= "\n"; $this->AppendTemplateData($template, $listing, $last_data); return(''); } Function SetColumns($columns) { if($this->update || $this->delete || $this->view) { Unset($id); $tc = count($columns); for($c = 0; $c < $tc; ++$c) { if(IsSet($columns[$c]['Update'])) $has_update = $c; elseif(IsSet($columns[$c]['Delete'])) $has_delete = $c; elseif(IsSet($columns[$c]['View'])) $has_view = $c; if(IsSet($columns[$c]['ID'])) $id = $c; } if(!IsSet($id)) { if(!IsSet($this->id_column)) return('it was not specified the column from where the ID value would be taken to update entries'); $id = $this->id_column; } if($this->view) { if(IsSet($has_view)) $columns[$has_view]['View'] = $id; else $columns[] = array( 'View'=>$id, 'Column'=>-1 ); } if($this->update) { if(IsSet($has_update)) $columns[$has_update]['Update'] = $id; else $columns[] = array( 'Update'=>$id, 'Column'=>-1 ); } if($this->delete) { if(IsSet($has_delete)) $columns[$has_delete]['Delete'] = $id; else $columns[] = array( 'Delete'=>$id, 'Column'=>-1 ); } } $this->columns = $columns; return(''); } Function SetIDColumn($column) { switch(GetType($column)) { case 'string': break; case 'integer': if($column >= 0) break; default: return('it was not specified a valid id column'); } $this->id_column = $column; return(''); } Function GetErrorMessage(&$form) { $i = $form->Invalid; $ti = count($i); if($ti == 0) return(''); Reset($i); if($form->ShowAllErrors) { $p = HtmlSpecialChars($form->ErrorMessagePrefix); $s = HtmlSpecialChars($form->ErrorMessageSuffix); for($e = '', $f = 0; $f < $ti; ++$f, Next($i)) { $error = $i[Key($i)]; if(strlen($error)) $e .= (strlen($e) > 0 ? "
\n" : '').$p.HtmlSpecialChars($error).$s; } } else { $error = $i[Key($i)]; $e = (strlen($error) ? HtmlSpecialChars($error) : ''); } return(strlen($e) ? str_replace('{errormessage}', $e, $this->error_message_format) : ''); } Function AddLayoutInput(&$form, $state) { if(strlen($this->layout)) return(''); switch($state) { case 'create_previewing': case 'creating': case 'created': case 'update_previewing': case 'updating': case 'updated': $updating = 1; $fields = $this->fields; break; case 'deleting': $updating = 0; $fields = $this->delete_fields; break; default: return('unexpected state '.$state); } $inputs = array(); $properties = $this->field_layout_properties; $tf = count($fields); for($f = 0, Reset($fields); $f < $tf; Next($fields), ++$f) { switch($input = Key($fields)) { case $this->save_input: case $this->preview_input: case $this->submit_input: case $this->cancel_input: case $this->delete_input: case $this->delete_cancel_input: continue 2; } $inputs[] = $input; switch($fields[$input]['TYPE']) { case 'checkbox': case 'radio': $properties[$input]['SwitchedPosition'] = 1; break; } } if($updating) { $next = 'left'; if($this->preview) { $inputs[] = $this->preview_input; $properties[$this->preview_input] = array( 'CenteredGroup'=>'left', ); $next = 'middle'; } if($this->save) { $inputs[] = $this->save_input; $properties[$this->save_input] = array( 'CenteredGroup'=>$next, ); $next = 'middle'; } $inputs[] = $this->submit_input; $properties[$this->submit_input] = array( 'CenteredGroup'=>$next, ); $inputs[] = $this->cancel_input; $properties[$this->cancel_input] = array( 'CenteredGroup'=>'right', ); } else { $inputs[] = $this->delete_input; $properties[$this->delete_input] = array( 'CenteredGroup'=>'left', ); $inputs[] = $this->delete_cancel_input; $properties[$this->delete_cancel_input] = array( 'CenteredGroup'=>'right', ); } $this->layout = $this->GenerateInputID($form, $this->input, 'layout'); return($form->AddInput(array( 'ID'=>$this->layout, 'TYPE'=>'custom', 'CustomClass'=>'form_layout_vertical_class', 'Inputs'=>$inputs, 'Properties'=>$properties, 'InvalidMark'=>$this->invalid_mark, ))); } Function AddInput(&$form, $arguments) { if(IsSet($arguments['Create'])) $this->create = intval($arguments['Create']); if(IsSet($arguments['Read'])) $this->read = intval($arguments['Read']); if(IsSet($arguments['Update'])) $this->update = intval($arguments['Update']); if(IsSet($arguments['Delete'])) $this->delete = intval($arguments['Delete']); if(IsSet($arguments['View'])) $this->view = intval($arguments['View']); if($this->create || $this->update) { if(IsSet($arguments['Save'])) $this->save = intval($arguments['Save']); if(IsSet($arguments['Preview'])) $this->preview = intval($arguments['Preview']); } if(IsSet($arguments['CustomParameters'])) $this->custom_parameters = $arguments['CustomParameters']; if(IsSet($arguments['ExternalParameters'])) $this->external_parameters = $arguments['ExternalParameters']; if(IsSet($arguments['FieldLayoutProperties'])) $this->field_layout_properties = $arguments['FieldLayoutProperties']; $this->ajax_input = $this->GenerateInputID($form, $this->input, 'ajax'); $this->action_input = $this->GenerateInputID($form, $this->input, 'action'); $this->state_input = $this->GenerateInputID($form, $this->input, 'state'); $this->view_id = $this->GenerateInputID($form, $this->input, 'view'); $this->message_id = $this->GenerateInputID($form, $this->input, 'message'); $this->error_id = $this->GenerateInputID($form, $this->input, 'error'); if(strlen($error = $form->AddInput(array( 'TYPE'=>'custom', 'ID'=>$this->ajax_input, 'CustomClass'=>'form_ajax_submit_class', 'TargetInput'=>$this->input, ))) || strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'ID'=>$this->action_input, 'NAME'=>$this->action_input, 'VALUE'=>'' )))) return($error); if($this->create || $this->update) { $this->save_input = $this->input.'-save'; $this->submit_input = $this->input.'-submit'; $this->cancel_input = $this->input.'-cancel'; } if($this->create) { if(IsSet($arguments['CreateMessage'])) $this->create_message = $arguments['CreateMessage']; if(IsSet($arguments['CreatePreviewMessage'])) $this->create_preview_message = $arguments['CreatePreviewMessage']; if(IsSet($arguments['CreateCanceledMessage'])) $this->create_canceled_message = $arguments['CreateCanceledMessage']; if(IsSet($arguments['CreatedMessage'])) $this->created_message = $arguments['CreatedMessage']; $this->create_parameter = $this->GenerateInputID($form, $this->input, 'create'); if(strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'NAME'=>$this->create_parameter, 'ID'=>$this->create_parameter, 'VALUE'=>'1', 'Subform'=>$this->submit_input )))) return($error); } if($this->read) { if(IsSet($arguments['ListingMessage'])) $this->listing_message = $arguments['ListingMessage']; if(IsSet($arguments['NoEntriesMessage'])) $this->no_entries_message = $arguments['NoEntriesMessage']; if(IsSet($arguments['ListingClass'])) $this->listing_class = $arguments['ListingClass']; if(IsSet($arguments['ListingStyle'])) $this->listing_style = $arguments['ListingStyle']; if(IsSet($arguments['ListingSpacing'])) $this->listing_spacing = $arguments['ListingSpacing']; if(IsSet($arguments['ListingPadding'])) $this->listing_padding = $arguments['ListingPadding']; if(IsSet($arguments['HighlightRowListingClass'])) $this->highlight_row_class = $arguments['HighlightRowListingClass']; if(IsSet($arguments['HighlightRowListingColor'])) $this->highlight_row_color = $arguments['HighlightRowListingColor']; if(IsSet($arguments['OddRowListingClass'])) $this->odd_row_class = $arguments['OddRowListingClass']; if(IsSet($arguments['OddRowListingColor'])) $this->odd_row_color = $arguments['OddRowListingColor']; if(IsSet($arguments['EvenRowListingClass'])) $this->even_row_class = $arguments['EvenRowListingClass']; if(IsSet($arguments['EvenRowListingColor'])) $this->even_row_color = $arguments['EvenRowListingColor']; if(IsSet($arguments['ErrorMessageFormat'])) $this->error_message_format = $arguments['ErrorMessageFormat']; if(IsSet($arguments['FormHeader'])) $this->form_header = $arguments['FormHeader']; if(IsSet($arguments['FormFooter'])) $this->form_footer = $arguments['FormFooter']; if(IsSet($arguments['Rows'])) $this->rows = $arguments['Rows']; if(IsSet($arguments['RowStyleColumn'])) $this->row_style_column = $arguments['RowStyleColumn']; if(IsSet($arguments['RowClassColumn'])) $this->row_class_column = $arguments['RowClassColumn']; if(IsSet($arguments['IDColumn']) && strlen($error = $this->SetIDColumn($arguments['IDColumn']))) return($error); if(IsSet($arguments['Columns']) && strlen($error = $this->SetColumns($arguments['Columns']))) return($error); if(IsSet($arguments['TotalEntries'])) $this->total_entries = $arguments['TotalEntries']; if(IsSet($arguments['PageEntries'])) $this->page_entries = $arguments['PageEntries']; if($this->page_entries < 0) return('it was not specified a valid number of entries to list per page'); if(IsSet($arguments['Page'])) $this->page = $arguments['Page']; $this->page_parameter = $this->GenerateInputID($form, $this->input, 'page'); if(strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'NAME'=>$this->page_parameter, 'ID'=>$this->page_parameter, 'VALUE'=>'', )))) return($error); } if($this->update) { if(IsSet($arguments['UpdateLabel'])) $this->update_label = $arguments['UpdateLabel']; if(IsSet($arguments['UpdateMessage'])) $this->update_message = $arguments['UpdateMessage']; if(IsSet($arguments['UpdatePreviewMessage'])) $this->update_preview_message = $arguments['UpdatePreviewMessage']; if(IsSet($arguments['UpdateCanceledMessage'])) $this->update_canceled_message = $arguments['UpdateCanceledMessage']; if(IsSet($arguments['UpdatedMessage'])) $this->updated_message = $arguments['UpdatedMessage']; $this->update_parameter = $this->GenerateInputID($form, $this->input, 'update'); if(strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'NAME'=>$this->update_parameter, 'ID'=>$this->update_parameter, 'VALUE'=>'1', 'Subform'=>$this->submit_input )))) return($error); } if($this->create || $this->update) { if(IsSet($arguments['InvalidMark'])) { if(strlen($arguments['InvalidMark']) == 0) return('it was not specified an invalid mark'); $this->invalid_mark = $arguments['InvalidMark']; } if(!IsSet($arguments['EntryFields']) || ($tf = count($fields = $arguments['EntryFields'])) == 0) return('it were not specified any entry fields'); for($f = 0; $f < $tf; ++$f) { $field_arguments = $fields[$f]; if(!IsSet($field_arguments[$key = 'ID']) && !IsSet($field_arguments[$key = 'NAME'])) return('it was not specified the identifier of the field '.$f); $this->entry_field_names[] = $id = $field_arguments[$key]; $field_arguments['SubForm'] = (strcmp($id, $this->cancel_input) ? $this->submit_input : $this->cancel_input); $field_arguments['NoParent'] = 1; if(strlen($error = $form->AddInput($field_arguments))) return($error); $this->fields[$id] = $field_arguments; } if($this->save) { if(IsSet($arguments['SaveLabel'])) $this->save_label = $arguments['SaveLabel']; if(!IsSet($this->fields[$this->save_input]) && strlen($error = $form->AddInput(array( 'TYPE'=>'submit', 'NAME'=>$this->save_input, 'ID'=>$this->save_input, 'VALUE'=>$this->save_label, 'SubForm'=>$this->submit_input )))) return($error); } if($this->preview) { $this->preview_input = $this->input.'-preview'; if(IsSet($arguments['EntryOutput'])) $this->entry_output = $arguments['EntryOutput']; if(IsSet($arguments['PreviewLabel'])) $this->preview_label = $arguments['PreviewLabel']; if(!IsSet($this->fields[$this->preview_input]) && strlen($error = $form->AddInput(array( 'TYPE'=>'submit', 'NAME'=>$this->preview_input, 'ID'=>$this->preview_input, 'VALUE'=>$this->preview_label, 'SubForm'=>$this->submit_input )))) return($error); } if(!IsSet($this->fields[$this->submit_input])) { if(IsSet($arguments['SubmitLabel'])) $this->submit_label = $arguments['SubmitLabel']; if(strlen($error = $form->AddInput(array( 'TYPE'=>'submit', 'NAME'=>$this->submit_input, 'ID'=>$this->submit_input, 'VALUE'=>$this->submit_label, 'SubForm'=>$this->submit_input )))) return($error); } if(!IsSet($this->fields[$this->cancel_input])) { if(IsSet($arguments['CancelLabel'])) $this->cancel_label = $arguments['CancelLabel']; if(strlen($error = $form->AddInput(array( 'TYPE'=>'submit', 'NAME'=>$this->cancel_input, 'ID'=>$this->cancel_input, 'VALUE'=>$this->cancel_label, 'SubForm'=>$this->cancel_input )))) return($error); } } if($this->delete) { $this->delete_input = $this->input.'-delete'; $this->delete_cancel_input = $this->input.'-delete-cancel'; if(IsSet($arguments['DeleteLabel'])) $this->delete_label = $arguments['DeleteLabel']; if(IsSet($arguments['DeleteMessage'])) $this->delete_message = $arguments['DeleteMessage']; if(IsSet($arguments['DeleteCanceledMessage'])) $this->delete_canceled_message = $arguments['DeleteCanceledMessage']; if(IsSet($arguments['DeletedMessage'])) $this->deleted_message = $arguments['DeletedMessage']; $fields = (IsSet($arguments['DeleteFields']) ? $arguments['DeleteFields'] : array()); $tf = count($fields); for($f = 0; $f < $tf; ++$f) { $field_arguments = $fields[$f]; if(!IsSet($field_arguments[$key = 'ID']) && !IsSet($field_arguments[$key = 'NAME'])) return('it was not specified the identifier of the field '.$f); $id = $field_arguments[$key]; $field_arguments['SubForm'] = (strcmp($id, $this->delete_cancel_input) ? $this->delete_input : $this->delete_cancel_input); $field_arguments['NoParent'] = 1; if(strlen($error = $form->AddInput($field_arguments))) return($error); $this->delete_fields[$id] = $field_arguments; } if(!IsSet($this->delete_fields[$this->delete_input]) && strlen($error = $form->AddInput(array( 'TYPE'=>'submit', 'NAME'=>$this->delete_input, 'ID'=>$this->delete_input, 'VALUE'=>$this->delete_label, 'SubForm'=>$this->delete_input )))) return($error); if(!IsSet($this->delete_fields[$this->delete_cancel_input])) { if(IsSet($arguments['CancelLabel'])) $this->cancel_label = $arguments['CancelLabel']; if(strlen($error = $form->AddInput(array( 'TYPE'=>'submit', 'NAME'=>$this->delete_cancel_input, 'ID'=>$this->delete_cancel_input, 'VALUE'=>$this->cancel_label, 'SubForm'=>$this->delete_cancel_input )))) return($error); } $this->delete_parameter = $this->GenerateInputID($form, $this->input, 'delete'); if(strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'NAME'=>$this->delete_parameter, 'ID'=>$this->delete_parameter, 'VALUE'=>'1', 'SubForm'=>$this->delete_input )))) return($error); } if($this->view) { if(IsSet($arguments['ViewLabel'])) $this->view_label = $arguments['ViewLabel']; if(IsSet($arguments['ViewingMessage'])) $this->viewing_message = $arguments['ViewingMessage']; $this->view_parameter = $this->GenerateInputID($form, $this->input, 'view'); if(strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'NAME'=>$this->view_parameter, 'ID'=>$this->view_parameter, 'VALUE'=>'1', 'Subform'=>$this->submit_input )))) return($error); } switch($value = (IsSet($arguments['State']) ? $arguments['State'] : $this->state)) { case 'listing': if(!$this->read) return($value.' is not a valid scaffolding state because reading entries is disallowed'); break; case 'create_previewing': case 'created': case 'create_canceled': case 'creating': if(!$this->create) return($value.' is not a valid scaffolding state because creating entries is disallowed'); break; case 'update_previewing': case 'updated': case 'update_canceled': case 'updating': if(!$this->update) return($value.' is not a valid scaffolding state because updating entries is disallowed'); break; case 'deleted': case 'delete_canceled': case 'deleting': if(!$this->delete) return($value.' is not a valid scaffolding state because deleting entries is disallowed'); break; case 'viewing': if(!$this->view) return($value.' is not a valid scaffolding state because viewing entries is disallowed'); break; default: return($value.' is not a valid scaffolding state'); } $this->state = $value; if(strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'ID'=>$this->state_input, 'NAME'=>$this->state_input, 'VALUE'=>$this->state )))) return($error); if((IsSet($arguments['Entry']) && strlen($error = $this->SetInputProperty($form, 'Entry', $arguments['Entry'])))) return($error); if(IsSet($arguments['AppendMessage'])) $this->append_message = $arguments['AppendMessage']; if(IsSet($arguments['TargetInput'])) { if(strlen($arguments['TargetInput'])==0) return('it was not specified a valid target input identifier'); $this->target_input = $arguments['TargetInput']; } return(''); } Function AddInputPart(&$form) { $this->valid_marks['data']['message_id'] = $this->message_id; $this->valid_marks['data']['view_id'] = $this->view_id; $this->valid_marks['data']['error_id'] = $this->error_id; switch($this->state) { case 'create_previewing': case 'update_previewing': case 'creating': case 'updating': $form->SetInputValue($this->state_input, $this->state); if(($this->save && strlen($error = $form->Connect($this->save_input, $this->ajax_input, 'ONCLICK', 'Submit', array( 'SubForm'=>$this->submit_input, 'SetInputValue'=>array( $this->action_input=>'save' ) )))) || ($this->preview && strlen($error = $form->Connect($this->preview_input, $this->ajax_input, 'ONCLICK', 'Submit', array( 'SubForm'=>$this->submit_input, 'SetInputValue'=>array( $this->action_input=>'preview' ) )))) || strlen($error = $form->AddInputPart($this->action_input)) || strlen($error = $form->AddInputPart($this->state_input)) || strlen($error = $form->AddInputPart($this->ajax_input))) return($error); case 'deleting': $previewing = 0; switch($this->state) { case 'create_previewing': $previewing = 1; case 'creating': $creating = 1; $updating = 0; break; case 'update_previewing': $previewing = 1; case 'updating': $creating = 0; $updating = 1; break; case 'deleting': $creating = 0; $updating = 0; break; } if(strlen($error = $this->AddLayoutInput($form, $this->state)) || ($this->read && strlen($error = $form->AddInputPart($this->page_parameter)))) return($error); $this->valid_marks['data']['listing'] = $this->valid_marks['data']['toppagination'] = $this->valid_marks['data']['bottompagination'] = $this->valid_marks['data']['returnlink'] = $this->valid_marks['data']['result'] = ''; $this->valid_marks['data']['message'] = ($previewing ? ($creating ? $this->create_preview_message : $this->update_preview_message) : ($creating ? $this->create_message : ($updating ? $this->update_message : $this->delete_message))).$this->append_message; $this->valid_marks['data']['errormessage'] = $error_message = $this->GetErrorMessage($form); $this->valid_marks['data']['view'] = (($previewing && strlen($error_message) == 0) ? $this->entry_output : ''); $this->valid_marks['data']['formheader'] = $this->form_header; $this->valid_marks['data']['formfooter'] = $this->form_footer; $this->valid_marks['input']['form'] = $this->layout; if($creating) { if(strlen($error = $form->AddInputPart($this->create_parameter)) || ($this->update && strlen($error = $form->AddInputPart($this->update_parameter)))) return($error); } elseif($updating) { if(strlen($error = $form->SetInputValue($this->update_parameter, $this->entry)) || strlen($error = $form->AddInputPart($this->update_parameter))) return($error); } else { if(strlen($error = $form->SetInputValue($this->submit_input, $this->delete_label)) || strlen($error = $form->SetInputValue($this->delete_parameter, $this->entry)) || strlen($error = $form->AddInputPart($this->delete_parameter))) return($error); } break; default: if($this->read && strlen($error = $this->HasEntries($has_entries))) return($error); $viewing = 0; switch($this->state) { case 'created': $message = $this->created_message; break; case 'updated': $message = $this->updated_message; break; case 'deleted': $message = $this->deleted_message; break; case 'create_canceled': $message = $this->create_canceled_message; break; case 'update_canceled': $message = $this->update_canceled_message; break; case 'delete_canceled': $message = $this->delete_canceled_message; break; case 'viewing': $viewing = $this->view; default: $message = ''; break; } $this->valid_marks['data']['result'] = $message.$this->append_message; if($viewing) { $update_parameters = array( $this->update_parameter => $this->entry, ); $delete_parameters = array( $this->delete_parameter => $this->entry, ); $listing_parameters = array( ); if($this->read) $update_parameters[$this->page_parameter] = $delete_parameters[$this->page_parameter] = $listing_parameters[$this->page_parameter] = $this->page; $this->valid_marks['data']['view'] = $this->entry_output; $this->valid_marks['data']['message'] = $this->viewing_message; $this->valid_marks['data']['returnlink'] = ($this->update ? ''.HtmlSpecialChars($this->update_label).' ' : '').($this->delete ? ''.HtmlSpecialChars($this->delete_label).' ' : '').($this->read ? ''.$this->listing_message.'' : ''); $this->valid_marks['data']['listing'] = $this->valid_marks['data']['toppagination'] = $this->valid_marks['data']['bottompagination'] = ''; } elseif(!$this->read || !$has_entries) { $this->valid_marks['data']['view'] = $this->valid_marks['data']['listing'] = $this->valid_marks['data']['toppagination'] = $this->valid_marks['data']['bottompagination'] = ''; $this->valid_marks['data']['message'] = ($this->read ? $this->no_entries_message : ''); } else { if(strlen($error = $this->GetListing($form, $this->valid_marks['template']['listing']))) return($error); $pages = $this->GeneratePagination($form); if(count($pages) == 1) { $this->valid_marks['data']['toppagination'] = $this->valid_marks['data']['bottompagination'] = ''; } else { $this->valid_marks['data']['toppagination'] = $this->DisplayPagination($form, $pages, 'top'); $this->valid_marks['data']['bottompagination'] = $this->DisplayPagination($form, $pages, 'bottom'); } $this->valid_marks['data']['message'] = $this->listing_message; $this->valid_marks['data']['view'] = ''; } $this->valid_marks['data']['formheader'] = $this->valid_marks['data']['form'] = $this->valid_marks['data']['formfooter'] = $this->valid_marks['data']['errormessage'] = ''; if(!$viewing) { $parameters = array( $this->create_parameter => '1' ); if($this->read) $parameters[$this->page_parameter] = $this->page; $this->valid_marks['data']['returnlink'] = ($this->create ? ''.$this->create_message.'' : ''); } break; } $p = $this->custom_parameters; $tc = count($p); for(Reset($p), $c = 0; $c < $tc; Next($p), ++$c) { $k = Key($p); if(IsSet($this->external_parameters[$k])) continue; if(strlen($error = $form->AddInput(array( 'TYPE'=>'hidden', 'NAME'=>$k, 'VALUE'=>$p[$k], ))) || strlen($error = $form->AddInputPart($k))) return($error); } return(parent::AddInputPart($form)); } Function LoadInputValues(&$form, $submitted) { if(count($this->ajax_message) || $this->loaded) return; $this->loaded = 1; $state = $form->GetSubmittedValue($this->state_input, 'listing'); $force = 0; if($this->create && strlen($form->GetSubmittedValue($this->create_parameter))) { if(strlen($form->WasSubmitted($this->cancel_input))) $this->state = 'create_canceled'; elseif(strlen($form->WasSubmitted($this->submit_input))) { $this->state = 'created'; switch($state) { case 'creating': case 'create_previewing': break; default: if(strlen($value = $form->GetSubmittedValue($this->update_parameter))) { $this->entry = $value; $this->state = 'updated'; } break; } } elseif($this->save && strlen($form->WasSubmitted($this->save_input))) { $this->state = 'created'; $this->next_state = 'updating'; switch($state) { case 'create_previewing': $this->next_state = 'update_previewing'; case 'creating': break; default: if(strlen($value = $form->GetSubmittedValue($this->update_parameter))) { $this->entry = $value; $this->state = 'updated'; } break; } } elseif($this->preview && strlen($form->WasSubmitted($this->preview_input))) $this->state = 'create_previewing'; else $this->state = 'creating'; } elseif($this->update && strlen($value = $form->GetSubmittedValue($this->update_parameter))) { $this->entry = $value; if(strlen($form->WasSubmitted($this->cancel_input))) $this->state = 'update_canceled'; elseif(strlen($form->WasSubmitted($this->submit_input))) $this->state = 'updated'; elseif($this->save && strlen($form->WasSubmitted($this->save_input))) { $this->state = 'updated'; $this->next_state = 'updating'; switch($state) { case 'update_previewing': $this->next_state = 'update_previewing'; break; } } elseif($this->preview && strlen($form->WasSubmitted($this->preview_input))) { $this->state = 'update_previewing'; $force = 1; } else $this->state = 'updating'; } elseif($this->delete && strlen($value = $form->GetSubmittedValue($this->delete_parameter))) { $this->entry = $value; if(strlen($form->WasSubmitted($this->delete_cancel_input))) $this->state = 'delete_canceled'; elseif(strlen($form->WasSubmitted($this->delete_input))) $this->state = 'deleted'; else $this->state = 'deleting'; } elseif($this->view && strlen($value = $form->GetSubmittedValue($this->view_parameter))) { $this->entry = $value; $this->state = 'viewing'; $this->next_state = ''; } if($this->read && strlen($value = $form->GetSubmittedValue($this->page_parameter))) { $page = intval($value); if($page >= 1) $this->page = $page; } $previewing = 0; $listing = 1; switch($this->state) { case 'create_previewing': case 'update_previewing': $previewing = 1; case 'creating': case 'updating': case 'deleting': case 'viewing': $listing = 0; break; } if(strcmp($this->state, $state) || $force) { $message = array( 'Event'=>$this->state, 'From'=>$this->input, 'ReplyTo'=>$this->input, ); if(strlen($this->target_input)) $message['Target'] = $this->target_input; switch($this->state) { case 'updating': case 'updated': case 'update_previewing': case 'deleting': case 'deleted': case 'viewing': $message['Entry'] = $this->entry; break; case 'listing': $message['Page'] = $this->page; break; } if(strlen($error = $form->PostMessage($message))) return($error); } if($listing) { $message = array( 'Event'=>'listing', 'From'=>$this->input, 'ReplyTo'=>$this->input, 'Page'=>$this->page, ); if(strlen($this->target_input)) $message['Target'] = $this->target_input; if(strlen($error = $form->PostMessage($message))) return($error); } return(''); } Function SetInputProperty(&$form, $property, $value) { switch($property) { case 'FormHeader': $this->form_header = $value; break; case 'FormFooter': $this->form_footer = $value; break; case 'Rows': $this->rows = $value; break; case 'RowStyleColumn': $this->row_style_column = $value; break; case 'RowClassColumn': $this->row_class_column = $value; break; case 'IDColumn': return($this->SetIDColumn($value)); case 'Columns': return($this->SetColumns($value)); case 'TotalEntries': $this->total_entries = $value; break; case 'PageEntries': if($value < 0) return('it was not specified a valid number of entries to list per page'); $this->page_entries = $value; break; case 'Page': $this->page = $value; break; case 'Entry': $this->entry = $value; break; case 'EntryOutput': $this->entry_output = $value; break; case 'ListingMessage': $this->listing_message = $value; break; case 'NoEntriesMessage': $this->no_entries_message = $value; break; case 'ViewingMessage': $this->viewing_message = $value; break; case 'CreateMessage': $this->create_message = $value; break; case 'UpdateMessage': $this->update_message = $value; break; case 'DeleteMessage': $this->delete_message = $value; break; case 'CreatedMessage': $this->created_message = $value; break; case 'UpdatedMessage': $this->updated_message = $value; break; case 'DeletedMessage': $this->deleted_message = $value; break; case 'CreateCanceledMessage': $this->create_canceled_message = $value; break; case 'UpdateCanceledMessage': $this->update_canceled_message = $value; break; case 'DeleteCanceledMessage': $this->delete_canceled_message = $value; break; case 'CreatePreviewMessage': $this->create_preview_message = $value; break; case 'UpdatePreviewMessage': $this->update_preview_message = $value; break; case 'UpdateInput': $this->update_inputs[] = $value; break; case 'AppendMessage': $this->append_message = $value; break; case 'Loaded': $this->loaded = intval($value); break; case 'FieldLayoutProperties': $this->field_layout_properties = $value; break; default: return($this->DefaultSetInputProperty($form, $property, $value)); } return(''); } Function GetInputProperty(&$form, $property, &$value) { switch($property) { case 'Entry': $value = $this->entry; break; case 'Page': $value = $this->page; break; case 'Editing': switch($this->state) { case 'listing': case 'create_canceled': case 'update_canceled': case 'delete_canceled': case 'created': case 'updated': case 'deleted': case 'viewing': $value = 0; break; case 'create_previewing': case 'update_previewing': case 'creating': case 'updating': case 'deleting': default: $value = 1; break; } break; case 'EntryFieldNames': $value = $this->entry_field_names; break; default: return($this->DefaultGetInputProperty($form, $property, $value)); } return(''); } Function ReplyMessage(&$form, $message, &$processed) { $next_state = ''; if(IsSet($message['Cancel']) && $message['Cancel']) { switch($this->state) { case 'creating': case 'created': case 'create_previewing': $next_state = 'create_canceled'; break; case 'updating': case 'updated': case 'update_previewing': $next_state = 'update_canceled'; break; case 'deleting': case 'deleted': $next_state = 'delete_canceled'; break; } $this->state = $next_state; $this->next_state = 'listing'; } elseif(count($form->Invalid)) { switch($this->state) { case 'created': $this->next_state = 'creating'; break; case 'updated': $this->next_state = 'updating'; break; case 'deleted': $this->next_state = 'deleting'; break; } } $ajax = IsSet($message['AJAX']); if($ajax) { switch($this->state) { case 'create_previewing': case 'update_previewing': if(strlen($error = $this->AddLayoutInput($form, $this->state))) return($error); $error_message = $this->GetErrorMessage($form); $actions = array(); $actions[] = array( 'Action'=>'SetInputValue', 'Input'=>$this->state_input, 'Value'=>$form->EncodeJavascriptString($this->state) ); $actions[] = array( 'Action'=>'ReplaceContent', 'Container'=>$this->message_id, 'Content'=>(strcmp($this->state, 'create_previewing') ? $this->update_preview_message : $this->create_preview_message).$this->append_message ); $actions[] = array( 'Action'=>'ReplaceContent', 'Container'=>$this->error_id, 'Content'=>$error_message ); $actions[] = array( 'Action'=>'ReplaceContent', 'Container'=>$this->view_id, 'Content'=>(strlen($error_message) ? '' : $this->entry_output) ); $actions[] = array( 'Action'=>'Connect', 'To'=>$this->layout, 'ConnectAction'=>'MarkValidated', 'Context'=>array( 'Document'=>'_d' ) ); $this->ajax_message['Actions'] = $actions; break; case 'created': case 'updated': if(strlen($error = $this->AddLayoutInput($form, $this->state))) return($error); $error_message = $this->GetErrorMessage($form); $actions = array(); if(IsSet($message['Entry'])) { $this->entry = $message['Entry']; $actions[] = array( 'Action'=>'SetInputValue', 'Input'=>$this->update_parameter, 'Value'=>$form->EncodeJavascriptString($this->entry) ); } if(strlen($this->next_state)) { $actions[] = array( 'Action'=>'SetInputValue', 'Input'=>$this->state_input, 'Value'=>$form->EncodeJavascriptString($this->next_state) ); } if(count($form->Invalid)) { $actions[] = array( 'Action'=>'ReplaceContent', 'Container'=>$this->message_id, 'Content'=>(strcmp($this->next_state, 'creating') ? $this->update_message : $this->create_message).$this->append_message ); } else { $actions[] = array( 'Action'=>'ReplaceContent', 'Container'=>$this->message_id, 'Content'=>(strcmp($this->state, 'created') ? $this->updated_message : $this->created_message).$this->append_message ); } $actions[] = array( 'Action'=>'ReplaceContent', 'Container'=>$this->error_id, 'Content'=>$error_message ); $actions[] = array( 'Action'=>'Connect', 'To'=>$this->layout, 'ConnectAction'=>'MarkValidated', 'Context'=>array( 'Document'=>'_d' ) ); $this->ajax_message['Actions'] = $actions; break; case 'create_canceled': case 'update_canceled': case 'delete_canceled': $actions = array(); $actions[] = array( 'Action'=>'ReplaceContent', 'Container'=>$this->message_id, 'Content'=>(strcmp($this->state, 'create_canceled') ? (strcmp($this->state, 'delete_canceled') ? $this->update_canceled_message : $this->delete_canceled_message) : $this->create_canceled_message).$this->append_message ); $this->ajax_message['Actions'] = $actions; break; } $ti = count($this->update_inputs); for($i = 0; $i < $ti; ++$i) { $input = $this->update_inputs[$i]; $this->ajax_message['Actions'][] = array( 'Action'=>'SetInputValue', 'Input'=>$input, 'Value'=>$form->EncodeJavascriptString($form->GetInputValue($input)) ); } $this->ajax_message['More'] = (strlen($this->next_state) > 0); if(strlen($error = $form->ReplyMessage($this->ajax_message, $processed))) return($error); } if(strlen($this->next_state)) { if(IsSet($message['Entry'])) $this->entry = $message['Entry']; elseif(count($form->Invalid) == 0 && !strcmp($this->state, 'created')) { $form->OutputError('the created message reply does not have the created entry identifier set', $this->input); $this->state = 'listing'; $this->next_state = ''; return(''); } $this->state = $this->next_state; $this->next_state = $next_state; $message = array( 'Event'=>$this->state, 'From'=>$this->input, 'ReplyTo'=>$this->input, ); if(strlen($this->target_input)) $message['Target'] = $this->target_input; if($ajax) $message['AJAX'] = 1; switch($this->state) { case 'updating': case 'updated': case 'update_previewing': case 'deleting': case 'deleted': case 'viewing': if(IsSet($this->entry)) $message['Entry'] = $this->entry; break; case 'listing': $message['Page'] = $this->page; break; } if(strlen($error = $form->PostMessage($message))) return($error); } return(''); } Function PostMessage(&$form, $message, &$processed) { if(!strcmp($message['From'], $this->ajax_input)) { if(count($this->ajax_message)) return(''); $action = $form->GetSubmittedValue($this->action_input); $state = $form->GetSubmittedValue($this->state_input); $action_message = array( 'Event'=>$action, 'From'=>$this->input, 'ReplyTo'=>$this->input, 'AJAX'=>1 ); if(strlen($this->target_input)) $message['Target'] = $this->target_input; switch($action) { case 'preview': $event = 'create_previewing'; switch($state) { case 'update_previewing': case 'updating': $action_message['Entry'] = $this->entry = $form->GetSubmittedValue($this->update_parameter); $event = 'update_previewing'; case 'create_previewing': case 'creating': $action_message['Event'] = $this->state = $event; if(strlen($error = $form->PostMessage($action_message))) return($error); $this->ajax_message = $message; return(''); } break; case 'save': $event = 'created'; switch($state) { case 'create_previewing': case 'update_previewing': $next_state = 'update_previewing'; break; case 'updating': $next_state = ''; break; case 'creating': $next_state = 'updating'; break; } switch($state) { case 'update_previewing': case 'updating': if(strlen($value = $form->GetSubmittedValue($this->update_parameter))) $action_message['Entry'] = $this->entry = $value; $event = 'updated'; case 'creating': case 'create_previewing': $this->next_state = $next_state; $action_message['Event'] = $this->state = $event; if(strlen($error = $form->PostMessage($action_message))) return($error); $this->ajax_message = $message; return(''); } break; } } return($form->ReplyMessage($message, $processed)); } }; ?>