Пример #1
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;
}
Пример #2
0
            $done = or_query($query, $pars);
            $number = pdo_num_rows($done);
            message($number . ' ' . lang('xxx_temp_participants_deleted'));
            foreach ($del_emails as $participant_id => $email) {
                log__admin("participant_unconfirmed_delete", "participant_id: " . $participant_id . ', email: ' . $email);
            }
            redirect("admin/participants_unconfirmed.php");
        }
    }
}
if ($proceed) {
    echo '<center>';
    echo '<FORM action="participants_unconfirmed.php" method="POST">';
    $posted_query = array('query' => array(0 => array("statusids_multiselect" => array("not" => "", "ms_status" => "0"))));
    $query_array = query__get_query_array($posted_query['query']);
    $query = query__get_query($query_array, 0, array(), 'creation_time DESC', false);
    echo '<BR>
        <TABLE width="80%" border="0">
        <TR><TD>
            <TABLE width="100%" border="0">
            <TR><TD width="50%" align="right">
            <input class="button" type=submit name="deleteall" value="' . lang('delete_all') . '">
            </TD><TD width="50%" align="right">
            <input class="button" type=submit name="deletesel" value="' . lang('delete_selected') . '">
            </TD></TR>
            </TABLE>
        </TD></TR>
        <TR><TD colspan="2">';
    $emails = query_show_query_result($query, "participants_unconfirmed", false);
    echo '</FORM>';
    echo '</TD></TR></TABLE>';
             $link .= '?' . implode("&", $cgivars);
         }
         echo button_link($link, lang('activate_query_permanently'), 'toggle-on');
         $perm_queries = query__get_permanent($experiment_id);
         if (count($perm_queries) > 0) {
             echo '<BR>' . lang('found_active_permanent_query');
         }
     }
     echo '</TD></TR></TABLE>';
     echo '<BR><BR>';
     $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_id));
     $additional_clauses = array($active_clause, $exptype_clause, $notyetassigned_clause);
     $query = query__get_query($query_array, $query_id, $additional_clauses, $sort);
     //echo '<TABLE width="70%" border=0><TR><TD><B>Query:</B></TD></TR><TR><TD>';
     //echo $query['query'];
     //echo '</TD></TR></TABLE>';
     //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, "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];