Ejemplo n.º 1
0
 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');
 }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
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\">&nbsp;</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\">&nbsp;</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\">&nbsp;</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\">&nbsp;</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\">&nbsp;</th>\n"
            . "\t<th colspan=\"".count($labelans)."\" class=\"dsheader\">$leftheader</th>\n";

            if (count($labelans1)>0)
            {
                $myheader1 .= "\t<td class=\"header_separator\">&nbsp;</td>\n" // Separator
                ."\t<th colspan=\"".count($labelans1)."\" class=\"dsheader\">$rightheader</th>\n";
            }
			if ($right_exists)
			{
				$myheader1 .= "\t<td class=\"header_answer_text_right\">&nbsp;</td>\n";
			}
            if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1)
            {
            	$myheader1 .= "\t<td class=\"header_separator\">&nbsp;</td>\n"; // Separator
                $myheader1 .= "\t<th class=\"header_no_answer\">&nbsp;</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\">&nbsp;</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\">&nbsp;</th>\n"; // Separator
                        foreach ($labelans1 as $ld)
                        {
                            $answer .= "\t<th>".$ld."</th>\n";
                        }
                    }
					if ($right_exists)
					{
						$answer .= "\t<td class=\"header_answer_text_right\">&nbsp;</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\">&nbsp;</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\">&nbsp;</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\">&nbsp;</td>\n";
            }

            if ($ia[6] != "Y" && SHOW_NO_ANSWER == 1)
            {
                $answer .= "\t<td class=\"dual_scale_separator\">&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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);
}
Ejemplo n.º 5
0
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);
}