function ortime__format($unixtime, $options = '', $language = '') { // possible options: hide_time hide_second hide_date hide_year global $lang; $op = array('hide_second' => true); $opa = explode(",", $options); foreach ($opa as $o) { $to = explode(":", trim($o)); if (isset($to[1]) && trim($to[1]) == "false") { unset($op[$to[0]]); } else { $op[$to[0]] = true; } } $arr = ortime__sesstime_to_array(ortime__unixtime_to_sesstime($unixtime)); $p = ortime__array_mil_time_to_array_ampm_time($arr); $arr['h12'] = $p['h']; $arr['a'] = $p['a']; if (!$language) { if (isset($lang['lang']) && $lang['lang']) { $language = $lang['lang']; } else { global $expadmindata, $settings; if (isset($expadmindata['language']) && $expadmindata['language']) { $language = $expadmindata['language']; } else { $language = $settings['public_standard_language']; } } } if (isset($op['hide_year'])) { $fd = 'date_no_year'; } else { $fd = 'date'; } if (isset($op['hide_second'])) { $ft = 'time_no_sec'; } else { $ft = 'time'; } if (isset($lang['lang']) && $language == $lang['lang']) { $dformat = $lang['format_datetime_' . $fd]; $tformat = $lang['format_datetime_' . $ft]; } else { $dformat = load_language_symbol('format_datetime_' . $fd, $language); $tformat = load_language_symbol('format_datetime_' . $ft, $language); } $f = ""; if (!isset($op['hide_date'])) { $f .= $dformat; } if (!isset($op['hide_date']) && !isset($op['hide_time'])) { $f .= " "; } if (!isset($op['hide_time'])) { $f .= $tformat; } $arr['w'] = ortime__get_weekday($unixtime, $language); $datestring = str_replace(array('%Y', '%m', '%d', '%H', '%h', '%i', '%s', '%a', '%w'), array($arr['y'], $arr['m'], $arr['d'], $arr['h'], $arr['h12'], $arr['i'], $arr['s'], $arr['a'], $arr['w']), $f); $datestring = str_replace(" ", " ", $datestring); return $datestring; }
function stats__get_data($condition = array(), $type = 'stats', $restrict = array(), $options = array()) { global $settings; $conditions = array(); $pars = array(); if (is_array($condition) && count($condition) > 0) { $conditions[] = $condition['clause']; if (isset($condition['pars']) && is_array($condition['pars'])) { foreach ($condition['pars'] as $k => $v) { $pars[$k] = $v; } } } $formfields = participantform__load(); $pform_fields = array(); $pform_types = array(); foreach ($formfields as $f) { if (!preg_match("/(textline|textarea)/i", $f['type']) && isset($f['include_in_statistics']) && ($f['include_in_statistics'] == 'pie' || $f['include_in_statistics'] == 'bars')) { $pform_fields[] = $f['mysql_column_name']; $pform_types[$f['mysql_column_name']] = $f; } } $statfields = array('subpool_id', 'subscriptions', 'status_id'); foreach ($pform_fields as $field) { if (!in_array($field, $statfields)) { $statfields[] = $field; } } if ($type == 'stats' && $settings['enable_rules_signed_tracking'] == 'y') { if (!in_array('rules_signed', $statfields)) { $statfields[] = 'rules_signed'; } } else { $exists = array_search('rules_signed', $statfields); if ($exists) { unset($statfields[$exists]); } } if ($type == 'stats') { foreach (array('number_reg', 'number_noshowup', 'last_enrolment', 'last_profile_update', 'last_activity') as $field) { if (!in_array($field, $statfields)) { $statfields[] = $field; } } } $query = "SELECT * from " . table('participants'); $query_conditions = ""; if (count($conditions) > 0) { $query_conditions .= " WHERE"; $cond_strings = array(); foreach ($conditions as $cond) { $cond_strings[] = "(" . $cond . ")"; } $query_conditions .= " " . implode(" AND ", $cond_strings); } $query .= $query_conditions; $result = or_query($query, $pars); $counts = array(); $pids = array(); while ($line = pdo_fetch_assoc($result)) { // check whether we should count this participant and (for monthly stats) use this value $p_restrict = false; foreach ($statfields as $c) { $value = $line[$c]; if (in_array($c, array('last_enrolment', 'last_profile_update', 'last_activity'))) { if (!$value) { $value = 0; } if ($value == 0) { $value = '-'; } else { $value = date('Ym', $value); } } $value = db_string_to_id_array($value); if (count($value) > 0) { $this_restrict = true; foreach ($value as $v) { if (!isset($restrict[$c][$v])) { $this_restrict = false; } } if ($this_restrict) { $p_restrict = true; } } else { $value = '-'; if (isset($restrict[$c][$value])) { $p_restrict = true; } } } if (!$p_restrict) { $pids[] = $line['participant_id']; foreach ($statfields as $c) { $value = $line[$c]; $continue = true; if (in_array($c, array('last_enrolment', 'last_profile_update', 'last_activity'))) { if (!$value) { $value = 0; } if (date('Ym', $value) < date('Ym', strtotime("-" . $settings['stats_months_backward'] . " month", time()))) { $continue = false; } if ($value == 0) { $value = '-'; } else { $value = date('Ym', $value); } } if ($continue) { $value = db_string_to_id_array($value); if (count($value) > 0) { foreach ($value as $v) { if (!isset($counts[$c][$v])) { $counts[$c][$v] = 0; } $counts[$c][$v]++; } } else { $value = '-'; if (!isset($counts[$c][$value])) { $counts[$c][$value] = 0; } $counts[$c][$value]++; } } } } } $count_pids = count($pids); $pid_condition = ""; if (count($restrict) > 0) { $pid_condition = " AND participant_id IN (" . implode(", ", $pids) . ") "; } elseif (count($conditions) == 1 && isset($options['condition_only_on_pid']) && $options['condition_only_on_pid']) { $pid_condition = " AND " . $condition['clause'] . " "; } elseif ($query_conditions) { $pid_condition = " AND participant_id IN (SELECT participant_id FROM " . table('participants') . " " . $query_conditions . ") "; } // avg. experience (participation in experiments of class x, y, z at time of experiment) $statfields[] = 'experience_avg_experimentclass'; if ($count_pids > 0) { $participated_clause = expregister__get_pstatus_query_snippet("participated"); $query = "SELECT count(*) as num, experiment_class\n FROM " . table('participate_at') . " as p, " . table('experiments') . " as e\n WHERE p.session_id>0 " . $pid_condition . "\n AND e.experiment_id=p.experiment_id\n AND e.experiment_class !=''\n AND " . $participated_clause . " "; if (is_array($options) && isset($options['upper_experience_limit'])) { $query .= " AND session_id IN (SELECT session_id FROM " . table('sessions') . "\n WHERE session_start < " . ortime__unixtime_to_sesstime($options['upper_experience_limit']) . "\n AND session_status IN ('completed','balanced') ) "; } $query .= "GROUP BY experiment_class"; $result = or_query($query, $pars); while ($line = pdo_fetch_assoc($result)) { $line['experiment_class'] = db_string_to_id_array($line['experiment_class']); foreach ($line['experiment_class'] as $v) { if ($v > 0) { if (!isset($counts['experience_avg_experimentclass'][$v])) { $counts['experience_avg_experimentclass'][$v] = 0; } $counts['experience_avg_experimentclass'][$v] += round($line['num'] / $count_pids, 2); } } } } if ($type == 'report') { // avg. count pstatus at time of experiment) $statfields[] = 'experience_avg_pstatus'; } if ($count_pids > 0 && $type == 'report') { $query = "SELECT count(*) as num, pstatus_id\n FROM " . table('participate_at') . "\n WHERE session_id>0 " . $pid_condition; if (is_array($options) && isset($options['upper_experience_limit'])) { $query .= " AND session_id IN (SELECT session_id FROM " . table('sessions') . "\n WHERE session_start < " . ortime__unixtime_to_sesstime($options['upper_experience_limit']) . "\n AND session_status IN ('completed','balanced') ) "; } $query .= "GROUP BY pstatus_id"; $result = or_query($query, $pars); while ($line = pdo_fetch_assoc($result)) { $counts['experience_avg_pstatus'][$line['pstatus_id']] = round($line['num'] / $count_pids, 2); } } if ($type == 'stats') { // by pstatus: pstatus count // really needed? we have no_noshows, num_reg ... // by month: pstatus $statfields[] = 'bymonth_pstatus'; $statfields[] = 'bymonth_noshowrate'; } if ($count_pids > 0 && $type == 'stats') { $first_month = date('Ym000000', strtotime("-" . $settings['stats_months_backward'] . " month", time())); $noshow_statuses = expregister__get_specific_pstatuses("noshow"); $query = "SELECT date_format(s.session_start*100,'%Y%m') as sessionmonth,\n pstatus_id, count(p.participate_id) as num\n FROM " . table('participate_at') . " as p, " . table('sessions') . " as s\n WHERE p.session_id>0\n AND p.session_id=s.session_id\n AND s.session_status IN ('completed','balanced')\n AND s.session_start>" . $first_month . " " . $pid_condition . "\n GROUP BY sessionmonth, pstatus_id\n ORDER BY sessionmonth, pstatus_id "; $result = or_query($query, $pars); $noshowperc_data = array(); while ($line = pdo_fetch_assoc($result)) { $counts['bymonth_pstatus_' . $line['pstatus_id']][$line['sessionmonth']] = $line['num']; if (!isset($noshowperc_data[$line['sessionmonth']]['n'])) { $noshowperc_data[$line['sessionmonth']]['n'] = 0; } if (!isset($noshowperc_data[$line['sessionmonth']]['y'])) { $noshowperc_data[$line['sessionmonth']]['y'] = 0; } if (in_array($line['pstatus_id'], $noshow_statuses)) { $noshowperc_data[$line['sessionmonth']]['n'] += $line['num']; } else { $noshowperc_data[$line['sessionmonth']]['y'] += $line['num']; } } // get the noshow percentages as well foreach ($noshowperc_data as $month => $shownup) { $counts['bymonth_noshowrate'][$month] = round($shownup['n'] / ($shownup['n'] + $shownup['y']) * 100, 1); } } $xnames = array('number_reg' => lang('experience'), 'number_noshowup' => lang('noshowup'), 'pstatus' => lang('month'), 'experience_avg_experimentclass' => lang('experiment_classes'), 'experience_avg_pstatus' => lang('participation_status')); $titles = array('number_reg' => lang('experience'), 'number_noshowup' => lang('noshows_by_count'), 'last_enrolment' => lang('last_enrolment'), 'last_profile_update' => lang('last_profile_update'), 'last_activity' => lang('last_activity'), 'bymonth_noshowrate' => lang('noshows_by_month'), 'experience_avg_experimentclass' => lang('experience_in_experiment_classes'), 'experience_avg_pstatus' => lang('average_participation_experience')); // prepare all-containing arrray to return $data_temparray = array(); foreach ($counts as $c => $nums) { $d = array(); $d['N'] = $count_pids; if (isset($pform_types[$c])) { $d['browsable'] = true; $d['charttype'] = $pform_types[$c]['include_in_statistics']; $d['type_of_data'] = 'count'; $d['yname'] = lang('count'); $d['xname'] = lang($pform_types[$c]['name_lang']); $d['title'] = lang($pform_types[$c]['name_lang']); if (preg_match("/(select_lang|radioline_lang)/", $pform_types[$c]['type'])) { $d['value_names'] = lang__load_lang_cat($c, lang('lang')); } elseif (preg_match("/(radioline|select_list)/", $pform_types[$c]['type'])) { $optionvalues = explode(",", $pform_types[$c]['option_values']); $optionnames = explode(",", $pform_types[$c]['option_values_lang']); $d['value_names'] = array(); foreach ($optionvalues as $k => $v) { if (isset($optionnames[$k])) { $d['value_names'][$v] = lang($optionnames[$k]); } } } else { $d['value_names'] = array(); } // select numbers? if ($pform_types[$c]['type'] == 'select_numbers') { krsort($nums); } else { arsort($nums); } $d['data'] = $nums; $data_temparray[$c] = $d; } elseif (in_array($c, array('number_reg', 'number_noshowup'))) { $d['browsable'] = true; $d['charttype'] = 'bars'; if ($c == 'number_reg') { $d['wide'] = true; } $d['limit_not_apply'] = true; $d['type_of_data'] = 'count'; $d['yname'] = lang('count'); $d['xname'] = $xnames[$c]; $d['title'] = $titles[$c]; $d['value_names'] = array(); krsort($nums); $d['data'] = $nums; $data_temparray[$c] = $d; } elseif (in_array($c, array('experience_avg_experimentclass', 'experience_avg_pstatus'))) { $d['charttype'] = 'pie'; $d['type_of_data'] = 'calc'; $d['yname'] = lang('average_count'); $d['xname'] = $xnames[$c]; $d['title'] = $titles[$c]; $d['value_names'] = array(); if ($c == 'experience_avg_experimentclass') { $d['value_names'] = experiment__load_experimentclassnames(); } else { $pstatuses = expregister__get_participation_statuses(); foreach ($pstatuses as $k => $s) { $d['value_names'][$k] = $s['internal_name']; } } arsort($nums); $d['data'] = $nums; $data_temparray[$c] = $d; } elseif ($c == 'rules_signed') { $d['browsable'] = true; $d['charttype'] = 'pie'; $d['type_of_data'] = 'count'; $d['yname'] = lang('count'); $d['xname'] = lang('rules_signed'); $d['title'] = lang('rules_signed'); $d['value_names'] = array('n' => lang('n'), 'y' => lang('y')); arsort($nums); $d['data'] = $nums; $data_temparray[$c] = $d; } elseif ($c == 'subpool_id') { $d['browsable'] = true; $d['charttype'] = 'pie'; $d['type_of_data'] = 'count'; $d['yname'] = lang('count'); $d['xname'] = lang('subpool'); $d['title'] = lang('subpool'); $subpools = subpools__get_subpools(); $d['value_names'] = array(); foreach ($subpools as $k => $p) { $d['value_names'][$k] = $p['subpool_name']; } arsort($nums); $d['data'] = $nums; $data_temparray[$c] = $d; } elseif ($c == 'status_id') { $d['browsable'] = true; $d['charttype'] = 'pie'; $d['type_of_data'] = 'count'; $d['yname'] = lang('count'); $d['xname'] = lang('participant_status'); $d['title'] = lang('participant_statuses'); $statuses = participant_status__get_statuses(); $d['value_names'] = array(); foreach ($statuses as $k => $p) { $d['value_names'][$k] = $p['name']; } krsort($nums); $d['data'] = $nums; $data_temparray[$c] = $d; } elseif ($c == 'subscriptions') { $d['browsable'] = true; $d['charttype'] = 'none'; $d['type_of_data'] = 'count'; $d['yname'] = lang('count'); $d['xname'] = lang('subscriptions'); $d['title'] = lang('subscriptions'); $exptypes = load_external_experiment_types("", false); $d['value_names'] = array(); foreach ($exptypes as $k => $p) { $d['value_names'][$k] = $p[lang('lang')]; } krsort($nums); $d['data'] = $nums; $data_temparray[$c] = $d; } elseif (in_array($c, array('last_enrolment', 'last_profile_update', 'last_activity', 'bymonth_noshowrate'))) { $d['charttype'] = 'bars'; $d['wide'] = true; if ($c == 'bymonth_noshowrate') { $d['yname'] = lang('share_in_percent'); $d['type_of_data'] = 'calc'; } else { $d['yname'] = lang('count'); $d['type_of_data'] = 'count'; } $d['xname'] = lang('month'); $d['title'] = $titles[$c]; foreach ($nums as $k => $number) { if ($k == '-') { $d['value_names'][$k] = $k; } else { $d['value_names'][$k] = substr($k, 4, 2) . '/' . substr($k, 2, 2); } } krsort($nums); $d['data'] = $nums; $data_temparray[$c] = $d; } elseif (preg_match('/^bymonth_pstatus/', $c)) { $tarr = explode("_", $c); $status = $tarr[2]; if (!isset($data_temparray['bymonth_pstatus'])) { $pstatuses = expregister__get_participation_statuses(); $d['charttype'] = 'multibars'; $d['wide'] = true; $d['type_of_data'] = 'count'; $d['yname'] = lang('count'); $d['xname'] = lang('month'); $d['title'] = lang('participation_status_count_by_month'); $d['value_names'] = array(); $d['column_names'] = array(); foreach ($pstatuses as $k => $s) { $d['column_names'][$k] = $s['internal_name']; } $data_temparray['bymonth_pstatus'] = $d; } krsort($nums); $data_temparray['bymonth_pstatus']['data'][$status] = $nums; $d['value_names'] = array(); foreach ($data_temparray['bymonth_pstatus']['data'] as $status => $months) { foreach ($months as $month => $count) { $d['value_names'][$month] = $month; } } krsort($d['value_names']); foreach ($d['value_names'] as $k => $v) { $d['value_names'][$k] = substr($v, 4, 2) . '/' . substr($v, 2, 2); } $data_temparray['bymonth_pstatus']['value_names'] = $d['value_names']; } } // prepare all-containing array to return $data_array = array(); foreach ($statfields as $c) { if (isset($data_temparray[$c]['data'])) { $data_temparray[$c]['name'] = $c; $data_array[$c] = $data_temparray[$c]; } else { $data_array[$c] = array('name' => $c, 'N' => 0, 'data' => array()); } } return $data_array; }
if (isset($_REQUEST['payment_budgets'])) { $_REQUEST['payment_budgets'] = id_array_to_db_string(multipicker_json_to_array($_REQUEST['payment_budgets'])); } } $_REQUEST['session_start'] = ortime__array_to_sesstime($_REQUEST, 'session_start_'); $edit = $_REQUEST; $edit['session_id'] = time(); $edit['session_status'] = 'planned'; $session_time = 0; } else { $edit['experiment_id'] = $_REQUEST['experiment_id']; $edit['session_id'] = time(); $edit['laboratory_id'] = ""; $edit['session_remarks'] = ""; $edit['public_session_note'] = ""; $edit['session_start'] = ortime__unixtime_to_sesstime(); $edit['session_duration_hour'] = $settings['session_duration_hour_default']; $edit['session_duration_minute'] = $settings['session_duration_minute_default']; $edit['session_reminder_hours'] = $settings['session_reminder_hours_default']; $edit['send_reminder_on'] = $settings['session_reminder_send_on_default']; $edit['registration_end_hours'] = $settings['session_registration_end_hours_default']; $session_time = 0; $edit['part_needed'] = $settings['lab_participants_default']; $edit['part_reserve'] = $settings['reserve_participants_default']; $edit['session_status'] = 'planned'; $edit['payment_types'] = ""; $edit['payment_budgets'] = ""; } } else { $session_time = ortime__sesstime_to_unixtime($edit['session_start']); $button_name = lang('change');
function experimentmail__preview_fake_session_details($experiment_id) { $pars = array(':experiment_id' => $experiment_id); $query = "SELECT * FROM " . table('sessions') . "\n WHERE experiment_id = :experiment_id\n ORDER BY if(session_status='live',0,1), session_start DESC\n LIMIT 1"; $session = orsee_query($query, $pars); if (!isset($session['session_id'])) { $session = array(); $session['session_start'] = ortime__unixtime_to_sesstime(); $session['session_duration_hour'] = 1; $session['session_duration_minute'] = 30; $labs = laboratories__get_laboratories(); $randlab = array_rand($labs); $session['laboratory_id'] = $randlab; } return $session; }
function formhelpers__pick_time($field, $selected_time = 0, $minute_steps = 0) { global $settings, $lang; if (!$selected_time) { $selected_time = ortime__unixtime_to_sesstime(); } if (!$minute_steps) { $minute_steps = $settings['session_duration_minute_steps']; } $tformat = lang('format_datetime_time_no_sec'); $is_mil_time = is_mil_time($tformat); $is_mil_time_str = $is_mil_time ? 'true' : 'false'; $tformat = str_replace("%a", "", $tformat); $minutedivisions = round(60 / $minute_steps); if (!($minutedivisions > 1)) { $minutedivisions = 4; } $sda = ortime__sesstime_to_array($selected_time); $hour_field = helpers__select_hour($field . "_h", $sda['h'], 0, 23, 1, $is_mil_time); $minute_field = helpers__select_number($field . "_i", $sda['i'], 0, 59, 2, $settings['session_duration_minute_steps']); $tformat = str_replace("%H", $hour_field, $tformat); $tformat = str_replace("%h", $hour_field, $tformat); $tformat = str_replace("%i", $minute_field, $tformat); $cp = '<i id="' . $field . '_clockpicker" class="fa fa-clock-o fa-lg"></i>'; $cp .= '<script type="text/javascript"> $(function() { function updateTimeSelects_' . $field . ' (time) { console.log(time); var cpos = time.indexOf( ":", 0 ); if(cpos<2) { var h = Number(time.substr(0,1)); var i = Number(time.substr(2,2)); } else { var h = Number(time.substr(0,2)); var i = Number(time.substr(3,2)); } if (time.indexOf("AM",0)>0) { if (h==12) { h=0; } } if (time.indexOf("PM",0)>0) { console.log("pm"); if (h==12) { h=0; } h+=12; } console.log(h + ":" + i); ($("#' . $field . '_h")).val(h); ($("#' . $field . '_i")).val(i); } $("#' . $field . '_clockpicker").clockpick({ starthour: 8, endhour: 20, showminutes: true, minutedivisions: ' . $minutedivisions . ', military: ' . $is_mil_time_str . ', event: "click", // click, mouseover, or focus layout: "vertical", hoursopacity: 1.0, minutesopacity: 1.0 }, updateTimeSelects_' . $field . '); }); </script> '; $out = trim($tformat) . $cp; return $out; }
} } if ($proceed) { // form // initialize if empty if (!isset($edit)) { $edit = array(); $formvarnames = array('experiment_name', 'experiment_public_name', 'experiment_description', 'public_experiment_note', 'experiment_link_to_paper', 'experiment_class', 'experiment_id', 'sender_mail', 'experiment_show_type', 'access_restricted', 'experiment_finished', 'hide_in_stats', 'hide_in_cal', 'ethics_by', 'ethics_number', 'ethics_exempt', 'ethics_expire_date', 'payment_types', 'payment_budgets'); foreach ($formvarnames as $fvn) { if (!isset($edit[$fvn])) { $edit[$fvn] = ""; } } } if (!$edit['ethics_expire_date']) { $edit['ethics_expire_date'] = ortime__unixtime_to_sesstime() + 100000000; } echo '<CENTER>'; show_message(); if (!isset($edit['experiment_id']) || !$edit['experiment_id']) { $edit['experiment_id'] = time(); } echo '<FORM action="experiment_edit.php"> <INPUT type=hidden name="experiment_id" value="' . $edit['experiment_id'] . '">'; echo '<TABLE class="or_formtable" style="max-width: 90%;">'; echo ' <TR> <TD>' . lang('id') . '</TD> <TD>' . $edit['experiment_id'] . '</TD> </TR>'; echo ' <TR> <TD>' . lang('internal_name') . ':</TD>
if (isset($_REQUEST['copy']) && $_REQUEST['copy']) { $event_id = ""; } if (!$event_id) { $addit = true; $button_name = lang('add'); if (isset($_REQUEST['copy']) && $_REQUEST['copy']) { $_REQUEST['experimenter'] = id_array_to_db_string(multipicker_json_to_array($_REQUEST['experimenter'])); $_REQUEST['event_start'] = ortime__array_to_sesstime($_REQUEST, 'event_start_'); $_REQUEST['event_stop'] = ortime__array_to_sesstime($_REQUEST, 'event_stop_'); $edit = $_REQUEST; $edit['event_id'] = time(); } else { $edit['event_id'] = time(); $edit['event_start'] = ortime__unixtime_to_sesstime(); $edit['event_stop'] = ortime__unixtime_to_sesstime(time() + 60 * 60); $edit['experimenter'] = '|' . $expadmindata['admin_id'] . '|'; $edit['laboratory_id'] = ""; $edit['event_category'] = ""; $edit['reason'] = ""; $edit['reason_public'] = ""; $edit['number_of_participants'] = ""; } } else { session__check_lab_time_clash($edit); $button_name = lang('change'); } echo '<center>'; show_message(); echo '<p width="70%">' . lang('for_session_time_reservation_please_use_experiments') . '<BR>' . lang('this_reservation_type_is_for_maintenence_purposes') . '<BR><BR></p>'; echo '<FORM action="events_edit.php" method="POST">