Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
dRmx 16.10.2003 21:07 / 16.10.2003 21:14
Но проблемы на этом не кончаются :(@wear[skin;method][skin;fd;method] ^try{ ^if(-f $skin){ $fd[^file::load[text;$skin]] ^process{^taint[as-is][$fd.text]} }{ ^throw[parser.runtime;poll;Polls $method skin not found] } }{ ^throw[parser.compile;poll;Skin compiling error. Check your $method skin code] }мне вылетает Skin compiling error. Check your $method skin code
@CLASS poll @auto[] $connect_string[mysql://root@localhost/poll] ## main constructor @create[pi_table_in;pa_table_in;extra][extra] ## shit class path $cl_path[/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 ^connect[$connect_string]{ ^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){ ^connect[$connect_string]{ ^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[^connect[$connect_string]{^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{ ^connect[$connect_string]{^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[^connect[$connect_string]{^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){ ^connect[$connect_string]{^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"){ ^connect[$connect_string]{ ^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[^connect[$connect_string]{^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[^connect[$connect_string]{^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[^connect[$connect_string]{^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 ###Есть show_poll.xslt
<?xml version="1.0" encoding="windows-1254"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="document"> <xsl:apply-templates select="poll" /> </xsl:template> <xsl:template match="poll"> <table border="0" cellpadding="3" cellspacing="0"> <tr><td><b><xsl:value-of select="question" /></b></td></tr> <tr><td align="center"> <xsl:if test="@restricted = 'yes'"> <font color="red">Daha цnce oy verdiрiniz iзin oyunuz kabul edilmedi</font> </xsl:if> <xsl:apply-templates select="answers" /> <xsl:apply-templates select="results" /> </td></tr></table> </xsl:template> <xsl:template match="answers"> <form name="poll_{//form/@id}" method="post" action="{//form/@action}"> <table border="0" width="90%"> <xsl:for-each select="answer"> <tr><td> <xsl:element name="input"> <xsl:attribute name="id">answer_<xsl:value-of select="@id" /></xsl:attribute> <xsl:attribute name="type"><xsl:value-of select="//poll/@type" /></xsl:attribute> <xsl:attribute name="class"><xsl:value-of select="//poll/@type" /></xsl:attribute> <xsl:attribute name="name"><xsl:value-of select="//form/@path" /></xsl:attribute> <xsl:attribute name="value"><xsl:value-of select="@id" /></xsl:attribute> <xsl:if test="position()=//poll/@default"> <xsl:attribute name="checked">checked</xsl:attribute> </xsl:if> </xsl:element> <label for="answer_{@id}"><xsl:value-of select="." /></label> </td></tr> </xsl:for-each> </table> <br /> <input type="submit" name="request" value="{//form/@button}" /> </form> </xsl:template> <xsl:template match="results"> <table border="0" width="95%"> <tr><td> <xsl:for-each select="result"> <xsl:value-of select="." /> <xsl:variable name="total"> <xsl:value-of select="//results/@total" /> </xsl:variable> <xsl:variable name="vote"> <xsl:value-of select="@vote_count" /> </xsl:variable> <br /> <img src="/i/bar.gif" align="absmiddle" width="{format-number($vote*70 div $total,'#.')}" height="8" /> <xsl:text> </xsl:text> <xsl:value-of select="@vote_count" /> <xsl:text> </xsl:text>(<xsl:value-of select="format-number($vote*100 div $total,'#.#')" />%) <hr size="1" /> </xsl:for-each> </td></tr> </table> <font size="-2">anket <xsl:value-of select="//date/@started" /> tarihinde baюladэ</font> </xsl:template> </xsl:stylesheet>Есть show_skin.xslt
<?xml version="1.0" encoding="windows-1251"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="document"> <style type="text/css"> input {height:20; font:8pt Tahoma;} </style> <div style="border:1 #CCCCCC solid; padding:5; width:200"> <xsl:apply-templates select="poll" /> </div> </xsl:template> <xsl:template match="poll"> <table border="0" width="200" cellpadding="3" cellspacing="0"> <tr><td><b><xsl:value-of select="question" /></b></td></tr> <tr><td align="center"> <xsl:if test="@restricted = 'yes'"> <font color="red">Ваш голос не был принят, т. к. вы уже голосовали</font> </xsl:if> <xsl:apply-templates select="answers" /> <xsl:apply-templates select="results" /> </td></tr></table> </xsl:template> <xsl:template match="answers"> <form name="poll_{//form/@id}" method="post" action="{//form/@action}"> <table border="0" width="90%"> <xsl:for-each select="answer"> <tr><td> <xsl:element name="input"> <xsl:attribute name="id">answer_<xsl:value-of select="@id" /></xsl:attribute> <xsl:attribute name="type"><xsl:value-of select="//poll/@type" /></xsl:attribute> <xsl:attribute name="name"><xsl:value-of select="//form/@path" /></xsl:attribute> <xsl:attribute name="value"><xsl:value-of select="@id" /></xsl:attribute> <xsl:if test="position()=//poll/@default"> <xsl:attribute name="checked">checked</xsl:attribute> </xsl:if> </xsl:element> <label for="answer_{@id}"><xsl:value-of select="." /></label> </td></tr> </xsl:for-each> </table> <br /> <input type="submit" name="request" value="{//form/@button}" /> </form> </xsl:template> <xsl:template match="results"> <table border="0" width="90%"> <tr><td> <xsl:for-each select="result"> <xsl:value-of select="." /> <xsl:variable name="total"> <xsl:value-of select="//results/@total" /> </xsl:variable> <xsl:variable name="vote"> <xsl:value-of select="@vote_count" /> </xsl:variable> <br /> <img src="bar.gif" align="absmiddle" width="{format-number($vote*100 div $total,'#.')}" height="8" /> <xsl:text> </xsl:text> <xsl:value-of select="@vote_count" /> <xsl:text> </xsl:text>(<xsl:value-of select="format-number($vote*100 div $total,'#.##')" /> %) <hr size="1" /> </xsl:for-each> </td></tr> </table> <font size="-2">опрос ведется с <xsl:value-of select="//date/@started" /></font> </xsl:template> </xsl:stylesheet>Есть poll_extra.p
## poll adder form @add[params][params;new_poll] ## parameters checking ^check_params[$params;add] ## request checking ^if(def $params.request && $params.request is hash && def $params.request.answer){ ## poll hash creating $new_poll[^hash::create[]] ## extracting new poll info $new_poll.question[$params.request.question.field] $new_poll.type[$params.request.type.field] $new_poll.status[$params.request.status.field] $new_poll.button_text[$params.request.button_text.field] ## extracting answers ^if(def $params.request.answer && $params.request.answer is table){ $new_poll.answers[^hash::create[]] ^params.request.answer.menu{ $id[^params.request.answer.line[]] ^params.request.vote_count.offset[set](^params.request.answer.offset[]) $new_poll.answers.$id[ $.answer[$params.request.answer.field] $.vote_count[$params.request.vote_count.field] ] } } ## calling poll creator ^run[$new_poll] }{ ## processing poll skin ^wear[$params.skin;adding] } ######## end of @add[] method ################ ####################################### ## edit form @edit[params][params;poll_id;id;update_hash] ## parameters checking ^check_params[$params;edit] ## request checking ^if(def $params.request && $params.request is hash && def $params.request.exist_answer && $params.request.exist_answer is table){ ## creating update hash $update_hash[^hash::create[]] ## extracting poll info from form $update_hash.poll_id[$params.request.poll_id.field] $update_hash.question[$params.request.question.field] $update_hash.type[$params.request.type.field] $update_hash.status[$params.request.status.field] $update_hash.answers[^hash::create[]] $update_hash.button_text[$params.request.button_text.field] ## extracting answers ^if($params.request.answer is table && $params.request.exist_answer is table){ ^if($params.request.answer > $params.request.exist_answer){ ## detecting answers to update or add ^params.request.answer.menu{ ^if(^params.request.answer.line[] > $params.request.exist_answer){ $id[new_^params.request.answer.line[]] }{ ^params.request.exist_answer.offset[set](^params.request.answer.offset[]) $id[$params.request.exist_answer.field] } ^params.request.vote_count.offset[set](^params.request.answer.offset[]) $update_hash.answers.$id[ $.answer[$params.request.answer.field] $.vote_count[$params.request.vote_count.field] ] } }{ ## detecting answers to update or delete ^params.request.exist_answer.menu{ ^if(^params.request.exist_answer.line[] > $params.request.answer){ $id[delete_^params.request.exist_answer.line[]] $answer[$params.request.exist_answer.field] }{ ^params.request.answer.offset[set](^params.request.exist_answer.offset[]) $id[$params.request.exist_answer.field] $answer[$params.request.answer.field] } ^params.request.vote_count.offset[set](^params.request.exist_answer.offset[]) $update_hash.answers.$id[ $.answer[$answer] $.vote_count[$params.request.vote_count.field] ] } } } ## calling poll updater ^update[$update_hash] }{ ## detecting poll_id $poll_id(^params.poll_id.int(0)) $poll_info[^extract[$poll_id;info]] $poll_answers[^extract[$poll_id;answers]] ## processing poll skin ^wear[$params.skin;editing] } ######## end of @edit[] method ######## ############################################## ## skin viewer @wear[skin;method][skin;fd;method] ^try{ ^if(-f $skin){ $fd[^file::load[text;$skin]] ^process{^taint[as-is][$fd.text]} }{ ^throw[parser.runtime;poll;Polls $method skin not found] } }{ ^throw[parser.compile;poll;Skin compiling error. Check your $method skin code] } ######## end of @wear[] method ###############