Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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
Exemple #7
0
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";