| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
dRmx 27.08.2003 02:07
Значит, выполняю первый вариант, меняю^что-либо:sql{ ... }на ^MAIN:dbconnect{^что-либо:sql{ ... }}. Ошибки. Ищу. Исправляю. Так несколько раз. При том, что в корневой auto.p написал: @dbconnect[code]
^connect[$connect_string]{$code}Правильно ли я в нескольких случаях закрыл скобки и вообще вставил ^MAIN:dbconnect точно не уверен. Но ругаться браузер насчет connect-а перестал. Радует. Прохожу еще несколько ошибок. Вроде исправляю. Очередная непроходимая связана со string method not found status. ^if((def $params.request && $params.request is hash && def $params.request.$path_param) || $poll_info.status eq "closed")Приведу все-таки код. Может кому-нибудь будет не лень просмотреть и помочь мне привести в рабочий вид. ##############################################
## Poll creating and supporting class
@CLASS
poll
##############################################
## main constructor
@create[pi_table_in;pa_table_in;extra][extra]
## shit class path
$cl_path[/classes/poll]
## defining poll_info table
$pi_table[$pi_table_in]
## defining poll_answers table
$pa_table[$pa_table_in]
## defining date used in methods
$date_now[^date::now[]]
## adding extra methods
^if(def $extra){
^try{
^if(-f $extra){
$extra[^file::load[text;$extra]]
^process{^taint[as-is][$extra.text]}
}{
^throw[parser.runtime;poll;Extra methods file not found]
}
}{
^throw[parser.compile;poll;Extra methods compiling error. Check your extra methods code]
}
}
######## end of @create[] constructor ########
##############################################
## creates and runs-in new poll
@run[params][params;poll_id;answer_keys;id]
## parameters checking and errors detecting
^check_params[$params;run]
## question checking
^if(!def $params.question){
^throw[parser.runtime;poll;Poll question not defined]
}
## answers checking
^if(!def $params.answers || !($params.answers is hash)){
^throw[parser.runtime;poll;Answers parameter contains illegal value]
}
## inserting poll into $pi_table
^MAIN:dbconnect{
^void:sql{
INSERT INTO
$pi_table (
question,
type,
default_value,
button_text,
status,
dt_started
)
VALUES
(
'$params.question',
'^if($params.type eq "checkbox"){$params.type}{radio}',
'^params.default.int(1)',
'^if(def $params.button_text){$params.button_text}{Ответить}',
'^if($params.status eq "active"){$params.status}{closed}',
'^date_now.sql-string[]'
)
}
}
## extracting last_insert_id()
$poll_id[^last_insert_id[0]]
## sorting income answers
$answer_keys[^params.answers._keys[]]
^answer_keys.sort($answer_keys.key)
## inserting answers into $pa_table
^answer_keys.menu{
$id[$answer_keys.key]
^if(!($params.answers.$id is hash)){
^throw[parser.runtime;poll;Answers must be defined as a hash]
}
^if(def $params.answers.$id.answer){
^MAIN:dbconnect{
^void:sql{
INSERT INTO
$pa_table (
poll_id,
answer,
vote_count
)
VALUES
(
'$poll_id',
'$params.answers.$id.answer',
'^params.answers.$id.vote_count.int(0)'
)
}
}
}
}
## returns created poll's id and it's status
$result[$poll_id[$poll_id]$status[^MAIN:dbconnect{^string:sql{SELECT status FROM $pi_table WHERE poll_id = $poll_id}}[$.default{closed}]]]
######## end of @run[] method ########
######################################
## draws the poll body on your page
@show[params][params;poll_id;path_param;cookie;expires;poll;action;answers]
## parameters checking
^check_params[$params;show]
## defining poll_id
^if(def $params.poll_id && $params.poll_id eq "last_active"){
$poll_id[^last_insert_id[0]]
}{
$poll_id[^params.poll_id.int(0)]
}
## extracting poll from database
$poll_info[^extract[$poll_id;info]]
## path parameter defining
$path_param[^if(def $params.path_param){^taint[xml][$params.path_param]}{vote_for}]
## detecting vote
^if((def $params.request && $params.request is hash && def $params.request.$path_param) || $poll_info.status eq "closed"){
## detecting restriction
^if(def $params.restrict && $params.restrict is hash){
## cookie name defining
^if(def $params.restrict.cookie){
$cookie[${poll_id}_$params.restrict.cookie]
}{
$cookie[${poll_id}_poll]
}
## expire date defining
^if(def $params.restrict.expires){
$expires[^params.restrict.expires.int(1)]
}{
$expires[session]
}
## setting cookie
^if(!def $cookie:$cookie){
^if($expires eq "session"){
$cookie:$cookie[$expires]
}{
$cookie:$cookie($expires)
}
}{
## voting restricted
$restricted(1)
}
}
## updating vote counts
^if(!$restricted && def $params.request.$path_param && $params.request.$path_param is table && $poll_info.status ne "closed"){
^params.request.$path_param.menu{
^MAIN:dbconnect{
^void:sql{
UPDATE $pa_table
SET vote_count = vote_count+1
WHERE answer_id = '^params.request.$path_param.field.int(0)'
AND poll_id = '$poll_id'
}
}
}
}
## user voted or poll closed
$action[result]
}{
## active poll, no vote submitted
$action[answer]
}
## hashing poll
$poll[^poll_info.hash[poll_id]]
## extracting answers
$answers[^extract[$poll_id;answers]]
## hashing answers
$answers[^answers.hash[answer_id]]
## inserting answers into $poll hash
$poll.$poll_id.answers[$answers]
## adding path parameter
$poll.$poll_id.path_param[$path_param]
## extracting total votes for this poll
$poll.$poll_id.total[^MAIN:dbconnect{^string:sql{SELECT SUM(vote_count) FROM $pa_table WHERE poll_id = '$poll_id' GROUP BY poll_id}}[$.default{0}]]
^if($poll.$poll_id.total eq "0"){$poll.$poll_id.total[100]}
## rectriction defining
$poll.$poll_id.restricted[^if($restricted){yes}{no}]
## getting poll view
^if(def $params.skin){
## processing poll skin
^transform[$params.skin;^printPoll[$poll;$action]]
}{
## printing poll
^printPoll[$poll;$action]
}
######## end of @show[] method ########
#######################################
## updates existing poll
@update[params][params;poll_id]
## parameters checking
^check_params[$params;update]
## poll_id detecting
^if(!def $params.poll_id){
^throw[parser.runtime;poll;Nothing to update, check your ^$.poll_id[]]
}{
$poll_id(^params.poll_id.int(0))
^if($poll_id <= 0){
^throw[parser.runtime;poll;Invalid ^$.poll_id[]]
}
}
## updating poll info
^if(def $params.question || def $params.type || def $params.status || def $params.default){
^MAIN:dbconnect{
^void:sql{
UPDATE $pi_table
SET question = ^if(def $params.question){'$params.question'}{question},
type = ^if(def $params.type){'^if($params.type eq "checkbox"){checkbox}{radio}'}{type},
default_value = ^if(def $params.default){'^params.default.int(1)'}{default_value},
button_text = ^if(def $params.button_text){'$params.button_text'}{button_text},
status = ^if(def $params.status){^if($params.status eq "active"){'active', dt_ended = ''}{'closed', dt_ended = '^date_now.sql-string[]'}}{status}
WHERE poll_id = '$poll_id'
}
}
}
## updating answers
^if(def $params.answers && $params.answers is hash){
^params.answers.foreach[key;value]{
^if($value is hash){
^if(^key.mid(0;3) eq "new"){
## adding new answer to poll
^MAIN:dbconnect{
^void:sql{
INSERT INTO
$pa_table
(
poll_id,
answer,
vote_count
)
VALUES
(
'$poll_id',
'$value.answer',
'^value.vote_count.int(0)'
)
}
}{
## deleting answers
^if(^key.mid(0;6) eq "delete"){
^void:sql{
UPDATE $pa_table
SET poll_id = 0
WHERE answer_id = ^value.answer.int(0)
AND poll_id = '$poll_id'
}
}{
## updating exist answer
^void:sql{
UPDATE $pa_table
SET answer = ^if(def $value.answer){'$value.answer'}{answer},
vote_count = ^if(def $value.vote_count){'^value.vote_count.int(0)'}{vote_count}
WHERE answer_id = ^key.int(0)
AND poll_id = '$poll_id'
}
}
}
}
}
}
}
######## end of @update[] method ########
##############################################
## poll_info and poll_answers extractor
@extract[poll_id;type][poll_id;type]
^if(def $poll_id){
^switch[$type]{
^case[info]{$result[^MAIN:dbconnect{
^table::sql{
SELECT
poll_id,
question,
type,
default_value,
button_text,
status,
dt_started,
dt_ended
FROM $pi_table
^if($poll_id ne "all"){
WHERE poll_id = '^poll_id.int(0)'
}
}
}]
}
^case[answers]{$result[^MAIN:dbconnect{
^table::sql{
SELECT
answer_id,
poll_id,
answer,
vote_count
FROM $pa_table
^if($poll_id ne "all"){
WHERE poll_id = '^poll_id.int(0)'
}
}
}]
}
^case[DEFAULT]{$result[]}
}
}{
$result[]
}
######## end of @extract[] method ############
##############################################
@last_insert_id[default][default]
$result[^MAIN:dbconnect{^string:sql{SELECT MAX(poll_id) FROM $pi_table}[$.default{$default}]}]
######## end of @last_insert_id[] method ########
##############################################
## parameters hash checker
@check_params[params;method][params;method]
^if(!def $params || !($params is hash)){
^throw[parser.runtime;poll;Defined none of parameters while calling <b>^#40$method[]</b> method]
}
######## end of @check_params[] method #######
#######################################
## poll xml code generator
@printPoll[params;action][params;action]
^try{
## code generating
^params.foreach[p_id;poll]{
<poll id="$p_id" status="$poll.status" type="$poll.type" default="$poll.default_value" restricted="$poll.restricted">
<question>$poll.question</question>
<${action}s total="$poll.total">
^poll.answers.foreach[a_id;answer]{
<$action id="$a_id" vote_count="$answer.vote_count">
$answer.answer
</$action>
}
</${action}s>
<date started="$poll.dt_started" closed="$poll.dt_ended" />
<form path="$poll.path_param" action="$request:uri" button="$poll.button_text" />
</poll>
}
}{
^throw[parser.compile;poll;printPoll method compiling error.Check your parameters]
}
######## end of @printPoll[] method ###
#######################################
## poll xml xslt transformator
@transform[xslt_file;xml_code][xslt_file;xml_code;document;transformedDoc]
$document[^xdoc::create{<?xml version="1.0" encoding="$response:charset"?>
<document>
^untaint{$xml_code}
</document>}]
$transformedDoc[^document.transform[$xslt_file]]
^transformedDoc.string[
$.method[html]
]
######## end of @transform[] method ###Глупо заявлять, что класс писал не я.