function cron__check_for_participant_exclusion() { global $settings; $mess = ""; if ($settings['automatic_exclusion'] == 'y') { $status_query = participant_status__get_pquery_snippet("eligible_for_experiments"); $query = "SELECT * FROM " . table('participants') . " \n \tWHERE " . $status_query . " \n \tAND number_noshowup >= '" . $settings['automatic_exclusion_noshows'] . "'"; $result = or_query($query); $excluded = 0; $informed = 0; while ($line = pdo_fetch_assoc($result)) { $done = participant__exclude_participant($line); if ($done == 'informed') { $informed++; } $excluded++; } if ($excluded > 0) { $mess .= "participants excluded: " . $excluded; } if ($informed > 0) { $mess .= "\nparticipants informed: " . $informed; } } return $mess; }
function query__apply_permanent_queries() { global $settings; $continue = true; $target = ''; $num_queries = 0; $num_p = 0; $num_assigned = 0; if ($continue) { if ($settings['allow_permanent_queries'] != 'y') { $continue = false; } } if ($continue) { $ppart = array(); $ppart = participant__get_permanent_query_participants(); if (count($ppart) == 0) { $continue = false; } } if ($continue) { $pqu = array(); $pqu = query__get_permanent(); if (count($pqu) == 0) { $continue = false; } else { $num_queries = count($pqu); } } if ($continue) { $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); $query_assigned = array(); foreach ($ppart as $p) { $num_p++; foreach ($pqu as $q) { $experiment = orsee_db_load_array("experiments", $q['experiment_id'], "experiment_id"); if (!isset($experiment['experiment_id'])) { $continue = false; } if ($continue) { $posted_query = $json->decode($q['json_query']); $query_array = query__get_query_array($posted_query['query']); $active_clause = array('query' => participant_status__get_pquery_snippet("eligible_for_experiments"), 'pars' => array()); $exptype_clause = array('query' => "subscriptions LIKE (:experiment_ext_type)", 'pars' => array(':experiment_ext_type' => "%|" . $experiment['experiment_ext_type'] . "|%")); $notyetassigned_clause = array('query' => "participant_id NOT IN (SELECT participant_id FROM " . table('participate_at') . " WHERE experiment_id= :experiment_id)", 'pars' => array(':experiment_id' => $experiment['experiment_id'])); $additional_clauses = array($active_clause, $exptype_clause, $notyetassigned_clause); $query = query__get_query($query_array, time(), $additional_clauses, ''); $result = or_query($query['query'], $query['pars']); $p_is_eligibe = false; while ($pc = pdo_fetch_assoc($result)) { if ($pc['participant_id'] = $p['participant_id']) { $p_is_eligibe = true; } } if (!$p_is_eligibe) { $continue = false; } } if ($continue) { // assign participant $pars = array(':participant_id' => $p['participant_id'], ':experiment_id' => $experiment['experiment_id']); $query = "INSERT INTO " . table('participate_at') . " (participant_id,experiment_id)\n VALUES (:participant_id , :experiment_id)"; $done = or_query($query, $pars); $num_assigned++; if ($settings['permanent_queries_invite'] == 'y') { // send invitation into mail queue $pars = array(':experiment_id' => $experiment['experiment_id'], ':now' => time(), ':recipient' => $p['participant_id']); $query = "INSERT INTO " . table('mail_queue') . "\n SET timestamp = :now,\n mail_type = 'invitation',\n mail_recipient = :recipient,\n experiment_id = :experiment_id "; $done = or_query($query, $pars); } if (!isset($query_assigned[$q['query_id']])) { $query_assigned[$q['query_id']] = 0; } $query_assigned[$q['query_id']]++; } } // done with participant, reset permanent status $pars = array(':participant_id' => $p['participant_id']); $query = "UPDATE " . table('participants') . "\n SET apply_permanent_queries = 0\n WHERE participant_id = :participant_id"; $done = or_query($query, $pars); } // and now update permanent queries with assignment numbers foreach ($pqu as $q) { if (!isset($query_assigned[$q['query_id']])) { $query_assigned[$q['query_id']] = 0; } $done = query__update_permanent_query($q['query_id'], $query_assigned[$q['query_id']]); } } $target = 'Participants checked: ' . $num_p; if ($num_p > 0) { $target .= ', PermQueries found: ' . $num_queries; } if ($num_queries > 0) { $target .= ', Assignments made: ' . $num_assigned; } return $target; }
function stats__get_textstats_for_email() { $condition = array('clause' => participant_status__get_pquery_snippet('eligible_for_experiments'), 'pars' => array()); $stats_data = stats__get_data($condition, 'stats', array()); $tout = ''; foreach ($stats_data as $k => $table) { $tout .= stats__stats_display_textstats($table) . "\n\n"; } return $tout; }
if (isset($_REQUEST['restrict']) && array($_REQUEST['restrict'])) { $posted = $_REQUEST['restrict']; foreach ($posted as $s => $valarr) { if (is_array($valarr)) { foreach ($valarr as $k => $v) { if ($v == 'y') { $restrict[$s][$k] = true; } } } } } if ($all) { $condition = array(); } else { $condition = array('clause' => participant_status__get_pquery_snippet('eligible_for_experiments'), 'pars' => array()); } $stats_data = stats__get_data($condition, 'stats', $restrict); $_SESSION['stats_data'] = $stats_data; echo '<center>'; if ($browsable) { echo '<FORM action="' . thisdoc() . '" METHOD="POST">'; echo '<INPUT type="hidden" name="all" value="' . urlencode($all) . '">'; } echo '<TABLE border=0 cellspacing="0" width="100%">'; echo '<TR><TD align="center">'; echo '<TABLE class="or_page_subtitle" style="background: ' . $color['page_subtitle_background'] . '; color: ' . $color['page_subtitle_textcolor'] . '"><TR><TD> ' . lang('subject_pool_statistics') . ' ' . $title_add . ' </TD>'; echo '<TD>'; if ($all) {
$assign_ids = query_show_query_result($query, "assign"); $_SESSION['assign_ids_' . $experiment_id] = $assign_ids; echo '</FORM>'; } else { if (!isset($_SESSION['lastquery_assign_' . $experiment_id])) { $_SESSION['lastquery_assign_' . $experiment_id] = ''; } $load_query = $_SESSION['lastquery_assign_' . $experiment_id]; if (!$load_query) { $load_query = query__load_default_query('assign', $experiment_id); } $hide_modules = array('statusids'); $status_query = participant_status__get_pquery_snippet("eligible_for_experiments"); $saved_queries = query__load_saved_queries('assign', $settings['queryform_experimentassign_savedqueries_numberofentries'], $experiment_id); $exptypes = load_external_experiment_types(); $active_clause = participant_status__get_pquery_snippet("eligible_for_experiments"); $exptype_clause = "subscriptions LIKE '%|" . $experiment['experiment_ext_type'] . "|%'"; echo participants__count_participants($active_clause . ' AND ' . $exptype_clause); echo ' ' . lang('xxx_part_in_db_for_xxx_exp') . ' '; if (!isset($exptypes[$experiment['experiment_ext_type']]['exptype_name'])) { $exptypes[$experiment['experiment_ext_type']]['exptype_name'] = 'type undefined'; } echo $exptypes[$experiment['experiment_ext_type']]['exptype_name']; echo '<BR><BR>'; echo experiment__count_participate_at($experiment_id) . ' ' . lang('participants_assigned_to_this_experiment'); echo '<CENTER><TABLE width="80%"><TR><TD>'; query__show_form($hide_modules, $experiment, $load_query, lang('search_and_show'), $saved_queries, $status_query); echo '</TD></TR></TABLE></CENTER>'; } } if ($proceed) {
echo '</center>'; } } if ($proceed) { if (isset($_REQUEST['email']) && $_REQUEST['email']) { $continue = true; // captcha if ($continue) { if ($_REQUEST['captcha'] != $_SESSION['captcha_string']) { $continue = false; message(lang('error_wrong_captcha')); redirect("public/participant_reset_pw.php"); } } if ($continue) { $status_clause = participant_status__get_pquery_snippet("access_to_profile"); $pars = array(':email' => $_REQUEST['email']); $query = "SELECT * FROM " . table('participants') . " \n\t\t\t\t\tWHERE email= :email\n\t\t\t\t\tAND " . $status_clause; $participant = orsee_query($query, $pars); if (isset($participant['participant_id'])) { // create and save token $participant['pwreset_token'] = create_random_token(get_entropy($participant)); $pars = array(':token' => $participant['pwreset_token'], ':participant_id' => $participant['participant_id'], ':now' => time()); $query = "UPDATE " . table('participants') . " \n\t\t\t\t\t\tSET pwreset_token = :token,\n\t\t\t\t\t\tpwreset_request_time = :now \n\t\t\t\t\t\tWHERE participant_id= :participant_id"; $done = or_query($query, $pars); // send reset email $done = experimentmail__mail_pwreset_link($participant); message(lang('password_reset_link_sent_if_email_exists')); redirect('public/'); } else { // to not reveal which email addresses exist, just do as if
function experimentmail__send_invitations_to_queue($experiment_id, $whom = "not-invited") { switch ($whom) { case "not-invited": $aquery = " AND invited=0 "; break; case "all": $aquery = ""; break; default: $aquery = " AND " . table('participants') . ".participant_id='0' "; } mt_srand((double) microtime() * 1000000); $order = "ORDER BY rand(" . mt_rand() . ") "; $now = time(); $status_query = participant_status__get_pquery_snippet("eligible_for_experiments"); $pars = array(':experiment_id' => $experiment_id); $query = "INSERT INTO " . table('mail_queue') . " (timestamp,mail_type,mail_recipient,experiment_id)\n SELECT " . $now . ",'invitation', " . table('participants') . ".participant_id, experiment_id\n FROM " . table('participants') . ", " . table('participate_at') . "\n WHERE experiment_id= :experiment_id\n AND " . table('participants') . ".participant_id=" . table('participate_at') . ".participant_id " . $aquery . "\n AND session_id = '0' AND pstatus_id = '0'"; if ($status_query) { $query .= " AND " . $status_query; } $query .= " " . $order; $done = or_query($query, $pars); $count = pdo_num_rows($done); return $count; }
//dump_array($query['pars'],"Parameters"); echo '<FORM name="part_list" method="POST" action="' . thisdoc() . '"> <INPUT type=hidden name=experiment_id value="' . $experiment_id . '">'; // show list of results $assign_ids = query_show_query_result($query, "deassign"); $_SESSION['deassign_ids_' . $experiment_id] = $assign_ids; echo '</FORM>'; } else { if (!isset($_SESSION['lastquery_deassign_' . $experiment_id])) { $_SESSION['lastquery_deassign_' . $experiment_id] = ''; } $load_query = $_SESSION['lastquery_deassign_' . $experiment_id]; if (!$load_query) { $load_query = query__load_default_query('deassign', $experiment_id); } $hide_modules = array('statusids'); $status_query = participant_status__get_pquery_snippet("eligible_for_experiments"); $saved_queries = query__load_saved_queries('deassign', $settings['queryform_experimentdeassign_savedqueries_numberofentries'], $experiment_id); echo experiment__count_participate_at($experiment_id) . ' ' . lang('participants_assigned_to_this_experiment'); echo '<CENTER><TABLE width="80%"><TR><TD>'; query__show_form($hide_modules, $experiment, $load_query, lang('search_and_show'), $saved_queries, $status_query); echo '</TD></TR></TABLE></CENTER>'; } } if ($proceed) { echo ' <A HREF="experiment_show.php?experiment_id=' . $experiment_id . '"> ' . lang('mainpage_of_this_experiment') . '</A><BR><BR> </CENTER>'; } include "footer.php";