public static function render_instance(BlockInstance $instance, $editing = false) { global $USER; $userid = $instance->get_view()->get('owner'); if (!$userid) { // 'My Friends' doesn't make sense for group/site views return ''; } $smarty = smarty_core(); $records = get_records_sql_array('SELECT usr1, usr2 FROM {usr_friend} JOIN {usr} u1 ON (u1.id = usr1 AND u1.deleted = 0) JOIN {usr} u2 ON (u2.id = usr2 AND u2.deleted = 0) WHERE usr1 = ? OR usr2 = ? ORDER BY ' . db_random() . ' LIMIT ?', array($userid, $userid, MAXFRIENDDISPLAY)); // get the friends into a 4x4 array if ($records) { $friends = array(); for ($i = 0; $i < 4; $i++) { if (isset($records[4 * $i])) { $friends[$i] = array(); for ($j = 4 * $i; $j < ($i + 1) * 4; $j++) { if (isset($records[$j])) { if ($records[$j]->usr1 == $userid) { $friends[$i][] = $records[$j]->usr2; } else { $friends[$i][] = $records[$j]->usr1; } } } } } } else { $friends = false; } $smarty->assign('friends', $friends); // If the user has no friends, try and display something useful, such // as a 'request friendship' button $loggedinid = $USER->get('id'); $is_friend = is_friend($userid, $loggedinid); if ($is_friend) { $relationship = 'existingfriend'; } else { if (record_exists('usr_friend_request', 'requester', $loggedinid, 'owner', $userid)) { $relationship = 'requestedfriendship'; } else { $relationship = 'none'; $friendscontrol = get_account_preference($userid, 'friendscontrol'); if ($friendscontrol == 'auto') { $newfriendform = pieform(array('name' => 'myfriends_addfriend', 'successcallback' => 'addfriend_submit', 'autofocus' => false, 'renderer' => 'div', 'elements' => array('add' => array('type' => 'submit', 'value' => get_string('addtomyfriends', 'group')), 'id' => array('type' => 'hidden', 'value' => $userid)))); $smarty->assign('newfriendform', $newfriendform); } $smarty->assign('friendscontrol', $friendscontrol); } } $smarty->assign('relationship', $relationship); $smarty->assign_by_ref('USER', $USER); $smarty->assign('USERID', $userid); return $smarty->fetch('blocktype:myfriends:myfriends.tpl'); }
public static function group_search_user($group, $query_string, $constraints, $offset, $limit, $membershiptype, $order, $friendof, $orderbyoptionidx = null) { list($searchsql, $values) = self::name_search_sql($query_string); $orderbyoptions = array('adminfirst' => 'gm.role = \'admin\' DESC, gm.role = \'tutor\' DESC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.firstname END ASC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.lastname END ASC, gm.ctime, u.id', 'nameatoz' => 'CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.firstname END ASC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.lastname END ASC, gm.ctime, u.id', 'nameztoa' => 'CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.firstname END DESC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.lastname END DESC, gm.ctime, u.id', 'firstjoined' => 'gm.ctime ASC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.firstname END ASC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.lastname END ASC, u.id', 'lastjoined' => 'gm.ctime DESC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.firstname END ASC, CASE WHEN NOT u.preferredname IS NULL AND u.preferredname <> \'\' THEN u.preferredname ELSE u.lastname END ASC, u.id'); if (!key_exists($orderbyoptionidx, $orderbyoptions)) { $orderbyoptionidx = 'adminfirst'; } if ($membershiptype == 'nonmember') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff, u.urlid'; $from = ' FROM {usr} u LEFT OUTER JOIN {usr_account_preference} h ON (u.id = h.usr AND h.field = \'hiderealname\') WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND NOT u.id IN (SELECT member FROM {group_member} gm WHERE gm.group = ?)'; $values[] = $group; $orderby = 'u.firstname, u.lastname, u.id'; } else { if ($membershiptype == 'notinvited') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff, u.urlid'; $from = ' FROM {usr} u LEFT OUTER JOIN {usr_account_preference} h ON (u.id = h.usr AND h.field = \'hiderealname\') WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND NOT u.id IN (SELECT member FROM {group_member} gm WHERE gm.group = ?) AND NOT u.id IN (SELECT member FROM {group_member_invite} gmi WHERE gmi.group = ?)'; $values[] = $group; $values[] = $group; $orderby = 'u.firstname, u.lastname, u.id'; } else { if ($membershiptype == 'request') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff, u.urlid, ' . db_format_tsfield('gm.ctime', 'jointime'); $from = ' FROM {usr} u INNER JOIN {group_member_request} gm ON (gm.member = u.id) LEFT OUTER JOIN {usr_account_preference} h ON (u.id = h.usr AND h.field = \'hiderealname\') WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND gm.group = ?'; $values[] = $group; if ($orderbyoptionidx == 'adminfirst') { $orderbyoptionidx = 'nameatoz'; } $orderby = $orderbyoptions[$orderbyoptionidx]; } else { if ($membershiptype == 'invite') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff, u.urlid, ' . db_format_tsfield('gm.ctime', 'jointime'); $from = ' FROM {usr} u INNER JOIN {group_member_invite} gm ON (gm.member = u.id) LEFT OUTER JOIN {usr_account_preference} h ON (u.id = h.usr AND h.field = \'hiderealname\') WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND gm.group = ?'; $values[] = $group; $orderby = $orderbyoptions[$orderbyoptionidx]; } else { // All group members $select = ' u.id, u.firstname, u.lastname, u.username, u.preferredname, u.email, u.profileicon, u.staff, u.urlid, ' . db_format_tsfield('gm.ctime', 'jointime') . ', gm.role'; $from = ' FROM {usr} u INNER JOIN {group_member} gm ON (gm.member = u.id) LEFT OUTER JOIN {usr_account_preference} h ON (u.id = h.usr AND h.field = \'hiderealname\') WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND gm.group = ?'; $values[] = $group; $orderby = $orderbyoptions[$orderbyoptionidx]; if ($order == 'latest') { $orderby = 'gm.ctime DESC, u.firstname, u.lastname, u.id'; } } } } } if ($order == 'random') { $orderby = db_random(); } if ($friendof) { $from .= ' AND u.id IN ( SELECT usr1 FROM {usr_friend} WHERE usr2 = ? UNION SELECT usr2 FROM {usr_friend} WHERE usr1 = ? )'; array_push($values, $friendof, $friendof); } $count = get_field_sql('SELECT COUNT(*)' . $from, $values); if ($count > 0) { $data = get_records_sql_assoc(' SELECT ' . $select . $from . ' ORDER BY ' . $orderby, $values, $offset, $limit); if ($data) { foreach ($data as &$item) { $item = (array) $item; } $data = array_values($data); } } else { $data = array(); } return array('count' => $count, 'limit' => $limit, 'offset' => $offset, 'data' => $data); }
public static function group_search_user($group, $queries, $constraints, $offset, $limit, $membershiptype, $order = null) { // Only handle OR/AND expressions at the top level. Eventually we may need subexpressions. $searchsql = ''; $values = array(); if (!empty($queries)) { $ilike = db_ilike(); $searchsql .= ' AND ( '; $str = array(); foreach ($queries as $f) { if (!preg_match('/^[a-zA-Z_0-9"]+$/', $f['field'])) { continue; // skip this field as it fails validation } $str[] = 'u.' . $f['field'] . PluginSearchInternal::match_expression($f['type'], $f['string'], $values, $ilike); } $searchsql .= join(' OR ', $str) . ') '; } if ($membershiptype == 'nonmember') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff'; $from = ' FROM {usr} u WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND NOT u.id IN (SELECT member FROM {group_member} gm WHERE gm.group = ?)'; $values[] = $group; $orderby = 'u.firstname, u.lastname, u.id'; } else { if ($membershiptype == 'notinvited') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff'; $from = ' FROM {usr} u WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND NOT u.id IN (SELECT member FROM {group_member} gm WHERE gm.group = ?) AND NOT u.id IN (SELECT member FROM {group_member_invite} gmi WHERE gmi.group = ?)'; $values[] = $group; $values[] = $group; $orderby = 'u.firstname, u.lastname, u.id'; } else { if ($membershiptype == 'request') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff, ' . db_format_tsfield('gmr.ctime', 'jointime'); $from = ' FROM {usr} u INNER JOIN {group_member_request} gmr ON (gmr.member = u.id) WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND gmr.group = ?'; $values[] = $group; $orderby = 'gmr.ctime, u.firstname, u.lastname, u.id'; } else { if ($membershiptype == 'invite') { $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff, ' . db_format_tsfield('gmi.ctime', 'jointime'); $from = ' FROM {usr} u INNER JOIN {group_member_invite} gmi ON (gmi.member = u.id) WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND gmi.group = ?'; $values[] = $group; $orderby = 'gmi.ctime, u.firstname, u.lastname, u.id'; } else { // All group members $select = ' u.id, u.firstname, u.lastname, u.username, u.email, u.profileicon, u.staff, ' . db_format_tsfield('gm.ctime', 'jointime') . ', gm.role'; $from = ' FROM {usr} u INNER JOIN {group_member} gm ON (gm.member = u.id) WHERE u.id > 0 AND u.deleted = 0 ' . $searchsql . ' AND gm.group = ?'; $values[] = $group; $orderby = "gm.role = 'admin' DESC, gm.ctime, u.firstname, u.lastname, u.id"; if ($order == 'latest') { $orderby = 'gm.ctime DESC, u.firstname, u.lastname, u.id'; } } } } } if ($order == 'random') { $orderby = db_random(); } $count = get_field_sql('SELECT COUNT(*)' . $from, $values); if ($count > 0) { $data = get_records_sql_assoc(' SELECT ' . $select . $from . ' ORDER BY ' . $orderby, $values, $offset, $limit); if ($data) { foreach ($data as &$item) { $item = (array) $item; } $data = array_values($data); } } else { $data = array(); } return array('count' => $count, 'limit' => $limit, 'offset' => $offset, 'data' => $data); }
function do_array_dual($ia) { global $dbprefix, $connect, $thissurvey, $clang; global $repeatheadings; global $notanswered; global $minrepeatheadings; if ($ia[8] == 'Y') { $checkconditionFunction = "checkconditions"; } else { $checkconditionFunction = "noop_checkconditions"; } $inputnames=array(); $labelans1=array(); $labelans=array(); $qquery = "SELECT other FROM {$dbprefix}questions WHERE qid=".$ia[0]." AND language='".$_SESSION['s_lang']."'"; $other = $connect->GetOne($qquery); //Checked $lquery = "SELECT * FROM {$dbprefix}answers WHERE scale_id=0 AND qid={$ia[0]} AND language='".$_SESSION['s_lang']."' ORDER BY sortorder, code"; $lquery1 = "SELECT * FROM {$dbprefix}answers WHERE scale_id=1 AND qid={$ia[0]} AND language='".$_SESSION['s_lang']."' ORDER BY sortorder, code"; $qidattributes=getQuestionAttributes($ia[0],$ia[4]); if ($qidattributes['use_dropdown']==1) { $useDropdownLayout = true; } else { $useDropdownLayout = false; } if (trim($qidattributes['dualscale_headerA'])!='') { $leftheader= $clang->gT($qidattributes['dualscale_headerA']); } else { $leftheader =''; } if (trim($qidattributes['dualscale_headerB'])!='') { $rightheader= $clang->gT($qidattributes['dualscale_headerB']); } else { $rightheader =''; } $lresult = db_execute_assoc($lquery); //Checked if ($useDropdownLayout === false && $lresult->RecordCount() > 0) { if (trim($qidattributes['answer_width'])!='') { $answerwidth=$qidattributes['answer_width']; } else { $answerwidth=20; } $columnswidth = 100 - $answerwidth; while ($lrow=$lresult->FetchRow()) { $labelans[]=$lrow['answer']; $labelcode[]=$lrow['code']; } $lresult1 = db_execute_assoc($lquery1); //Checked if ($lresult1->RecordCount() > 0) { while ($lrow1=$lresult1->FetchRow()) { $labelans1[]=$lrow1['answer']; $labelcode1[]=$lrow1['code']; } } $numrows=count($labelans) + count($labelans1); if ($ia[6] != "Y" && SHOW_NO_ANSWER == 1) {$numrows++;} $cellwidth=$columnswidth/$numrows; $cellwidth=sprintf("%02d", $cellwidth); $ansquery = "SELECT question FROM {$dbprefix}questions WHERE parent_qid=".$ia[0]." and scale_id=0 AND question like '%|%'"; $ansresult = db_execute_assoc($ansquery); //Checked if ($ansresult->RecordCount()>0) { $right_exists=true; } else { $right_exists=false; } // $right_exists is a flag to find out if there are any right hand answer parts. If there arent we can leave out the right td column if ($qidattributes['random_order']==1) { $ansquery = "SELECT * FROM {$dbprefix}questions WHERE parent_qid=$ia[0] AND language='".$_SESSION['s_lang']."' and scale_id=0 ORDER BY ".db_random(); } else { $ansquery = "SELECT * FROM {$dbprefix}questions WHERE parent_qid=$ia[0] AND language='".$_SESSION['s_lang']."' and scale_id=0 ORDER BY question_order"; } $ansresult = db_execute_assoc($ansquery); //Checked $anscount = $ansresult->RecordCount(); $fn=1; // unselect second scale when using "no answer" $answer = "<script type='text/javascript'>\n" . "<!--\n" . "\tfunction noanswer_checkconditions(value, name, type)\n" . "{\n" . "\tvar vname;\n" . "\tvname = name.replace(/#0/g,\"#1\");\n" . "\tfor(var i=0, n=document.getElementsByName(vname).length; i<n; ++i)\n" . "\t{\n" . "document.getElementsByName(vname)[i].checked=false;\n" . "\t}\n" . "\t$checkconditionFunction(value, name, type);\n" . "}\n" . "\tfunction secondlabel_checkconditions(value, name, type)\n" . "{\n" . "\tvar vname;\n" . "\tvname = \"answer\"+name.replace(/#1/g,\"#0-\");\n" . "\tif(document.getElementById(vname))\n" . "\t{\n" . "document.getElementById(vname).checked=false;\n" . "\t}\n" . "\t$checkconditionFunction(value, name, type);\n" . "}\n" . " //-->\n" . " </script>\n"; // Header row and colgroups $mycolumns = "\t<colgroup class=\"col-responses group-1\">\n" ."\t<col class=\"col-answers\" width=\"$answerwidth%\" />\n"; $myheader2 = "\n<tr class=\"array1 header_row\">\n" . "\t<th class=\"header_answer_text\"> </th>\n\n"; $odd_even = ''; foreach ($labelans as $ld) { $myheader2 .= "\t<th>".$ld."</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "<col class=\"$odd_even\" width=\"$cellwidth%\" />\n"; } $mycolumns .= "\t</colgroup>\n"; if (count($labelans1)>0) // if second label set is used { $mycolumns .= "\t<colgroup class=\"col-responses group-2\">\n" . "\t<col class=\"seperator\" />\n"; $myheader2 .= "\n\t<td class=\"header_separator\"> </td>\n\n"; // Separator foreach ($labelans1 as $ld) { $myheader2 .= "\t<th>".$ld."</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "<col class=\"$odd_even\" width=\"$cellwidth%\" />\n"; } } if ($right_exists) { $myheader2 .= "\t<td class=\"header_answer_text_right\"> </td>\n"; $mycolumns .= "\n\t<col class=\"answertextright\" />\n\n"; } if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) //Question is not mandatory and we can show "no answer" { $myheader2 .= "\t<td class=\"header_separator\"> </td>\n"; // Separator $myheader2 .= "\t<th class=\"header_no_answer\">".$clang->gT('No answer')."</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "\n\t<col class=\"seperator\" />\n\n"; $mycolumns .= "\t<col class=\"col-no-answer $odd_even\" width=\"$cellwidth%\" />\n"; } $mycolumns .= "\t</colgroup>\n"; $myheader2 .= "</tr>\n"; // build first row of header if needed if ($leftheader != '' || $rightheader !='') { $myheader1 = "<tr class=\"array1 groups header_row\">\n" . "\t<th class=\"header_answer_text\"> </th>\n" . "\t<th colspan=\"".count($labelans)."\" class=\"dsheader\">$leftheader</th>\n"; if (count($labelans1)>0) { $myheader1 .= "\t<td class=\"header_separator\"> </td>\n" // Separator ."\t<th colspan=\"".count($labelans1)."\" class=\"dsheader\">$rightheader</th>\n"; } if ($right_exists) { $myheader1 .= "\t<td class=\"header_answer_text_right\"> </td>\n"; } if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $myheader1 .= "\t<td class=\"header_separator\"> </td>\n"; // Separator $myheader1 .= "\t<th class=\"header_no_answer\"> </th>\n"; } $myheader1 .= "</tr>\n"; } else { $myheader1 = ''; } $answer .= "\n<table class=\"question\" summary=\"".str_replace('"','' ,strip_tags($ia[3]))." - a dual array type question\">\n" . $mycolumns . "\n\t<thead>\n" . $myheader1 . $myheader2 . "\n\t</thead>\n"; $trbc = ''; while ($ansrow = $ansresult->FetchRow()) { // Build repeat headings if needed if (isset($repeatheadings) && $repeatheadings > 0 && ($fn-1) > 0 && ($fn-1) % $repeatheadings == 0) { if ( ($anscount - $fn + 1) >= $minrepeatheadings ) { $answer .= "<tbody>\n<tr class=\"repeat\">\n" . "\t<th class=\"header_answer_text\"> </th>\n"; foreach ($labelans as $ld) { $answer .= "\t<th>".$ld."</th>\n"; } if (count($labelans1)>0) // if second label set is used { $answer .= "<th class=\"header_separator\"> </th>\n"; // Separator foreach ($labelans1 as $ld) { $answer .= "\t<th>".$ld."</th>\n"; } } if ($right_exists) { $answer .= "\t<td class=\"header_answer_text_right\"> </td>\n"; } if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) //Question is not mandatory and we can show "no answer" { $answer .= "\t<td class=\"header_separator\"> </td>\n"; // Separator $answer .= "\t<th class=\"header_no_answer\">".$clang->gT('No answer')."</th>\n"; } $answer .= "</tr>\n</tbody>\n"; } } $trbc = alternation($trbc , 'row'); $answertext=dTexts::run($ansrow['question']); $answertextsave=$answertext; $dualgroup=0; $myfname0= $ia[1].$ansrow['title']; $myfname = $ia[1].$ansrow['title'].'#0'; $myfname1 = $ia[1].$ansrow['title'].'#1'; // new multi-scale-answer /* Check if this item has not been answered: the 'notanswered' variable must be an array, containing a list of unanswered questions, the current question must be in the array, and there must be no answer available for the item in this session. */ if ((is_array($notanswered)) && (array_search($ia[1], $notanswered) !== FALSE) && (($_SESSION[$myfname] == '') || ($_SESSION[$myfname1] == '')) ) { $answertext = "<span class='errormandatory'>{$answertext}</span>"; } // Get array_filter stuff list($htmltbody2, $hiddenfield)=return_array_filter_strings($ia, $qidattributes, $thissurvey, $ansrow, $myfname0, $trbc, $myfname); $answer .= $htmltbody2; if (strpos($answertext,'|')) {$answertext=substr($answertext,0, strpos($answertext,'|'));} array_push($inputnames,$myfname); $answer .= "<tr class=\"$trbc\">\n" . "\t<th class=\"answertext\">\n" . $hiddenfield . "$answertext\n" . "<input type=\"hidden\" name=\"java$myfname\" id=\"java$myfname\" value=\""; if (isset($_SESSION[$myfname])) {$answer .= $_SESSION[$myfname];} $answer .= "\" />\n\t</th>\n"; $hiddenanswers=''; $thiskey=0; foreach ($labelcode as $ld) { $answer .= "\t<td class=\"answer_cell_1_00$ld\">\n" . "<label for=\"answer$myfname-$ld\">\n" . "\t<input class=\"radio\" type=\"radio\" name=\"$myfname\" value=\"$ld\" id=\"answer$myfname-$ld\" title=\"" . html_escape(strip_tags($labelans[$thiskey])).'"'; if (isset($_SESSION[$myfname]) && $_SESSION[$myfname] == $ld) { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " onclick=\"$checkconditionFunction(this.value, this.name, this.type)\" />\n</label>\n"; // --> END NEW FEATURE - SAVE $answer .= "\n\t</td>\n"; $thiskey++; } if (count($labelans1)>0) // if second label set is used { $dualgroup++; $hiddenanswers=''; $answer .= "\t<td class=\"dual_scale_separator\"> </td>\n"; // separator array_push($inputnames,$myfname1); $hiddenanswers .= "<input type=\"hidden\" name=\"java$myfname1\" id=\"java$myfname1\" value=\""; if (isset($_SESSION[$myfname1])) {$hiddenanswers .= $_SESSION[$myfname1];} $hiddenanswers .= "\" />\n"; $thiskey=0; foreach ($labelcode1 as $ld) // second label set { $answer .= "\t<td class=\"answer_cell_2_00$ld\">\n"; if ($hiddenanswers!='') { $answer .=$hiddenanswers; $hiddenanswers=''; } $answer .= "<label for=\"answer$myfname1-$ld\">\n" . "\t<input class=\"radio\" type=\"radio\" name=\"$myfname1\" value=\"$ld\" id=\"answer$myfname1-$ld\" title=\"" . html_escape(strip_tags($labelans1[$thiskey])).'"'; if (isset($_SESSION[$myfname1]) && $_SESSION[$myfname1] == $ld) { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " onclick=\"secondlabel_checkconditions(this.value, this.name, this.type)\" />\n</label>\n"; // --> END NEW FEATURE - SAVE $answer .= "\t</td>\n"; $thiskey++; } } if (strpos($answertextsave,'|')) { $answertext=substr($answertextsave,strpos($answertextsave,'|')+1); $answer .= "\t<td class=\"answertextright\">$answertext</td>\n"; $hiddenanswers = ''; } elseif ($right_exists) { $answer .= "\t<td class=\"answertextright\"> </td>\n"; } if ($ia[6] != "Y" && SHOW_NO_ANSWER == 1) { $answer .= "\t<td class=\"dual_scale_separator\"> </td>\n"; // separator $answer .= "\t<td class=\"dual_scale_no_answer\">\n" . "<label for='answer$myfname-'>\n" . "\t<input class='radio' type='radio' name='$myfname' value='' id='answer$myfname-' title='".$clang->gT("No answer")."'"; if (!isset($_SESSION[$myfname]) || $_SESSION[$myfname] == "") { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " onclick=\"noanswer_checkconditions(this.value, this.name, this.type)\" />\n" . "</label>\n" . "\t</td>\n"; // --> END NEW FEATURE - SAVE } $answer .= "</tr>\n"; $answer .= "\t</tbody>\n"; // $inputnames[]=$myfname; //IF a MULTIPLE of flexi-redisplay figure, repeat the headings $fn++; } $answer .= "</table>\n"; } elseif ($useDropdownLayout === true && $lresult->RecordCount() > 0) { if (trim($qidattributes['answer_width'])!='') { $answerwidth=$qidattributes['answer_width']; } else { $answerwidth=20; } $separatorwidth=(100-$answerwidth)/10; $columnswidth=100-$answerwidth-($separatorwidth*2); $answer = ""; // Get Answers //question atribute random_order set? if ($qidattributes['random_order']==1) { $ansquery = "SELECT * FROM {$dbprefix}questions WHERE parent_qid=$ia[0] and scale_id=0 AND language='".$_SESSION['s_lang']."' ORDER BY ".db_random(); } //no question attributes -> order by sortorder else { $ansquery = "SELECT * FROM {$dbprefix}questions WHERE parent_qid=$ia[0] and scale_id=0 AND language='".$_SESSION['s_lang']."' ORDER BY question_order"; } $ansresult = db_execute_assoc($ansquery); //Checked $anscount = $ansresult->RecordCount(); if ($anscount==0) { $inputnames = array(); $answer .="\n<p class=\"error\">".$clang->gT('Error: This question has no answers.')."</p>\n"; } else { //already done $lresult = db_execute_assoc($lquery); while ($lrow=$lresult->FetchRow()) { $labels0[]=Array('code' => $lrow['code'], 'title' => $lrow['answer']); } $lresult1 = db_execute_assoc($lquery1); //Checked while ($lrow1=$lresult1->FetchRow()) { $labels1[]=Array('code' => $lrow1['code'], 'title' => $lrow1['answer']); } // Get attributes for Headers and Prefix/Suffix if (trim($qidattributes['dropdown_prepostfix'])!='') { list ($ddprefix, $ddsuffix) =explode("|",$qidattributes['dropdown_prepostfix']); $ddprefix = $ddprefix; $ddsuffix = $ddsuffix; } else { $ddprefix =''; $ddsuffix=''; } if (trim($qidattributes['dropdown_separators'])!='') { list ($postanswSep, $interddSep) =explode('|',$qidattributes['dropdown_separators']); $postanswSep = $postanswSep; $interddSep = $interddSep; } else { $postanswSep = ''; $interddSep = ''; } $colspan_1 = ''; $colspan_2 = ''; $suffix_cell = ''; $answer .= "\n<table class=\"question\" summary=\"".str_replace('"','' ,strip_tags($ia[3]))." - an dual array type question\">\n\n" . "\t<col class=\"answertext\" width=\"$answerwidth%\" />\n"; if($ddprefix != '') { $answer .= "\t<col class=\"ddprefix\" />\n"; $colspan_1 = ' colspan="2"'; } $answer .= "\t<col class=\"dsheader\" />\n"; if($ddsuffix != '') { $answer .= "\t<col class=\"ddsuffix\" />\n"; if(!empty($colspan_1)) { $colspan_2 = ' colspan="3"'; } $suffix_cell = "\t<td> </td>\n"; // suffix } $answer .= "\t<col class=\"ddarrayseparator\" width=\"$separatorwidth%\" />\n"; if($ddprefix != '') { $answer .= "\t<col class=\"ddprefix\" />\n"; } $answer .= "\t<col class=\"dsheader\" />\n"; if($ddsuffix != '') { $answer .= "\t<col class=\"ddsuffix\" />\n"; }; // headers $answer .= "\n\t<thead>\n" . "<tr>\n" . "\t<td$colspan_1> </td>\n" // prefix . "\n" // . "\t<td align='center' width='$columnswidth%'><span class='dsheader'>$leftheader</span></td>\n" . "\t<th>$leftheader</th>\n" . "\n" . "\t<td$colspan_2> </td>\n" // suffix // Inter DD separator // prefix // . "\t<td align='center' width='$columnswidth%'><span class='dsheader'>$rightheader</span></td>\n" . "\t<th>$rightheader</th>\n" . $suffix_cell."</tr>\n" . "\t</thead>\n\n"; $trbc = ''; while ($ansrow = $ansresult->FetchRow()) { $rowname = $ia[1].$ansrow['title']; $dualgroup=0; $myfname = $ia[1].$ansrow['title']."#".$dualgroup; $dualgroup1=1; $myfname1 = $ia[1].$ansrow['title']."#".$dualgroup1; if ((is_array($notanswered)) && (array_search($ia[1], $notanswered) !== FALSE) && ($_SESSION[$myfname] == "" || $_SESSION[$myfname1] == "") ) { $answertext="<span class='errormandatory'>".dTexts::run($ansrow['question'])."</span>"; } else { $answertext=dTexts::run($ansrow['question']); } $trbc = alternation($trbc , 'row'); // Get array_filter stuff list($htmltbody2, $hiddenfield)=return_array_filter_strings($ia, $qidattributes, $thissurvey, $ansrow, $rowname, $trbc, $myfname); $answer .= $htmltbody2; $answer .= "<tr class=\"$trbc\">\n" . "\t<th class=\"answertext\">\n" . "<label for=\"answer$rowname\">\n" . $hiddenfield . "$answertext\n" . "</label>\n" . "\t</th>\n"; // Label0 // prefix if($ddprefix != '') { $answer .= "\t<td class=\"ddprefix\">$ddprefix</td>\n"; } $answer .= "\t<td >\n" . "<select name=\"$myfname\" id=\"answer$myfname\" onchange=\"array_dual_dd_checkconditions(this.value, this.name, this.type,$dualgroup,$checkconditionFunction);\">\n"; if (!isset($_SESSION[$myfname]) || $_SESSION[$myfname] =='') { $answer .= "\t<option value=\"\" ".SELECTED.'>'.$clang->gT('Please choose...')."</option>\n"; } foreach ($labels0 as $lrow) { $answer .= "\t<option value=\"".$lrow['code'].'" '; if (isset($_SESSION[$myfname]) && $_SESSION[$myfname] == $lrow['code']) { $answer .= SELECTED; } $answer .= '>'.$lrow['title']."</option>\n"; } // If not mandatory and showanswer, show no ans if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer .= "\t<option value=\"\" "; if (!isset($_SESSION[$myfname]) || $_SESSION[$myfname] == '') { $answer .= SELECTED; } $answer .= '>'.$clang->gT('No answer')."</option>\n"; } $answer .= "</select>\n"; // suffix if($ddsuffix != '') { $answer .= "\t<td class=\"ddsuffix\">$ddsuffix</td>\n"; } $answer .= "<input type=\"hidden\" name=\"java$myfname\" id=\"java$myfname\" value=\""; if (isset($_SESSION[$myfname])) { $answer .= $_SESSION[$myfname]; } $answer .= "\" />\n" . "\t</td>\n"; $inputnames[]=$myfname; $answer .= "\t<td class=\"ddarrayseparator\">$interddSep</td>\n"; //Separator // Label1 // prefix if($ddprefix != '') { $answer .= "\t<td class='ddprefix'>$ddprefix</td>\n"; } // $answer .= "\t<td align='left' width='$columnswidth%'>\n" $answer .= "\t<td>\n" . "<select name=\"$myfname1\" id=\"answer$myfname1\" onchange=\"array_dual_dd_checkconditions(this.value, this.name, this.type,$dualgroup1,$checkconditionFunction);\">\n"; if (!isset($_SESSION[$myfname1]) || $_SESSION[$myfname1] =='') { $answer .= "\t<option value=\"\"".SELECTED.'>'.$clang->gT('Please choose...')."</option>\n"; } foreach ($labels1 as $lrow1) { $answer .= "\t<option value=\"".$lrow1['code'].'" '; if (isset($_SESSION[$myfname1]) && $_SESSION[$myfname1] == $lrow1['code']) { $answer .= SELECTED; } $answer .= '>'.$lrow1['title']."</option>\n"; } // If not mandatory and showanswer, show no ans if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer .= "\t<option value='' "; if (!isset($_SESSION[$myfname1]) || $_SESSION[$myfname1] == '') { $answer .= SELECTED; } $answer .= ">".$clang->gT('No answer')."</option>\n"; } $answer .= "</select>\n"; // suffix if($ddsuffix != '') { $answer .= "\t<td class=\"ddsuffix\">$ddsuffix</td>\n"; } $answer .= "<input type=\"hidden\" name=\"java$myfname1\" id=\"java$myfname1\" value=\""; if (isset($_SESSION[$myfname1])) { $answer .= $_SESSION[$myfname1]; } $answer .= "\" />\n" . "\t</td>\n"; $inputnames[]=$myfname1; $answer .= "</tr>\n"; $answer .= "\t</tbody>\n"; } } // End there are answers $answer .= "</table>\n"; } else { $answer = "<p class='error'>".$clang->gT("Error: There are no answer options for this question and/or they don't exist in this language.")."</p>\n"; $inputnames=""; } return array($answer, $inputnames); }
function group_get_associated_groups($userid, $filter = 'all', $limit = 20, $offset = 0, $category = '') { // Strangely, casting is only needed for invite, request and admin and only in // postgres if (is_mysql()) { $invitesql = "'invite'"; $requestsql = "'request'"; $adminsql = "'admin'"; $empty = "''"; } else { $invitesql = "CAST('invite' AS TEXT)"; $requestsql = "CAST('request' AS TEXT)"; $adminsql = "CAST('admin' AS TEXT)"; $empty = "CAST('' AS TEXT)"; } // TODO: make it work on other databases? // Different filters join on the different kinds of association if ($filter == 'admin') { $sql = "\n INNER JOIN (\n SELECT g.id, {$adminsql} AS membershiptype, {$empty} AS reason, {$adminsql} AS role\n FROM {group} g\n INNER JOIN {group_member} gm ON (gm.group = g.id AND gm.member = ? AND gm.role = 'admin')\n ) t ON t.id = g.id"; $values = array($userid); } else { if ($filter == 'member') { $sql = "\n INNER JOIN (\n SELECT g.id, 'admin' AS membershiptype, {$empty} AS reason, {$adminsql} AS role\n FROM {group} g\n INNER JOIN {group_member} gm ON (gm.group = g.id AND gm.member = ? AND gm.role = 'admin')\n UNION\n SELECT g.id, 'member' AS type, {$empty} AS reason, gm.role AS role\n FROM {group} g\n INNER JOIN {group_member} gm ON (gm.group = g.id AND gm.member = ? AND gm.role != 'admin')\n ) t ON t.id = g.id"; $values = array($userid, $userid); } else { if ($filter == 'invite') { $sql = "\n INNER JOIN (\n SELECT g.id, {$invitesql} AS membershiptype, gmi.reason, gmi.role\n FROM {group} g\n INNER JOIN {group_member_invite} gmi ON (gmi.group = g.id AND gmi.member = ?)\n ) t ON t.id = g.id"; $values = array($userid); } else { if ($filter == 'request') { $sql = "\n INNER JOIN (\n SELECT g.id, {$requestsql} AS membershiptype, gmr.reason, {$empty} AS role\n FROM {group} g\n INNER JOIN {group_member_request} gmr ON (gmr.group = g.id AND gmr.member = ?)\n ) t ON t.id = g.id"; $values = array($userid); } else { // all or some other text $filter = 'all'; $sql = "\n INNER JOIN (\n SELECT g.id, 'admin' AS membershiptype, '' AS reason, 'admin' AS role\n FROM {group} g\n INNER JOIN {group_member} gm ON (gm.group = g.id AND gm.member = ? AND gm.role = 'admin')\n UNION\n SELECT g.id, 'member' AS membershiptype, '' AS reason, gm.role AS role\n FROM {group} g\n INNER JOIN {group_member} gm ON (g.id = gm.group AND gm.member = ? AND gm.role != 'admin')\n UNION\n SELECT g.id, 'invite' AS membershiptype, gmi.reason, gmi.role\n FROM {group} g\n INNER JOIN {group_member_invite} gmi ON (gmi.group = g.id AND gmi.member = ?)\n UNION SELECT g.id, 'request' AS membershiptype, gmr.reason, '' AS role\n FROM {group} g\n INNER JOIN {group_member_request} gmr ON (gmr.group = g.id AND gmr.member = ?)\n ) t ON t.id = g.id"; $values = array($userid, $userid, $userid, $userid); } } } } $values[] = 0; $catsql = ''; if (!empty($category)) { if ($category == -1) { //find unassigned groups $catsql = ' AND g.category IS NULL'; } else { $catsql = ' AND g.category = ?'; $values[] = $category; } } $count = count_records_sql('SELECT COUNT(*) FROM {group} g ' . $sql . ' WHERE g.deleted = ?' . $catsql, $values); // almost the same as query used in find - common parts should probably be pulled out // gets the groups filtered by above // and the first three members by id $sql = 'SELECT g1.id, g1.name, g1.description, g1.public, g1.jointype, g1.grouptype, g1.membershiptype, g1.reason, g1.role, g1.membercount, COUNT(gmr.member) AS requests FROM ( SELECT g.id, g.name, g.description, g.public, g.jointype, g.grouptype, t.membershiptype, t.reason, t.role, COUNT(gm.member) AS membercount FROM {group} g LEFT JOIN {group_member} gm ON (gm.group = g.id)' . $sql . ' WHERE g.deleted = ?' . $catsql . ' GROUP BY g.id, g.name, g.description, g.public, g.jointype, g.grouptype, t.membershiptype, t.reason, t.role ORDER BY g.name ) g1 LEFT JOIN {group_member_request} gmr ON (gmr.group = g1.id) GROUP BY g1.id, g1.name, g1.description, g1.public, g1.jointype, g1.grouptype, g1.membershiptype, g1.reason, g1.role, g1.membercount'; $groups = get_records_sql_assoc($sql, $values, $offset, $limit); if ($groups) { // Get a few random members from each group. We've tried this with one // query before but it's painfully slow, databases don't do random rows // efficiently. foreach (array_keys($groups) as $groupid) { $members = get_records_sql_array("\n SELECT u.*\n FROM {group_member} gm\n INNER JOIN {usr} u ON (gm.member = u.id AND u.deleted = 0)\n WHERE gm.group = ?\n ORDER BY " . db_random() . "\n LIMIT 3", array($groupid)); foreach ($members as $m) { $groups[$groupid]->members[] = (object) array('id' => $m->id, 'name' => display_name($m)); } } $groups = array_values($groups); } else { $groups = array(); } return array('groups' => $groups, 'count' => $count); }