Created
December 29, 2013 15:45
-
-
Save septor/8171638 to your computer and use it in GitHub Desktop.
possible solution for issue #15 that works for e107 v1.0.4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
+---------------------------------------------------------------+ | |
| e107 website system | |
| survey.php | |
| | |
| Released under the terms and conditions of the | |
| GNU General Public License (http://gnu.org). | |
+---------------------------------------------------------------+ | |
*/ | |
require_once("../../class2.php"); | |
require_once(e_HANDLER."userclass_class.php"); | |
require_once(e_HANDLER."np_class.php"); | |
require_once(e_PLUGIN."survey/survey.inc.php"); | |
include_lan(e_PLUGIN."survey/languages/".e_LANGUAGE.".php"); | |
function np($url, $from, $view, $total, $td, $qs=""){ | |
/* | |
# Next previous pages | |
# - parameter #1: string $url, refer url | |
# - parameter #2: int $from, start figure | |
# - parameter #3: int $view, items per page | |
# - parameter #4: int $total, total items | |
# - parameter #5: string $td, comfort text | |
# - parameter #6: string $qs, QUERY_STRIING, default null | |
# - return null | |
# - scope public | |
*/ | |
if($total == 0){ | |
return; | |
} | |
$ns = new e107table; | |
echo "<table style='width:100%'> | |
<tr>"; | |
if($from > 1){ | |
$s = $from-$view; | |
echo "<td style='width:33%' class='nextprev'>"; | |
if($qs != ""){ | |
$text = "<div style='text-align:left'><span class='smalltext'><a href='{$url}?{$qs}.{$s}'>".NP_1."</a></span></div>"; | |
}else{ | |
$text = "<div style='text-align:left'><span class='smalltext'><a href='{$url}?{$s}'>".NP_1."</a></span></div>"; | |
} | |
echo $text; | |
}else{ | |
echo "<td style='width:33%'> "; | |
} | |
echo "</td>\n<td style='width:34%' class='nextprev'>"; | |
$start = $from+1; | |
$finish = $from+$view; | |
if($finish>$total){ | |
$finish = $total; | |
} | |
$text = "<div style='text-align:center'><span class='smalltext'>$td $start - $finish of $total</span></div>"; | |
echo $text; | |
$s = $from+$view; | |
if($s < $total){ | |
echo "</td><td style='width:33%' class='nextprev'>"; | |
if($qs != ""){ | |
$text = "<div style='text-align:right'><span class='smalltext'><a href='".$url."?".$qs.".".$s."'>".NP_2."</a></span></div></td>"; | |
}else{ | |
$text = "<div style='text-align:right'><span class='smalltext'><a href='".$url."?".$s."'>".NP_2."</a></span></div></td>"; | |
} | |
echo $text; | |
}else{ | |
echo "</td><td style='width:33%'> </td>"; | |
} | |
echo "</tr>\n</table>"; | |
} | |
function already_voted($userlist){ | |
if(USER == TRUE){ | |
$voted = explode(".",$userlist); | |
if(in_array(USERID,$voted)){return TRUE;} | |
} | |
return FALSE; | |
} | |
require_once(HEADERF); | |
$arg=explode(".",e_QUERY); | |
function getfield($f){ | |
global $fdata; | |
foreach($fdata as $field){ | |
if($f == $field['field_number']){ | |
return $field; | |
} | |
} | |
} | |
function parse_survey_message($message){ | |
$tmp = explode("\n", $message); | |
for($c=0; $c < count($tmp); $c++){ | |
if(preg_match("/\{(.*?)=(.*?)\}/", $tmp[$c],$m)){ | |
$field=getfield($m[2]); | |
if($m[1] == "Q"){ | |
$ret .= show_form_question($field); | |
} | |
if($m[1] == "F"){ | |
$ret .= show_form_field($field); | |
} | |
}else{ | |
$ret .= $tmp[$c]; | |
} | |
} | |
return $ret; | |
} | |
function isImage($url) | |
{ | |
$params = array('http' => array( | |
'method' => 'HEAD' | |
)); | |
$ctx = stream_context_create($params); | |
$fp = @fopen($url, 'rb', false, $ctx); | |
if (!$fp) | |
return false; // Problem with url | |
$meta = stream_get_meta_data($fp); | |
if ($meta === false) | |
{ | |
fclose($fp); | |
return false; // Problem reading data from url | |
} | |
$wrapper_data = $meta["wrapper_data"]; | |
if(is_array($wrapper_data)){ | |
foreach(array_keys($wrapper_data) as $hh){ | |
if (substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19 | |
{ | |
fclose($fp); | |
return true; | |
} | |
} | |
} | |
fclose($fp); | |
return false; | |
} | |
function show_survey($snum) | |
{ | |
global $sql, $ns, $tell_required, $_res, $fdata, $survey_class, $tp; | |
$snum = intval($snum); | |
$sql -> db_Select("survey","*","survey_id='{$snum}' "); | |
if($row = $sql -> db_Fetch()) | |
{ | |
// extract($row); | |
if(!check_class($row['survey_class'])) | |
{ | |
$ns->tablerender("Error - {$row['survey_name']}",LAN_SUR6); | |
return; | |
} | |
if($row['survey_class'] != e_UC_PUBLIC && $row['survey_once']) | |
{ | |
if(already_voted($row['survey_user'])) | |
{ | |
$ns->tablerender("Error - {$row['survey_name']}",LAN_SUR2); | |
return; | |
} | |
} | |
$fdata = unserialize($row['survey_parms']); | |
$frm = new myform; | |
$ret .= $frm -> form_open("post", e_SELF); | |
$ret .= $frm -> form_hidden("survey_id", $row['survey_id']); | |
$ret .= "<table style='width:96%'>"; | |
if(check_class($row['survey_viewclass']) && $row['survey_save_results']) | |
{ | |
$ret .= "<tr><td colspan='2' style='text-align:center;'>[<a href='".e_PLUGIN."survey/view.php?{$row['survey_id']}'>".LAN_SUR1."</a>]</td></tr>"; | |
$ret .= "<tr><td colspan='2' style='text-align:center;'>[<a href='".e_PLUGIN."survey/stats.php?{$row['survey_id']}'>".LAN_SUR13."</a>]</td></tr>"; | |
} | |
if(preg_match("/\{Q=(\d*?)\}/",$row['survey_message'])) | |
{ | |
$ret .= "<tr><td>"; | |
$ret .= parse_survey_message($row['survey_message']); | |
$ret .= "</td></tr>"; | |
} | |
else | |
{ | |
$ret .= "<tr><td colspan='2'>{$row['survey_message']}</td></tr>"; | |
foreach($fdata as $field) | |
{ | |
if(!$field['field_hidden'] && $field['field_type'] != 9){ | |
$fn = $field['field_number']; | |
$ret .= "\n<tr>"; | |
if($field['field_type'] != 6) | |
{ | |
$ret .= "<td class='forumheader3' style='vertical-align:top;'>"; | |
$ret .= show_form_question($field); | |
$ret .= "</td>"; | |
$ret .= "<td class='forumheader3'>"; | |
} | |
else | |
{ | |
$ret .= "<td colspan='2'>"; | |
} | |
$ret .= show_form_field($field); | |
$ret .= "</tr>"; | |
} | |
} | |
} | |
$ret .= "<tr><td class='forumheader3' colspan='2'>".LAN_SUR4."</td></tr>"; | |
$ret .= "<tr><td class='forumheader' colspan='2' style='text-align:center;'>"; | |
$ret .= $frm -> form_button("submit","submit",LAN_SUR5); | |
$ret .= "</td></tr>"; | |
$ret .= $frm -> form_close(); | |
$ret .= "</table>"; | |
} | |
$ns->tablerender($row['survey_name'], $ret); | |
} | |
if($_POST['submit']){ | |
$cnv = new convert; | |
$mailto_addresses = ""; | |
$submit_time = time(); | |
$mailtext = LAN_SUR42.": ".$cnv -> convert_date($submit_time,"long")."\n\n"; | |
$sql -> db_Select("survey","*","survey_id=".intval($_POST['survey_id'])); | |
if($row = $sql -> db_Fetch()){ | |
extract($row); | |
} | |
if($survey_class != e_UC_PUBLIC && $survey_once){ | |
if(already_voted($survey_user)){ | |
$ns -> tablerender("Error - {$survey_name}",LAN_SUR2); | |
require_once(FOOTERF); | |
exit; | |
} | |
} | |
if(!check_class($survey_class)){ | |
$ns -> tablerender("Error - {$survey_name}",LAN_SUR6); | |
require_once(FOOTERF); | |
exit; | |
} | |
$parms=unserialize($survey_parms); | |
$reshow = 0; | |
foreach($parms as $parm) | |
{ | |
$fn = $parm['field_number']; | |
$v = $_POST['results'][$fn]; | |
$fvalue[$f]=$v; | |
// CHECK FOR EMPTY REQUIRED FIELDS | |
if($parm['field_req']) | |
{ | |
switch($parm['field_type']) | |
{ | |
case 2: //textarea | |
case 7: //date | |
case 8: //name | |
case 10: //email | |
case 11: //number | |
case 12: //emailto | |
case 1: //text | |
if(ltrim(rtrim($v))=="") | |
{ | |
$tell_required[$fn]=1; | |
$reshow=1; | |
} | |
break; | |
case 3: //checkbox | |
if(!count($_POST['results'][$fn])) | |
{ | |
$tell_required[$fn]=1; | |
$reshow=1; | |
} | |
break; | |
case 4: //radio | |
if(!$_POST['results'][$fn]) | |
{ | |
$tell_required[$fn] = 1; | |
$reshow=1; | |
} | |
break; | |
case 5: //dropdown | |
if($v == "---") | |
{ | |
$tell_required[$fn] = 1; | |
$reshow=1; | |
} | |
break; | |
} | |
} | |
// CHECK FIELD CONTENTS | |
switch($parm['field_type']) | |
{ | |
case 12: //emailto | |
if($v && !preg_match("#([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i",$v)) | |
{ | |
$error_text[$fn] = LAN_SUR40; | |
$reshow=1; | |
} | |
else | |
{ | |
$mailto_addresses .= $v.","; | |
} | |
break; | |
case 10: //email | |
if($v && !preg_match("#([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i",$v)) | |
{ | |
$error_text[$fn] = LAN_SUR40; | |
$reshow=1; | |
} | |
break; | |
case 11: //number | |
if(!is_numeric($v)) | |
{ | |
$error_text[$fn] = LAN_SUR41; | |
$reshow=1; | |
} | |
break; | |
} | |
if($parm['field_type'] == 3) | |
{ | |
$ser = array(); | |
foreach($v as $x) | |
{ | |
$ser[] = $tp->toDB($x); | |
} | |
$_res[$fn]=serialize($ser); | |
unset($ser); | |
} | |
else | |
{ | |
$_res[$fn] = $tp->toDB($v); | |
} | |
switch($parm['field_type']) | |
{ | |
case (3): //checkbox | |
$mailtext .="{$parm['field_text']}: ".implode(", ",$v)." \n"; | |
break; | |
case (6): //separator | |
$mailtext .="{$parm['field_text']} \n"; | |
case (12): //emailto | |
break; | |
default: | |
$mailtext .="{$parm['field_text']}: {$v} \n"; | |
break; | |
} | |
} | |
if($reshow) | |
{ | |
show_survey($_POST['survey_id']); | |
require_once(FOOTERF); | |
exit; | |
} | |
if($survey_forum) | |
{ | |
require_once(e_PLUGIN."forum/forum_class.php"); | |
$survey_forum = new e107forum; | |
if(USER==TRUE) | |
{ | |
$poster['post_userid'] = USERID; | |
$poster['post_user_name'] = USERNAME; | |
} | |
else | |
{ | |
$poster['post_userid'] = 0; | |
$poster['post_user_name'] = 'Anonymous'; | |
} | |
$newMailText = array(); | |
$checkLinks = explode(" ", $mailtext); | |
foreach($checkLinks as $convertLink) | |
{ | |
if(preg_match("/\bhttp\b/i", $convertLink)) | |
{ | |
if(isImage($convertLink)) | |
{ | |
$convertLink = "<img src='".$convertLink."' />"; | |
} | |
} | |
array_push($newMailText, $convertLink); | |
} | |
$mailtext = implode(" ", $newMailText); | |
$thread_text = $tp->toDB($mailtext); | |
$survey_forum->thread_insert($row['survey_name'], $thread_text, $row['survey_forum'], 0, $poster, 1, 0); | |
} | |
if($survey_mailto) | |
{ | |
require_once(e_HANDLER."mail.php"); | |
sendemail($survey_mailto,LAN_SUR7." {$survey_name}",strip_tags($mailtext)); | |
} | |
if($mailto_addresses) | |
{ | |
require_once(e_HANDLER."mail.php"); | |
sendemail($mailto_addresses,LAN_SUR7." {$survey_name}",strip_tags($mailtext)); | |
} | |
if(USER == TRUE && !already_voted($survey_user)) | |
{ | |
$survey_user.=".".USERID; | |
$sql -> db_Update("survey", "survey_user='{$survey_user}' WHERE survey_id='$survey_id' "); | |
} | |
$results=serialize($_res); | |
$sid = intval($_POST['survey_id']); | |
$sql -> db_Insert("survey_results","0,{$submit_time},{$sid},'{$results}'"); | |
$text=LAN_SUR8; | |
if($survey_submit_message) | |
{ | |
$text = $tp->toHTML($survey_submit_message, true); | |
} | |
if(check_class($survey_viewclass) && $survey_save_results) | |
{ | |
$text .= "<br /><br /><div style='text-align:center;'>"; | |
$text .= "[<a href='".e_PLUGIN."survey/view.php?".$survey_id."'>".LAN_SUR1."</a>]"; | |
$text .= "</div>"; | |
} | |
$ns -> tablerender(LAN_SUR9,$text); | |
require_once(FOOTERF); | |
exit; | |
} | |
show_survey($arg[0]); | |
require_once(FOOTERF); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment