00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 require_once(PATH_tslib."class.tslib_pibase.php");
00058
00059 class tx_ttpoll extends tslib_pibase {
00060 var $cObj;
00061
00062 var $enableFields ="";
00063
00064 var $config=array();
00065 var $conf=array();
00066
00067 var $pollTable = "";
00068 var $pollTableUid = "";
00069 var $pollTablePid = "";
00070
00074 function main_poll($content,$conf) {
00075
00076
00077
00078 $this->conf=$conf;
00079
00080 $this->enableFields = $this->cObj->enableFields("tt_poll");
00081
00082
00083 $this->config["code"] = $this->cObj->stdWrap($this->conf["code"],$this->conf["code."]);
00084 if (!$this->config["code"]) { $this->config["code"]="SHOWHELP"; }
00085
00086
00087 $items=array();
00088 if ( $this->conf["pollTable"] ) {
00089 $this->pollTable = $this->conf["pollTable"];
00090 $this->pollTablePid = intval($this->cObj->stdWrap($this->conf["pollTablePid"],$this->conf["pollTablePid."]));
00091 $this->pollTablePid = $this->pollTablePid ? $this->pollTablePid : $GLOBALS["TSFE"]->id;
00092 $this->pollTableUid = intval($this->cObj->stdWrap($this->conf["pollTableUid"],$this->conf["pollTableUid."]));
00093 if (!$this->pollTableUid) {
00094 list (,$this->pollTableUid) = explode(":",$this->cObj->currentRecord);
00095 }
00096 $item = $this->getItempollLink($this->pollTable."_".$this->pollTableUid, $this->pollTablePid);
00097 if (is_array($item)) {
00098 $items[] = $item;
00099 }
00100 } else {
00101 $items[] = $this->cObj->data;
00102 }
00103
00104 $afterBegin = $this->cObj->data["starttime"] ? ($this->cObj->data["starttime"] <= time()) : TRUE;
00105 $inProgress = ($afterBegin AND $this->cObj->data["endtime"]) ? (($this->cObj->data["starttime"] <= time()) AND (time() <=$this->cObj->data["endtime"])) : $afterBegin;
00106 $openEnd = ($afterBegin AND !$this->cObj->data["endtime"]);
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 $codes=t3lib_div::trimExplode(",", strtoupper($this->config["code"]),1);
00117
00118 $content="";
00119 reset($items);
00120 while(list(,$item)=each($items)) {
00121
00122 $answers = explode("\n",$item["answers"]);
00123 $POST = t3lib_div::_POST();
00124
00125
00126 unset($submittedVoteKey);
00127 if($GLOBALS["HTTP_COOKIE_VARS"]["t3_tt_poll_voted_".$itema["uid"]]){
00128 $submittedVoteKey = $GLOBALS["HTTP_COOKIE_VARS"]["t3_tt_poll_voted_".$itema["uid"]];
00129 }else{
00130 $datakeys = explode(":",$POST["locationData"]);
00131 $submittedVoteKey = $POST["data"][$datakeys[1]][$datakeys[2]]["vote"];
00132 }
00133 $submittedVoteText = "";
00134 $submittedVote = "";
00135 $voteMsg = "";
00136
00137
00138 if ( $submittedVoteKey ) {
00139 reset($answers);
00140 while(list(,$value)=each($answers)) {
00141 list(,$answer) = explode("|",$value);
00142 $answer=trim($answer);
00143 if ($submittedVoteKey == md5($answer)) {
00144 $submittedVoteText = $answer;
00145 }
00146 }
00147 }
00148
00149 reset($codes);
00150 while(list(,$theCode)=each($codes)) {
00151 $theCode = (string)trim($theCode);
00152 switch($theCode) {
00153 case "VOTEFORM":
00154 if ($inProgress) {
00155 $lConf = $this->conf["voteform."];
00156
00157 list ($submitButton) = array_values($lConf["dataArray."]);
00158
00159 unset($lConf["dataArray."]);
00160 $count = 10;
00161 reset($answers);
00162 while(list(,$value)=each($answers)) {
00163 list(,$answer) = explode("|",$value);
00164 $answer=trim($answer);
00165 $lConf["dataArray."][$count."."]["type"] = "*data[tt_poll][".$item["uid"]."][vote]=radio";
00166 $lConf["dataArray."][$count."."]["value"] = $answer."=".md5($answer);
00167 $count += 10;
00168 }
00169 $lConf["dataArray."]["9990."] = $submitButton;
00170
00171 $lConf["dataArray."]["9998."] = array(
00172 "type" => "clearCachePid=hidden",
00173 "value" => $GLOBALS["TSFE"]->id
00174 );
00175 $target_id = intval($this->cObj->stdWrap($lConf["redirect"],$lConf["redirect."]));
00176 $target_id = $target_id ? $target_id : intval($this->cObj->stdWrap($lConf["type"],$lConf["type."]));
00177 if ($target_id AND ($target_id != $GLOBALS["TSFE"]->id)) {
00178 $lConf["dataArray."]["9999."] = array(
00179 "type" => "clearCacheTargetPid=hidden",
00180 "value" => $target_id
00181 );
00182 }
00183
00184 $content .= $this->cObj->FORM($lConf);
00185 }
00186 break;
00187
00188 case "RESULT":
00189 if ($afterBegin) {
00190 $content .= $this->cObj->cObjGetSingle ($this->conf["resultObj"], $this->conf["resultObj."]);
00191
00192 if (isset ($this->conf["resultItemObj."])) {
00193 $contentItems = "";
00194 $answers = explode("\n",$item["answers"]);
00195 reset($answers);
00196 while(list(,$value)=each($answers)) {
00197 if (trim($value)) {
00198 $lConf = $this->conf["resultItemObj."];
00199 list($votes,$answer) = explode("|",$value);
00200 $markContentArray = array();
00201 $markContentArray["###ITEMVOTES###"] = $votes;
00202 $markContentArray["###PERCENT###"] = $item["votes"]?(string)(round((double)($votes * 100.0 / (double)$item["votes"]),1)):0;
00203 $markContentArray["###ANSWER###"] = $answer;
00204 $markContentArray["###POLLFULLWIDTH###"] = $this->conf["pollOutputWidth"];
00205 $markContentArray["###POLLWIDTH###"] = $item["votes"]?(int)((double)$this->conf["pollOutputWidth"]*($votes / (double)$item["votes"])):0;
00206 $markContentArray["###POLLREMAINWIDTH###"] = (int)$markContentArray["###POLLFULLWIDTH###"] - (int)$markContentArray["###POLLWIDTH###"];
00207 $this->cObj->substituteMarkerInObject ($lConf, $markContentArray);
00208 $contentItems .= $this->cObj->cObjGetSingle ($this->conf["resultItemObj"], $lConf);
00209 }
00210 }
00211 }
00212 }
00213 break;
00214
00215 case "SUBMITTEDVOTE":
00216 if (($inProgress OR $openEnd) AND $submittedVoteText AND $GLOBALS["no_cache"]) {
00217 $voteMsg = $this->cObj->cObjGetSingle ($conf["submittedVoteObj"], $conf["submittedVoteObj."]);
00218 $submittedVote = $submittedVoteText;
00219 }
00220 break;
00221
00222 default:
00223 $langKey = strtoupper($GLOBALS["TSFE"]->config["config"]["language"]);
00224 $helpTemplate = $this->cObj->fileResource("EXT:tt_poll/pi/poll_help.tmpl");
00225
00226
00227 $helpTemplate_lang="";
00228 if ($langKey) {$helpTemplate_lang = $this->cObj->getSubpart($helpTemplate,"###TEMPLATE_".$langKey."###");}
00229 $helpTemplate = $helpTemplate_lang ? $helpTemplate_lang : $this->cObj->getSubpart($helpTemplate,"###TEMPLATE_DEFAULT###");
00230
00231
00232 $markerArray["###CODE###"] = ($theCode=="SHOWHELP") ? "" : $theCode;
00233 $content.=$this->cObj->substituteMarkerArray($helpTemplate,$markerArray);
00234 break;
00235 }
00236 }
00237 $markContentArray = array();
00238 $markContentArray["###RESULTITEMS###"] = $contentItems;
00239 $markContentArray["###TITLE###"] = $item["title"];
00240 $markContentArray["###QUESTION###"] = $item["question"];
00241 $markContentArray["###TOTALVOTES###"] = $item["votes"];
00242 $markContentArray["###VOTEMSG###"] = $voteMsg;
00243 $markContentArray["###SUBMITTEDVOTE###"] = $submittedVote;
00244 $markContentArray["###PROGRESSMSG###"] = "";
00245 if ($inProgress) {
00246 if (!$openEnd) {
00247 $markContentArray["###PROGRESSMSG###"] = $this->cObj->cObjGetSingle ($this->conf["inProgressObj"], $this->conf["inProgressObj."]);
00248 }
00249 } else {
00250 $markContentArray["###PROGRESSMSG###"] = $this->cObj->cObjGetSingle ($this->conf["finishedObj"], $this->conf["finishedObj."]);
00251 }
00252 $markContentArray["###STARTTIME###"] = $this->cObj->stdWrap($this->cObj->data["starttime"],$conf["date_stdWrap."]);
00253 $markContentArray["###ENDTIME###"] = $this->cObj->stdWrap($this->cObj->data["endtime"],$conf["date_stdWrap."]);
00254 $content = $this->cObj->substituteMarkerArray ($content, $markContentArray);
00255 }
00256
00257 return $this->cObj->wrap($content,$conf["wrap."]);
00258 }
00259
00260
00261
00262
00263 function getItemPollLink($recordlink, $pid) {
00264 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tt_poll', 'recordlink='.$GLOBALS['TYPO3_DB']->fullQuoteStr($recordlink, 'tt_poll').' AND pid='.intval($pid).$this->enableFields);
00265 return $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
00266 }
00267
00268
00269 }
00270
00271
00272
00273 if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/tt_poll/pi/class.tx_ttpoll.php"]) {
00274 include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/tt_poll/pi/class.tx_ttpoll.php"]);
00275 }
00276
00277 ?>