Source for file view_user.php

Documentation is available at view_user.php

  1. <?php
  2.     
  3.     /**
  4.     * Sloodle user profile page.
  5.     *
  6.     * Shows all Sloodle avatar entries associated with a particular user's Moodle account.
  7.     *
  8.     * @package sloodle
  9.     * @copyright Copyright (c) 2008 Sloodle (various contributors)
  10.     * @license http://www.gnu.org/licenses/gpl-3.0.html GNU GPL v3
  11.     *
  12.     * @contributor Peter R. Bloomfield
  13.     *
  14.     */
  15.     
  16.     //
  17.     // This script will display Sloodle-related user information about a particular Moodle user.
  18.     // Notably, this will include avatar data (i.e. name and UUID).
  19.     // In the case of a user viewing their own profile, or an admin viewing anybody's profile,
  20.     //  there will be the ability to unregister an avatar from the Moodle account, and to
  21.     //  delete allocated LoginZone positions.
  22.     //
  23.     
  24.     //
  25.     // This script requires the following paramter:
  26.     //  id = the ID number of a Moodle user, or 0 for unlinked entries, or 'all' for all Sloodle entries
  27.     //
  28.     // The following parameter should be specified when a Sloodle entry is to be deleted:
  29.     //  delete = ID number the Sloodle entry to be deleted
  30.     // The following parameter should be used when the user confirms or rejects deletion
  31.     //  confirm = "Yes" (according to a localization table) if confirmed, unspecified if not yet confirmed, or anything else if cancelled.
  32.     //
  33.     // Optionally, the following parameter can also be specified. It defaults to the site if unspecified:
  34.     //  course = ID of a Moodle course
  35.  
  36.  
  37.     /** Sloodle/Moodle configuration. */
  38.     require_once('config.php');
  39.     /** General Sloodle functionality. */
  40.     require_once(SLOODLE_DIRROOT.'/lib/sl_generallib.php');
  41.     
  42.     // Enforce login
  43.     require_login();
  44.     // Refuse guest access
  45.     if (isguest()) {
  46.         error(get_string('noguestaccess''sloodle'));
  47.         exit;
  48.     }
  49.     
  50.     // Fetch the parameters
  51.     $moodleuserid required_param('id'PARAM_RAW);
  52.     $deletesloodleentry optional_param('delete'NULLPARAM_INT);
  53.     $userconfirmed optional_param('confirm'NULLPARAM_RAW);
  54.     $courseid optional_param('course'1PARAM_INT);
  55.     
  56.     // Are we showing all entries?
  57.     $allentries false;
  58.     if ($moodleuserid == 'all'{
  59.         $allentries true;
  60.         $moodleuserid = -1;
  61.     else {
  62.         // Make sure the Moodle user ID is an integer
  63.         $moodleuserid = (integer)$moodleuserid;
  64.         if ($moodleuserid 0$moodleuserid 0;
  65.     }
  66.     
  67.     // Force the course ID to the site course if we are dealing with unlinked users
  68.     if ($moodleuserid <= 0$courseid 1;
  69.     
  70.     // Get the name of the course
  71.     $courserecord get_record('course''id'$courseid);
  72.     if (!$courserecorderror(get_string('invalidcourseid','sloodle'));
  73.     $courseurl $CFG->wwwroot.'/course/view.php?id='.$courseid;
  74.     $courseshortname $courserecord->shortname;
  75.     $coursefullname $courserecord->fullname;
  76.     
  77.     // Reject the user's attempt to view this page if they are not a teacher or admin, but are trying to view someone else's details
  78.     if ($moodleuserid != $USER->id && isadmin(== false && isteacherinanycourse(== false{
  79.         error(get_string('insufficientpermissiontoviewpage','sloodle'));
  80.         exit();
  81.     }
  82.     
  83.     // This value will indicate if we are currently confirming a deletion
  84.     $confirmingdeletion false;
  85.     
  86.     // Is the user permitted to edit the details?
  87.     // Users can edit their own details, but admins can edit anybody's. Teachers can edit anybody's if the setting is enabled.
  88.     $canedit false;
  89.     if (($USER->id == $moodleuserid|| isadmin()) $canedit true;
  90.     else if (isteacherinanycourse(&& isset($CFG->sloodle_allow_user_edit_by_teachers&& $CFG->sloodle_allow_user_edit_by_teachers == 'true'$canedit true;
  91.     
  92.     
  93.     // These are localization strings used by the deletion confirmation form
  94.     $form_yes get_string('Yes''sloodle');
  95.     $form_no get_string('No''sloodle');
  96.     
  97.     
  98.     // Are we deleting a Sloodle entry?
  99.     $deletemsg '';    
  100.     if ($deletesloodleentry != NULL{
  101.         // Determine if the user is allowed to delete this entry
  102.         $allowdelete FALSE;
  103.         // Admins are always allowed to delete
  104.         if (isadmin()) $allowdelete TRUE;
  105.         else {
  106.             // A Moodle user can delete their own entry
  107.             $deleterecord get_record('sloodle_users''id'$deletesloodleentry);
  108.             if ($deleterecord !== FALSE{
  109.                 $allowdelete ($deleterecord->userid == $USER->id);
  110.             }
  111.         }
  112.         
  113.         // Has the deletion been confirmed?
  114.         if ($userconfirmed == $form_yes{
  115.             if (record_exists('sloodle_users''id'$deletesloodleentry)) {
  116.                 // Is the user allowed to delete this?
  117.                 if ($allowdelete{
  118.                     // Make sure it's a valid ID
  119.                     if (is_int($deletesloodleentry&& $deletesloodleentry 0{
  120.                         // Attempt to delete the entry
  121.                         $deleteresult delete_records('sloodle_users''id'$deletesloodleentry);
  122.                         if ($deleteresult === FALSE{
  123.                             $deletemsg get_string('deletionfailed''sloodle').': '.get_string('databasequeryfailed''sloodle');
  124.                         else {
  125.                             $deletemsg get_string('deletionsuccessful''sloodle');
  126.                         }
  127.                     else {
  128.                         $deletemsg get_string('deletionfailed''sloodle').': '.get_string('invalidid''sloodle');
  129.                     }
  130.                 else {
  131.                     $deletemsg get_string('deletionfailed''sloodle').': '.get_string('insufficientpermission''sloodle');
  132.                 }
  133.             }
  134.         else if (is_null($userconfirmed)) {
  135.             // User needs to confirm deletion
  136.             $confirmingdeletion true;
  137.             
  138.             $form_url SLOODLE_WWWROOT."/view_user.php";
  139.             
  140.             $deletemsg .= '<h3>'.get_string('delete','sloodle').' '.get_string('ID','sloodle').': '.$deletesloodleentry.'<br/>'.get_string('confirmdelete','sloodle').'</h3>';
  141.             $deletemsg .= '<form action="'.$form_url.'" method="get">';
  142.             
  143.             if ($allentries$deletemsg .= '<input type="hidden" name="id" value="all" />';
  144.             else $deletemsg .= '<input type="hidden" name="id" value="'.$moodleuserid.'" />';
  145.             
  146.             if (!is_null($courseid)) $deletemsg .= '<input type="hidden" name="course" value="'.$courseid.'" />';
  147.             $deletemsg .= '<input type="hidden" name="delete" value="'.$deletesloodleentry.'" />';
  148.             $deletemsg .= '<input style="color:green;" type="submit" value="'.$form_yes.'" name="confirm" />&nbsp;&nbsp;';
  149.             $deletemsg .= '<input style="color:red;" type="submit" value="'.$form_no.'" name="confirm" />';
  150.             $deletemsg .= '</form><br/>';
  151.             
  152.         else {
  153.             $deletemsg get_string('deletecancelled','sloodle');
  154.         }
  155.     }
  156.     
  157.     // Are we getting all entries?
  158.     if ($allentries{
  159.         // Yes
  160.         $moodleuserdata null;
  161.         // Fetch a list of all Sloodle user entries
  162.         $sloodleentries get_records('sloodle_users');
  163.     else {
  164.         // Attempt to fetch the Moodle user data
  165.         $moodleuserdata get_record('user''id'$moodleuserid);
  166.         // Fetch a list of all Sloodle user entries associated with this Moodle account
  167.         $sloodleentries get_records('sloodle_users''userid'$moodleuserid);
  168.     }
  169.     // Post-process the query results
  170.     if ($sloodleentries === FALSE$sloodleentries array();
  171.     $numsloodleentries count($sloodleentries);
  172.     
  173.     
  174.     // Get the localization strings
  175.     $strsloodle get_string('modulename''sloodle');
  176.     $strsloodles get_string('modulenameplural''sloodle');
  177.     
  178.     // Construct the breadcrumb links
  179.     $navigation "";
  180.     if ($courseid != 1$navigation .= "<a href=\"$courseurl\">$courseshortname</a> -> ";
  181.     $navigation .= "<a href=\"".SLOODLE_WWWROOT."/view_users.php?course=$courseid\">".get_string('sloodleuserprofiles''sloodle''</a> -> ';
  182.     if ($moodleuserid 0{
  183.         if ($moodleuserdata$navigation .= $moodleuserdata->firstname.' '.$moodleuserdata->lastname;
  184.         else $navigation .= get_string('unknownuser','sloodle');
  185.     else if ($moodleuserid == 0{
  186.         $navigation.= get_string('unlinkedsloodleentries''sloodle');
  187.     else {
  188.         $navigation.= get_string('allentries''sloodle');
  189.     }
  190.     
  191.     // Display the header
  192.     print_header(get_string('sloodleuserprofile''sloodle')get_string('sloodleuserprofile','sloodle')$navigation""""true);
  193.     
  194.     echo '<div style="text-align:center;padding-left:8px;padding-right:8px;">';
  195.     // Display the deletion message if we have one
  196.     if (!empty($deletemsg)) {
  197.         echo '<div style="text-align:center; padding:3px; border:solid 1px #aaaaaa; background-color:#dfdfdf; font-weight:bold; color:#dd0000;">';
  198.         echo $deletemsg;
  199.         echo '</div>';
  200.     }
  201.     echo '<br/>';
  202.     
  203.     // Are we dealing with an actual Moodle account
  204.     if ($moodleuserid 0{
  205.         echo '<p>';
  206.         // Yes - do we have an account?
  207.         if ($moodleuserdata{
  208.             // Yes - display the name and other general info
  209.             echo '<span style="font-size:18pt; font-weight:bold;">'$moodleuserdata->firstname .' '$moodleuserdata->lastname.'</span>';
  210.             echo " <span style=\"font-size:10pt; color:#444444; font-style:italic;\">(<a href=\"{$CFG->wwwroot}/user/view.php?id=$moodleuserid&amp;course=$courseid\">".get_string('moodleuserprofile','sloodle')."</a>)</span><br/>";
  211.         else {
  212.             echo get_string('moodleusernotfound''sloodle').'<br/>';
  213.         }        
  214.         echo "<br/><br/>\n";
  215.         
  216.         // Check for issues such as no entries, or multiple entries
  217.         if ($numsloodleentries == 0{
  218.             echo '<span style="color:red; font-weight:bold;">';
  219.             print_string('noentries''sloodle');
  220.             echo '</span>';
  221.             // If it is the profile owner who is viewing this, then offer a link to the loginzone entry page
  222.             if ($moodleuserid == $USER->id{
  223.                 echo "<br/><br/><p style=\"padding:8px; border:solid 1px #555555;\"><a href=\"{$CFG->wwwroot}/mod/sloodle/login/sl_loginzone_entry.php\">";
  224.                 print_string('getnewloginzoneallocation''sloodle');
  225.                 echo '</a></p>';
  226.             }            
  227.             
  228.         else if ($numsloodleentries 1{
  229.             echo '<span style="color:red; font-weight:bold; border:solid 2px #990000; padding:4px; background-color:white;">';
  230.             print_string('multipleentries''sloodle');
  231.             helpbutton('multiple_entries'get_string('help:multipleentries''sloodle')'sloodle'truefalse);
  232.             echo '</span>';
  233.         }
  234.         echo '</p>';
  235.         
  236.     else if ($moodleuserid == 0{
  237.         // Unlinked users - describe what this means
  238.         echo '<span style="font-size:18pt; font-weight:bold; ">'.get_string('unlinkedsloodleentries','sloodle').'</span><br/>';
  239.         echo '<center><p style="width:550px; text-align:left;">'.get_string('unlinkedsloodleentries:desc''sloodle').'</p></center>';
  240.         
  241.         // Check to see if there are no entries
  242.         if ($numsloodleentries == 0{
  243.             echo '<span style="color:red; font-weight:bold;">';
  244.             print_string('noentries''sloodle');
  245.             echo '</span>';
  246.         }
  247.     else {
  248.         // Assume we're getting all entries - explain what this means
  249.         echo '<span style="font-size:18pt; font-weight:bold; ">'.get_string('allentries','sloodle').'</span><br/>';
  250.         echo '<center><p style="width:550px; text-align:left;">'.get_string('allentries:info''sloodle').'</p></center>';
  251.         
  252.         // Check to see if there are no entries
  253.         if ($numsloodleentries == 0{
  254.             echo '<span style="color:red; font-weight:bold;">';
  255.             print_string('noentries''sloodle');
  256.             echo '</span>';
  257.         }
  258.     }    
  259.     
  260.     // Construct and display a table of Sloodle entries
  261.     if ($numsloodleentries 0{
  262.         $sloodletable new stdClass();
  263.         $sloodletable->head array(    get_string('ID''sloodle'),
  264.                                         get_string('linkedtomoodleusernum''sloodle'),
  265.                                         get_string('avatarname''sloodle'),
  266.                                         get_string('avataruuid''sloodle'),
  267.                                         get_string('loginzoneposition''sloodle'),
  268.                                         ''
  269.                                     );
  270.         $sloodletable->align array('center''center''left''left''left''left');
  271.         $sloodletable->size array('5%''5%''27%''35%''20%''8%');
  272.         
  273.         $deletestr get_string('delete''sloodle');
  274.                 
  275.         // Go through each Sloodle entry for this user
  276.         foreach ($sloodleentries as $su{
  277.             // Is this entry being deleted (i.e. is the user being asked to confirm its deletion)?
  278.             $deletingcurrent ($confirmingdeletion == true && $su->id == $deletesloodleentry);
  279.             
  280.             // Reset the line's content
  281.             $line array();
  282.             
  283.             // Add the ID to the line
  284.             if ($deletingcurrent$line['<span style="color:red; font-weight:bold;">'.$su->id.'</span>';
  285.             else $line[$su->id;
  286.             
  287.             // Add the Moodle user ID and link
  288.             $line["<a href=\"{$CFG->wwwroot}/user/view.php?id={$su->userid}&amp;course=$courseid\">{$su->userid}</a>";            
  289.         
  290.             // Fetch the avatar name and UUID
  291.             $curavname '-';
  292.             $curuuid '-';
  293.             if (!empty($su->avname)) $curavname $su->avname;
  294.             if (!empty($su->uuid)) $curuuid $su->uuid;
  295.             
  296.             // If we are in 'all entries' mode, add a link to the Sloodle user profile
  297.             if ($allentries{
  298.                 $curavname .= " <span style=\"font-size:10pt; color:#444444; font-style:italic;\">(<a href=\"{$CFG->wwwroot}/mod/sloodle/view_user.php?id={$su->userid}&amp;course=$courseid\">".get_string('sloodleuserprofile','sloodle')."</a>)</span>";
  299.             }
  300.             
  301.             // Add them to the table
  302.             $line[$curavname;
  303.             $line[$curuuid
  304.             
  305.             // Display the LoginZone status
  306.             // Is there LoginZone position information in this entry?
  307.             if (!empty($su->loginposition)) {
  308.                 // Has the LoginZone position expired?
  309.                 if ((int)($su->loginpositionexpirestime()) {
  310.                     // Expired
  311.                     $line['<span style="color:#dd0000;">'.get_string('expired''sloodle').'</span>';
  312.                 else {
  313.                     // Still active - calculate how long until expiry
  314.                     $timeleft = (int)$su->loginpositionexpires time();
  315.                     $secondsleft $timeleft 60;
  316.                     $minutesleft = (int)(($timeleft $secondsleft60);
  317.                     $expiretext "(".get_string('expiresin','sloodle').' ';
  318.                     if ($minutesleft 1$expiretext .= $minutesleft.' '.get_string('minutes','sloodle');
  319.                     else if ($minutesleft == 1$expiretext .= '1 '.get_string('minute','sloodle');
  320.                     if ($secondsleft 1$expiretext .= ' '.$secondsleft.' '.get_string('seconds','sloodle');
  321.                     else $expiretext .= ' 1 '.get_string('second','sloodle');
  322.                     $expiretext .= ')';
  323.  
  324.                     // If there has been a loginzone region stored explicitly for this user, then use it
  325.                     // Otherwise, get the configuration setting
  326.                     if (empty($su->loginpositionregion)) $lpregion sloodle_get_config('sloodle_loginzone_region');
  327.                     else $lpregion $su->loginpositionregion;
  328.                     // Construct the link
  329.                     $loginpos sloodle_vector_to_array($su->loginposition);
  330.                     $loginurl "secondlife://$lpregion/{$loginpos['x']}/{$loginpos['y']}/{$loginpos['z']}";
  331.                     $logincaption get_string('loginzone:teleport','sloodle');
  332.                     $logintext get_string('allocated','sloodle');
  333.                     $line["<a href=\"$loginurl\" title=\"$logincaption\">$logintext</a> $expiretext";
  334.                 }                
  335.             else {
  336.                 $line['-';
  337.             }
  338.             
  339.             // Display the "delete" action
  340.             if ($canedit{
  341.                 if ($allentries$deleteurl $CFG->wwwroot."/mod/sloodle/view_user.php?id=all&amp;course=$courseid&amp;delete={$su->id}";
  342.                 else $deleteurl $CFG->wwwroot."/mod/sloodle/view_user.php?id=$moodleuserid&amp;course=$courseid&amp;delete={$su->id}";
  343.                 $deletecaption get_string('clicktodeleteentry','sloodle');
  344.                 $line["<a href=\"$deleteurl\" title=\"$deletecaption\">$deletestr</a>";
  345.                 
  346.             else {
  347.                 $line['<span style="color:#777777;" title="'.get_string('nodeletepermission','sloodle').'">'.get_string('delete','sloodle').'</span>';
  348.             }
  349.             
  350.             // Add the line to the table
  351.             $sloodletable->data[$line;
  352.         }
  353.         
  354.         // Display the table
  355.         print_table($sloodletable);
  356.     }
  357.     echo '</div>';
  358.     
  359.     // Display the footer
  360.     print_footer();
  361. ?>

Documentation generated on Tue, 04 Mar 2008 15:09:00 +0000 by phpDocumentor 1.4.0